@servicetitan/dte-pdf-editor 1.94.0 → 1.96.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 (145) hide show
  1. package/README.md +121 -4
  2. package/dist/components/field-config-panel/advanced-settings.d.ts +2 -0
  3. package/dist/components/field-config-panel/advanced-settings.d.ts.map +1 -1
  4. package/dist/components/field-config-panel/advanced-settings.js +5 -4
  5. package/dist/components/field-config-panel/advanced-settings.js.map +1 -1
  6. package/dist/components/field-config-panel/e-sign-options-modal.d.ts +3 -0
  7. package/dist/components/field-config-panel/e-sign-options-modal.d.ts.map +1 -1
  8. package/dist/components/field-config-panel/e-sign-options-modal.js +6 -4
  9. package/dist/components/field-config-panel/e-sign-options-modal.js.map +1 -1
  10. package/dist/components/field-config-panel/field-config-panel-overlay.d.ts +14 -1
  11. package/dist/components/field-config-panel/field-config-panel-overlay.d.ts.map +1 -1
  12. package/dist/components/field-config-panel/field-config-panel-overlay.js +41 -2
  13. package/dist/components/field-config-panel/field-config-panel-overlay.js.map +1 -1
  14. package/dist/components/field-config-panel/field-config-panel.d.ts +6 -0
  15. package/dist/components/field-config-panel/field-config-panel.d.ts.map +1 -1
  16. package/dist/components/field-config-panel/field-config-panel.js +17 -3
  17. package/dist/components/field-config-panel/field-config-panel.js.map +1 -1
  18. package/dist/components/field-config-panel/formula-generator.d.ts +4 -0
  19. package/dist/components/field-config-panel/formula-generator.d.ts.map +1 -1
  20. package/dist/components/field-config-panel/formula-generator.js +2 -2
  21. package/dist/components/field-config-panel/formula-generator.js.map +1 -1
  22. package/dist/components/field-config-panel/formula-modal.d.ts +5 -0
  23. package/dist/components/field-config-panel/formula-modal.d.ts.map +1 -1
  24. package/dist/components/field-config-panel/formula-modal.js +13 -6
  25. package/dist/components/field-config-panel/formula-modal.js.map +1 -1
  26. package/dist/components/field-config-panel/formula-workspace.d.ts +2 -0
  27. package/dist/components/field-config-panel/formula-workspace.d.ts.map +1 -1
  28. package/dist/components/field-config-panel/formula-workspace.js +6 -4
  29. package/dist/components/field-config-panel/formula-workspace.js.map +1 -1
  30. package/dist/components/pdf-editor/pdf-editor.d.ts +52 -1
  31. package/dist/components/pdf-editor/pdf-editor.d.ts.map +1 -1
  32. package/dist/components/pdf-editor/pdf-editor.js +2 -2
  33. package/dist/components/pdf-editor/pdf-editor.js.map +1 -1
  34. package/dist/components/pdf-fields-overlay/pdf-overlay-field-fillable.d.ts.map +1 -1
  35. package/dist/components/pdf-fields-overlay/pdf-overlay-field-fillable.js +4 -6
  36. package/dist/components/pdf-fields-overlay/pdf-overlay-field-fillable.js.map +1 -1
  37. package/dist/components/pdf-view/pdf-view-calculated.d.ts +3 -1
  38. package/dist/components/pdf-view/pdf-view-calculated.d.ts.map +1 -1
  39. package/dist/components/pdf-view/pdf-view-calculated.js +14 -4
  40. package/dist/components/pdf-view/pdf-view-calculated.js.map +1 -1
  41. package/dist/components/pdf-view/pdf-view-fillable.d.ts.map +1 -1
  42. package/dist/components/pdf-view/pdf-view-fillable.js +27 -4
  43. package/dist/components/pdf-view/pdf-view-fillable.js.map +1 -1
  44. package/dist/components/pdf-view/pdf-view.d.ts +18 -4
  45. package/dist/components/pdf-view/pdf-view.d.ts.map +1 -1
  46. package/dist/components/pdf-view/pdf-view.js +2 -2
  47. package/dist/components/pdf-view/pdf-view.js.map +1 -1
  48. package/dist/components/shared/char-limit-indicator.d.ts +8 -0
  49. package/dist/components/shared/char-limit-indicator.d.ts.map +1 -0
  50. package/dist/components/shared/char-limit-indicator.js +9 -0
  51. package/dist/components/shared/char-limit-indicator.js.map +1 -0
  52. package/dist/components/shared/index.d.ts +1 -0
  53. package/dist/components/shared/index.d.ts.map +1 -1
  54. package/dist/components/shared/index.js +1 -0
  55. package/dist/components/shared/index.js.map +1 -1
  56. package/dist/constants/calculated.constants.d.ts +6 -0
  57. package/dist/constants/calculated.constants.d.ts.map +1 -1
  58. package/dist/constants/calculated.constants.js +6 -0
  59. package/dist/constants/calculated.constants.js.map +1 -1
  60. package/dist/hooks/usePinchZoom.d.ts.map +1 -1
  61. package/dist/hooks/usePinchZoom.js +1 -1
  62. package/dist/hooks/usePinchZoom.js.map +1 -1
  63. package/dist/interface/types.d.ts +37 -1
  64. package/dist/interface/types.d.ts.map +1 -1
  65. package/dist/interface/types.js.map +1 -1
  66. package/dist/styles/pdf-field-overlay.css +9 -2
  67. package/dist/styles/pdf-field.css +22 -1
  68. package/dist/utils/field/field-text-box.utils.d.ts +31 -0
  69. package/dist/utils/field/field-text-box.utils.d.ts.map +1 -0
  70. package/dist/utils/field/field-text-box.utils.js +102 -0
  71. package/dist/utils/field/field-text-box.utils.js.map +1 -0
  72. package/dist/utils/field/fit-field-text.utils.d.ts +13 -0
  73. package/dist/utils/field/fit-field-text.utils.d.ts.map +1 -0
  74. package/dist/utils/field/fit-field-text.utils.js +44 -0
  75. package/dist/utils/field/fit-field-text.utils.js.map +1 -0
  76. package/dist/utils/field/get-field-max-length.utils.d.ts +38 -0
  77. package/dist/utils/field/get-field-max-length.utils.d.ts.map +1 -0
  78. package/dist/utils/field/get-field-max-length.utils.js +166 -0
  79. package/dist/utils/field/get-field-max-length.utils.js.map +1 -0
  80. package/dist/utils/field/index.d.ts +2 -0
  81. package/dist/utils/field/index.d.ts.map +1 -1
  82. package/dist/utils/field/index.js +2 -0
  83. package/dist/utils/field/index.js.map +1 -1
  84. package/dist/utils/field/text-wrap.utils.d.ts +26 -0
  85. package/dist/utils/field/text-wrap.utils.d.ts.map +1 -0
  86. package/dist/utils/field/text-wrap.utils.js +53 -0
  87. package/dist/utils/field/text-wrap.utils.js.map +1 -0
  88. package/dist/utils/formula/business-days.utils.d.ts +32 -0
  89. package/dist/utils/formula/business-days.utils.d.ts.map +1 -0
  90. package/dist/utils/formula/business-days.utils.js +148 -0
  91. package/dist/utils/formula/business-days.utils.js.map +1 -0
  92. package/dist/utils/formula/caret.utils.js +1 -1
  93. package/dist/utils/formula/caret.utils.js.map +1 -1
  94. package/dist/utils/formula/evaluate-formula.utils.d.ts +25 -6
  95. package/dist/utils/formula/evaluate-formula.utils.d.ts.map +1 -1
  96. package/dist/utils/formula/evaluate-formula.utils.js +61 -101
  97. package/dist/utils/formula/evaluate-formula.utils.js.map +1 -1
  98. package/dist/utils/formula/index.d.ts +1 -0
  99. package/dist/utils/formula/index.d.ts.map +1 -1
  100. package/dist/utils/formula/index.js +1 -0
  101. package/dist/utils/formula/index.js.map +1 -1
  102. package/dist/utils/formula/schedule-bindings.utils.d.ts +12 -0
  103. package/dist/utils/formula/schedule-bindings.utils.d.ts.map +1 -0
  104. package/dist/utils/formula/schedule-bindings.utils.js +17 -0
  105. package/dist/utils/formula/schedule-bindings.utils.js.map +1 -0
  106. package/package.json +2 -1
  107. package/src/__tests__/field-types/date-fields.test.ts +29 -3
  108. package/src/__tests__/field-types/e-sign-fields.test.ts +2 -2
  109. package/src/__tests__/field-types/fillable-fields.test.ts +2 -2
  110. package/src/components/field-config-panel/advanced-settings.tsx +16 -3
  111. package/src/components/field-config-panel/e-sign-options-modal.tsx +13 -2
  112. package/src/components/field-config-panel/field-config-panel-overlay.tsx +97 -1
  113. package/src/components/field-config-panel/field-config-panel.tsx +28 -0
  114. package/src/components/field-config-panel/formula-generator.tsx +8 -1
  115. package/src/components/field-config-panel/formula-modal.tsx +19 -4
  116. package/src/components/field-config-panel/formula-workspace.tsx +31 -6
  117. package/src/components/pdf-editor/pdf-editor.tsx +82 -0
  118. package/src/components/pdf-fields-overlay/pdf-overlay-field-fillable.tsx +41 -28
  119. package/src/components/pdf-view/pdf-view-calculated.tsx +28 -3
  120. package/src/components/pdf-view/pdf-view-fillable.tsx +82 -36
  121. package/src/components/pdf-view/pdf-view.tsx +23 -3
  122. package/src/components/shared/char-limit-indicator.tsx +23 -0
  123. package/src/components/shared/index.ts +1 -0
  124. package/src/constants/calculated.constants.ts +7 -0
  125. package/src/hooks/usePinchZoom.ts +1 -6
  126. package/src/interface/types.ts +47 -0
  127. package/src/styles/pdf-field-overlay.css +9 -2
  128. package/src/styles/pdf-field.css +22 -1
  129. package/src/utils/field/__tests__/field-background-color.utils.test.ts +8 -8
  130. package/src/utils/field/__tests__/fit-field-text.utils.test.ts +224 -0
  131. package/src/utils/field/__tests__/get-field-bounds-style.utils.test.ts +16 -0
  132. package/src/utils/field/__tests__/get-field-max-length.utils.test.ts +751 -0
  133. package/src/utils/field/__tests__/text-wrap.utils.test.ts +181 -0
  134. package/src/utils/field/field-text-box.utils.ts +143 -0
  135. package/src/utils/field/fit-field-text.utils.ts +61 -0
  136. package/src/utils/field/get-field-max-length.utils.ts +211 -0
  137. package/src/utils/field/index.ts +2 -0
  138. package/src/utils/field/text-wrap.utils.ts +78 -0
  139. package/src/utils/formula/__tests__/evaluate-formula.utils.test.ts +198 -16
  140. package/src/utils/formula/__tests__/schedule-bindings.utils.test.ts +73 -0
  141. package/src/utils/formula/business-days.utils.ts +188 -0
  142. package/src/utils/formula/caret.utils.ts +1 -1
  143. package/src/utils/formula/evaluate-formula.utils.ts +94 -114
  144. package/src/utils/formula/index.ts +1 -0
  145. package/src/utils/formula/schedule-bindings.utils.ts +27 -0
package/README.md CHANGED
@@ -10,9 +10,13 @@ formulas.
10
10
  - 🎯 **Drag & Drop Field Placement**: Intuitively place fields on PDF pages by dragging from a sidebar
11
11
  - 📊 **Data Model Integration**: Connect fields to structured data models using JSON Schema
12
12
  - ✍️ **E-Signature Support**: Add signature, initials, date signed, and full name fields
13
- - 📝 **Fillable Fields**: Support for text, number, date, checkbox, and radio button inputs
13
+ - 📝 **Fillable Fields**: Support for text, number, date, checkbox, and radio button inputs; text and number fields
14
+ show a live character counter and only accept as much as fits the field
14
15
  - 🧮 **Calculated Fields**: Formula-based fields with validation, autosuggest, and advanced formatting (number, currency,
15
16
  percent, date, rounding, separators)
17
+ - 📅 **Business-Day Schedules**: Per-field toggle to exclude weekends and holidays from a date calculated field's
18
+ arithmetic, with a picker for the tenant's schedules and a drawer to create one (weekend days, catalog holidays,
19
+ recurring custom dates)
16
20
  - 🗂️ **Forms Fields**: Bind PDF placements to job form submission values (`__submission_fields.*` paths), with async
17
21
  field definitions from the host and the same paths usable inside calculated-field formulas
18
22
  - 📋 **Generic Fields**: Custom table and text blocks with configurable rows/cells and inline editing in view mode
@@ -27,6 +31,14 @@ formulas.
27
31
 
28
32
  ### Recent changes
29
33
 
34
+ - **feat/DTE-4695/custom-weekend-holiday-exclusion** (business-day calendars) — a per-field "Exclude weekends &
35
+ holidays" toggle, schedule picker and "Create New Schedule" drawer in the Formula Builder (`scheduleBindings`,
36
+ `holidayCatalog`, `schedules`, `onScheduleBindingsChange`, `onCreateSchedule`); date calculated fields take a
37
+ per-field business-day calendar (`fieldCalendars`) only while their toggle is on, match the backend's results and
38
+ sign. See [RELEASE_NOTES.md](./RELEASE_NOTES.md) and [Business-day calendars](#business-day-calendars).
39
+ - **feature/DTE-4671** (fillable text & number character limit) — text, multiline and number fields count characters
40
+ and accept only what fits the rendered field; text controls now use the field's font family and weight. See
41
+ [RELEASE_NOTES.md](./RELEASE_NOTES.md) and [Text and number field limits](#text-and-number-field-limits).
30
42
  - **fix/inconsistncy** — PDF overlay layout, typography, and text clipping aligned with the backend PDF renderer;
31
43
  searchable lookup-backed display-condition values. See [RELEASE_NOTES.md](./RELEASE_NOTES.md).
32
44
  - **fix/DTE-4360** (radio groups) — see [RELEASE_NOTES.md](./RELEASE_NOTES.md).
@@ -120,6 +132,19 @@ The main component for editing PDF documents and placing fields.
120
132
  | `errorPlaceholder` | `ReactNode` | No | Custom component to display if PDF fails to load |
121
133
  | `onLoadSuccess` | `(numPages: number) => void` | No | Called when the PDF document loads successfully |
122
134
  | `errors` | `Record<string, string>` | No | Map of field id → validation message rendered on the canvas |
135
+ | `holidays` | `string[]` | No | Holidays of the default business-day calendar, for the formula builder preview; as on `PdfView` |
136
+ | `fieldCalendars` | `Record<string, BusinessCalendar>` | No | Calendars of date calculated fields bound to a schedule, by field id; as on `PdfView` |
137
+ | `scheduleBindings` | `FieldScheduleBinding[]` | No | Date fields whose exclusion toggle is on, and the schedule each uses; as on `PdfView` — see [Business-day calendars](#business-day-calendars) |
138
+ | `onScheduleBindingsChange` | `(bindings: FieldScheduleBinding[]) => void` | No | Called with the complete desired `scheduleBindings` when the toggle or picker changes the selected field's binding |
139
+ | `holidayCatalog` | `HolidayCatalog` | No | The tenant's known holidays, for the schedule editor's checklist |
140
+ | `holidayCatalogLoading`| `boolean` | No | Whether `holidayCatalog` is still loading |
141
+ | `holidayCatalogError` | `string` | No | Error message shown in the schedule editor if the catalog failed to load |
142
+ | `schedules` | `BusinessDaySchedule[]` | No | The schedules the tenant can pick from the Formula Builder's schedule picker, default schedule first |
143
+ | `schedulesLoading` | `boolean` | No | Whether `schedules` is still loading |
144
+ | `schedulesError` | `string` | No | Error message shown in the picker if the schedule list failed to load |
145
+ | `onCreateSchedule` | `(request: SaveScheduleRequest) => Promise<BusinessDaySchedule>` | No | Creates a tenant schedule from the "Create New Schedule" drawer; a rejected promise's `message` is shown as its error |
146
+ | `onUpdateSchedule` | `(id: number, request: SaveScheduleRequest) => Promise<BusinessDaySchedule>` | No | Replaces a tenant schedule in place from the picker's "Edit" action; same error handling as `onCreateSchedule` |
147
+ | `onDeleteSchedule` | `(id: number) => Promise<void>` | No | Permanently deletes a tenant schedule from the picker's delete action |
123
148
 
124
149
  #### Example
125
150
 
@@ -155,6 +180,9 @@ Component for displaying PDFs with filled data in view mode.
155
180
  | `loading` | `boolean` | No | Whether the PDF is currently loading |
156
181
  | `loadingPlaceholder` | `ReactNode` | No | Custom component to display while PDF is loading |
157
182
  | `errorPlaceholder` | `ReactNode` | No | Custom component to display if PDF fails to load |
183
+ | `holidays` | `string[]` | No | Holidays of the default business-day calendar — see [Business-day calendars](#business-day-calendars) |
184
+ | `fieldCalendars` | `Record<string, BusinessCalendar>` | No | Calendars of date calculated fields bound to a schedule, by field id — see [Business-day calendars](#business-day-calendars) |
185
+ | `scheduleBindings` | `FieldScheduleBinding[]` | No | Date fields whose exclusion toggle is on, and the schedule each uses — see [Business-day calendars](#business-day-calendars) |
158
186
 
159
187
  #### View modes
160
188
 
@@ -182,6 +210,36 @@ current values — useful for a non-interactive preview of a partially or fully
182
210
  This prop applies on top of `viewMode` / `fillingBy` scoping (e.g. in `'preview'` mode, fillable fields are normally
183
211
  interactive unless `makeFillableFieldsReadonly` is set).
184
212
 
213
+ #### Text and number field limits
214
+
215
+ Single-line **text**, **multiline text** and **number** fillable fields limit what can be entered to what fits the
216
+ field, so the filled value never runs past the box the backend PDF renderer clips it to (it hard-clips, with no
217
+ ellipsis). A `typed/capacity` counter is shown under each field and turns red when no more text fits.
218
+
219
+ - **Single-line text and number** — the text's width must fit the field width.
220
+ - **Multiline text** (`PdfField.multiline`) — the text, word-wrapped at the field width, must fit the lines that fit the
221
+ field height (`floor(height / line height)`, with a line height of 1× the font size). Explicit newlines, blank lines,
222
+ long unbroken words and non-Latin text count.
223
+ - **Measured, not counted** — width is measured at the field's own `styles.fontFamily`, `fontWeight` and `fontSize`, so
224
+ narrow text (`iiii`) fills a field further than wide text (`WWWW`), and bold or a larger font fits less. The
225
+ counter's capacity is the characters typed plus how many more characters of typical text still fit, so it moves as
226
+ the user types.
227
+ - **Pasting and editing mid-text** — text that does not fully fit is cut back to the part that does; text that was
228
+ already there is never dropped, and an edit that would only add overflow is refused. Deleting is always allowed and a
229
+ single character always fits.
230
+ - **Numbers** reserve the browser's spin-button gutter (15px), and are a guaranteed fit: the capacity is bounded by the
231
+ widest of the digits, `.` and `-`.
232
+
233
+ Notes for hosts:
234
+
235
+ - Nothing about the limit is stored or sent — it is purely an editing constraint. Values longer than a field can show
236
+ (for example set through `data`) are displayed unchanged and can only be shortened.
237
+ - The limit assumes the fillable controls keep the library's box model: **no padding, no border, `line-height: 1`**
238
+ (`.dte-pdf-field-fillable`). Override those in host CSS and capacities will be off.
239
+ - Text, number and textarea controls inherit `font-family` and `font-weight` from the field, so a field's
240
+ `styles.fontFamily` / `fontWeight` are applied in `PdfView` as well as measured.
241
+ - Measurement uses canvas `measureText`; without canvas (SSR, jsdom) a ratio-based estimate is used.
242
+
185
243
  #### Example
186
244
 
187
245
  ```tsx
@@ -266,8 +324,25 @@ Types of e-signature fields:
266
324
  - `signature`: Signature field
267
325
  - `initials`: Initials field
268
326
  - `dateSigned`: Date signed field
327
+ - `dateSignedOffset`: Calculated date a fixed number of days after signing (see
328
+ **ESignDateSignedOffsetSettings** below)
269
329
  - `fullName`: Full name field
270
330
 
331
+ #### ESignDateSignedOffsetSettings (`PdfField.data` for a `dateSignedOffset` field)
332
+
333
+ - **`rules`**: an ordered if/else-if/…/else chain — `ESignDateSignedOffsetSettingsRule[]` (each `{ days,
334
+ condition: DisplayConditionState }`) followed by exactly one trailing `ESignDateSignedOffsetSettingsFinalRule`
335
+ (`{ days }`, no condition, always matches). The first rule whose condition matches applies its `days`; this
336
+ package only authors the rule chain; evaluating it against submission data into an actual date happens on the
337
+ backend, at signing time.
338
+ - **`businessCalendarEnabled`** / **`scheduleId`**: the same business-day exclusion toggle and schedule choice as a
339
+ calculated field's (see **Business-day calendars** below), stored here instead of in `scheduleBindings` because,
340
+ like `rules`, it applies to every `dateSignedOffset` field in the document at once, not one field at a time.
341
+
342
+ All `dateSignedOffset` fields in a document share one `data` object — editing any one of them (days, rules, or the
343
+ business-calendar toggle) updates every sibling via `onMatchingFieldsConfigChange`, and a newly dropped
344
+ `dateSignedOffset` field seeds its `data` from an existing one if the document already has one.
345
+
271
346
  ### PdfFieldSubType
272
347
 
273
348
  Union of fillable, e-sign, generic, and form field sub-types:
@@ -278,7 +353,7 @@ Union of fillable, e-sign, generic, and form field sub-types:
278
353
 
279
354
  Types of fillable fields:
280
355
 
281
- - `text`: Text input
356
+ - `text`: Text input (single-line, or a textarea when `PdfField.multiline` is set)
282
357
  - `number`: Number input
283
358
  - `date`: Date picker
284
359
  - `checkbox`: Checkbox
@@ -316,8 +391,49 @@ Calculated fields use a structured formula and optional display format:
316
391
  (`__submission_fields.*`) and `parseExpression` is given `ParseExpressionFormContext` (`forms` +
317
392
  `formFieldsByFormId`).
318
393
 
319
- Date fields in formulas use day-based arithmetic: `date + number` adds days, `date - date` yields a day count. Only `+`,
320
- `-`, and parentheses are allowed when date fields are present.
394
+ Date fields in formulas use business-day arithmetic: `date + number` adds business days, `date - date` yields a
395
+ business-day count (`D1 - D2` counts from D2 to D1, positive when D1 is later). Only `+`, `-`, and parentheses are
396
+ allowed when date fields are present. Each `± N` step is applied in turn, left to right, as the backend does.
397
+
398
+ #### Business-day calendars
399
+
400
+ Business-day skipping is **opt-in per field**, via the Formula Builder's "Exclude weekends & holidays from the
401
+ calculation" toggle (Advanced Settings, date result type). A field with its toggle off uses plain calendar-day
402
+ arithmetic — no weekends or holidays are skipped. An e-sign `dateSignedOffset` field gets the same toggle and picker
403
+ shown inline in its own config panel (see **ESignDateSignedOffsetSettings** above), reusing the same tenant
404
+ schedules (`holidayCatalog`, `schedules`, `onCreateSchedule`/`onUpdateSchedule`/`onDeleteSchedule`) but storing the
405
+ choice on the field's `data` instead of in `scheduleBindings`.
406
+
407
+ - **`scheduleBindings`** (`FieldScheduleBinding[]`, `{ fieldKey, scheduleId? }`, `fieldKey` = `PdfField.id`) is the
408
+ source of truth for which fields have the toggle on, and which schedule each uses (`scheduleId` undefined = the
409
+ default schedule). A field with no entry here is unaffected by `holidays` / `fieldCalendars`.
410
+ - For an enabled field, the days skipped come from a **`BusinessCalendar`** — `{ weekendDays, holidays, firstYear,
411
+ lastYear }`, the shape DTE's `POST api/holidays/calendar` returns (weekend days `0` = Sunday, `6` = Saturday;
412
+ holidays as `YYYY-MM-DD`, already moved to their observed days).
413
+ - A field listed in `fieldCalendars` (by `PdfField.id`) uses only its calendar.
414
+ - An enabled field with no `fieldCalendars` entry uses the **default calendar**: Saturday, Sunday and `holidays`,
415
+ for the current year ± 1.
416
+ - As in the backend, the result is blank for a fractional offset, a start or result outside the calendar's years, a
417
+ difference spanning more than 365 days, or a missing or invalid date.
418
+
419
+ **Picking, creating, editing and deleting a schedule** (`PdfEditor` only): with the toggle on, a "Select Schedule or
420
+ create new" picker lists the default schedule and the tenant's own (`schedules`, default first, as DTE's
421
+ `GET api/holidays/schedules` returns them), with a collapsible preview of the selected schedule's excluded weekends,
422
+ holidays and custom dates. For a selected tenant schedule (not the read-only default), the preview also shows **Edit**
423
+ and delete actions. Choosing "create new" or **Edit** opens a drawer — "Create New Schedule" or "Edit Schedule" — to
424
+ name a schedule and set its weekend days, holidays (from `holidayCatalog`, as DTE's `GET api/holidays/catalog` returns
425
+ them) and recurring `MM-DD` custom dates (`02-29` included); creating always calls `onCreateSchedule` (a new schedule,
426
+ starting from the default's rules), while editing always calls `onUpdateSchedule` (replacing the selected schedule's
427
+ rules in place, starting from its own rules) — either way the result is auto-selected. The delete action calls
428
+ `onDeleteSchedule`, after which the picker falls back to the default schedule for the current field. Toggling, picking,
429
+ creating, editing and deleting all call `onScheduleBindingsChange` with the complete desired `scheduleBindings` as
430
+ needed; this package does not persist anything itself beyond that callback and the schedule CRUD callbacks.
431
+
432
+ **Types**: `WeekendDay` (`0 | 6`); `KnownHoliday` (`{ code, displayName, rule }`); `HolidayCatalog` (`{ jurisdiction,
433
+ holidays: KnownHoliday[] }`); `BusinessCalendarRules` (`{ weekendDays, knownHolidays, customDates }`, the unresolved
434
+ rules of a schedule — `knownHolidays` are catalog codes, `customDates` are `MM-DD` strings); `BusinessDaySchedule`
435
+ (`{ id?, name, isDefault, calendar: BusinessCalendarRules }`); `SaveScheduleRequest` (`BusinessCalendarRules & { name
436
+ }`, the `onCreateSchedule` argument); `FieldScheduleBinding` (`{ fieldKey, scheduleId? }`).
321
437
 
322
438
  Schema fields can opt in via `options.useInCalculatedFields` and `options.useInConditionals` for data model extraction
323
439
  in formula builder and conditionals.
@@ -539,6 +655,7 @@ The package includes default styles. To customize, you can override CSS classes:
539
655
  - `.dte-pdf-wrapper`: PDF document wrapper
540
656
  - `.dte-pdf-field-overlay`: Field overlay container
541
657
  - `.dte-pdf-field-text--single-line` / `--multiline` / `--wrapped`: Text clip modes (hard clip, no ellipsis)
658
+ - `.dte-pdf-field-char-count`: Character counter under text and number fields (`--at-limit` when full)
542
659
  - `.dte-pdf-editor-sidebar-container`: Sidebar container
543
660
 
544
661
  Field overlays use **border-box** sizing with **no padding** so `width`/`height` match the backend PDF clip rectangle.
@@ -1,8 +1,10 @@
1
+ import { type ScheduleEditorContext } from '@servicetitan/dte-shared';
1
2
  import { Dispatch, FC, SetStateAction } from 'react';
2
3
  import { type CalculatedFieldFormat } from '../../interface/types';
3
4
  interface AdvancedSettingsProps {
4
5
  format: CalculatedFieldFormat;
5
6
  setFormat: Dispatch<SetStateAction<CalculatedFieldFormat>>;
7
+ businessCalendar?: ScheduleEditorContext;
6
8
  }
7
9
  export declare const AdvancedSettings: FC<AdvancedSettingsProps>;
8
10
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"advanced-settings.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/advanced-settings.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,KAAK,qBAAqB,EAAkC,MAAM,uBAAuB,CAAC;AAEnG,UAAU,qBAAqB;IAC3B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;CAC9D;AAqBD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA0FtD,CAAC"}
1
+ {"version":3,"file":"advanced-settings.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/advanced-settings.tsx"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAErD,OAAO,EAAE,KAAK,qBAAqB,EAAkC,MAAM,uBAAuB,CAAC;AAEnG,UAAU,qBAAqB;IAC3B,MAAM,EAAE,qBAAqB,CAAC;IAC9B,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAsBD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAoGtD,CAAC"}
@@ -1,13 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Flex, SegmentedControl, Switch, Text } from '@servicetitan/anvil2';
3
+ import { BusinessCalendarSection } from '@servicetitan/dte-shared';
3
4
  import { DEFAULT_DATE_FORMAT, ROUNDING_OPTIONS } from '../../constants';
4
- const DateFormatSettings = ({ format, setFormat }) => {
5
+ const DateFormatSettings = ({ businessCalendar, format, setFormat }) => {
5
6
  var _a;
6
- return (_jsxs("div", { className: "dte-formula-advanced", children: [_jsx(Text, { variant: "body", size: "small", children: "Date format" }), _jsx("input", { type: "text", className: "dte-formula-advanced-input", style: { width: '100%' }, value: (_a = format.dateFormat) !== null && _a !== void 0 ? _a : DEFAULT_DATE_FORMAT, placeholder: DEFAULT_DATE_FORMAT, onChange: e => setFormat(prev => ({ ...prev, dateFormat: e.target.value })) }), _jsx(Text, { variant: "body", size: "small", color: "tertiary", children: "Tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D" })] }));
7
+ return (_jsxs("div", { className: "dte-formula-advanced", children: [_jsx(Text, { variant: "body", size: "small", children: "Date format" }), _jsx("input", { type: "text", className: "dte-formula-advanced-input", style: { width: '100%' }, value: (_a = format.dateFormat) !== null && _a !== void 0 ? _a : DEFAULT_DATE_FORMAT, placeholder: DEFAULT_DATE_FORMAT, onChange: e => setFormat(prev => ({ ...prev, dateFormat: e.target.value })) }), _jsx(Text, { variant: "body", size: "small", color: "tertiary", children: "Tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D" }), businessCalendar && _jsx(BusinessCalendarSection, { businessCalendar: businessCalendar })] }));
7
8
  };
8
- export const AdvancedSettings = ({ format, setFormat }) => {
9
+ export const AdvancedSettings = ({ businessCalendar, format, setFormat, }) => {
9
10
  if (format.resultType === 'date') {
10
- return _jsx(DateFormatSettings, { format: format, setFormat: setFormat });
11
+ return (_jsx(DateFormatSettings, { format: format, setFormat: setFormat, businessCalendar: businessCalendar }));
11
12
  }
12
13
  return (_jsxs("div", { className: "dte-formula-advanced", children: [_jsxs(Flex, { direction: "column", children: [_jsx(Text, { variant: "body", size: "small", children: "Rounding mode" }), _jsx(SegmentedControl, { selected: format.roundingMode, onChange: (roundingMode) => setFormat(prev => ({ ...prev, roundingMode })), fill: true, children: ROUNDING_OPTIONS.map(opt => (_jsx(SegmentedControl.Segment, { value: opt.value, children: opt.label }, opt.value))) })] }), _jsxs(Flex, { direction: "column", flex: 1, children: [_jsxs(Flex, { alignItems: "center", justifyContent: "space-between", children: [_jsx(Text, { variant: "body", size: "small", children: "Decimal places" }), _jsx(Text, { variant: "body", size: "small", className: "dte-formula-advanced-value", children: format.decimals })] }), _jsx("input", { type: "range", min: 0, max: 10, value: format.decimals, onChange: e => setFormat(prev => ({
13
14
  ...prev,
@@ -1 +1 @@
1
- {"version":3,"file":"advanced-settings.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/advanced-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAQxE,MAAM,kBAAkB,GAA8B,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;;IAAC,OAAA,CAC7E,eAAK,SAAS,EAAC,sBAAsB,aACjC,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,4BAE1B,EACP,gBACI,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,KAAK,EAAE,MAAA,MAAM,CAAC,UAAU,mCAAI,mBAAmB,EAC/C,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7E,EACF,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,0DAE3C,IACL,CACT,CAAA;CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACjF,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,KAAC,kBAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;IACxE,CAAC;IAED,OAAO,CACH,eAAK,SAAS,EAAC,sBAAsB,aACjC,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,aACpB,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,8BAE1B,EACP,KAAC,gBAAgB,IACb,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,QAAQ,EAAE,CAAC,YAAuD,EAAE,EAAE,CAClE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,EAElD,IAAI,kBAEH,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACzB,KAAC,gBAAgB,CAAC,OAAO,IAAiB,KAAK,EAAE,GAAG,CAAC,KAAK,YACrD,GAAG,CAAC,KAAK,IADiB,GAAG,CAAC,KAAK,CAEb,CAC9B,CAAC,GACa,IAChB,EACP,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,aAC5B,MAAC,IAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,eAAe,aACpD,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,+BAE1B,EACP,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,4BAA4B,YACnE,MAAM,CAAC,QAAQ,GACb,IACJ,EACP,gBACI,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,EAAE,EACP,KAAK,EAAE,MAAM,CAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACf,GAAG,IAAI;4BACP,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBACnC,CAAC,CAAC,GAET,IACC,EACP,KAAC,MAAM,IACH,OAAO,EAAE,MAAM,CAAC,kBAAkB,EAClC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,GAAG,IAAI;wBACP,kBAAkB,EAAE,OAAO;qBAC9B,CAAC,CAAC,CAAC;gBACR,CAAC,EACD,KAAK,EAAC,yBAAyB,EAC/B,KAAK,EAAC,gBAAgB,GACxB,EAEF,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,aACpB,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,+BAE1B,EACP,MAAC,IAAI,IAAC,GAAG,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAC7B,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,uBAE1B,EACP,gBACI,QAAQ,EAAE,MAAM,CAAC,UAAU,KAAK,UAAU,EAC1C,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7E,EACF,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,wBAE1B,EACP,gBACI,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,UAAU,KAAK,SAAS,EACzC,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAEnE,IACC,IACJ,IACL,CACT,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"advanced-settings.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/advanced-settings.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAA8B,MAAM,0BAA0B,CAAC;AAE/F,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AASxE,MAAM,kBAAkB,GAA8B,CAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;;IAAC,OAAA,CAC/F,eAAK,SAAS,EAAC,sBAAsB,aACjC,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,4BAE1B,EACP,gBACI,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EACxB,KAAK,EAAE,MAAA,MAAM,CAAC,UAAU,mCAAI,mBAAmB,EAC/C,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7E,EACF,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,KAAK,EAAC,UAAU,0DAE3C,EACN,gBAAgB,IAAI,KAAC,uBAAuB,IAAC,gBAAgB,EAAE,gBAAgB,GAAI,IAClF,CACT,CAAA;CAAA,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EACxD,gBAAgB,EAChB,MAAM,EACN,SAAS,GACZ,EAAE,EAAE;IACD,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,CACH,KAAC,kBAAkB,IACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB,GACpC,CACL,CAAC;IACN,CAAC;IAED,OAAO,CACH,eAAK,SAAS,EAAC,sBAAsB,aACjC,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,aACpB,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,8BAE1B,EACP,KAAC,gBAAgB,IACb,QAAQ,EAAE,MAAM,CAAC,YAAY,EAC7B,QAAQ,EAAE,CAAC,YAAuD,EAAE,EAAE,CAClE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,EAElD,IAAI,kBAEH,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACzB,KAAC,gBAAgB,CAAC,OAAO,IAAiB,KAAK,EAAE,GAAG,CAAC,KAAK,YACrD,GAAG,CAAC,KAAK,IADiB,GAAG,CAAC,KAAK,CAEb,CAC9B,CAAC,GACa,IAChB,EACP,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAE,CAAC,aAC5B,MAAC,IAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,eAAe,aACpD,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,+BAE1B,EACP,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,4BAA4B,YACnE,MAAM,CAAC,QAAQ,GACb,IACJ,EACP,gBACI,IAAI,EAAC,OAAO,EACZ,GAAG,EAAE,CAAC,EACN,GAAG,EAAE,EAAE,EACP,KAAK,EAAE,MAAM,CAAC,QAAQ,EACtB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;4BACf,GAAG,IAAI;4BACP,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBACnC,CAAC,CAAC,GAET,IACC,EACP,KAAC,MAAM,IACH,OAAO,EAAE,MAAM,CAAC,kBAAkB,EAClC,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC1B,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;wBACf,GAAG,IAAI;wBACP,kBAAkB,EAAE,OAAO;qBAC9B,CAAC,CAAC,CAAC;gBACR,CAAC,EACD,KAAK,EAAC,yBAAyB,EAC/B,KAAK,EAAC,gBAAgB,GACxB,EAEF,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,aACpB,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,+BAE1B,EACP,MAAC,IAAI,IAAC,GAAG,EAAC,GAAG,EAAC,UAAU,EAAC,QAAQ,aAC7B,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,uBAE1B,EACP,gBACI,QAAQ,EAAE,MAAM,CAAC,UAAU,KAAK,UAAU,EAC1C,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,MAAM,CAAC,UAAU,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7E,EACF,KAAC,IAAI,IAAC,OAAO,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,wBAE1B,EACP,gBACI,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,MAAM,CAAC,UAAU,KAAK,SAAS,EACzC,SAAS,EAAC,4BAA4B,EACtC,KAAK,EAAE,MAAM,CAAC,WAAW,EACzB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,GAEnE,IACC,IACJ,IACL,CACT,CAAC;AACN,CAAC,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { type ScheduleEditorContext } from '@servicetitan/dte-shared';
1
2
  import { FC } from 'react';
2
3
  import { ESignDateSignedOffsetSettings, FormFieldsByFormIdI, FormInfo, PdfField, SchemaObject } from '../../interface/types';
3
4
  interface ESignOptionsModalProps {
@@ -9,6 +10,8 @@ interface ESignOptionsModalProps {
9
10
  formFieldsByFormId?: FormFieldsByFormIdI;
10
11
  onRequestFormFields?: (formId: number) => void;
11
12
  formFieldsLoadingFormId?: number | null;
13
+ /** The business-day exclusion toggle/picker/drawer state and callbacks for this field. */
14
+ businessCalendar?: ScheduleEditorContext;
12
15
  }
13
16
  export declare const ESignOptionsModal: FC<ESignOptionsModalProps>;
14
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"e-sign-options-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAsB,MAAM,OAAO,CAAC;AAC/C,OAAO,EACH,6BAA6B,EAG7B,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAK/B,UAAU,sBAAsB;IAC5B,YAAY,EAAE,6BAA6B,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CA0FxD,CAAC"}
1
+ {"version":3,"file":"e-sign-options-modal.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,EAAE,EAAsB,MAAM,OAAO,CAAC;AAC/C,OAAO,EACH,6BAA6B,EAG7B,mBAAmB,EACnB,QAAQ,EACR,QAAQ,EACR,YAAY,EACf,MAAM,uBAAuB,CAAC;AAK/B,UAAU,sBAAsB;IAC5B,YAAY,EAAE,6BAA6B,CAAC;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,6BAA6B,KAAK,IAAI,CAAC;IACvD,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CAC5C;AAED,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAkGxD,CAAC"}
@@ -1,11 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, Flex, NumberField } from '@servicetitan/anvil2';
3
3
  import AddIcon from '@servicetitan/anvil2/assets/icons/material/round/add_circle.svg';
4
+ import { BusinessCalendarSection } from '@servicetitan/dte-shared';
4
5
  import { Fragment, useState } from 'react';
5
6
  import { createClearedESignOffsetSettings } from '../../utils';
6
7
  import { ESignDateRulesSummary } from './e-sign-date-rules-summary';
7
8
  import { ESignDateSignedOffsetModal } from './e-sign-date-signed-offset-modal';
8
- export const ESignOptionsModal = ({ documentFields, formFieldsByFormId, formFieldsLoadingFormId, forms, initialState, onRequestFormFields, onSave, schema, }) => {
9
+ export const ESignOptionsModal = ({ businessCalendar, documentFields, formFieldsByFormId, formFieldsLoadingFormId, forms, initialState, onRequestFormFields, onSave, schema, }) => {
9
10
  const [open, setOpen] = useState(false);
10
11
  /*
11
12
  * `rules` is a tuple: zero or more conditioned rules followed by exactly one condition-less
@@ -16,15 +17,16 @@ export const ESignOptionsModal = ({ documentFields, formFieldsByFormId, formFiel
16
17
  const rulesWithConditions = initialState.rules.slice(0, -1);
17
18
  const handleDaysChange = (days) => {
18
19
  onSave({
20
+ ...initialState,
19
21
  rules: [...rulesWithConditions, { days: Math.max(Math.min(365, days !== null && days !== void 0 ? days : 0), 0) }],
20
22
  });
21
23
  };
22
24
  const handleSaveRules = (rules, finalRule) => {
23
- onSave({ rules: [...rules, finalRule] });
25
+ onSave({ ...initialState, rules: [...rules, finalRule] });
24
26
  };
25
27
  const handleClearRules = () => {
26
- onSave(createClearedESignOffsetSettings());
28
+ onSave({ ...initialState, ...createClearedESignOffsetSettings() });
27
29
  };
28
- return (_jsxs(Fragment, { children: [rulesWithConditions.length === 0 ? (_jsxs(Flex, { gap: 1, direction: "column", justifyContent: "space-between", children: [_jsx(NumberField, { size: "small", label: "Number of days", value: ruleWithOutCondition.days, onChange: handleDaysChange, suffix: "days", width: "100%" }), _jsx(Button, { appearance: "ghost", size: "small", icon: AddIcon, onClick: () => setOpen(true), style: { color: '#0265DC' }, children: "Set Date Rule" })] })) : (_jsx(ESignDateRulesSummary, { documentFields: documentFields, onClear: handleClearRules, onEdit: () => setOpen(true), rulesWithConditions: rulesWithConditions, schema: schema, elseDays: ruleWithOutCondition.days })), open && (_jsx(ESignDateSignedOffsetModal, { onClose: () => setOpen(false), onSave: handleSaveRules, documentFields: documentFields, finalRule: ruleWithOutCondition, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formFieldsLoadingFormId, forms: forms, initialState: rulesWithConditions, onRequestFormFields: onRequestFormFields, schema: schema }))] }));
30
+ return (_jsxs(Fragment, { children: [rulesWithConditions.length === 0 ? (_jsxs(Flex, { gap: 1, direction: "column", justifyContent: "space-between", children: [_jsx(NumberField, { size: "small", label: "Number of days", value: ruleWithOutCondition.days, onChange: handleDaysChange, suffix: "days", width: "100%" }), _jsx(Button, { appearance: "ghost", size: "small", icon: AddIcon, onClick: () => setOpen(true), style: { color: '#0265DC' }, children: "Set Date Rule" })] })) : (_jsx(ESignDateRulesSummary, { documentFields: documentFields, onClear: handleClearRules, onEdit: () => setOpen(true), rulesWithConditions: rulesWithConditions, schema: schema, elseDays: ruleWithOutCondition.days })), open && (_jsx(ESignDateSignedOffsetModal, { onClose: () => setOpen(false), onSave: handleSaveRules, documentFields: documentFields, finalRule: ruleWithOutCondition, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formFieldsLoadingFormId, forms: forms, initialState: rulesWithConditions, onRequestFormFields: onRequestFormFields, schema: schema })), businessCalendar && (_jsx(BusinessCalendarSection, { businessCalendar: businessCalendar, label: "Exclude weekends & holidays from the calculation" }))] }));
29
31
  };
30
32
  //# sourceMappingURL=e-sign-options-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"e-sign-options-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"e-sign-options-modal.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/e-sign-options-modal.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { FC } from 'react';
2
- import { type FormFieldsByFormIdI, type FormInfo, type PdfField, type RecipientInfo, type SchemaObject } from '../../interface/types';
2
+ import { type BusinessCalendar, type BusinessDaySchedule, type FieldScheduleBinding, type FormFieldsByFormIdI, type FormInfo, type HolidayCatalog, type PdfField, type RecipientInfo, type SaveScheduleRequest, type SchemaObject } from '../../interface/types';
3
3
  interface FieldConfigPanelOverlayProps {
4
4
  dataModel?: SchemaObject;
5
5
  documentFields?: PdfField[];
@@ -9,6 +9,19 @@ interface FieldConfigPanelOverlayProps {
9
9
  selectedField: PdfField;
10
10
  recipients: RecipientInfo[];
11
11
  hideConditionalLogic?: boolean;
12
+ holidays?: string[];
13
+ fieldCalendars?: Record<string, BusinessCalendar>;
14
+ scheduleBindings?: FieldScheduleBinding[];
15
+ holidayCatalog?: HolidayCatalog;
16
+ holidayCatalogLoading?: boolean;
17
+ holidayCatalogError?: string;
18
+ schedules?: BusinessDaySchedule[];
19
+ schedulesLoading?: boolean;
20
+ schedulesError?: string;
21
+ onScheduleBindingsChange?(bindings: FieldScheduleBinding[]): void;
22
+ onCreateSchedule?(request: SaveScheduleRequest): Promise<BusinessDaySchedule>;
23
+ onUpdateSchedule?(id: number, request: SaveScheduleRequest): Promise<BusinessDaySchedule>;
24
+ onDeleteSchedule?(id: number): Promise<void>;
12
25
  onFieldConfigChange(updates: Partial<PdfField>): void;
13
26
  onMatchingFieldsConfigChange?(predicate: (field: PdfField) => boolean, updates: Partial<PdfField> | ((field: PdfField) => Partial<PdfField>)): void;
14
27
  onDeleteField(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"field-config-panel-overlay.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel-overlay.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAC3B,OAAO,EACH,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACpB,MAAM,uBAAuB,CAAC;AAG/B,UAAU,4BAA4B;IAClC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,QAAQ,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtD,4BAA4B,CAAC,CACzB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACvC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GACtE,IAAI,CAAC;IACR,aAAa,IAAI,IAAI,CAAC;IACtB,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CAmDpE,CAAC"}
1
+ {"version":3,"file":"field-config-panel-overlay.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel-overlay.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAwB,MAAM,OAAO,CAAC;AACjD,OAAO,EACH,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACpB,MAAM,uBAAuB,CAAC;AAI/B,UAAU,4BAA4B;IAClC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,EAAE,mBAAmB,CAAC;IACxC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,EAAE,QAAQ,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAClD,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAClC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,IAAI,CAAC;IAClE,gBAAgB,CAAC,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC9E,gBAAgB,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC1F,gBAAgB,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtD,4BAA4B,CAAC,CACzB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACvC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GACtE,IAAI,CAAC;IACR,aAAa,IAAI,IAAI,CAAC;IACtB,eAAe,CAAC,IAAI,IAAI,CAAC;IACzB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,uBAAuB,EAAE,EAAE,CAAC,4BAA4B,CA+HpE,CAAC"}
@@ -1,8 +1,47 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button, Flex, Text } from '@servicetitan/anvil2';
3
3
  import IconClose from '@servicetitan/anvil2/assets/icons/material/round/close.svg';
4
+ import { useCallback, useMemo } from 'react';
5
+ import { getFieldDateCalcOptions, setFieldSchedule, setFieldScheduleEnabled } from '../../utils';
4
6
  import { FieldConfigPanel } from './field-config-panel';
5
- export const FieldConfigPanelOverlay = ({ dataModel, documentFields = [], formFieldsByFormId, forms, formulaLoadingFormId, hideConditionalLogic, onDeleteField, onDeselectField, onFieldConfigChange, onMatchingFieldsConfigChange, onRequestFormFields, recipients, selectedField, }) => {
6
- return (_jsxs(Flex, { className: "dte-field-config-panel-overlay", onClick: e => e.stopPropagation(), children: [_jsxs(Flex, { className: "dte-field-config-panel-header", alignItems: "center", justifyContent: "space-between", children: [_jsx(Text, { variant: "headline", el: "h6", size: "small", children: "Field Configuration" }), _jsx(Button, { appearance: "ghost", size: "small", onClick: onDeselectField, "aria-label": "Close", icon: IconClose })] }), _jsx("div", { className: "dte-field-config-panel-content", children: _jsx(FieldConfigPanel, { dataModel: dataModel, documentFields: documentFields, field: selectedField, formFieldsByFormId: formFieldsByFormId, forms: forms, formulaLoadingFormId: formulaLoadingFormId, recipients: recipients, onFieldConfigChange: onFieldConfigChange, onMatchingFieldsConfigChange: onMatchingFieldsConfigChange, onDeleteField: onDeleteField, hideConditionalLogic: hideConditionalLogic, onRequestFormFields: onRequestFormFields }) })] }));
7
+ export const FieldConfigPanelOverlay = ({ dataModel, documentFields = [], fieldCalendars, formFieldsByFormId, forms, formulaLoadingFormId, hideConditionalLogic, holidayCatalog, holidayCatalogError, holidayCatalogLoading, holidays, onCreateSchedule, onDeleteField, onDeleteSchedule, onDeselectField, onFieldConfigChange, onMatchingFieldsConfigChange, onRequestFormFields, onScheduleBindingsChange, onUpdateSchedule, recipients, scheduleBindings, schedules, schedulesError, schedulesLoading, selectedField, }) => {
8
+ const dateCalcOptions = useMemo(() => getFieldDateCalcOptions(selectedField.id, scheduleBindings, holidays, fieldCalendars), [selectedField.id, scheduleBindings, holidays, fieldCalendars]);
9
+ const selectedFieldId = selectedField.id;
10
+ const selectedBinding = useMemo(() => scheduleBindings === null || scheduleBindings === void 0 ? void 0 : scheduleBindings.find(b => b.fieldKey === selectedFieldId), [scheduleBindings, selectedFieldId]);
11
+ const handleToggle = useCallback((enabled) => {
12
+ onScheduleBindingsChange === null || onScheduleBindingsChange === void 0 ? void 0 : onScheduleBindingsChange(setFieldScheduleEnabled(scheduleBindings !== null && scheduleBindings !== void 0 ? scheduleBindings : [], selectedFieldId, enabled));
13
+ }, [scheduleBindings, selectedFieldId, onScheduleBindingsChange]);
14
+ const handleSelectSchedule = useCallback((scheduleId) => {
15
+ onScheduleBindingsChange === null || onScheduleBindingsChange === void 0 ? void 0 : onScheduleBindingsChange(setFieldSchedule(scheduleBindings !== null && scheduleBindings !== void 0 ? scheduleBindings : [], selectedFieldId, scheduleId));
16
+ }, [scheduleBindings, selectedFieldId, onScheduleBindingsChange]);
17
+ const businessCalendar = useMemo(() => ({
18
+ enabled: !!selectedBinding,
19
+ selectedScheduleId: selectedBinding === null || selectedBinding === void 0 ? void 0 : selectedBinding.scheduleId,
20
+ onToggle: handleToggle,
21
+ onSelectSchedule: handleSelectSchedule,
22
+ holidayCatalog,
23
+ holidayCatalogLoading,
24
+ holidayCatalogError,
25
+ schedules,
26
+ schedulesLoading,
27
+ schedulesError,
28
+ onCreateSchedule,
29
+ onUpdateSchedule,
30
+ onDeleteSchedule,
31
+ }), [
32
+ selectedBinding,
33
+ handleToggle,
34
+ handleSelectSchedule,
35
+ holidayCatalog,
36
+ holidayCatalogLoading,
37
+ holidayCatalogError,
38
+ schedules,
39
+ schedulesLoading,
40
+ schedulesError,
41
+ onCreateSchedule,
42
+ onUpdateSchedule,
43
+ onDeleteSchedule,
44
+ ]);
45
+ return (_jsxs(Flex, { className: "dte-field-config-panel-overlay", onClick: e => e.stopPropagation(), children: [_jsxs(Flex, { className: "dte-field-config-panel-header", alignItems: "center", justifyContent: "space-between", children: [_jsx(Text, { variant: "headline", el: "h6", size: "small", children: "Field Configuration" }), _jsx(Button, { appearance: "ghost", size: "small", onClick: onDeselectField, "aria-label": "Close", icon: IconClose })] }), _jsx("div", { className: "dte-field-config-panel-content", children: _jsx(FieldConfigPanel, { dataModel: dataModel, documentFields: documentFields, field: selectedField, formFieldsByFormId: formFieldsByFormId, forms: forms, formulaLoadingFormId: formulaLoadingFormId, recipients: recipients, onFieldConfigChange: onFieldConfigChange, onMatchingFieldsConfigChange: onMatchingFieldsConfigChange, onDeleteField: onDeleteField, hideConditionalLogic: hideConditionalLogic, dateCalcOptions: dateCalcOptions, businessCalendar: businessCalendar, onRequestFormFields: onRequestFormFields }) })] }));
7
46
  };
8
47
  //# sourceMappingURL=field-config-panel-overlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-config-panel-overlay.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel-overlay.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,SAAS,MAAM,4DAA4D,CAAC;AASnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAqBxD,MAAM,CAAC,MAAM,uBAAuB,GAAqC,CAAC,EACtE,SAAS,EACT,cAAc,GAAG,EAAE,EACnB,kBAAkB,EAClB,KAAK,EACL,oBAAoB,EACpB,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,UAAU,EACV,aAAa,GAChB,EAAE,EAAE;IACD,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,gCAAgC,EAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,aAC9E,MAAC,IAAI,IACD,SAAS,EAAC,+BAA+B,EACzC,UAAU,EAAC,QAAQ,EACnB,cAAc,EAAC,eAAe,aAE9B,KAAC,IAAI,IAAC,OAAO,EAAC,UAAU,EAAC,EAAE,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,oCAEtC,EACP,KAAC,MAAM,IACH,UAAU,EAAC,OAAO,EAClB,IAAI,EAAC,OAAO,EACZ,OAAO,EAAE,eAAe,gBACb,OAAO,EAClB,IAAI,EAAE,SAAS,GACjB,IACC,EACP,cAAK,SAAS,EAAC,gCAAgC,YAC3C,KAAC,gBAAgB,IACb,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,aAAa,EACpB,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,KAAK,EACZ,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,mBAAmB,EAAE,mBAAmB,EACxC,4BAA4B,EAAE,4BAA4B,EAC1D,aAAa,EAAE,aAAa,EAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,EAAE,mBAAmB,GAC1C,GACA,IACH,CACV,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"field-config-panel-overlay.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel-overlay.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
+ import { type ScheduleEditorContext } from '@servicetitan/dte-shared';
1
2
  import { FC } from 'react';
2
3
  import { type FormFieldsByFormIdI, type FormInfo, type PdfField, type RecipientInfo, type SchemaObject } from '../../interface/types';
4
+ import { type DateCalcOptions } from '../../utils';
3
5
  interface FieldConfigPanelProps {
4
6
  field: PdfField;
5
7
  dataModel?: SchemaObject;
@@ -9,6 +11,10 @@ interface FieldConfigPanelProps {
9
11
  formulaLoadingFormId?: number | null;
10
12
  recipients: RecipientInfo[];
11
13
  hideConditionalLogic?: boolean;
14
+ /** The calendar of this field's formula preview. */
15
+ dateCalcOptions?: DateCalcOptions;
16
+ /** The business-calendar toggle/picker/drawer state and callbacks for this field. */
17
+ businessCalendar?: ScheduleEditorContext;
12
18
  onDeleteField(): void;
13
19
  onFieldConfigChange(updates: Partial<PdfField>): void;
14
20
  onMatchingFieldsConfigChange?(predicate: (field: PdfField) => boolean, updates: Partial<PdfField> | ((field: PdfField) => Partial<PdfField>)): void;
@@ -1 +1 @@
1
- {"version":3,"file":"field-config-panel.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAC;AAEpC,OAAO,EAIH,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACpB,MAAM,uBAAuB,CAAC;AAgB/B,UAAU,qBAAqB;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,aAAa,IAAI,IAAI,CAAC;IACtB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtD,4BAA4B,CAAC,CACzB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACvC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GACtE,IAAI,CAAC;IACR,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAkRtD,CAAC"}
1
+ {"version":3,"file":"field-config-panel.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,EAAE,EAAW,MAAM,OAAO,CAAC;AAEpC,OAAO,EAIH,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,YAAY,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACH,KAAK,eAAe,EAOvB,MAAM,aAAa,CAAC;AAQrB,UAAU,qBAAqB;IAC3B,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,oDAAoD;IACpD,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,aAAa,IAAI,IAAI,CAAC;IACtB,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IACtD,4BAA4B,CAAC,CACzB,SAAS,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EACvC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,GACtE,IAAI,CAAC;IACR,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAwStD,CAAC"}
@@ -10,7 +10,7 @@ import { ESignOptionsModal } from './e-sign-options-modal';
10
10
  import { FillableDefaultConfig } from './fillable-default-config';
11
11
  import { FormulaGenerator } from './formula-generator';
12
12
  import { TableConfigs } from './table-configs';
13
- export const FieldConfigPanel = ({ dataModel, documentFields = [], field, formFieldsByFormId, forms, formulaLoadingFormId, hideConditionalLogic = false, onDeleteField, onFieldConfigChange, onMatchingFieldsConfigChange, onRequestFormFields, recipients, }) => {
13
+ export const FieldConfigPanel = ({ businessCalendar, dataModel, dateCalcOptions, documentFields = [], field, formFieldsByFormId, forms, formulaLoadingFormId, hideConditionalLogic = false, onDeleteField, onFieldConfigChange, onMatchingFieldsConfigChange, onRequestFormFields, recipients, }) => {
14
14
  var _a, _b;
15
15
  const recipientOptions = useMemo(() => (field.type === FieldTypeEnum.fillable
16
16
  ? getFillableFieldsRecipients(recipients)
@@ -26,6 +26,20 @@ export const FieldConfigPanel = ({ dataModel, documentFields = [], field, formFi
26
26
  }
27
27
  onFieldConfigChange({ data });
28
28
  };
29
+ /*
30
+ * Reuses the catalog/CRUD half of `businessCalendar` (shared tenant schedules, same as a
31
+ * calculated field's), but overrides the enabled/selected-schedule half to read and write
32
+ * `ESignDateSignedOffsetSettings` instead of a `scheduleBindings` entry, since the toggle here
33
+ * applies to every `dateSignedOffset` field in the document, same as `rules` does.
34
+ */
35
+ const dateSignedOffsetData = field.data;
36
+ const eSignBusinessCalendar = businessCalendar && {
37
+ ...businessCalendar,
38
+ enabled: !!(dateSignedOffsetData === null || dateSignedOffsetData === void 0 ? void 0 : dateSignedOffsetData.businessCalendarEnabled),
39
+ selectedScheduleId: dateSignedOffsetData === null || dateSignedOffsetData === void 0 ? void 0 : dateSignedOffsetData.scheduleId,
40
+ onToggle: businessCalendarEnabled => handleDateSignedOffsetSave({ ...dateSignedOffsetData, businessCalendarEnabled }),
41
+ onSelectSchedule: scheduleId => handleDateSignedOffsetSave({ ...dateSignedOffsetData, scheduleId }),
42
+ };
29
43
  const handleRecipientChange = (item) => {
30
44
  if (!item) {
31
45
  return;
@@ -89,11 +103,11 @@ export const FieldConfigPanel = ({ dataModel, documentFields = [], field, formFi
89
103
  multiline: !field.multiline,
90
104
  }) })), field.type === FieldTypeEnum.fillable && field.subType === 'dropdown' && (_jsx(DropdownFieldItems, { field: field, onFieldConfigChange: onFieldConfigChange })), field.type === FieldTypeEnum.fillable &&
91
105
  field.subType &&
92
- ['text', 'number', 'checkbox', 'date', 'radio'].includes(field.subType) && (_jsx(FillableDefaultConfig, { field: field, documentFields: documentFields, onFieldConfigChange: onFieldConfigChange, onMatchingFieldsConfigChange: onMatchingFieldsConfigChange })), field.type === FieldTypeEnum.calculated && (_jsx(FormulaGenerator, { dataModel: dataModel, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, forms: forms, formula: field.formula, formulaFormat: field.formulaFormat, formulaLoadingFormId: formulaLoadingFormId, onFormulaChange: (formula, formulaFormat) => onFieldConfigChange({
106
+ ['text', 'number', 'checkbox', 'date', 'radio'].includes(field.subType) && (_jsx(FillableDefaultConfig, { field: field, documentFields: documentFields, onFieldConfigChange: onFieldConfigChange, onMatchingFieldsConfigChange: onMatchingFieldsConfigChange })), field.type === FieldTypeEnum.calculated && (_jsx(FormulaGenerator, { businessCalendar: businessCalendar, dataModel: dataModel, dateCalcOptions: dateCalcOptions, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, forms: forms, formula: field.formula, formulaFormat: field.formulaFormat, formulaLoadingFormId: formulaLoadingFormId, onFormulaChange: (formula, formulaFormat) => onFieldConfigChange({
93
107
  formula,
94
108
  formulaFormat,
95
109
  }), onRequestFormFields: onRequestFormFields })), showFontSizeControl && (_jsx(SelectFieldSync, { label: "Font Size", disableClearButton: true, options: fontSizeOptions, value: selectedFontSize, onSelectedOptionChange: handleFontSizeChange })), field.type === FieldTypeEnum.generic && field.subType === 'table' && (_jsx(TableConfigs, { field: field, onFieldConfigChange: onFieldConfigChange })), field.type === FieldTypeEnum.eSign &&
96
- field.subType === ESignFieldType.dateSignedOffset && (_jsx(ESignOptionsModal, { initialState: field.data, onSave: handleDateSignedOffsetSave, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formulaLoadingFormId, forms: forms, onRequestFormFields: onRequestFormFields, schema: dataModel })), !hideConditionalLogic && (_jsx(DisplayCondition, { onSave: onFieldConfigChange, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formulaLoadingFormId, forms: forms, initialState: (_b = field.displayCondition) !== null && _b !== void 0 ? _b : undefined, onRequestFormFields: onRequestFormFields, schema: dataModel })), _jsx(Textarea, { label: "Description", value: field.description, onChange: e => {
110
+ field.subType === ESignFieldType.dateSignedOffset && (_jsx(ESignOptionsModal, { initialState: field.data, onSave: handleDateSignedOffsetSave, businessCalendar: eSignBusinessCalendar, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formulaLoadingFormId, forms: forms, onRequestFormFields: onRequestFormFields, schema: dataModel })), !hideConditionalLogic && (_jsx(DisplayCondition, { onSave: onFieldConfigChange, documentFields: documentFields, formFieldsByFormId: formFieldsByFormId, formFieldsLoadingFormId: formulaLoadingFormId, forms: forms, initialState: (_b = field.displayCondition) !== null && _b !== void 0 ? _b : undefined, onRequestFormFields: onRequestFormFields, schema: dataModel })), _jsx(Textarea, { label: "Description", value: field.description, onChange: e => {
97
111
  var _a;
98
112
  return onFieldConfigChange({
99
113
  description: (_a = e === null || e === void 0 ? void 0 : e.target.value) !== null && _a !== void 0 ? _a : '',
@@ -1 +1 @@
1
- {"version":3,"file":"field-config-panel.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-config-panel.js","sourceRoot":"","sources":["../../../src/components/field-config-panel/field-config-panel.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEpG,OAAO,EAAM,OAAO,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAEH,cAAc,EACd,aAAa,GAMhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEH,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwB/C,MAAM,CAAC,MAAM,gBAAgB,GAA8B,CAAC,EACxD,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,cAAc,GAAG,EAAE,EACnB,KAAK,EACL,kBAAkB,EAClB,KAAK,EACL,oBAAoB,EACpB,oBAAoB,GAAG,KAAK,EAC5B,aAAa,EACb,mBAAmB,EACnB,4BAA4B,EAC5B,mBAAmB,EACnB,UAAU,GACb,EAAE,EAAE;;IACD,MAAM,gBAAgB,GAAG,OAAO,CAC5B,GAAG,EAAE,CACD,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ;QAClC,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC;QACzC,CAAC,CAAC,UAAU,CACf,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,EAC9E,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAC3B,CAAC;IAEF,MAAM,iBAAiB,GAAG,OAAO,CAC7B,GAAG,EAAE,WAAC,OAAA,MAAA,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,SAAS,CAAC,mCAAI,IAAI,CAAA,EAAA,EAC5E,CAAC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,CACtC,CAAC;IAEF,MAAM,mBAAmB,GAAG,CAAC,aAAuB,EAAE,EAAE,CACpD,aAAa,CAAC,OAAO,KAAK,OAAO,IAAI,aAAa,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;IAE3E,MAAM,yBAAyB,GAAG,CAAC,aAAuB,EAAE,EAAE,CAC1D,aAAa,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;QAC1C,aAAa,CAAC,OAAO,KAAK,cAAc,CAAC,gBAAgB,CAAC;IAE9D,MAAM,0BAA0B,GAAG,CAAC,IAAmC,EAAE,EAAE;QACvE,IAAI,4BAA4B,EAAE,CAAC;YAC/B,4BAA4B,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YAClE,OAAO;QACX,CAAC;QAED,mBAAmB,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAqC,CAAC;IACzE,MAAM,qBAAqB,GAAsC,gBAAgB,IAAI;QACjF,GAAG,gBAAgB;QACnB,OAAO,EAAE,CAAC,CAAC,CAAA,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,uBAAuB,CAAA;QACxD,kBAAkB,EAAE,oBAAoB,aAApB,oBAAoB,uBAApB,oBAAoB,CAAE,UAAU;QACpD,QAAQ,EAAE,uBAAuB,CAAC,EAAE,CAChC,0BAA0B,CAAC,EAAE,GAAG,oBAAoB,EAAE,uBAAuB,EAAE,CAAC;QACpF,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAC3B,0BAA0B,CAAC,EAAE,GAAG,oBAAoB,EAAE,UAAU,EAAE,CAAC;KAC1E,CAAC;IAEF,MAAM,qBAAqB,GAAG,CAAC,IAA0C,EAAE,EAAE;QACzE,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,OAAyB,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAAE,CAAC;YACxC,MAAM,QAAQ,GACV,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI;gBACnC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC;gBACnC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,OAAO,GAAG;YACZ,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,IAAI;SACP,CAAC;QAEF,IACI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ;YACrC,KAAK,CAAC,OAAO,KAAK,OAAO;YACzB,KAAK,CAAC,IAAI;YACV,4BAA4B,EAC9B,CAAC;YACC,4BAA4B,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;YAC3D,OAAO;QACX,CAAC;QAED,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC,CAAC;IAEF,MAAM,mBAAmB,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAEzD,MAAM,eAAe,GAAG,OAAO,CAC3B,GAAG,EAAE,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,EACjF,EAAE,CACL,CAAC;IAEF,MAAM,gBAAgB,GAAG,OAAO,CAC5B,GAAG,EAAE,WAAC,OAAA,MAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,gBAAgB,CAAC,KAAK,CAAC,CAAC,mCAAI,IAAI,CAAA,EAAA,EACnF,CAAC,eAAe,EAAE,KAAK,CAAC,CAC3B,CAAC;IAEF,MAAM,oBAAoB,GAAG,CAAC,IAAmC,EAAE,EAAE;QACjE,mBAAmB,CAAC;YAChB,MAAM,EAAE;gBACJ,GAAG,KAAK,CAAC,MAAM;gBACf,QAAQ,EAAE,IAAI,CAAC,EAAE;aACpB;SACJ,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,0BAA0B,GAAG,CAAC,SAAiB,EAAE,EAAE;QACrD,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,IAAI,4BAA4B,EAAE,CAAC;YAC/B,4BAA4B,CAAC,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YACjE,OAAO;QACX,CAAC;QAED,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACvC,CAAC,CAAC;IAEF,OAAO,CACH,MAAC,IAAI,IAAC,SAAS,EAAC,QAAQ,EAAC,GAAG,EAAC,GAAG,aAC3B;gBACG,aAAa,CAAC,QAAQ;gBACtB,aAAa,CAAC,KAAK;gBACnB,aAAa,CAAC,UAAU;gBACxB,aAAa,CAAC,KAAK;aACtB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CACtB,KAAC,SAAS,IACN,QAAQ,EAAE,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,EAC/C,KAAK,EAAC,OAAO,EACb,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,CACV,mBAAmB,CAAC;oBAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK;iBACxB,CAAC,GAER,CACL,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,CACtC,KAAC,QAAQ,IACL,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,CAAC,KAAK,CAAC,SAAS,EACzB,QAAQ,EAAE,GAAG,EAAE,CACX,mBAAmB,CAAC;oBAChB,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS;iBAC9B,CAAC,GAER,CACL,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,CACnE,KAAC,SAAS,IACN,QAAQ,QACR,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,KAAK,CAAC,SAAU,EACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAC3D,CACL,EACA,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI,CAC9E,KAAC,eAAe,IACZ,KAAK,EAAC,WAAW,EACjB,kBAAkB,QAClB,OAAO,EAAE,gBAAgB,EACzB,KAAK,EAAE,iBAAiB,EACxB,sBAAsB,EAAE,qBAAqB,EAC7C,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAC7B,CACL,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,IAAI,CACrC,KAAC,SAAS,IAAC,KAAK,EAAC,WAAW,EAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,SAAG,CAC9D,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,CACtC,KAAC,QAAQ,IACL,KAAK,EAAC,UAAU,EAChB,OAAO,EAAE,KAAK,CAAC,QAAQ,EACvB,QAAQ,EAAE,GAAG,EAAE,CACX,mBAAmB,CAAC;oBAChB,QAAQ,EAAE,CAAC,KAAK,CAAC,QAAQ;iBAC5B,CAAC,GAER,CACL,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,CAClE,KAAC,QAAQ,IACL,KAAK,EAAC,YAAY,EAClB,OAAO,EAAE,MAAA,KAAK,CAAC,SAAS,mCAAI,KAAK,EACjC,QAAQ,EAAE,GAAG,EAAE,CACX,mBAAmB,CAAC;oBAChB,SAAS,EAAE,CAAC,KAAK,CAAC,SAAS;iBAC9B,CAAC,GAER,CACL,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,CACtE,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,GAAI,CACjF,EACA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,QAAQ;gBAClC,KAAK,CAAC,OAAO;gBACb,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CACvE,KAAC,qBAAqB,IAClB,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,4BAA4B,EAAE,4BAA4B,GAC5D,CACL,EACJ,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,UAAU,IAAI,CACxC,KAAC,gBAAgB,IACb,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,oBAAoB,EAAE,oBAAoB,EAC1C,eAAe,EAAE,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,CACxC,mBAAmB,CAAC;oBAChB,OAAO;oBACP,aAAa;iBAChB,CAAC,EAEN,mBAAmB,EAAE,mBAAmB,GAC1C,CACL,EAEA,mBAAmB,IAAI,CACpB,KAAC,eAAe,IACZ,KAAK,EAAC,WAAW,EACjB,kBAAkB,QAClB,OAAO,EAAE,eAAe,EACxB,KAAK,EAAE,gBAAgB,EACvB,sBAAsB,EAAE,oBAAoB,GAC9C,CACL,EAEA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,IAAI,CAClE,KAAC,YAAY,IAAC,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,GAAI,CAC3E,EAEA,KAAK,CAAC,IAAI,KAAK,aAAa,CAAC,KAAK;gBAC/B,KAAK,CAAC,OAAO,KAAK,cAAc,CAAC,gBAAgB,IAAI,CACjD,KAAC,iBAAiB,IACd,YAAY,EAAE,KAAK,CAAC,IAAqC,EACzD,MAAM,EAAE,0BAA0B,EAClC,gBAAgB,EAAE,qBAAqB,EACvC,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,uBAAuB,EAAE,oBAAoB,EAC7C,KAAK,EAAE,KAAK,EACZ,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,SAAS,GACnB,CACL,EAEJ,CAAC,oBAAoB,IAAI,CACtB,KAAC,gBAAgB,IACb,MAAM,EAAE,mBAAmB,EAC3B,cAAc,EAAE,cAAc,EAC9B,kBAAkB,EAAE,kBAAkB,EACtC,uBAAuB,EAAE,oBAAoB,EAC7C,KAAK,EAAE,KAAK,EACZ,YAAY,EAAE,MAAA,KAAK,CAAC,gBAAgB,mCAAI,SAAS,EACjD,mBAAmB,EAAE,mBAAmB,EACxC,MAAM,EAAE,SAAS,GACnB,CACL,EAED,KAAC,QAAQ,IACL,KAAK,EAAC,aAAa,EACnB,KAAK,EAAE,KAAK,CAAC,WAAW,EACxB,QAAQ,EAAE,CAAC,CAAC,EAAE;;oBACV,OAAA,mBAAmB,CAAC;wBAChB,WAAW,EAAE,MAAA,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,KAAK,mCAAI,EAAE;qBACrC,CAAC,CAAA;iBAAA,GAER,EAEF,KAAC,MAAM,IAAC,SAAS,EAAC,YAAY,EAAC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAC,QAAQ,6BAEjE,IACN,CACV,CAAC;AACN,CAAC,CAAC"}
@@ -1,7 +1,11 @@
1
+ import { type ScheduleEditorContext } from '@servicetitan/dte-shared';
1
2
  import { FC } from 'react';
2
3
  import { type CalculatedFieldFormat, type FormFieldsByFormIdI, type FormInfo, type PdfField, type SchemaObject, type StructuredFormula } from '../../interface/types';
4
+ import { type DateCalcOptions } from '../../utils';
3
5
  export interface FormulaGeneratorProps {
6
+ businessCalendar?: ScheduleEditorContext;
4
7
  dataModel?: SchemaObject;
8
+ dateCalcOptions?: DateCalcOptions;
5
9
  documentFields?: PdfField[];
6
10
  formFieldsByFormId?: FormFieldsByFormIdI;
7
11
  forms: FormInfo[];
@@ -1 +1 @@
1
- {"version":3,"file":"formula-generator.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/formula-generator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AACxD,OAAO,EACH,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAClF,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAiBD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAyDtD,CAAC"}
1
+ {"version":3,"file":"formula-generator.d.ts","sourceRoot":"","sources":["../../../src/components/field-config-panel/formula-generator.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AACxD,OAAO,EACH,KAAK,qBAAqB,EAG1B,KAAK,mBAAmB,EACxB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,eAAe,EAAqC,MAAM,aAAa,CAAC;AAGtF,MAAM,WAAW,qBAAqB;IAClC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;IACzC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC5B,kBAAkB,CAAC,EAAE,mBAAmB,CAAC;IACzC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,aAAa,CAAC,EAAE,qBAAqB,CAAC;IACtC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,eAAe,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAClF,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAiBD,eAAO,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA6DtD,CAAC"}
@@ -19,7 +19,7 @@ function getFillableFilteredBuySubTypeFields(fields, subTypes) {
19
19
  });
20
20
  });
21
21
  }
22
- export const FormulaGenerator = ({ dataModel, documentFields = [], formFieldsByFormId, forms, formula, formulaFormat, formulaLoadingFormId, onFormulaChange, onRequestFormFields, }) => {
22
+ export const FormulaGenerator = ({ businessCalendar, dataModel, dateCalcOptions, documentFields = [], formFieldsByFormId, forms, formula, formulaFormat, formulaLoadingFormId, onFormulaChange, onRequestFormFields, }) => {
23
23
  const [modalOpen, setModalOpen] = useState(false);
24
24
  const dataModelGroups = useMemo(() => dataModel
25
25
  ? extractGroupedFieldsFromDataModel(dataModel, {
@@ -30,6 +30,6 @@ export const FormulaGenerator = ({ dataModel, documentFields = [], formFieldsByF
30
30
  const handleSave = (newFormula, format) => {
31
31
  onFormulaChange === null || onFormulaChange === void 0 ? void 0 : onFormulaChange(newFormula, format);
32
32
  };
33
- return (_jsxs(Fragment, { children: [_jsx(Button, { appearance: "secondary", className: "full-width", icon: EditIcon, onClick: () => setModalOpen(true), children: "Configure formula" }), modalOpen && (_jsx(FormulaModal, { initialFormula: formula, initialFormat: formulaFormat, dataModelGroups: dataModelGroups, fillableFieldsFromDocument: fillableFieldsFromDocument, formFieldsByFormId: formFieldsByFormId, forms: forms, formulaLoadingFormId: formulaLoadingFormId, onClose: () => setModalOpen(false), onRequestFormFields: onRequestFormFields, onSave: handleSave }))] }));
33
+ return (_jsxs(Fragment, { children: [_jsx(Button, { appearance: "secondary", className: "full-width", icon: EditIcon, onClick: () => setModalOpen(true), children: "Configure formula" }), modalOpen && (_jsx(FormulaModal, { initialFormula: formula, initialFormat: formulaFormat, businessCalendar: businessCalendar, dataModelGroups: dataModelGroups, dateCalcOptions: dateCalcOptions, fillableFieldsFromDocument: fillableFieldsFromDocument, formFieldsByFormId: formFieldsByFormId, forms: forms, formulaLoadingFormId: formulaLoadingFormId, onClose: () => setModalOpen(false), onRequestFormFields: onRequestFormFields, onSave: handleSave }))] }));
34
34
  };
35
35
  //# sourceMappingURL=formula-generator.js.map