@feedmepos/mf-hrm-portal 2.2.5-dev → 2.2.5-dev.4

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 (160) hide show
  1. package/dist/{ApprovalCodeList-DgcWZ3SZ.js → ApprovalCodeList-D0B_X3Sf.js} +4 -4
  2. package/dist/{AuditLogList-vWKMMGvd.js → AuditLogList-D9anf4YQ.js} +18 -17
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DuhXogXK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-4oENMRO3.js} +2 -2
  4. package/dist/EmployeeList-DREDu3Ou.js +788 -0
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js → FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js} +1 -1
  6. package/dist/{GrantUserList-BAW0C1bA.js → GrantUserList-CLDshEN9.js} +5 -5
  7. package/dist/{Main-Wr6cTqfM.js → Main-DtMaG42L.js} +2 -2
  8. package/dist/{Main-NzpdRNB3.js → Main-QhQxU593.js} +5 -5
  9. package/dist/{Main-B7Nn8CLQ.js → Main-lqlb8tPw.js} +9 -9
  10. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +243 -0
  11. package/dist/{PermissionSetList-D6AFOleD.js → PermissionSetList-BK8yBpJJ.js} +22 -21
  12. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Bzq2_BMn.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-uSdvH81B.js} +924 -923
  13. package/dist/{RoleList-BuqpmXn_.js → RoleList-D6AX6BqB.js} +7 -7
  14. package/dist/ScheduleGeneralPage-DAECTCDu.js +242 -0
  15. package/dist/SchedulePage-CdFR7JuO.js +10751 -0
  16. package/dist/SchedulePositionPage-DTtKg0sx.js +220 -0
  17. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-BiuUrr50.js +199 -0
  18. package/dist/SelectFilter-CG13h83-.js +264 -0
  19. package/dist/TeamMemberList-BM5JoR6J.js +1155 -0
  20. package/dist/{TimesheetList-B5FyVyCz.js → TimesheetList-Ch_f_PD5.js} +54 -53
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C99Jr6Ax.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CxqxqwyD.js} +2 -2
  22. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  23. package/dist/{app-8samJY5z.js → app-tDHL6k4G.js} +3092 -2499
  24. package/dist/app.js +1 -1
  25. package/dist/{dayjs.min-Ba4X_9nY.js → dayjs.min-B_XWc0Hu.js} +1 -1
  26. package/dist/employee-Bs_2vqBY.js +139 -0
  27. package/dist/index-Cz2b95YF.js +70 -0
  28. package/dist/{iteration-Dhdew1jW.js → index-jxRluZiW.js} +698 -726
  29. package/dist/iteration-CcXrOMQe.js +30 -0
  30. package/dist/{lodash-CJ3mHku0.js → lodash-D5vM3paU.js} +1 -1
  31. package/dist/{role-BViYS7RK.js → role-7ccipEEe.js} +4 -3
  32. package/dist/{rule-Dxt1ZSQS.js → rule-7faruCdz.js} +282 -277
  33. package/dist/src/api/schedule/index.d.ts +44 -0
  34. package/dist/src/components/form/OutletRoleAssignment.vue.d.ts +16 -0
  35. package/dist/src/components/layout/AppSidebar.vue.d.ts +2 -0
  36. package/dist/src/components/layout/PortalShell.vue.d.ts +12 -0
  37. package/dist/src/components/layout/withShell.d.ts +14 -0
  38. package/dist/src/helpers/outlet-role-assignment.d.ts +40 -0
  39. package/dist/src/helpers/rule.d.ts +15 -0
  40. package/dist/src/router/shared.d.ts +4 -1
  41. package/dist/src/types/schedule.d.ts +232 -0
  42. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +4 -0
  43. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +4 -0
  44. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +4 -0
  45. package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +6 -0
  46. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +6 -0
  47. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +6 -0
  48. package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +6 -0
  49. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +6 -0
  50. package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +6 -0
  51. package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +6 -0
  52. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
  53. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
  54. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
  57. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
  58. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
  59. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
  60. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
  62. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
  63. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
  64. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
  65. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
  66. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
  67. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
  68. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
  69. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
  70. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +6 -0
  71. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
  72. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
  73. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +6 -0
  74. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
  75. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
  76. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
  77. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
  78. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +24 -0
  79. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
  80. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
  81. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +31 -0
  82. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +6 -0
  83. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
  84. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
  85. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +14 -0
  86. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
  87. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
  88. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
  89. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
  90. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +16 -0
  91. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +54 -0
  92. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
  93. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
  94. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
  95. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +22 -0
  96. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +67 -0
  97. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
  98. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
  99. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
  100. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
  101. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
  102. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +86 -0
  103. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +66 -0
  104. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
  105. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
  106. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
  107. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +113 -0
  108. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +136 -0
  109. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +415 -0
  110. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
  111. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
  112. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +17 -0
  113. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
  114. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
  115. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +82 -0
  116. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +68 -0
  117. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
  118. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +139 -0
  119. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
  120. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +32 -0
  121. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
  122. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
  123. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
  124. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +80 -0
  125. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -0
  126. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
  127. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
  128. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +179 -0
  129. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
  130. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +19 -0
  131. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
  132. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +91 -0
  133. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +18 -0
  134. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +183 -0
  135. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
  136. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
  137. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +225 -0
  138. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +174 -0
  139. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +20 -0
  140. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
  141. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +44 -0
  142. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
  143. package/dist/src/views/scheduling/data.d.ts +105 -0
  144. package/dist/src/views/scheduling/locales/index.d.ts +496 -0
  145. package/dist/src/views/scheduling/schedule-store.d.ts +116 -0
  146. package/dist/src/views/scheduling/types.d.ts +311 -0
  147. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  148. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  149. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +12 -3
  150. package/dist/style.css +1 -1
  151. package/dist/tsconfig.app.tsbuildinfo +1 -1
  152. package/dist/{useReportPermissions-BiyAfGvZ.js → useReportPermissions-FieO4EAD.js} +3 -3
  153. package/dist/useScheduleOutlet-CmIG5dwQ.js +557 -0
  154. package/dist/useSchedulePositions-DPVAgdB2.js +103 -0
  155. package/package.json +1 -1
  156. package/dist/EmployeeList-Cu4RxVQX.js +0 -889
  157. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-BUI0Xsgc.js +0 -85
  158. package/dist/SelectFilter-ATOm0hdn.js +0 -269
  159. package/dist/TeamMemberList-M6HA9BWu.js +0 -1248
  160. package/dist/employee-BcFgm8Rt.js +0 -204
@@ -0,0 +1,415 @@
1
+ import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
2
+ import { RANGE_LEN } from './schedule-week-cache';
3
+ import { contractCapFor, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
+ export { contractCapFor, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
5
+ export { RANGE_LEN };
6
+ export type ScheduleGranularity = 'day' | 'week';
7
+ export declare function useScheduleBoard(handlers?: {
8
+ onPersistError?: (message: string) => void;
9
+ }): {
10
+ dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
11
+ setDayNote: (dayIdx: number, title: string, desc: string) => void;
12
+ clearDayNote: (dayIdx: number) => void;
13
+ toggleClosed: (dayIdx: number) => {
14
+ closed: boolean;
15
+ rostered: number;
16
+ };
17
+ isManuallyClosed: (dayIdx: number) => boolean;
18
+ isStandingClosedWeekday: (dayIdx: number) => boolean;
19
+ holidayName: (dayIdx: number) => string | null;
20
+ holidayIsAuto: (dayIdx: number) => boolean;
21
+ isPublicHoliday: (dayIdx: number) => boolean;
22
+ holidayRateApplies: (dayIdx: number) => boolean;
23
+ setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
24
+ setPublicHoliday: (dayIdx: number, on: boolean) => void;
25
+ otRateOn: (dayIdx: number) => number;
26
+ regularRateOn: (dayIdx: number) => number;
27
+ isHoliday: (dayIdx: number) => boolean;
28
+ employees: import("vue").Ref<{
29
+ id: number;
30
+ name: string;
31
+ role: string;
32
+ initials: string;
33
+ color: string;
34
+ weekHours: number;
35
+ pct: number;
36
+ contractHours?: number | undefined;
37
+ rate: number;
38
+ positions: string[];
39
+ shifts: ({
40
+ start: string;
41
+ end: string;
42
+ role: string;
43
+ status: import("../types").ShiftStatus;
44
+ clock?: {
45
+ in: string | null;
46
+ out: string | null;
47
+ status: "on-time" | "late" | "early-out" | "absent";
48
+ } | undefined;
49
+ conflict?: boolean | undefined;
50
+ conflictReason?: string | undefined;
51
+ openId?: number | undefined;
52
+ breakMins?: number | undefined;
53
+ assignmentId?: string | undefined;
54
+ } | {
55
+ timeOff: "approved" | "pending";
56
+ reason: string;
57
+ half?: boolean | undefined;
58
+ halfPart?: "AM" | "PM" | undefined;
59
+ appliedOn?: string | undefined;
60
+ note?: string | undefined;
61
+ cert?: {
62
+ name: string;
63
+ size: string;
64
+ } | null | undefined;
65
+ bal?: {
66
+ type: string;
67
+ entitled: number;
68
+ used: number;
69
+ } | undefined;
70
+ } | {
71
+ start: string;
72
+ end: string;
73
+ role: string;
74
+ status: import("../types").ShiftStatus;
75
+ clock?: {
76
+ in: string | null;
77
+ out: string | null;
78
+ status: "on-time" | "late" | "early-out" | "absent";
79
+ } | undefined;
80
+ conflict?: boolean | undefined;
81
+ conflictReason?: string | undefined;
82
+ openId?: number | undefined;
83
+ breakMins?: number | undefined;
84
+ assignmentId?: string | undefined;
85
+ }[] | null)[];
86
+ remarks: {
87
+ author: string;
88
+ date: string;
89
+ type: "note" | "warning" | "praise";
90
+ text: string;
91
+ }[];
92
+ section: string;
93
+ compGroup?: string | undefined;
94
+ mobile?: string | undefined;
95
+ dial?: string | undefined;
96
+ locations?: string[] | undefined;
97
+ payBasis?: "hourly" | "monthly" | undefined;
98
+ payAmount?: number | undefined;
99
+ maxHours?: number | undefined;
100
+ maxOtHours?: number | undefined;
101
+ otAfterDaily?: number | undefined;
102
+ preferences?: string[] | undefined;
103
+ seniority?: "senior" | "junior" | "" | undefined;
104
+ availDays?: boolean[] | undefined;
105
+ availHours?: {
106
+ from: string;
107
+ to: string;
108
+ }[] | undefined;
109
+ passcode?: string | undefined;
110
+ masterUser?: boolean | undefined;
111
+ }[], Employee[] | {
112
+ id: number;
113
+ name: string;
114
+ role: string;
115
+ initials: string;
116
+ color: string;
117
+ weekHours: number;
118
+ pct: number;
119
+ contractHours?: number | undefined;
120
+ rate: number;
121
+ positions: string[];
122
+ shifts: ({
123
+ start: string;
124
+ end: string;
125
+ role: string;
126
+ status: import("../types").ShiftStatus;
127
+ clock?: {
128
+ in: string | null;
129
+ out: string | null;
130
+ status: "on-time" | "late" | "early-out" | "absent";
131
+ } | undefined;
132
+ conflict?: boolean | undefined;
133
+ conflictReason?: string | undefined;
134
+ openId?: number | undefined;
135
+ breakMins?: number | undefined;
136
+ assignmentId?: string | undefined;
137
+ } | {
138
+ timeOff: "approved" | "pending";
139
+ reason: string;
140
+ half?: boolean | undefined;
141
+ halfPart?: "AM" | "PM" | undefined;
142
+ appliedOn?: string | undefined;
143
+ note?: string | undefined;
144
+ cert?: {
145
+ name: string;
146
+ size: string;
147
+ } | null | undefined;
148
+ bal?: {
149
+ type: string;
150
+ entitled: number;
151
+ used: number;
152
+ } | undefined;
153
+ } | {
154
+ start: string;
155
+ end: string;
156
+ role: string;
157
+ status: import("../types").ShiftStatus;
158
+ clock?: {
159
+ in: string | null;
160
+ out: string | null;
161
+ status: "on-time" | "late" | "early-out" | "absent";
162
+ } | undefined;
163
+ conflict?: boolean | undefined;
164
+ conflictReason?: string | undefined;
165
+ openId?: number | undefined;
166
+ breakMins?: number | undefined;
167
+ assignmentId?: string | undefined;
168
+ }[] | null)[];
169
+ remarks: {
170
+ author: string;
171
+ date: string;
172
+ type: "note" | "warning" | "praise";
173
+ text: string;
174
+ }[];
175
+ section: string;
176
+ compGroup?: string | undefined;
177
+ mobile?: string | undefined;
178
+ dial?: string | undefined;
179
+ locations?: string[] | undefined;
180
+ payBasis?: "hourly" | "monthly" | undefined;
181
+ payAmount?: number | undefined;
182
+ maxHours?: number | undefined;
183
+ maxOtHours?: number | undefined;
184
+ otAfterDaily?: number | undefined;
185
+ preferences?: string[] | undefined;
186
+ seniority?: "senior" | "junior" | "" | undefined;
187
+ availDays?: boolean[] | undefined;
188
+ availHours?: {
189
+ from: string;
190
+ to: string;
191
+ }[] | undefined;
192
+ passcode?: string | undefined;
193
+ masterUser?: boolean | undefined;
194
+ }[]>;
195
+ sections: import("vue").Ref<{
196
+ id: string;
197
+ label: string;
198
+ roles: string[];
199
+ system?: boolean | undefined;
200
+ }[], Section[] | {
201
+ id: string;
202
+ label: string;
203
+ roles: string[];
204
+ system?: boolean | undefined;
205
+ }[]>;
206
+ openShifts: import("vue").Ref<{
207
+ id: number;
208
+ dayIdx: number;
209
+ position: string;
210
+ required: number;
211
+ filledBy: number | null;
212
+ sen?: "junior" | "senior" | undefined;
213
+ empType?: "full" | "part" | undefined;
214
+ name?: string | undefined;
215
+ start: string;
216
+ end: string;
217
+ breakMins?: number | undefined;
218
+ }[], OpenShift[] | {
219
+ id: number;
220
+ dayIdx: number;
221
+ position: string;
222
+ required: number;
223
+ filledBy: number | null;
224
+ sen?: "junior" | "senior" | undefined;
225
+ empType?: "full" | "part" | undefined;
226
+ name?: string | undefined;
227
+ start: string;
228
+ end: string;
229
+ breakMins?: number | undefined;
230
+ }[]>;
231
+ rangeStart: import("vue").Ref<Date, Date>;
232
+ weekOffset: import("vue").ComputedRef<number>;
233
+ peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
234
+ isRecentlySaved: (empId: number, dayIdx: number) => boolean;
235
+ isWeekLocked: (offset?: number) => boolean;
236
+ dayLocked: (dayIdx: number) => boolean;
237
+ pendingChanges: import("vue").Ref<{
238
+ empId: number;
239
+ dayIdx: number;
240
+ kind: "add" | "change" | "remove";
241
+ label: string;
242
+ }[], PendingChange[] | {
243
+ empId: number;
244
+ dayIdx: number;
245
+ kind: "add" | "change" | "remove";
246
+ label: string;
247
+ }[]>;
248
+ unpublishedChanges: import("vue").ComputedRef<PendingChange[]>;
249
+ persistPublish: (items: Array<{
250
+ empId: number;
251
+ dayIdx: number;
252
+ slot: WorkSlot;
253
+ }>) => Promise<void>;
254
+ recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
255
+ scheduleVersions: import("vue").Ref<{
256
+ v: number;
257
+ at: Date;
258
+ by: string;
259
+ note: string;
260
+ changeCount: number;
261
+ staffAffected: number;
262
+ snapshot: {
263
+ id: number;
264
+ name: string;
265
+ weekHours: number;
266
+ shifts: ({
267
+ start: string;
268
+ end: string;
269
+ role: string;
270
+ status: import("../types").ShiftStatus;
271
+ clock?: {
272
+ in: string | null;
273
+ out: string | null;
274
+ status: "on-time" | "late" | "early-out" | "absent";
275
+ } | undefined;
276
+ conflict?: boolean | undefined;
277
+ conflictReason?: string | undefined;
278
+ openId?: number | undefined;
279
+ breakMins?: number | undefined;
280
+ assignmentId?: string | undefined;
281
+ } | {
282
+ timeOff: "approved" | "pending";
283
+ reason: string;
284
+ half?: boolean | undefined;
285
+ halfPart?: "AM" | "PM" | undefined;
286
+ appliedOn?: string | undefined;
287
+ note?: string | undefined;
288
+ cert?: {
289
+ name: string;
290
+ size: string;
291
+ } | null | undefined;
292
+ bal?: {
293
+ type: string;
294
+ entitled: number;
295
+ used: number;
296
+ } | undefined;
297
+ } | {
298
+ start: string;
299
+ end: string;
300
+ role: string;
301
+ status: import("../types").ShiftStatus;
302
+ clock?: {
303
+ in: string | null;
304
+ out: string | null;
305
+ status: "on-time" | "late" | "early-out" | "absent";
306
+ } | undefined;
307
+ conflict?: boolean | undefined;
308
+ conflictReason?: string | undefined;
309
+ openId?: number | undefined;
310
+ breakMins?: number | undefined;
311
+ assignmentId?: string | undefined;
312
+ }[] | null)[];
313
+ }[];
314
+ }[], ScheduleVersion[] | {
315
+ v: number;
316
+ at: Date;
317
+ by: string;
318
+ note: string;
319
+ changeCount: number;
320
+ staffAffected: number;
321
+ snapshot: {
322
+ id: number;
323
+ name: string;
324
+ weekHours: number;
325
+ shifts: ({
326
+ start: string;
327
+ end: string;
328
+ role: string;
329
+ status: import("../types").ShiftStatus;
330
+ clock?: {
331
+ in: string | null;
332
+ out: string | null;
333
+ status: "on-time" | "late" | "early-out" | "absent";
334
+ } | undefined;
335
+ conflict?: boolean | undefined;
336
+ conflictReason?: string | undefined;
337
+ openId?: number | undefined;
338
+ breakMins?: number | undefined;
339
+ assignmentId?: string | undefined;
340
+ } | {
341
+ timeOff: "approved" | "pending";
342
+ reason: string;
343
+ half?: boolean | undefined;
344
+ halfPart?: "AM" | "PM" | undefined;
345
+ appliedOn?: string | undefined;
346
+ note?: string | undefined;
347
+ cert?: {
348
+ name: string;
349
+ size: string;
350
+ } | null | undefined;
351
+ bal?: {
352
+ type: string;
353
+ entitled: number;
354
+ used: number;
355
+ } | undefined;
356
+ } | {
357
+ start: string;
358
+ end: string;
359
+ role: string;
360
+ status: import("../types").ShiftStatus;
361
+ clock?: {
362
+ in: string | null;
363
+ out: string | null;
364
+ status: "on-time" | "late" | "early-out" | "absent";
365
+ } | undefined;
366
+ conflict?: boolean | undefined;
367
+ conflictReason?: string | undefined;
368
+ openId?: number | undefined;
369
+ breakMins?: number | undefined;
370
+ assignmentId?: string | undefined;
371
+ }[] | null)[];
372
+ }[];
373
+ }[]>;
374
+ lastUpdatedAt: import("vue").Ref<Date | null, Date | null>;
375
+ lastPublishedAt: import("vue").Ref<Date | null, Date | null>;
376
+ pushVersion: (note: string, opts?: Partial<ScheduleVersion>) => ScheduleVersion;
377
+ snapshotSchedule: () => ScheduleVersionSnapshot[];
378
+ scheduleStatus: import("vue").ComputedRef<ScheduleStatusInfo>;
379
+ conflictCount: () => number;
380
+ granularity: import("vue").Ref<ScheduleGranularity, ScheduleGranularity>;
381
+ focusDayIdx: import("vue").Ref<number, number>;
382
+ setGranularity: (value: ScheduleGranularity) => void;
383
+ dayDates: import("vue").ComputedRef<Date[]>;
384
+ dayLabels: import("vue").ComputedRef<string[]>;
385
+ visibleDayIndices: import("vue").ComputedRef<number[]>;
386
+ visibleDays: import("vue").ComputedRef<{
387
+ dayIdx: number;
388
+ date: Date;
389
+ }[]>;
390
+ rangeLabel: import("vue").ComputedRef<string>;
391
+ isToday: (dayIdx: number) => boolean;
392
+ dateKey: (dayIdx: number) => string | null;
393
+ navigate: (delta: number) => void;
394
+ goToday: () => void;
395
+ membersOf: (sectionId: string) => Employee[];
396
+ sectionCost: (sectionId: string, members?: Employee[]) => number;
397
+ totalWeeklyCost: import("vue").ComputedRef<number>;
398
+ employeeById: (id: number) => Employee | undefined;
399
+ commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
400
+ commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
401
+ removeShift: (empId: number, dayIdx: number) => void;
402
+ removeShiftAt: (offset: number, empId: number, dayIdx: number) => void;
403
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number) => boolean;
404
+ swapShifts: (empIdA: number, empIdB: number, dayIdx: number) => boolean;
405
+ clearShiftsInRange: () => {
406
+ shifts: number;
407
+ open: number;
408
+ leave: number;
409
+ };
410
+ requiredFor: (dayIdx: number, position: string) => number;
411
+ scheduledFor: (dayIdx: number, position: string) => number;
412
+ compGroupRate: (name: string | undefined) => number | undefined;
413
+ UNASSIGNED: string;
414
+ };
415
+ export type ScheduleBoardApi = ReturnType<typeof useScheduleBoard>;
@@ -0,0 +1,27 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ /** Column facts shared by the day header and every `.shift-cell` under it.
3
+ *
4
+ * The mockup builds these inline in its cell loop (`cell.className = 'shift-cell' + …`) and
5
+ * again in its header loop, which is exactly how the two drifted: closing a day painted the
6
+ * header and left the cells beneath it clean. One helper, both consumers.
7
+ *
8
+ * Two of the mockup's cell states are deliberately absent here:
9
+ * - `wk-off` — this board has no standing weekly-off pattern to read (same reason
10
+ * `otRateOn()` drops the mockup's rest-day case).
11
+ * - `peek` / `week-start` — the mockup renders a multi-week horizon, so it has columns
12
+ * outside the selected range and interior week boundaries. This board's visible range
13
+ * is exactly one week, so neither can ever fire.
14
+ */
15
+ export declare function isPastDate(date: Date): boolean;
16
+ export declare function isWeekendDate(date: Date): boolean;
17
+ /** Month-edge compares neighbours in the VISIBLE column order, not raw weekday
18
+ * index — a lone Daily-view column has no on-screen neighbour to differ from. */
19
+ export declare function isMonthEdgeAt(board: ScheduleBoardApi, colIndex: number): boolean;
20
+ export interface ScheduleCellState {
21
+ locked: boolean;
22
+ 'closed-day': boolean;
23
+ 'month-edge': boolean;
24
+ past: boolean;
25
+ }
26
+ /** The class object for one grid cell in column `colIndex` (its weekday is `dayIdx`). */
27
+ export declare function cellStateClasses(board: ScheduleBoardApi, dayIdx: number, colIndex: number): ScheduleCellState;
@@ -0,0 +1,18 @@
1
+ export interface ScheduleClashState {
2
+ open: boolean;
3
+ message: string;
4
+ onConfirm: (() => void) | null;
5
+ }
6
+ /** Generic Yes/No conflict-confirmation primitive — the mockup's `askClash`/clashModal,
7
+ * reused across several flows (leave clashes, overlapping shifts, etc). */
8
+ export declare function useScheduleClashDetection(): {
9
+ state: {
10
+ open: boolean;
11
+ message: string;
12
+ onConfirm: (() => void) | null;
13
+ };
14
+ ask: (message: string, onConfirm: () => void) => void;
15
+ confirm: () => void;
16
+ close: () => void;
17
+ };
18
+ export type ScheduleClashDetectionApi = ReturnType<typeof useScheduleClashDetection>;
@@ -0,0 +1,17 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ export interface ScheduleCopySkipReport {
3
+ leave: number;
4
+ already: number;
5
+ hours: number;
6
+ full: number;
7
+ closed: number;
8
+ }
9
+ /** The mockup's Copy schedule feature (copyLastWeek/copyThisWeekForward), ported against this
10
+ * board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. Split
11
+ * shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
12
+ * data model, so each slot is copied as its own unit. */
13
+ export declare function useScheduleCopyWeek(board: ScheduleBoardApi): {
14
+ copyLastWeek: (mode: "staffed" | "open") => void;
15
+ copyThisWeekForward: (mode: "staffed" | "open") => void;
16
+ };
17
+ export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
@@ -0,0 +1,43 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ export declare function slotHours(start: string, end: string): number;
3
+ export interface ScheduleDayCost {
4
+ hours: number;
5
+ otHours: number;
6
+ base: number;
7
+ ot: number;
8
+ total: number;
9
+ }
10
+ export interface SchedulePositionCost {
11
+ position: string;
12
+ base: number;
13
+ ot: number;
14
+ total: number;
15
+ }
16
+ export interface ScheduleSectionCost {
17
+ id: string;
18
+ label: string;
19
+ base: number;
20
+ ot: number;
21
+ total: number;
22
+ rows: SchedulePositionCost[];
23
+ }
24
+ export interface ScheduleOtRisk {
25
+ empId: number;
26
+ name: string;
27
+ hours: number;
28
+ contract: number;
29
+ }
30
+ /** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
31
+ * per-day breakdown so the rail's totals and the stats row's per-day figures can never
32
+ * disagree about what a day cost. */
33
+ export declare function useScheduleCostRail(board: ScheduleBoardApi): {
34
+ collapsed: import("vue").Ref<boolean, boolean>;
35
+ byDay: import("vue").ComputedRef<ScheduleDayCost[]>;
36
+ weeklyCost: import("vue").ComputedRef<number>;
37
+ otHours: import("vue").ComputedRef<number>;
38
+ monthlyOtUsed: import("vue").ComputedRef<number>;
39
+ monthlyOtCapHours: number;
40
+ bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
41
+ otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
42
+ };
43
+ export type ScheduleCostRailApi = ReturnType<typeof useScheduleCostRail>;
@@ -0,0 +1,48 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ export interface ScheduleDayNoteState {
3
+ open: boolean;
4
+ dayIdx: number | null;
5
+ left: number;
6
+ top: number;
7
+ }
8
+ export interface ScheduleDayNoteOptions {
9
+ /** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
10
+ onToast?: (message: string) => void;
11
+ }
12
+ /** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
13
+ * like two different kinds of number. Ported from the mockup's fmtRate(). */
14
+ export declare function fmtRate(rate: number): string;
15
+ /** The date card editor — opened by clicking a day card or its pencil. Everything on it is a
16
+ * fact about the DATE, applying to the whole column: a titled note, whether the venue opens,
17
+ * and whether the day bills at the holiday rate. Ported from the mockup's openDayNote() /
18
+ * saveDayNote() / dnToggleClosed() / dnToggleHoliday().
19
+ *
20
+ * The mockup re-renders the grid on the two toggles and rebuilds the popover from a stashed
21
+ * draft so half-typed text survives; Vue re-renders in place, so the draft just stays in the
22
+ * refs and there is nothing to stash. */
23
+ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: ScheduleDayNoteOptions): {
24
+ state: {
25
+ open: boolean;
26
+ dayIdx: number | null;
27
+ left: number;
28
+ top: number;
29
+ };
30
+ dayIdx: import("vue").ComputedRef<number | null>;
31
+ title: import("vue").Ref<string, string>;
32
+ desc: import("vue").Ref<string, string>;
33
+ savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
34
+ hasSaved: import("vue").ComputedRef<boolean>;
35
+ whenLabel: import("vue").ComputedRef<string>;
36
+ isClosed: import("vue").ComputedRef<boolean>;
37
+ isAuto: import("vue").ComputedRef<boolean>;
38
+ rateApplies: import("vue").ComputedRef<boolean>;
39
+ closedHint: import("vue").ComputedRef<"Nothing is required or rostered on this date." | "The venue does not open — this date only.">;
40
+ holidayHint: import("vue").ComputedRef<string>;
41
+ openFor: (dayIdx: number, anchor: HTMLElement) => void;
42
+ close: () => void;
43
+ toggleClosed: () => void;
44
+ toggleHoliday: () => void;
45
+ save: () => void;
46
+ remove: () => void;
47
+ };
48
+ export type ScheduleDayNoteApi = ReturnType<typeof useScheduleDayNote>;
@@ -0,0 +1,82 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleRosterApi } from './useScheduleRoster';
3
+ import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
4
+ declare function minToHHMM(m: number): string;
5
+ export interface ScheduleTimelineBar {
6
+ key: string;
7
+ left: number;
8
+ width: number;
9
+ cls: string;
10
+ label: string;
11
+ sub?: string;
12
+ title: string;
13
+ brk?: {
14
+ left: number;
15
+ width: number;
16
+ };
17
+ laneTop?: number;
18
+ laneHeight?: number;
19
+ onClick?: () => void;
20
+ }
21
+ export interface ScheduleTimelineRow {
22
+ key: string;
23
+ kind: 'open' | 'employee' | 'position';
24
+ swatchColor?: string;
25
+ swatchClass?: string;
26
+ avatarInitials?: string;
27
+ avatarColor?: string;
28
+ name: string;
29
+ sub: string;
30
+ bars: ScheduleTimelineBar[];
31
+ minHeight?: number;
32
+ emptyText?: string;
33
+ onTrackClick?: () => void;
34
+ }
35
+ export interface ScheduleHourCell {
36
+ m: number;
37
+ clock: string;
38
+ open: boolean;
39
+ state: '' | 'short' | 'met' | 'over';
40
+ barHeightPct: number;
41
+ title: string;
42
+ n: number;
43
+ }
44
+ /** The day's hourly timeline (rows with shift bars placed by time), replacing the multi-day
45
+ * grid for the one day Daily view is looking at. Ported from the mockup's
46
+ * renderDayTimeline() + renderHourFooter() — the `else` (area) branch groups rows by position
47
+ * instead of by employee, reusing the same axis/bar/lane geometry. Auto-Schedule proposal
48
+ * review isn't carried over here; it stays week-view-only for now. */
49
+ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
50
+ onAddShift: (empId: number, dayIdx: number) => void;
51
+ onEditShift: (empId: number, dayIdx: number) => void;
52
+ onEditLeave: (empId: number, dayIdx: number) => void;
53
+ onOpenAssign: (openId: number) => void;
54
+ onAddAreaShift: (dayIdx: number, position: string) => void;
55
+ }): {
56
+ dayIdx: import("vue").ComputedRef<number>;
57
+ axis: import("vue").ComputedRef<{
58
+ from: number;
59
+ to: number;
60
+ span: number;
61
+ }>;
62
+ hours: import("vue").ComputedRef<{
63
+ m: number;
64
+ clock: string;
65
+ }[]>;
66
+ isOpenHour: (m: number) => boolean;
67
+ openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
68
+ employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
69
+ positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
70
+ footer: import("vue").ComputedRef<{
71
+ cells: ScheduleHourCell[];
72
+ staffCount: number;
73
+ totalHours: number;
74
+ totalWages: number;
75
+ peakN: number;
76
+ lowN: number;
77
+ peakAt: number | undefined;
78
+ }>;
79
+ minToHHMM: typeof minToHHMM;
80
+ };
81
+ export type ScheduleDayTimelineApi = ReturnType<typeof useScheduleDayTimeline>;
82
+ export {};