@servicetitan/dte-unlayer 0.157.0 → 0.159.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.
- package/dist/api-core.js +22 -29
- package/dist/api-core.js.map +1 -1
- package/dist/api-custom-tools.js +23 -29
- package/dist/api-custom-tools.js.map +1 -1
- package/dist/business-calendar/BusinessCalendarDrawer.d.ts +19 -0
- package/dist/business-calendar/BusinessCalendarDrawer.d.ts.map +1 -0
- package/dist/business-calendar/BusinessCalendarDrawer.js +41 -0
- package/dist/business-calendar/BusinessCalendarDrawer.js.map +1 -0
- package/dist/business-calendar/business-calendar-requests.d.ts +25 -0
- package/dist/business-calendar/business-calendar-requests.d.ts.map +1 -0
- package/dist/business-calendar/business-calendar-requests.js +46 -0
- package/dist/business-calendar/business-calendar-requests.js.map +1 -0
- package/dist/business-calendar/business-calendar-state.d.ts +22 -0
- package/dist/business-calendar/business-calendar-state.d.ts.map +1 -0
- package/dist/business-calendar/business-calendar-state.js +74 -0
- package/dist/business-calendar/business-calendar-state.js.map +1 -0
- package/dist/business-calendar/useBusinessCalendarRequests.d.ts +15 -0
- package/dist/business-calendar/useBusinessCalendarRequests.d.ts.map +1 -0
- package/dist/business-calendar/useBusinessCalendarRequests.js +30 -0
- package/dist/business-calendar/useBusinessCalendarRequests.js.map +1 -0
- package/dist/display-conditions/ConditionGroup.js +15 -89
- package/dist/display-conditions/ConditionGroup.js.map +1 -1
- package/dist/display-conditions/ConditionGroupsSection.js +2 -70
- package/dist/display-conditions/ConditionGroupsSection.js.map +1 -1
- package/dist/display-conditions/ConditionRow.d.ts.map +1 -1
- package/dist/display-conditions/ConditionRow.js +71 -296
- package/dist/display-conditions/ConditionRow.js.map +1 -1
- package/dist/display-conditions/DisplayConditionModal.js +40 -190
- package/dist/display-conditions/DisplayConditionModal.js.map +1 -1
- package/dist/display-conditions/LookupValueControl.d.ts.map +1 -1
- package/dist/display-conditions/LookupValueControl.js +42 -109
- package/dist/display-conditions/LookupValueControl.js.map +1 -1
- package/dist/display-conditions/SeparatorWithChip.js +1 -10
- package/dist/display-conditions/SeparatorWithChip.js.map +1 -1
- package/dist/display-conditions/constants.js +15 -20
- package/dist/display-conditions/constants.js.map +1 -1
- package/dist/display-conditions/displayConditionController.js +5 -8
- package/dist/display-conditions/displayConditionController.js.map +1 -1
- package/dist/display-conditions/lookupOptionsController.js +16 -16
- package/dist/display-conditions/lookupOptionsController.js.map +1 -1
- package/dist/display-conditions/nunjucks.js +98 -116
- package/dist/display-conditions/nunjucks.js.map +1 -1
- package/dist/display-conditions/schemaDataPoints.js +13 -11
- package/dist/display-conditions/schemaDataPoints.js.map +1 -1
- package/dist/display-conditions/types.js +23 -67
- package/dist/display-conditions/types.js.map +1 -1
- package/dist/display-conditions/useConditionForms.js +38 -56
- package/dist/display-conditions/useConditionForms.js.map +1 -1
- package/dist/display-conditions/useLookupOptions.js +24 -44
- package/dist/display-conditions/useLookupOptions.js.map +1 -1
- package/dist/e-sign-offset/ESignDateSignedOffsetModal.d.ts.map +1 -1
- package/dist/e-sign-offset/ESignDateSignedOffsetModal.js +48 -156
- package/dist/e-sign-offset/ESignDateSignedOffsetModal.js.map +1 -1
- package/dist/e-sign-offset/ESignOffsetRuleRow.d.ts +3 -1
- package/dist/e-sign-offset/ESignOffsetRuleRow.d.ts.map +1 -1
- package/dist/e-sign-offset/ESignOffsetRuleRow.js +12 -71
- package/dist/e-sign-offset/ESignOffsetRuleRow.js.map +1 -1
- package/dist/e-sign-offset/eSignOffsetController.js +5 -8
- package/dist/e-sign-offset/eSignOffsetController.js.map +1 -1
- package/dist/editor-core-source.d.ts +2 -2
- package/dist/editor-core-source.d.ts.map +1 -1
- package/dist/editor-core-source.js +3 -3
- package/dist/editor-core-source.js.map +1 -1
- package/dist/editor-core.js +2 -2
- package/dist/editor-core.js.map +1 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +56 -118
- package/dist/editor.js.map +1 -1
- package/dist/image-upload-error.js +3 -3
- package/dist/image-upload-error.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/loadScript.js +7 -8
- package/dist/loadScript.js.map +1 -1
- package/dist/log.js +2 -3
- package/dist/log.js.map +1 -1
- package/dist/merge-tags.js +18 -17
- package/dist/merge-tags.js.map +1 -1
- package/dist/shared/configs.js +1 -2
- package/dist/shared/configs.js.map +1 -1
- package/dist/shared/const.d.ts +72 -0
- package/dist/shared/const.d.ts.map +1 -1
- package/dist/shared/const.js +13 -4
- package/dist/shared/const.js.map +1 -1
- package/dist/shared/date-calc.d.ts +32 -13
- package/dist/shared/date-calc.d.ts.map +1 -1
- package/dist/shared/date-calc.js +130 -76
- package/dist/shared/date-calc.js.map +1 -1
- package/dist/shared/e-sign-offset.js +46 -63
- package/dist/shared/e-sign-offset.js.map +1 -1
- package/dist/shared/edit-icon.js +0 -1
- package/dist/shared/edit-icon.js.map +1 -1
- package/dist/shared/fonts.js +16 -17
- package/dist/shared/fonts.js.map +1 -1
- package/dist/shared/forms.js +16 -38
- package/dist/shared/forms.js.map +1 -1
- package/dist/shared/instance-id.d.ts +3 -0
- package/dist/shared/instance-id.d.ts.map +1 -1
- package/dist/shared/instance-id.js +10 -7
- package/dist/shared/instance-id.js.map +1 -1
- package/dist/shared/nunjucks-helpers.js +2 -5
- package/dist/shared/nunjucks-helpers.js.map +1 -1
- package/dist/shared/schema.js +52 -96
- package/dist/shared/schema.js.map +1 -1
- package/dist/shared/tools.js +6 -13
- package/dist/shared/tools.js.map +1 -1
- package/dist/store.d.ts +15 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +851 -547
- package/dist/store.js.map +1 -1
- package/dist/tools.js +133 -143
- package/dist/tools.js.map +1 -1
- package/dist/unlayer-interface.d.ts +25 -1
- package/dist/unlayer-interface.d.ts.map +1 -1
- package/dist/unlayer-interface.js +1 -2
- package/dist/unlayer-interface.js.map +1 -1
- package/dist/unlayer.js +86 -113
- package/dist/unlayer.js.map +1 -1
- package/dist/vendor/dte-shared/business-calendar-validation.utils.d.ts +25 -0
- package/dist/vendor/dte-shared/business-calendar-validation.utils.js +80 -0
- package/dist/vendor/dte-shared/components/business-calendar-section.d.ts +15 -0
- package/dist/vendor/dte-shared/components/business-calendar-section.js +14 -0
- package/dist/vendor/dte-shared/components/schedule-drawer.d.ts +18 -0
- package/dist/vendor/dte-shared/components/schedule-drawer.js +119 -0
- package/dist/vendor/dte-shared/components/schedule-picker.d.ts +8 -0
- package/dist/vendor/dte-shared/components/schedule-picker.js +88 -0
- package/dist/vendor/dte-shared/constants.d.ts +31 -0
- package/dist/vendor/dte-shared/constants.js +34 -0
- package/dist/vendor/dte-shared/field-schedule-editor-context.d.ts +31 -0
- package/dist/vendor/dte-shared/field-schedule-editor-context.js +110 -0
- package/dist/vendor/dte-shared/index.d.ts +8 -0
- package/dist/vendor/dte-shared/index.js +7 -0
- package/dist/vendor/dte-shared/schedule-bindings.utils.d.ts +22 -0
- package/dist/vendor/dte-shared/schedule-bindings.utils.js +31 -0
- package/dist/vendor/dte-shared/styles/schedule.css +19 -0
- package/dist/vendor/dte-shared/types.d.ts +129 -0
- package/dist/vendor/dte-shared/types.js +1 -0
- package/package.json +7 -1
- package/src/__tests__/business-calendar-drawer.test.tsx +183 -0
- package/src/__tests__/business-calendar-requests.test.ts +166 -0
- package/src/__tests__/business-calendar-state.test.tsx +142 -0
- package/src/__tests__/condition-row.test.tsx +131 -0
- package/src/__tests__/date-calc.test.ts +145 -0
- package/src/__tests__/e-sign-offset-modal.test.tsx +124 -0
- package/src/__tests__/instance-id.test.ts +49 -0
- package/src/__tests__/store.business-calendar.test.ts +185 -0
- package/src/__tests__/unlayer.e-sign-types.test.ts +30 -0
- package/src/business-calendar/BusinessCalendarDrawer.tsx +76 -0
- package/src/business-calendar/business-calendar-requests.ts +80 -0
- package/src/business-calendar/business-calendar-state.ts +113 -0
- package/src/business-calendar/useBusinessCalendarRequests.ts +49 -0
- package/src/display-conditions/ConditionRow.tsx +102 -175
- package/src/display-conditions/LookupValueControl.tsx +1 -12
- package/src/e-sign-offset/ESignDateSignedOffsetModal.tsx +20 -12
- package/src/e-sign-offset/ESignOffsetRuleRow.tsx +7 -2
- package/src/editor-core-source.ts +2 -2
- package/src/editor.tsx +15 -0
- package/src/index.ts +10 -0
- package/src/shared/const.ts +61 -0
- package/src/shared/date-calc.ts +155 -78
- package/src/shared/instance-id.ts +6 -1
- package/src/store.ts +68 -5
- package/src/unlayer-interface.tsx +25 -1
- package/src/unlayer.tsx +5 -5
package/dist/shared/const.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import type { BusinessDaySchedule, HolidayCatalog } from '../vendor/dte-shared/index';
|
|
1
2
|
import type { DisplayConditionState } from '../display-conditions/types';
|
|
3
|
+
import type { BusinessCalendar } from './date-calc';
|
|
2
4
|
import { SchemaObject } from './schema';
|
|
3
5
|
export declare const constGenericsEditor: {
|
|
4
6
|
infoDataProperty: string;
|
|
@@ -38,6 +40,73 @@ export interface UnlayerEventESignOffset {
|
|
|
38
40
|
requestId: string;
|
|
39
41
|
value: ESignDateSignedOffsetSettings;
|
|
40
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Names shown for e-sign field types whose title differs from the type list entry it is derived
|
|
45
|
+
* from (by type value). Only the label changes: the stored value stays, so saved designs and the
|
|
46
|
+
* `esign_<recipient>_<type>` placeholder are unaffected.
|
|
47
|
+
*/
|
|
48
|
+
export declare const E_SIGN_FIELD_TYPE_LABELS: Readonly<Record<string, string | undefined>>;
|
|
49
|
+
/**
|
|
50
|
+
* Payload of `--business-calendar-request` (iframe to parent): what a date field's inline schedule
|
|
51
|
+
* settings (a calculated field's or an e-sign "Date Signed Offset" field's) ask the parent window
|
|
52
|
+
* to do. `fieldKey` is the tool's instance id (`values.id`), the key DTE binds the schedule to.
|
|
53
|
+
* - `toggle` / `select`: the exclusion toggle and the schedule picker.
|
|
54
|
+
* - `create` / `edit`: open the schedule drawer, for a new schedule or `scheduleId`.
|
|
55
|
+
* - `delete`: delete the selected schedule; the outcome comes back as `--business-calendar-result`.
|
|
56
|
+
*/
|
|
57
|
+
export type UnlayerEventBusinessCalendarRequest = {
|
|
58
|
+
action: 'toggle';
|
|
59
|
+
fieldKey: string;
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
} | {
|
|
62
|
+
action: 'select';
|
|
63
|
+
fieldKey: string;
|
|
64
|
+
scheduleId?: number;
|
|
65
|
+
} | {
|
|
66
|
+
action: 'create';
|
|
67
|
+
fieldKey: string;
|
|
68
|
+
} | {
|
|
69
|
+
action: 'edit';
|
|
70
|
+
fieldKey: string;
|
|
71
|
+
scheduleId: number;
|
|
72
|
+
} | {
|
|
73
|
+
action: 'delete';
|
|
74
|
+
fieldKey: string;
|
|
75
|
+
scheduleId: number;
|
|
76
|
+
requestId: string;
|
|
77
|
+
};
|
|
78
|
+
/** Payload of `--business-calendar-result` (parent to iframe): how a `delete` request ended. */
|
|
79
|
+
export interface UnlayerEventBusinessCalendarResult {
|
|
80
|
+
requestId: string;
|
|
81
|
+
/** Why it failed, shown under the schedule; absent on success. */
|
|
82
|
+
error?: string;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Payload of `--business-calendar-state` (parent to iframe), sent whenever the host's schedule
|
|
86
|
+
* props change: what the property editors show and the calendars the previews use.
|
|
87
|
+
*/
|
|
88
|
+
export interface UnlayerEventBusinessCalendarState {
|
|
89
|
+
/** Whether the host edits schedules (it passes `onScheduleBindingsChange`). */
|
|
90
|
+
enabled: boolean;
|
|
91
|
+
/** The fields whose exclusion toggle is on, by field key, with their schedule (none: default). */
|
|
92
|
+
bindings: Record<string, {
|
|
93
|
+
scheduleId?: number;
|
|
94
|
+
}>;
|
|
95
|
+
/** The schedules a field can pick, default first, as the host passes them. */
|
|
96
|
+
schedules: BusinessDaySchedule[];
|
|
97
|
+
schedulesLoading?: boolean;
|
|
98
|
+
schedulesError?: string;
|
|
99
|
+
/** The tenant's known holidays, for the schedule preview's names. */
|
|
100
|
+
holidayCatalog?: HolidayCatalog;
|
|
101
|
+
holidayCatalogLoading?: boolean;
|
|
102
|
+
holidayCatalogError?: string;
|
|
103
|
+
/** Whether the host can delete schedules (it passes `onDeleteSchedule`). */
|
|
104
|
+
canDeleteSchedule: boolean;
|
|
105
|
+
/** Calendars of the bound fields, by field key. */
|
|
106
|
+
fieldCalendars: Record<string, BusinessCalendar>;
|
|
107
|
+
/** The default calendar's holidays. */
|
|
108
|
+
holidays?: string[];
|
|
109
|
+
}
|
|
41
110
|
export interface UnlayerEditorUnit {
|
|
42
111
|
id: string;
|
|
43
112
|
generic: string;
|
|
@@ -57,12 +126,15 @@ export interface UnlayerEventConfig {
|
|
|
57
126
|
isSnapshotMode?: boolean;
|
|
58
127
|
units?: UnlayerEditorUnit[];
|
|
59
128
|
holidays?: string[];
|
|
129
|
+
fieldCalendars?: Record<string, BusinessCalendar>;
|
|
60
130
|
conditionalRulesEnabled?: boolean;
|
|
61
131
|
}
|
|
62
132
|
export interface UnlayerEventRegister {
|
|
63
133
|
units?: UnlayerEditorUnit[];
|
|
64
134
|
eSignRecipients?: UnlayerEditorESignRecipientInfo[];
|
|
65
135
|
eSignFieldTypes?: string[];
|
|
136
|
+
/** {@link E_SIGN_FIELD_TYPE_LABELS}, for the e-sign tool's canvas label. */
|
|
137
|
+
eSignFieldTypeLabels?: Readonly<Record<string, string | undefined>>;
|
|
66
138
|
customTools?: {
|
|
67
139
|
key: string;
|
|
68
140
|
title?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/shared/const.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,eAAO,MAAM,mBAAmB;;;;CAI/B,CAAC;AAEF,MAAM,WAAW,+BAA+B;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,8BAA8B,qBAAqB,CAAC;AACjE,iGAAiG;AACjG,eAAO,MAAM,oCAAoC,0BAA0B,CAAC;AAC5E,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,MAAM,WAAW,yBAAyB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,+FAA+F;IAC/F,SAAS,EAAE,qBAAqB,CAAC;CACpC;AAED,MAAM,WAAW,8BAA8B;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,KAAK,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EACC,CAAC,8BAA8B,CAAC,GAChC,CAAC,GAAG,yBAAyB,EAAE,EAAE,8BAA8B,CAAC,CAAC;CAC1E;AAED,mGAAmG;AACnG,MAAM,WAAW,uBAAuB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,6BAA6B,CAAC;CACxC;AAED,MAAM,WAAW,iBAAiB;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,GAAG,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,QAAQ,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,WAAW,oBAAoB;IACjC,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,+BAA+B,EAAE,CAAC;IACpD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,SAAS,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
|
1
|
+
{"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../src/shared/const.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/const.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
export const constGenericsEditor = {
|
|
2
2
|
infoDataProperty: '_info',
|
|
3
3
|
adminConfigProperty: 'adminConfig',
|
|
4
|
-
userConfigProperty: 'config'
|
|
4
|
+
userConfigProperty: 'config',
|
|
5
5
|
};
|
|
6
6
|
export const E_SIGN_TOOL_SLUG = 'e-sign';
|
|
7
7
|
export const E_SIGN_DATE_SIGNED_OFFSET_TYPE = 'dateSignedOffset';
|
|
8
|
-
/** Must match the backend `EsignFieldSubTypes` registry key read from the e-sign tool values. */
|
|
8
|
+
/** Must match the backend `EsignFieldSubTypes` registry key read from the e-sign tool values. */
|
|
9
|
+
export const E_SIGN_DATE_SIGNED_OFFSET_VALUES_KEY = 'eSignDateSignedOffset';
|
|
9
10
|
export const MAX_E_SIGN_OFFSET_DAYS = 365;
|
|
10
|
-
/** Counts the trailing unconditional rule too. */
|
|
11
|
-
|
|
11
|
+
/** Counts the trailing unconditional rule too. */
|
|
12
|
+
export const MAX_E_SIGN_OFFSET_RULES = 5;
|
|
13
|
+
/**
|
|
14
|
+
* Names shown for e-sign field types whose title differs from the type list entry it is derived
|
|
15
|
+
* from (by type value). Only the label changes: the stored value stays, so saved designs and the
|
|
16
|
+
* `esign_<recipient>_<type>` placeholder are unaffected.
|
|
17
|
+
*/
|
|
18
|
+
export const E_SIGN_FIELD_TYPE_LABELS = {
|
|
19
|
+
[E_SIGN_DATE_SIGNED_OFFSET_TYPE]: 'Calculated Signing Date',
|
|
20
|
+
};
|
|
12
21
|
//# sourceMappingURL=const.js.map
|
package/dist/shared/const.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../src/shared/const.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IAC/B,gBAAgB,EAAE,OAAO;IACzB,mBAAmB,EAAE,aAAa;IAClC,kBAAkB,EAAE,QAAQ;CAC/B,CAAC;AAQF,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AACzC,MAAM,CAAC,MAAM,8BAA8B,GAAG,kBAAkB,CAAC;AACjE,iGAAiG;AACjG,MAAM,CAAC,MAAM,oCAAoC,GAAG,uBAAuB,CAAC;AAC5E,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,kDAAkD;AAClD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC;AA6BzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAiD;IAClF,CAAC,8BAA8B,CAAC,EAAE,yBAAyB;CAC9D,CAAC"}
|
|
@@ -1,31 +1,50 @@
|
|
|
1
1
|
export declare const MAX_DATE_CALC_DAYS = 365;
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* components/scripts/comps/calculated-field.ts).
|
|
3
|
+
* The years DTE knows holidays for (`HolidayCheckService.HolidayYearsWindow`): outside them a
|
|
4
|
+
* default-calendar answer would skip weekends but miss holidays, so it is left blank, as in BYOD.
|
|
6
5
|
*/
|
|
7
|
-
export declare const
|
|
8
|
-
export declare const DATE_RANGE_YEARS = 2;
|
|
6
|
+
export declare const DATE_RANGE_YEARS = 1;
|
|
9
7
|
/**
|
|
10
8
|
* Returns true if the date's year falls within [currentYear - DATE_RANGE_YEARS, currentYear + DATE_RANGE_YEARS].
|
|
11
9
|
* Invalid or unparseable dates return false.
|
|
12
10
|
*/
|
|
13
11
|
export declare function isDateWithinRange(dateInput: unknown): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Days a date calculation skips, as DTE resolves them (`POST api/holidays/calendar`, and the
|
|
14
|
+
* `calendars` noderenderer receives). Arithmetic outside `firstYear`–`lastYear` is blank; without
|
|
15
|
+
* years no year limit applies.
|
|
16
|
+
*/
|
|
17
|
+
export interface BusinessCalendar {
|
|
18
|
+
/** Excluded weekend days, as `Date.getUTCDay()` numbers them: 0 = Sunday, 6 = Saturday. */
|
|
19
|
+
weekendDays: number[];
|
|
20
|
+
/** Holiday dates, already moved to their observed days, as `YYYY-MM-DD`. */
|
|
21
|
+
holidays: string[];
|
|
22
|
+
firstYear?: number | null;
|
|
23
|
+
lastYear?: number | null;
|
|
24
|
+
}
|
|
25
|
+
/** Saturday and Sunday: the default calendar's weekend. */
|
|
26
|
+
export declare const DEFAULT_WEEKEND_DAYS: number[];
|
|
27
|
+
/**
|
|
28
|
+
* Which calendar a calculation uses. With `calendar` (a field bound to a schedule) only that
|
|
29
|
+
* calendar applies. Without it, the default calendar applies: Saturday and Sunday plus `holidays`,
|
|
30
|
+
* with the start and the result limited to the current year ± DATE_RANGE_YEARS.
|
|
31
|
+
*/
|
|
14
32
|
export interface DateCalcOptions {
|
|
33
|
+
calendar?: BusinessCalendar;
|
|
15
34
|
holidays?: string[];
|
|
16
35
|
}
|
|
17
36
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
37
|
+
* Adds business days to a date, as DTE's noderenderer `dateAddDays` does. Returns the result as
|
|
38
|
+
* `YYYY-MM-DD`, or null (a blank field, as in BYOD) for an invalid date, a fractional offset, or
|
|
39
|
+
* a start or result outside the calendar's years.
|
|
20
40
|
*/
|
|
21
|
-
export declare function addDays(dateInput:
|
|
41
|
+
export declare function addDays(dateInput: unknown, daysInput: unknown, options?: DateCalcOptions): string | null;
|
|
22
42
|
/**
|
|
23
|
-
*
|
|
24
|
-
*
|
|
43
|
+
* Counts the business days from `from` to `to` (positive when `to` is later), as DTE's
|
|
44
|
+
* noderenderer `dateDiffDays` does. A formula's `D1 - D2` counts from D2 to D1. Null (a blank
|
|
45
|
+
* field) for an invalid or missing date, or a span over MAX_DATE_CALC_DAYS.
|
|
25
46
|
*/
|
|
26
|
-
export declare function dateDiffDays(
|
|
27
|
-
/** Format a Date to ISO date string (YYYY-MM-DD). */
|
|
28
|
-
export declare function formatDateResult(date: Date): string;
|
|
47
|
+
export declare function dateDiffDays(fromInput: unknown, toInput: unknown, options?: DateCalcOptions): number | null;
|
|
29
48
|
export declare const DEFAULT_DATE_FORMAT = "MM/DD/YYYY";
|
|
30
49
|
/**
|
|
31
50
|
* Format a Date using a pattern string.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-calc.d.ts","sourceRoot":"","sources":["../../src/shared/date-calc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC
|
|
1
|
+
{"version":3,"file":"date-calc.d.ts","sourceRoot":"","sources":["../../src/shared/date-calc.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC;;;GAGG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAW7D;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,2FAA2F;IAC3F,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,2DAA2D;AAC3D,eAAO,MAAM,oBAAoB,UAAS,CAAC;AAE3C;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAgJD;;;;GAIG;AACH,wBAAgB,OAAO,CACnB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,eAAe,GAC1B,MAAM,GAAG,IAAI,CAaf;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CACxB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,eAAe,GAC1B,MAAM,GAAG,IAAI,CAQf;AAED,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAgChD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB/D"}
|
package/dist/shared/date-calc.js
CHANGED
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
export const MAX_DATE_CALC_DAYS = 365;
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
'2026-01-01T00:00:00.000Z',
|
|
8
|
-
'2026-01-19T00:00:00.000Z',
|
|
9
|
-
'2026-02-16T00:00:00.000Z',
|
|
10
|
-
'2026-05-25T00:00:00.000Z',
|
|
11
|
-
'2026-07-04T00:00:00.000Z',
|
|
12
|
-
'2026-09-07T00:00:00.000Z',
|
|
13
|
-
'2026-11-26T00:00:00.000Z',
|
|
14
|
-
'2026-11-27T00:00:00.000Z',
|
|
15
|
-
'2026-12-25T00:00:00.000Z'
|
|
16
|
-
];
|
|
17
|
-
export const DATE_RANGE_YEARS = 2;
|
|
3
|
+
* The years DTE knows holidays for (`HolidayCheckService.HolidayYearsWindow`): outside them a
|
|
4
|
+
* default-calendar answer would skip weekends but miss holidays, so it is left blank, as in BYOD.
|
|
5
|
+
*/
|
|
6
|
+
export const DATE_RANGE_YEARS = 1;
|
|
18
7
|
/**
|
|
19
8
|
* Returns true if the date's year falls within [currentYear - DATE_RANGE_YEARS, currentYear + DATE_RANGE_YEARS].
|
|
20
9
|
* Invalid or unparseable dates return false.
|
|
21
|
-
*/
|
|
10
|
+
*/
|
|
11
|
+
export function isDateWithinRange(dateInput) {
|
|
22
12
|
if (typeof dateInput !== 'string' && !(dateInput instanceof Date)) {
|
|
23
13
|
return false;
|
|
24
14
|
}
|
|
@@ -30,6 +20,8 @@ export const DATE_RANGE_YEARS = 2;
|
|
|
30
20
|
const year = d.getUTCFullYear();
|
|
31
21
|
return year >= currentYear - DATE_RANGE_YEARS && year <= currentYear + DATE_RANGE_YEARS;
|
|
32
22
|
}
|
|
23
|
+
/** Saturday and Sunday: the default calendar's weekend. */
|
|
24
|
+
export const DEFAULT_WEEKEND_DAYS = [0, 6];
|
|
33
25
|
function toDateOnly(input) {
|
|
34
26
|
const d = typeof input === 'string' ? new Date(input) : new Date(input.getTime());
|
|
35
27
|
d.setUTCHours(0, 0, 0, 0);
|
|
@@ -41,88 +33,142 @@ function toDateKey(d) {
|
|
|
41
33
|
const day = String(d.getUTCDate()).padStart(2, '0');
|
|
42
34
|
return `${y}-${m}-${day}`;
|
|
43
35
|
}
|
|
44
|
-
function
|
|
45
|
-
|
|
46
|
-
|
|
36
|
+
function parseDate(input) {
|
|
37
|
+
if (typeof input !== 'string' && !(input instanceof Date)) {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const d = toDateOnly(input);
|
|
41
|
+
return isFinite(d.getTime()) ? d : null;
|
|
47
42
|
}
|
|
48
43
|
function buildHolidaySet(holidays) {
|
|
49
|
-
if (!(holidays === null || holidays === void 0 ? void 0 : holidays.length)) {
|
|
50
|
-
return new Set();
|
|
51
|
-
}
|
|
52
44
|
const set = new Set();
|
|
53
|
-
for (const h of holidays){
|
|
54
|
-
const d =
|
|
55
|
-
if (
|
|
45
|
+
for (const h of holidays !== null && holidays !== void 0 ? holidays : []) {
|
|
46
|
+
const d = parseDate(h);
|
|
47
|
+
if (d) {
|
|
56
48
|
set.add(toDateKey(d));
|
|
57
49
|
}
|
|
58
50
|
}
|
|
59
51
|
return set;
|
|
60
52
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
// Calendars are passed once and reused by every calculation, so each is prepared once.
|
|
54
|
+
const preparedCalendars = new WeakMap();
|
|
55
|
+
function prepareCalendar(calendar) {
|
|
56
|
+
var _a, _b, _c;
|
|
57
|
+
const cached = preparedCalendars.get(calendar);
|
|
58
|
+
if (cached) {
|
|
59
|
+
return cached;
|
|
64
60
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
61
|
+
const prepared = {
|
|
62
|
+
weekendDays: new Set((_a = calendar.weekendDays) !== null && _a !== void 0 ? _a : DEFAULT_WEEKEND_DAYS),
|
|
63
|
+
holidays: buildHolidaySet(calendar.holidays),
|
|
64
|
+
firstYear: (_b = calendar.firstYear) !== null && _b !== void 0 ? _b : null,
|
|
65
|
+
lastYear: (_c = calendar.lastYear) !== null && _c !== void 0 ? _c : null,
|
|
66
|
+
};
|
|
67
|
+
preparedCalendars.set(calendar, prepared);
|
|
68
|
+
return prepared;
|
|
69
69
|
}
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
return result;
|
|
70
|
+
// One calendar per holidays array, so the default calendar is also prepared once.
|
|
71
|
+
const holidayCalendars = new WeakMap();
|
|
72
|
+
const NO_HOLIDAYS_CALENDAR = { weekendDays: DEFAULT_WEEKEND_DAYS, holidays: [] };
|
|
73
|
+
function defaultCalendar(holidays) {
|
|
74
|
+
if (!Array.isArray(holidays)) {
|
|
75
|
+
return NO_HOLIDAYS_CALENDAR;
|
|
77
76
|
}
|
|
78
|
-
|
|
79
|
-
if (
|
|
80
|
-
|
|
77
|
+
let calendar = holidayCalendars.get(holidays);
|
|
78
|
+
if (!calendar) {
|
|
79
|
+
calendar = { weekendDays: DEFAULT_WEEKEND_DAYS, holidays };
|
|
80
|
+
holidayCalendars.set(holidays, calendar);
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
return calendar;
|
|
83
|
+
}
|
|
84
|
+
function isBusinessDay(d, calendar) {
|
|
85
|
+
return !calendar.weekendDays.has(d.getUTCDay()) && !calendar.holidays.has(toDateKey(d));
|
|
86
|
+
}
|
|
87
|
+
function isWithinYears(d, calendar) {
|
|
88
|
+
const year = d.getUTCFullYear();
|
|
89
|
+
return ((calendar.firstYear === null || year >= calendar.firstYear) &&
|
|
90
|
+
(calendar.lastYear === null || year <= calendar.lastYear));
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Walks `days` business days from `start` (negative walks back); the start is not counted.
|
|
94
|
+
* Mirrors `BusinessDayCalculator.AddBusinessDays` in DTE: null for more than MAX_DATE_CALC_DAYS,
|
|
95
|
+
* or when the start or the walk leaves the calendar's years.
|
|
96
|
+
*/
|
|
97
|
+
function addBusinessDays(start, days, calendar) {
|
|
98
|
+
if (Math.abs(days) > MAX_DATE_CALC_DAYS || !isWithinYears(start, calendar)) {
|
|
99
|
+
return null;
|
|
84
100
|
}
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
while(remaining > 0){
|
|
89
|
-
|
|
90
|
-
if (!
|
|
101
|
+
const direction = days >= 0 ? 1 : -1;
|
|
102
|
+
let remaining = Math.abs(days);
|
|
103
|
+
const current = new Date(start.getTime());
|
|
104
|
+
while (remaining > 0) {
|
|
105
|
+
current.setUTCDate(current.getUTCDate() + direction);
|
|
106
|
+
if (!isWithinYears(current, calendar)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
if (isBusinessDay(current, calendar)) {
|
|
91
110
|
remaining--;
|
|
92
111
|
}
|
|
93
112
|
}
|
|
94
|
-
return
|
|
113
|
+
return current;
|
|
95
114
|
}
|
|
96
115
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
return NaN;
|
|
116
|
+
* Counts the business days from `from` to `to`, negative when `to` is earlier; the start is not
|
|
117
|
+
* counted, the end is. Mirrors `BusinessDayCalculator.CountBusinessDays` in DTE: null for a span
|
|
118
|
+
* over MAX_DATE_CALC_DAYS, or a date outside the calendar's years.
|
|
119
|
+
*/
|
|
120
|
+
function countBusinessDays(from, to, calendar) {
|
|
121
|
+
const span = Math.abs(to.getTime() - from.getTime()) / (24 * 60 * 60 * 1000);
|
|
122
|
+
if (span > MAX_DATE_CALC_DAYS ||
|
|
123
|
+
!isWithinYears(from, calendar) ||
|
|
124
|
+
!isWithinYears(to, calendar)) {
|
|
125
|
+
return null;
|
|
108
126
|
}
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
const cursor = new Date(start.getTime());
|
|
127
|
+
const direction = to.getTime() >= from.getTime() ? 1 : -1;
|
|
128
|
+
const cursor = new Date(from.getTime());
|
|
112
129
|
let count = 0;
|
|
113
|
-
while(toDateKey(cursor) !== toDateKey(
|
|
130
|
+
while (toDateKey(cursor) !== toDateKey(to)) {
|
|
114
131
|
cursor.setUTCDate(cursor.getUTCDate() + direction);
|
|
115
|
-
if (
|
|
132
|
+
if (isBusinessDay(cursor, calendar)) {
|
|
116
133
|
count++;
|
|
117
134
|
}
|
|
118
135
|
}
|
|
119
136
|
return count * direction;
|
|
120
137
|
}
|
|
121
|
-
/**
|
|
122
|
-
|
|
123
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Adds business days to a date, as DTE's noderenderer `dateAddDays` does. Returns the result as
|
|
140
|
+
* `YYYY-MM-DD`, or null (a blank field, as in BYOD) for an invalid date, a fractional offset, or
|
|
141
|
+
* a start or result outside the calendar's years.
|
|
142
|
+
*/
|
|
143
|
+
export function addDays(dateInput, daysInput, options) {
|
|
144
|
+
var _a;
|
|
145
|
+
const isDefault = !(options === null || options === void 0 ? void 0 : options.calendar);
|
|
146
|
+
const calendar = prepareCalendar((_a = options === null || options === void 0 ? void 0 : options.calendar) !== null && _a !== void 0 ? _a : defaultCalendar(options === null || options === void 0 ? void 0 : options.holidays));
|
|
147
|
+
const start = parseDate(dateInput);
|
|
148
|
+
const days = Number(daysInput);
|
|
149
|
+
if (!start || !Number.isInteger(days) || (isDefault && !isDateWithinRange(start))) {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
const result = addBusinessDays(start, days, calendar);
|
|
153
|
+
if (!result || (isDefault && !isDateWithinRange(result))) {
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
return toDateKey(result);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Counts the business days from `from` to `to` (positive when `to` is later), as DTE's
|
|
160
|
+
* noderenderer `dateDiffDays` does. A formula's `D1 - D2` counts from D2 to D1. Null (a blank
|
|
161
|
+
* field) for an invalid or missing date, or a span over MAX_DATE_CALC_DAYS.
|
|
162
|
+
*/
|
|
163
|
+
export function dateDiffDays(fromInput, toInput, options) {
|
|
164
|
+
var _a;
|
|
165
|
+
const calendar = prepareCalendar((_a = options === null || options === void 0 ? void 0 : options.calendar) !== null && _a !== void 0 ? _a : defaultCalendar(options === null || options === void 0 ? void 0 : options.holidays));
|
|
166
|
+
const from = parseDate(fromInput);
|
|
167
|
+
const to = parseDate(toInput);
|
|
168
|
+
if (!from || !to) {
|
|
169
|
+
return null;
|
|
124
170
|
}
|
|
125
|
-
return
|
|
171
|
+
return countBusinessDays(from, to, calendar);
|
|
126
172
|
}
|
|
127
173
|
export const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';
|
|
128
174
|
const MONTH_NAMES_FULL = [
|
|
@@ -137,7 +183,7 @@ const MONTH_NAMES_FULL = [
|
|
|
137
183
|
'September',
|
|
138
184
|
'October',
|
|
139
185
|
'November',
|
|
140
|
-
'December'
|
|
186
|
+
'December',
|
|
141
187
|
];
|
|
142
188
|
const MONTH_NAMES_SHORT = [
|
|
143
189
|
'Jan',
|
|
@@ -151,13 +197,14 @@ const MONTH_NAMES_SHORT = [
|
|
|
151
197
|
'Sep',
|
|
152
198
|
'Oct',
|
|
153
199
|
'Nov',
|
|
154
|
-
'Dec'
|
|
200
|
+
'Dec',
|
|
155
201
|
];
|
|
156
202
|
/**
|
|
157
203
|
* Format a Date using a pattern string.
|
|
158
204
|
* Supported tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D.
|
|
159
205
|
* All other characters are treated as literals.
|
|
160
|
-
*/
|
|
206
|
+
*/
|
|
207
|
+
export function formatDate(date, pattern) {
|
|
161
208
|
if (!isFinite(date.getTime())) {
|
|
162
209
|
return '';
|
|
163
210
|
}
|
|
@@ -165,7 +212,14 @@ const MONTH_NAMES_SHORT = [
|
|
|
165
212
|
const year = date.getUTCFullYear();
|
|
166
213
|
const month = date.getUTCMonth();
|
|
167
214
|
const day = date.getUTCDate();
|
|
168
|
-
return fmt
|
|
215
|
+
return fmt
|
|
216
|
+
.replace(/YYYY/g, String(year))
|
|
217
|
+
.replace(/YY/g, String(year).slice(-2))
|
|
218
|
+
.replace(/MMMM/g, MONTH_NAMES_FULL[month])
|
|
219
|
+
.replace(/MMM/g, MONTH_NAMES_SHORT[month])
|
|
220
|
+
.replace(/MM/g, String(month + 1).padStart(2, '0'))
|
|
221
|
+
.replace(/\bM\b/g, String(month + 1))
|
|
222
|
+
.replace(/DD/g, String(day).padStart(2, '0'))
|
|
223
|
+
.replace(/\bD\b/g, String(day));
|
|
169
224
|
}
|
|
170
|
-
|
|
171
225
|
//# sourceMappingURL=date-calc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/shared/date-calc.ts"],"sourcesContent":["export const MAX_DATE_CALC_DAYS = 365;\n\n/**\n * Fallback US federal holidays used when the store config does not provide a\n * holidays list. Keep in sync with any similar inline arrays elsewhere (e.g.\n * components/scripts/comps/calculated-field.ts).\n */\nexport const DEFAULT_HOLIDAYS: string[] = [\n '2026-01-01T00:00:00.000Z',\n '2026-01-19T00:00:00.000Z',\n '2026-02-16T00:00:00.000Z',\n '2026-05-25T00:00:00.000Z',\n '2026-07-04T00:00:00.000Z',\n '2026-09-07T00:00:00.000Z',\n '2026-11-26T00:00:00.000Z',\n '2026-11-27T00:00:00.000Z',\n '2026-12-25T00:00:00.000Z',\n];\n\nexport const DATE_RANGE_YEARS = 2;\n\n/**\n * Returns true if the date's year falls within [currentYear - DATE_RANGE_YEARS, currentYear + DATE_RANGE_YEARS].\n * Invalid or unparseable dates return false.\n */\nexport function isDateWithinRange(dateInput: unknown): boolean {\n if (typeof dateInput !== 'string' && !(dateInput instanceof Date)) {\n return false;\n }\n const d = typeof dateInput === 'string' ? new Date(dateInput) : dateInput;\n if (!isFinite(d.getTime())) {\n return false;\n }\n const currentYear = new Date().getUTCFullYear();\n const year = d.getUTCFullYear();\n return year >= currentYear - DATE_RANGE_YEARS && year <= currentYear + DATE_RANGE_YEARS;\n}\n\nexport interface DateCalcOptions {\n holidays?: string[];\n}\n\nfunction toDateOnly(input: string | Date): Date {\n const d = typeof input === 'string' ? new Date(input) : new Date(input.getTime());\n d.setUTCHours(0, 0, 0, 0);\n return d;\n}\n\nfunction toDateKey(d: Date): string {\n const y = d.getUTCFullYear();\n const m = String(d.getUTCMonth() + 1).padStart(2, '0');\n const day = String(d.getUTCDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n\nfunction isWeekend(d: Date): boolean {\n const day = d.getUTCDay();\n return day === 0 || day === 6;\n}\n\nfunction buildHolidaySet(holidays?: string[]): Set<string> {\n if (!holidays?.length) {\n return new Set();\n }\n const set = new Set<string>();\n for (const h of holidays) {\n const d = toDateOnly(h);\n if (!isNaN(d.getTime())) {\n set.add(toDateKey(d));\n }\n }\n return set;\n}\n\nfunction isNonBusinessDay(d: Date, holidaySet: Set<string>): boolean {\n if (isWeekend(d)) {\n return true;\n }\n if (holidaySet.size > 0 && holidaySet.has(toDateKey(d))) {\n return true;\n }\n return false;\n}\n\n/**\n * Add business days to a date, always skipping weekends and provided holidays.\n * Negative days subtracts.\n */\nexport function addDays(dateInput: string | Date, days: number, options?: DateCalcOptions): Date {\n const result = toDateOnly(dateInput);\n if (!isFinite(result.getTime())) {\n return result;\n }\n\n const intDays = Math.trunc(days);\n if (intDays === 0) {\n return result;\n }\n if (Math.abs(intDays) > MAX_DATE_CALC_DAYS) {\n return new Date(NaN);\n }\n\n const holidaySet = buildHolidaySet(options?.holidays);\n const direction = intDays > 0 ? 1 : -1;\n let remaining = Math.abs(intDays);\n\n while (remaining > 0) {\n result.setUTCDate(result.getUTCDate() + direction);\n if (!isNonBusinessDay(result, holidaySet)) {\n remaining--;\n }\n }\n\n return result;\n}\n\n/**\n * Count the number of business days between two dates, always skipping weekends and provided holidays.\n * Returns a positive number when `to` is after `from`, negative otherwise.\n */\nexport function dateDiffDays(\n from: string | Date,\n to: string | Date,\n options?: DateCalcOptions,\n): number {\n const start = toDateOnly(from);\n const end = toDateOnly(to);\n\n if (!isFinite(start.getTime()) || !isFinite(end.getTime())) {\n return 0;\n }\n\n const calendarDiff = Math.abs(end.getTime() - start.getTime()) / (24 * 60 * 60 * 1000);\n if (calendarDiff > MAX_DATE_CALC_DAYS * 2) {\n return NaN;\n }\n\n const holidaySet = buildHolidaySet(options?.holidays);\n const direction = end.getTime() >= start.getTime() ? 1 : -1;\n const cursor = new Date(start.getTime());\n let count = 0;\n\n while (toDateKey(cursor) !== toDateKey(end)) {\n cursor.setUTCDate(cursor.getUTCDate() + direction);\n if (!isNonBusinessDay(cursor, holidaySet)) {\n count++;\n }\n }\n\n return count * direction;\n}\n\n/** Format a Date to ISO date string (YYYY-MM-DD). */\nexport function formatDateResult(date: Date): string {\n if (!isFinite(date.getTime())) {\n return '';\n }\n return toDateKey(date);\n}\n\nexport const DEFAULT_DATE_FORMAT = 'MM/DD/YYYY';\n\nconst MONTH_NAMES_FULL = [\n 'January',\n 'February',\n 'March',\n 'April',\n 'May',\n 'June',\n 'July',\n 'August',\n 'September',\n 'October',\n 'November',\n 'December',\n];\n\nconst MONTH_NAMES_SHORT = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\n\n/**\n * Format a Date using a pattern string.\n * Supported tokens: YYYY, YY, MMMM, MMM, MM, M, DD, D.\n * All other characters are treated as literals.\n */\nexport function formatDate(date: Date, pattern?: string): string {\n if (!isFinite(date.getTime())) {\n return '';\n }\n const fmt = pattern ?? DEFAULT_DATE_FORMAT;\n const year = date.getUTCFullYear();\n const month = date.getUTCMonth();\n const day = date.getUTCDate();\n\n return fmt\n .replace(/YYYY/g, String(year))\n .replace(/YY/g, String(year).slice(-2))\n .replace(/MMMM/g, MONTH_NAMES_FULL[month])\n .replace(/MMM/g, MONTH_NAMES_SHORT[month])\n .replace(/MM/g, String(month + 1).padStart(2, '0'))\n .replace(/\\bM\\b/g, String(month + 1))\n .replace(/DD/g, String(day).padStart(2, '0'))\n .replace(/\\bD\\b/g, String(day));\n}\n"],"names":["MAX_DATE_CALC_DAYS","DEFAULT_HOLIDAYS","DATE_RANGE_YEARS","isDateWithinRange","dateInput","Date","d","isFinite","getTime","currentYear","getUTCFullYear","year","toDateOnly","input","setUTCHours","toDateKey","y","m","String","getUTCMonth","padStart","day","getUTCDate","isWeekend","getUTCDay","buildHolidaySet","holidays","length","Set","set","h","isNaN","add","isNonBusinessDay","holidaySet","size","has","addDays","days","options","result","intDays","Math","trunc","abs","NaN","direction","remaining","setUTCDate","dateDiffDays","from","to","start","end","calendarDiff","cursor","count","formatDateResult","date","DEFAULT_DATE_FORMAT","MONTH_NAMES_FULL","MONTH_NAMES_SHORT","formatDate","pattern","fmt","month","replace","slice"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"date-calc.js","sourceRoot":"","sources":["../../src/shared/date-calc.ts"],"names":[],"mappings":"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"}
|