@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.11

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-cG0zmQVJ.js → ApprovalCodeList-Ce9BWzt9.js} +5 -5
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-Cw7WN8K4.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BuofBFPC.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-B8qWPNvj.js} +25 -24
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-CgigJIPF.js} +6 -6
  6. package/dist/{Main-DFwdAWqn.js → Main-BfoVdxlY.js} +8 -8
  7. package/dist/{Main-B2r59IOW.js → Main-Cg2vC_cj.js} +5 -5
  8. package/dist/{Main-DkLBemi7.js → Main-D26pgKy1.js} +11 -11
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-CbtDiF4k.js} +19 -18
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DW1oBTbb.js +4167 -0
  11. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js} +1 -1
  12. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  13. package/dist/{RoleList-DHO4JRKF.js → RoleList-D0I8mbyI.js} +21 -20
  14. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Ctwukt6o.js +492 -0
  15. package/dist/ScheduleGeneralPage-Kv4pnxCL.js +778 -0
  16. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CSA0aaqJ.js +2285 -0
  17. package/dist/SchedulePage-BMWd0bod.js +17942 -0
  18. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-5Xvx6Dk5.js} +66 -65
  19. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Bh7i5l16.js} +24 -23
  20. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-BJKU-hnk.js} +7 -7
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-MMWnb9bj.js} +3 -3
  22. package/dist/{app-CmBSTvaI.js → app-BDJ5qxhF.js} +678 -594
  23. package/dist/app.js +1 -1
  24. package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
  25. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-BWM0vY4w.js} +1 -1
  26. package/dist/{employee-DQcHjoij.js → employee-bBSuAJUr.js} +29 -28
  27. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
  28. package/dist/{iteration-BlavheWG.js → iteration-Dg7VAkAn.js} +1 -1
  29. package/dist/{lodash-QerqayrJ.js → lodash-BknY3p4o.js} +1 -1
  30. package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
  31. package/dist/{role-RM2YLO7n.js → role-BJnJnNd_.js} +2 -2
  32. package/dist/{rule-DjlvYIuP.js → rule-BEuOY7Wf.js} +3 -3
  33. package/dist/src/api/schedule/index.d.ts +8 -1
  34. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  35. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  36. package/dist/src/types/employee.d.ts +1 -0
  37. package/dist/src/types/schedule.d.ts +3 -4
  38. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
  39. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
  42. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  43. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
  44. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  46. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
  47. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  48. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  49. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +2 -1
  50. package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
  51. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  52. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
  53. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  54. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  55. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  56. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  62. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  63. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  64. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
  65. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  66. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  67. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  68. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
  69. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  70. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  71. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  72. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  73. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
  74. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  75. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  76. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  77. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  78. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  79. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  80. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  81. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  82. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
  83. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +35 -21
  84. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  85. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
  86. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  87. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -3
  88. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +52 -11
  89. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  90. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  91. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
  92. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
  93. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
  94. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +26 -5
  95. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
  96. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  97. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
  98. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  99. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  100. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  101. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  102. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
  103. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
  104. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  105. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
  106. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  107. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  108. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +206 -0
  109. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  110. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  111. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +313 -529
  112. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  113. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  114. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  115. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  116. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
  117. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  118. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
  119. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
  120. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
  121. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  122. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +32 -4
  123. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
  124. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +19 -3
  125. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
  126. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  127. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +31 -9
  128. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  129. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  130. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  131. package/dist/src/views/scheduling/data.d.ts +16 -7
  132. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  133. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  134. package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
  135. package/dist/src/views/scheduling/schedule-store.d.ts +30 -6
  136. package/dist/src/views/scheduling/types.d.ts +29 -5
  137. package/dist/style.css +1 -1
  138. package/dist/tsconfig.app.tsbuildinfo +1 -1
  139. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
  140. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  141. package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
  142. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-D8hJ5W0t.js} +3 -3
  143. package/package.json +2 -1
  144. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
  145. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  146. package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
  147. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  148. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  149. package/dist/src/components/layout/withShell.d.ts +0 -14
  150. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  151. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  152. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  153. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  154. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  155. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
  156. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  157. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  158. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  159. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
  160. /package/dist/src/{components/layout/AppSidebar.vue.d.ts → views/scheduling/components/SchedulePublishShareArt.vue.d.ts} +0 -0
@@ -1,4 +1,3 @@
1
- import type { Role } from '@/types/role';
2
1
  import type { Employee } from '../types';
3
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
4
3
  import { type ScheduleAddEmployeeMode, type ScheduleAddEmployeeStep } from './schedule-add-employee-form';
@@ -6,7 +5,9 @@ export type { ScheduleAddEmployeeForm, ScheduleAddEmployeeMode, ScheduleAddEmplo
6
5
  /** Add-employee wizard: a "how do you want to add them" step, then one detail form covering
7
6
  * identity, locations, pay, scheduling caps, availability, positions and POS access — plus
8
7
  * the "select existing POS staff" side dialog the first step can hand off to. */
9
- export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
8
+ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?: {
9
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
10
+ }): {
10
11
  open: import("vue").Ref<boolean, boolean>;
11
12
  selectExistingOpen: import("vue").Ref<boolean, boolean>;
12
13
  step: import("vue").Ref<ScheduleAddEmployeeStep, ScheduleAddEmployeeStep>;
@@ -20,10 +21,11 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
20
21
  payBasis: "hourly" | "monthly";
21
22
  payAmount: string;
22
23
  maxHours: string;
24
+ maxHoursPerDay: string;
23
25
  minHours: string;
24
- otEnabled: boolean;
25
- otAfterDaily: string;
26
- maxOtHours: string;
26
+ workingHoursEnabled: boolean;
27
+ overtimeEnabled: boolean;
28
+ maxHoursPerMonth: string;
27
29
  availDays: boolean[];
28
30
  availHours: {
29
31
  from: string;
@@ -37,7 +39,10 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
37
39
  masterUser: boolean;
38
40
  masterCode: string;
39
41
  posAccessEnabled: boolean;
40
- posRoleId: string;
42
+ posRoles: {
43
+ outlet: string;
44
+ roleId: string;
45
+ }[];
41
46
  };
42
47
  sectionId: import("vue").Ref<string, string>;
43
48
  isEditing: import("vue").ComputedRef<boolean>;
@@ -46,12 +51,14 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
46
51
  secOpen: import("vue").Ref<boolean, boolean>;
47
52
  secondaryOptions: import("vue").ComputedRef<string[]>;
48
53
  isPart: import("vue").ComputedRef<boolean>;
49
- dayLit: (i: number) => boolean;
54
+ dayLit: (index: number) => boolean;
50
55
  avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
51
56
  avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
52
- maxHoursPlaceholder: import("vue").ComputedRef<"Hours per week" | "No cap">;
53
- otAfterDailyPlaceholder: import("vue").ComputedRef<string>;
54
- toggleOt: () => void;
57
+ maxHoursPlaceholder: import("vue").ComputedRef<string>;
58
+ minHoursPlaceholder: import("vue").ComputedRef<string>;
59
+ maxHoursPerDayPlaceholder: import("vue").ComputedRef<string>;
60
+ maxHoursPerMonthPlaceholder: import("vue").ComputedRef<string>;
61
+ toggleOvertime: () => void;
55
62
  payUnit: import("vue").ComputedRef<"/month" | "/hour">;
56
63
  effectiveRate: import("vue").ComputedRef<number>;
57
64
  passcodeValue: import("vue").ComputedRef<string>;
@@ -66,6 +73,7 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
66
73
  payLine: import("vue").ComputedRef<string>;
67
74
  nameError: import("vue").ComputedRef<boolean>;
68
75
  passError: import("vue").ComputedRef<boolean>;
76
+ posRolesError: import("vue").ComputedRef<boolean>;
69
77
  availabilityError: import("vue").ComputedRef<boolean>;
70
78
  saving: import("vue").Ref<boolean, boolean>;
71
79
  saveError: import("vue").Ref<string | null, string | null>;
@@ -73,6 +81,7 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
73
81
  candidatesError: import("vue").Ref<string | null, string | null>;
74
82
  openWizard: (section: string) => void;
75
83
  openEditFor: (emp: Employee) => void;
84
+ confirmClose: () => void;
76
85
  close: () => void;
77
86
  setMode: (m: ScheduleAddEmployeeMode) => void;
78
87
  openSelectExisting: () => void;
@@ -81,21 +90,26 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
81
90
  next: () => void;
82
91
  back: () => void;
83
92
  toggleMulti: (which: "loc" | "sec") => void;
84
- toggleLocation: (loc: string) => void;
85
- removeLocation: (loc: string) => void;
86
- toggleSecondary: (pos: string) => void;
87
- removeSecondary: (pos: string) => void;
88
- setPrimaryPosition: (pos: string) => void;
93
+ toggleLocation: (location: string) => void;
94
+ removeLocation: (location: string) => void;
95
+ toggleSecondary: (position: string) => void;
96
+ removeSecondary: (position: string) => void;
97
+ setPrimaryPosition: (position: string) => void;
89
98
  setPayBasis: (basis: "hourly" | "monthly") => void;
90
- toggleAvailDay: (i: number) => void;
99
+ toggleAvailDay: (index: number) => void;
91
100
  availAll: () => void;
92
- setAvailHour: (i: number, field: "from" | "to", value: string) => void;
93
- copyAvailHourDown: (i: number) => void;
94
- setPasscodeDigit: (i: number, value: string) => void;
101
+ setAvailHour: (index: number, field: "from" | "to", value: string) => void;
102
+ copyAvailHourDown: (index: number) => void;
103
+ setPasscodeDigit: (index: number, value: string) => void;
95
104
  generatePasscode: () => void;
96
105
  togglePosAccess: () => void;
97
- setPosRole: (roleId: string) => void;
98
- posRoleOptions: import("vue").ComputedRef<Role[]>;
106
+ addPosRoleRow: () => void;
107
+ removePosRoleRow: (index: number) => void;
108
+ isCurrentOutletRow: (index: number) => boolean;
109
+ setPosRoleOutlet: (index: number, outlet: string) => void;
110
+ setPosRoleId: (index: number, roleId: string) => void;
111
+ posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
112
+ posRolesHint: import("vue").ComputedRef<"" | "No outlet assigned, so their passcode will not open a till yet." | "The same outlet is listed twice — only the last role on it will apply.">;
99
113
  create: () => Promise<boolean>;
100
114
  };
101
115
  export type ScheduleAddEmployeeApi = ReturnType<typeof useScheduleAddEmployee>;
@@ -37,19 +37,6 @@ export declare function qualifiedFor(emp: Employee, position: string): boolean;
37
37
  export declare function useScheduleAreaBoard(board: ScheduleBoardApi): {
38
38
  positionRows: import("vue").ComputedRef<string[]>;
39
39
  assignedOn: (dayIdx: number, position: string) => ScheduleAssignedSlot[];
40
- unfilledOpenShiftsOn: (dayIdx: number, position: string) => {
41
- id: number;
42
- dayIdx: number;
43
- position: string;
44
- required: number;
45
- filledBy: number | null;
46
- sen?: "junior" | "senior" | undefined;
47
- empType?: "full" | "part" | undefined;
48
- name?: string | undefined;
49
- start: string;
50
- end: string;
51
- breakMins?: number | undefined;
52
- }[];
53
40
  poolFor: (position: string) => Employee[];
54
41
  cellMeta: (dayIdx: number, position: string) => SchedulePositionCellMeta;
55
42
  positionWeekMeta: (position: string) => {
@@ -1,12 +1,6 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
- import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
3
- /** Dragging a person from the staff rail onto a position/day cell — ported from the mockup's
4
- * dropStaffOnCell(), scoped to this board's model (no "unspecialised, so ask what they can
5
- * do" grant flow, no split shifts): dropping fills an existing open shift for that position/day
6
- * if there is one, otherwise opens the shift editor pre-filled with this person, day and
7
- * position so the manager sets the hours. */
8
- export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, areaBoard: ScheduleAreaBoardApi, handlers: {
9
- onFillOpenShift: (openId: number, empId: number) => void;
2
+ /** Dragging a person from the staff rail onto a position/day cell opens a normal assigned shift. */
3
+ export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, handlers: {
10
4
  onCreateShift: (empId: number, dayIdx: number, position: string) => void;
11
5
  onNotQualified: (empName: string, position: string) => void;
12
6
  }): {
@@ -0,0 +1,13 @@
1
+ import type { DaySlot, Employee, WorkSlot } from '../types';
2
+ export interface ScheduleAssignmentMutationOptions {
3
+ dateFor: (offset: number, dayIdx: number) => string | null;
4
+ employeeAt: (offset: number, employeeId: number) => Employee | undefined;
5
+ currentOffset: () => number;
6
+ onPersistError?: (message: string) => void;
7
+ }
8
+ export declare function useScheduleAssignmentMutations(options: ScheduleAssignmentMutationOptions): {
9
+ persistSlot: (empId: number, dayIdx: number, oldSlot: DaySlot, newSlot: WorkSlot | WorkSlot[], dateOverride?: string | null, offset?: number, restoreDaySlot?: DaySlot) => Promise<void>;
10
+ persistRemoval: (oldSlot: DaySlot) => Promise<void>;
11
+ persistMove: (toEmpId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], dateOverride?: string | null) => Promise<void>;
12
+ recoverPersistFailure: (error: unknown, fallback: string) => Promise<void>;
13
+ };
@@ -57,9 +57,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
57
57
  occupied: number;
58
58
  notQualified: number;
59
59
  weeklyCap: number;
60
+ dailyCap: number;
60
61
  rest: number;
61
62
  dayOff: number;
62
- dayCap: number;
63
63
  };
64
64
  }[];
65
65
  metrics: {
@@ -121,9 +121,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
121
121
  occupied: number;
122
122
  notQualified: number;
123
123
  weeklyCap: number;
124
+ dailyCap: number;
124
125
  rest: number;
125
126
  dayOff: number;
126
- dayCap: number;
127
127
  };
128
128
  }[];
129
129
  metrics: {
@@ -185,9 +185,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
185
185
  occupied: number;
186
186
  notQualified: number;
187
187
  weeklyCap: number;
188
+ dailyCap: number;
188
189
  rest: number;
189
190
  dayOff: number;
190
- dayCap: number;
191
191
  };
192
192
  }[];
193
193
  metrics: {
@@ -1,27 +1,26 @@
1
1
  import type { Employee, OpenShift, PendingChange, ScheduleStatusInfo, ScheduleVersion, ScheduleVersionSnapshot, Section, WorkSlot } from '../types';
2
2
  import { RANGE_LEN } from './schedule-week-cache';
3
- import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
- export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
3
+ import { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
+ export { contractCapFor, isGenuineSplitGroup, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, overlapsAnotherSlot, positionKeyOf, workSlotsOf, };
5
5
  export { RANGE_LEN };
6
6
  export type ScheduleGranularity = 'day' | 'week';
7
7
  export declare function useScheduleBoard(handlers?: {
8
8
  onPersistError?: (message: string) => void;
9
9
  }): {
10
10
  dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
11
- setDayNote: (dayIdx: number, title: string, desc: string) => void;
11
+ setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
12
12
  clearDayNote: (dayIdx: number) => void;
13
13
  isStandingClosedWeekday: (dayIdx: number) => boolean;
14
14
  holidayName: (dayIdx: number) => string | null;
15
- holidayIsAuto: (dayIdx: number) => boolean;
16
15
  isPublicHoliday: (dayIdx: number) => boolean;
17
16
  holidayRateApplies: (dayIdx: number) => boolean;
18
- setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
19
17
  setPublicHoliday: (dayIdx: number, on: boolean) => void;
20
18
  otRateOn: (dayIdx: number) => number;
21
19
  regularRateOn: (dayIdx: number) => number;
22
20
  isHoliday: (dayIdx: number) => boolean;
23
21
  employees: import("vue").Ref<{
24
22
  id: number;
23
+ sourceId: string;
25
24
  name: string;
26
25
  employmentType: "FULLTIME" | "PARTTIME";
27
26
  role: string;
@@ -32,10 +31,12 @@ export declare function useScheduleBoard(handlers?: {
32
31
  contractHours?: number | undefined;
33
32
  rate: number;
34
33
  positions: string[];
34
+ archivedPositions?: string[] | undefined;
35
35
  shifts: ({
36
36
  start: string;
37
37
  end: string;
38
38
  role: string;
39
+ positionId?: string | undefined;
39
40
  status: import("../types").ShiftStatus;
40
41
  clock?: {
41
42
  in: string | null;
@@ -57,6 +58,7 @@ export declare function useScheduleBoard(handlers?: {
57
58
  breakPayType: "PAID" | "UNPAID";
58
59
  })[] | undefined;
59
60
  assignmentId?: string | undefined;
61
+ updatedAt?: string | undefined;
60
62
  splitGroupId?: string | undefined;
61
63
  } | {
62
64
  timeOff: "approved" | "pending";
@@ -83,6 +85,7 @@ export declare function useScheduleBoard(handlers?: {
83
85
  start: string;
84
86
  end: string;
85
87
  role: string;
88
+ positionId?: string | undefined;
86
89
  status: import("../types").ShiftStatus;
87
90
  clock?: {
88
91
  in: string | null;
@@ -104,6 +107,7 @@ export declare function useScheduleBoard(handlers?: {
104
107
  breakPayType: "PAID" | "UNPAID";
105
108
  })[] | undefined;
106
109
  assignmentId?: string | undefined;
110
+ updatedAt?: string | undefined;
107
111
  splitGroupId?: string | undefined;
108
112
  }[] | null)[];
109
113
  remarks: {
@@ -120,9 +124,16 @@ export declare function useScheduleBoard(handlers?: {
120
124
  payBasis?: "hourly" | "monthly" | undefined;
121
125
  payAmount?: number | undefined;
122
126
  maxHours?: number | undefined;
123
- maxOtHours?: number | undefined;
124
127
  minHours?: number | undefined;
125
- otAfterDaily?: number | undefined;
128
+ minHoursPerDay?: number | undefined;
129
+ workingHours?: {
130
+ minHoursPerDay: number | null;
131
+ maxHoursPerDay: number | null;
132
+ maxHoursPerWeek: number | null;
133
+ } | undefined;
134
+ overtime?: {
135
+ maxHoursPerMonth: number | null;
136
+ } | undefined;
126
137
  preferences?: string[] | undefined;
127
138
  seniority?: "senior" | "junior" | "" | undefined;
128
139
  availDays?: boolean[] | undefined;
@@ -131,9 +142,11 @@ export declare function useScheduleBoard(handlers?: {
131
142
  to: string;
132
143
  }[] | undefined;
133
144
  passcode?: string | undefined;
145
+ code?: string | undefined;
134
146
  masterUser?: boolean | undefined;
135
147
  }[], Employee[] | {
136
148
  id: number;
149
+ sourceId: string;
137
150
  name: string;
138
151
  employmentType: "FULLTIME" | "PARTTIME";
139
152
  role: string;
@@ -144,10 +157,12 @@ export declare function useScheduleBoard(handlers?: {
144
157
  contractHours?: number | undefined;
145
158
  rate: number;
146
159
  positions: string[];
160
+ archivedPositions?: string[] | undefined;
147
161
  shifts: ({
148
162
  start: string;
149
163
  end: string;
150
164
  role: string;
165
+ positionId?: string | undefined;
151
166
  status: import("../types").ShiftStatus;
152
167
  clock?: {
153
168
  in: string | null;
@@ -169,6 +184,7 @@ export declare function useScheduleBoard(handlers?: {
169
184
  breakPayType: "PAID" | "UNPAID";
170
185
  })[] | undefined;
171
186
  assignmentId?: string | undefined;
187
+ updatedAt?: string | undefined;
172
188
  splitGroupId?: string | undefined;
173
189
  } | {
174
190
  timeOff: "approved" | "pending";
@@ -195,6 +211,7 @@ export declare function useScheduleBoard(handlers?: {
195
211
  start: string;
196
212
  end: string;
197
213
  role: string;
214
+ positionId?: string | undefined;
198
215
  status: import("../types").ShiftStatus;
199
216
  clock?: {
200
217
  in: string | null;
@@ -216,6 +233,7 @@ export declare function useScheduleBoard(handlers?: {
216
233
  breakPayType: "PAID" | "UNPAID";
217
234
  })[] | undefined;
218
235
  assignmentId?: string | undefined;
236
+ updatedAt?: string | undefined;
219
237
  splitGroupId?: string | undefined;
220
238
  }[] | null)[];
221
239
  remarks: {
@@ -232,9 +250,16 @@ export declare function useScheduleBoard(handlers?: {
232
250
  payBasis?: "hourly" | "monthly" | undefined;
233
251
  payAmount?: number | undefined;
234
252
  maxHours?: number | undefined;
235
- maxOtHours?: number | undefined;
236
253
  minHours?: number | undefined;
237
- otAfterDaily?: number | undefined;
254
+ minHoursPerDay?: number | undefined;
255
+ workingHours?: {
256
+ minHoursPerDay: number | null;
257
+ maxHoursPerDay: number | null;
258
+ maxHoursPerWeek: number | null;
259
+ } | undefined;
260
+ overtime?: {
261
+ maxHoursPerMonth: number | null;
262
+ } | undefined;
238
263
  preferences?: string[] | undefined;
239
264
  seniority?: "senior" | "junior" | "" | undefined;
240
265
  availDays?: boolean[] | undefined;
@@ -243,6 +268,7 @@ export declare function useScheduleBoard(handlers?: {
243
268
  to: string;
244
269
  }[] | undefined;
245
270
  passcode?: string | undefined;
271
+ code?: string | undefined;
246
272
  masterUser?: boolean | undefined;
247
273
  }[]>;
248
274
  sections: import("vue").Ref<{
@@ -281,7 +307,6 @@ export declare function useScheduleBoard(handlers?: {
281
307
  end: string;
282
308
  breakMins?: number | undefined;
283
309
  }[]>;
284
- highlightEmpId: import("vue").Ref<number | null, number | null>;
285
310
  rangeStart: import("vue").Ref<Date, Date>;
286
311
  weekOffset: import("vue").ComputedRef<number>;
287
312
  peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
@@ -290,11 +315,13 @@ export declare function useScheduleBoard(handlers?: {
290
315
  dayLocked: (dayIdx: number) => boolean;
291
316
  pendingChanges: import("vue").Ref<{
292
317
  empId: number;
318
+ employeeKey: string;
293
319
  dayIdx: number;
294
320
  kind: "add" | "change" | "remove";
295
321
  label: string;
296
322
  }[], PendingChange[] | {
297
323
  empId: number;
324
+ employeeKey: string;
298
325
  dayIdx: number;
299
326
  kind: "add" | "change" | "remove";
300
327
  label: string;
@@ -304,7 +331,8 @@ export declare function useScheduleBoard(handlers?: {
304
331
  empId: number;
305
332
  dayIdx: number;
306
333
  slot: WorkSlot;
307
- }>) => Promise<void>;
334
+ }>) => Promise<boolean>;
335
+ flushAssignmentWrites: () => Promise<void>;
308
336
  recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
309
337
  scheduleVersions: import("vue").Ref<{
310
338
  v: number;
@@ -321,6 +349,7 @@ export declare function useScheduleBoard(handlers?: {
321
349
  start: string;
322
350
  end: string;
323
351
  role: string;
352
+ positionId?: string | undefined;
324
353
  status: import("../types").ShiftStatus;
325
354
  clock?: {
326
355
  in: string | null;
@@ -342,6 +371,7 @@ export declare function useScheduleBoard(handlers?: {
342
371
  breakPayType: "PAID" | "UNPAID";
343
372
  })[] | undefined;
344
373
  assignmentId?: string | undefined;
374
+ updatedAt?: string | undefined;
345
375
  splitGroupId?: string | undefined;
346
376
  } | {
347
377
  timeOff: "approved" | "pending";
@@ -368,6 +398,7 @@ export declare function useScheduleBoard(handlers?: {
368
398
  start: string;
369
399
  end: string;
370
400
  role: string;
401
+ positionId?: string | undefined;
371
402
  status: import("../types").ShiftStatus;
372
403
  clock?: {
373
404
  in: string | null;
@@ -389,6 +420,7 @@ export declare function useScheduleBoard(handlers?: {
389
420
  breakPayType: "PAID" | "UNPAID";
390
421
  })[] | undefined;
391
422
  assignmentId?: string | undefined;
423
+ updatedAt?: string | undefined;
392
424
  splitGroupId?: string | undefined;
393
425
  }[] | null)[];
394
426
  }[];
@@ -407,6 +439,7 @@ export declare function useScheduleBoard(handlers?: {
407
439
  start: string;
408
440
  end: string;
409
441
  role: string;
442
+ positionId?: string | undefined;
410
443
  status: import("../types").ShiftStatus;
411
444
  clock?: {
412
445
  in: string | null;
@@ -428,6 +461,7 @@ export declare function useScheduleBoard(handlers?: {
428
461
  breakPayType: "PAID" | "UNPAID";
429
462
  })[] | undefined;
430
463
  assignmentId?: string | undefined;
464
+ updatedAt?: string | undefined;
431
465
  splitGroupId?: string | undefined;
432
466
  } | {
433
467
  timeOff: "approved" | "pending";
@@ -454,6 +488,7 @@ export declare function useScheduleBoard(handlers?: {
454
488
  start: string;
455
489
  end: string;
456
490
  role: string;
491
+ positionId?: string | undefined;
457
492
  status: import("../types").ShiftStatus;
458
493
  clock?: {
459
494
  in: string | null;
@@ -475,6 +510,7 @@ export declare function useScheduleBoard(handlers?: {
475
510
  breakPayType: "PAID" | "UNPAID";
476
511
  })[] | undefined;
477
512
  assignmentId?: string | undefined;
513
+ updatedAt?: string | undefined;
478
514
  splitGroupId?: string | undefined;
479
515
  }[] | null)[];
480
516
  }[];
@@ -498,6 +534,7 @@ export declare function useScheduleBoard(handlers?: {
498
534
  rangeLabel: import("vue").ComputedRef<string>;
499
535
  isToday: (dayIdx: number) => boolean;
500
536
  dateKey: (dayIdx: number) => string | null;
537
+ dateKeyAt: (offset: number, dayIdx: number) => string | null;
501
538
  navigate: (delta: number) => void;
502
539
  goToday: () => void;
503
540
  membersOf: (sectionId: string) => Employee[];
@@ -508,6 +545,10 @@ export declare function useScheduleBoard(handlers?: {
508
545
  commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
509
546
  removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
510
547
  removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
548
+ employeeShiftsToClear: (empId: number) => number[];
549
+ clearEmployeeShifts: (empId: number) => {
550
+ shifts: number;
551
+ };
511
552
  moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
512
553
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
513
554
  clearShiftsInRange: () => {
@@ -3,7 +3,9 @@ import type { ScheduleOutletApi } from './useScheduleOutlet';
3
3
  * not the page's draft — to one or more other outlets the manager ticks. Scoped to pay rates
4
4
  * because that is the only outlet-scoped setting this page persists; the mockup's broader
5
5
  * "rules, shifts, coverage and positions" clone lives on pages this one doesn't own. */
6
- export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi): {
6
+ export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi, options?: {
7
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
8
+ }): {
7
9
  open: import("vue").Ref<boolean, boolean>;
8
10
  query: import("vue").Ref<string, string>;
9
11
  selected: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
@@ -1,4 +1,6 @@
1
+ import type { Proposal } from '../types';
1
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
+ import type { ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
2
4
  export declare function slotHours(start: string, end: string): number;
3
5
  export interface ScheduleDayCost {
4
6
  hours: number;
@@ -27,10 +29,13 @@ export interface ScheduleOtRisk {
27
29
  hours: number;
28
30
  contract: number;
29
31
  }
32
+ /** The staff rail consumes the same employee identity/load derivation as the area view. */
33
+ export type ScheduleRailRow = ScheduleEmployeeLoad;
30
34
  /** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
31
35
  * per-day breakdown so the rail's totals and the stats row's per-day figures can never
32
36
  * disagree about what a day cost. */
33
- export declare function useScheduleCostRail(board: ScheduleBoardApi): {
37
+ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?: () => ((empId: number, dayIdx: number) => Proposal | undefined) | undefined): {
38
+ rows: import("vue").ComputedRef<ScheduleEmployeeLoad[]>;
34
39
  collapsed: import("vue").Ref<boolean, boolean>;
35
40
  byDay: import("vue").ComputedRef<ScheduleDayCost[]>;
36
41
  weeklyCost: import("vue").ComputedRef<number>;
@@ -7,7 +7,7 @@ export interface ScheduleDayNoteState {
7
7
  }
8
8
  export interface ScheduleDayNoteOptions {
9
9
  /** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
10
- onToast?: (message: string) => void;
10
+ onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
11
11
  }
12
12
  /** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
13
13
  * like two different kinds of number. Ported from the mockup's fmtRate(). */
@@ -33,7 +33,6 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
33
33
  savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
34
34
  hasSaved: import("vue").ComputedRef<boolean>;
35
35
  whenLabel: import("vue").ComputedRef<string>;
36
- isAuto: import("vue").ComputedRef<boolean>;
37
36
  rateApplies: import("vue").ComputedRef<boolean>;
38
37
  holidayHint: import("vue").ComputedRef<string>;
39
38
  openFor: (dayIdx: number, anchor: HTMLElement) => void;
@@ -51,8 +51,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
51
51
  onAddShift: (empId: number, dayIdx: number) => void;
52
52
  onEditShift: (empId: number, dayIdx: number) => void;
53
53
  onEditLeave: (empId: number, dayIdx: number) => void;
54
- onOpenAssign: (openId: number) => void;
55
- onAddAreaShift: (dayIdx: number, position: string) => void;
56
54
  onOpenDemand: (dayIdx: number) => void;
57
55
  onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
58
56
  onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
@@ -68,7 +66,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
68
66
  clock: string;
69
67
  }[]>;
70
68
  isOpenHour: (m: number) => boolean;
71
- openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
72
69
  employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
73
70
  positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
74
71
  demandRow: import("vue").ComputedRef<{
@@ -1,34 +1,17 @@
1
1
  import type { CoverageSegment, DaySlot, DemandPeriod, Employee, Proposal } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
- export declare function toMin(t: string): number;
4
- export declare function minToHHMM(m: number): string;
5
- /** Minutes from midnight for a start/end pair, with the end pushed past 1440 when it wraps —
6
- * so an overnight stretch stays one interval rather than two that cross zero. */
7
- export declare function spanOf(start: string, end: string): [number, number];
8
- /** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
9
- * middle of one does not. */
10
- export declare function t12(hhmm: string): string;
11
- /** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
12
- export declare function minToShort(m: number): string;
13
- export declare function rangeText(from: number, to: number): string;
14
- export declare function roleTotalOf(p: DemandPeriod): number;
15
- /** The unnamed part of a period's headcount. Derived, never typed — so it cannot disagree with
16
- * the total above it. Negative means the breakdown has overrun that total. */
17
- export declare function anyLeftOf(p: DemandPeriod): number;
18
- export interface ScheduleCoverageAxis {
19
- from: number;
20
- to: number;
21
- }
3
+ import { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin } from './schedule-demand-domain';
4
+ import type { ScheduleCoverageAxis } from './schedule-demand-domain';
5
+ export { anyLeftOf, minToHHMM, minToShort, rangeText, roleTotalOf, spanOf, t12, toMin };
6
+ export type { ScheduleCoverageAxis } from './schedule-demand-domain';
22
7
  /** Staffing demand, and coverage read against it.
23
8
  *
24
9
  * Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
25
10
  * renders one long horizon so a day index identifies a date, but this board pages through
26
- * weeks, and demand put on this Monday must not reappear on every other Monday. So a date's
27
- * own demand is keyed by ISO date, and a standing weekday rule is keyed by weekday index.
11
+ * weeks, and demand put on this Monday must not reappear on every other Monday. Demand is
12
+ * therefore keyed by explicit ISO date.
28
13
  *
29
- * A date's own demand wins over the weekday rule it would otherwise inherit — "every Tuesday
30
- * needs eight" is a standing statement, and "this Tuesday is different" has to be able to
31
- * override it without rewriting the rule. */
14
+ * The weekday fallback remains only as a defensive read path until legacy records are removed. */
32
15
  export declare function useScheduleDemand(board: ScheduleBoardApi): {
33
16
  byDate: Record<string, DemandPeriod[]>;
34
17
  byWeekday: Record<number, DemandPeriod[]>;