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

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 (155) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-BLA2rhLB.js} +5 -5
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-DBYdZhZl.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CtCEzPbE.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-CA7DWLmy.js} +6 -6
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-BYnegeEr.js} +6 -6
  6. package/dist/{Main-DFwdAWqn.js → Main-BeXx0hAc.js} +8 -8
  7. package/dist/{Main-B2r59IOW.js → Main-Dh-gZSaa.js} +5 -5
  8. package/dist/{Main-DkLBemi7.js → Main-NDK7LUmm.js} +11 -11
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DDIacDpQ.js} +7 -7
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ONMn3v_f.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/{RoleList-DHO4JRKF.js → RoleList-B30FHIzu.js} +9 -9
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CRRguWTG.js +492 -0
  14. package/dist/ScheduleGeneralPage-8gEeZbFR.js +776 -0
  15. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-TfxTAjO8.js +2252 -0
  16. package/dist/SchedulePage-DQ0VXWWi.js +17832 -0
  17. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-oGIDGneA.js} +66 -65
  18. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Drj6R4Y3.js} +10 -10
  19. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CDQfN5LE.js} +7 -7
  20. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Bx-6hjs7.js} +3 -3
  21. package/dist/{app-CmBSTvaI.js → app-DWe_4-ct.js} +678 -594
  22. package/dist/app.js +1 -1
  23. package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
  24. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-QSwC9dtX.js} +1 -1
  25. package/dist/{employee-DQcHjoij.js → employee-Bb2b3dP6.js} +29 -28
  26. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
  27. package/dist/{iteration-BlavheWG.js → iteration-TDU7bFxZ.js} +1 -1
  28. package/dist/{lodash-QerqayrJ.js → lodash-D3Ns5VMN.js} +1 -1
  29. package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
  30. package/dist/{role-RM2YLO7n.js → role-D57Le_-U.js} +2 -2
  31. package/dist/{rule-DjlvYIuP.js → rule-DzesUEX7.js} +3 -3
  32. package/dist/src/api/schedule/index.d.ts +8 -1
  33. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  34. package/dist/src/types/employee.d.ts +1 -0
  35. package/dist/src/types/schedule.d.ts +3 -4
  36. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
  37. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
  38. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
  39. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
  42. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  43. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  44. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  46. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  47. package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
  48. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  49. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
  50. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  51. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  52. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  53. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  61. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
  62. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  63. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  64. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  65. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
  66. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  67. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  68. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  69. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  70. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
  71. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  72. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  73. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  74. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  75. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  76. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  77. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  78. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  79. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
  80. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +34 -21
  81. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  82. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
  83. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  84. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -0
  85. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +50 -11
  86. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  87. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  88. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
  89. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
  90. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
  91. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +19 -5
  92. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
  93. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  94. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
  95. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  96. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  97. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  98. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  99. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
  100. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
  101. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  102. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
  103. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  104. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  105. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +205 -0
  106. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  107. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  108. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +306 -529
  109. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  110. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  111. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  112. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  113. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
  114. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  115. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
  116. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
  117. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
  118. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  119. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +30 -4
  120. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
  121. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +18 -3
  122. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
  123. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  124. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +25 -8
  125. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  126. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  127. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  128. package/dist/src/views/scheduling/data.d.ts +16 -7
  129. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  130. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  131. package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
  132. package/dist/src/views/scheduling/schedule-store.d.ts +17 -6
  133. package/dist/src/views/scheduling/types.d.ts +27 -5
  134. package/dist/style.css +1 -1
  135. package/dist/tsconfig.app.tsbuildinfo +1 -1
  136. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
  137. package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
  138. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-Cmuead1K.js} +3 -3
  139. package/package.json +2 -1
  140. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
  141. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  142. package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
  143. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  144. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  145. package/dist/src/components/layout/withShell.d.ts +0 -14
  146. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  147. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  148. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  149. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  150. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  151. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
  152. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  153. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  154. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  155. /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>;
@@ -81,21 +89,26 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
81
89
  next: () => void;
82
90
  back: () => void;
83
91
  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;
92
+ toggleLocation: (location: string) => void;
93
+ removeLocation: (location: string) => void;
94
+ toggleSecondary: (position: string) => void;
95
+ removeSecondary: (position: string) => void;
96
+ setPrimaryPosition: (position: string) => void;
89
97
  setPayBasis: (basis: "hourly" | "monthly") => void;
90
- toggleAvailDay: (i: number) => void;
98
+ toggleAvailDay: (index: number) => void;
91
99
  availAll: () => void;
92
- setAvailHour: (i: number, field: "from" | "to", value: string) => void;
93
- copyAvailHourDown: (i: number) => void;
94
- setPasscodeDigit: (i: number, value: string) => void;
100
+ setAvailHour: (index: number, field: "from" | "to", value: string) => void;
101
+ copyAvailHourDown: (index: number) => void;
102
+ setPasscodeDigit: (index: number, value: string) => void;
95
103
  generatePasscode: () => void;
96
104
  togglePosAccess: () => void;
97
- setPosRole: (roleId: string) => void;
98
- posRoleOptions: import("vue").ComputedRef<Role[]>;
105
+ addPosRoleRow: () => void;
106
+ removePosRoleRow: (index: number) => void;
107
+ isCurrentOutletRow: (index: number) => boolean;
108
+ setPosRoleOutlet: (index: number, outlet: string) => void;
109
+ setPosRoleId: (index: number, roleId: string) => void;
110
+ posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
111
+ 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
112
  create: () => Promise<boolean>;
100
113
  };
101
114
  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,6 +57,7 @@ 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
63
  dayCap: number;
@@ -121,6 +122,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
121
122
  occupied: number;
122
123
  notQualified: number;
123
124
  weeklyCap: number;
125
+ dailyCap: number;
124
126
  rest: number;
125
127
  dayOff: number;
126
128
  dayCap: number;
@@ -185,6 +187,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
185
187
  occupied: number;
186
188
  notQualified: number;
187
189
  weeklyCap: number;
190
+ dailyCap: number;
188
191
  rest: number;
189
192
  dayOff: number;
190
193
  dayCap: number;
@@ -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;
@@ -134,6 +145,7 @@ export declare function useScheduleBoard(handlers?: {
134
145
  masterUser?: boolean | undefined;
135
146
  }[], Employee[] | {
136
147
  id: number;
148
+ sourceId: string;
137
149
  name: string;
138
150
  employmentType: "FULLTIME" | "PARTTIME";
139
151
  role: string;
@@ -144,10 +156,12 @@ export declare function useScheduleBoard(handlers?: {
144
156
  contractHours?: number | undefined;
145
157
  rate: number;
146
158
  positions: string[];
159
+ archivedPositions?: string[] | undefined;
147
160
  shifts: ({
148
161
  start: string;
149
162
  end: string;
150
163
  role: string;
164
+ positionId?: string | undefined;
151
165
  status: import("../types").ShiftStatus;
152
166
  clock?: {
153
167
  in: string | null;
@@ -169,6 +183,7 @@ export declare function useScheduleBoard(handlers?: {
169
183
  breakPayType: "PAID" | "UNPAID";
170
184
  })[] | undefined;
171
185
  assignmentId?: string | undefined;
186
+ updatedAt?: string | undefined;
172
187
  splitGroupId?: string | undefined;
173
188
  } | {
174
189
  timeOff: "approved" | "pending";
@@ -195,6 +210,7 @@ export declare function useScheduleBoard(handlers?: {
195
210
  start: string;
196
211
  end: string;
197
212
  role: string;
213
+ positionId?: string | undefined;
198
214
  status: import("../types").ShiftStatus;
199
215
  clock?: {
200
216
  in: string | null;
@@ -216,6 +232,7 @@ export declare function useScheduleBoard(handlers?: {
216
232
  breakPayType: "PAID" | "UNPAID";
217
233
  })[] | undefined;
218
234
  assignmentId?: string | undefined;
235
+ updatedAt?: string | undefined;
219
236
  splitGroupId?: string | undefined;
220
237
  }[] | null)[];
221
238
  remarks: {
@@ -232,9 +249,16 @@ export declare function useScheduleBoard(handlers?: {
232
249
  payBasis?: "hourly" | "monthly" | undefined;
233
250
  payAmount?: number | undefined;
234
251
  maxHours?: number | undefined;
235
- maxOtHours?: number | undefined;
236
252
  minHours?: number | undefined;
237
- otAfterDaily?: number | undefined;
253
+ minHoursPerDay?: number | undefined;
254
+ workingHours?: {
255
+ minHoursPerDay: number | null;
256
+ maxHoursPerDay: number | null;
257
+ maxHoursPerWeek: number | null;
258
+ } | undefined;
259
+ overtime?: {
260
+ maxHoursPerMonth: number | null;
261
+ } | undefined;
238
262
  preferences?: string[] | undefined;
239
263
  seniority?: "senior" | "junior" | "" | undefined;
240
264
  availDays?: boolean[] | undefined;
@@ -281,7 +305,6 @@ export declare function useScheduleBoard(handlers?: {
281
305
  end: string;
282
306
  breakMins?: number | undefined;
283
307
  }[]>;
284
- highlightEmpId: import("vue").Ref<number | null, number | null>;
285
308
  rangeStart: import("vue").Ref<Date, Date>;
286
309
  weekOffset: import("vue").ComputedRef<number>;
287
310
  peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
@@ -290,11 +313,13 @@ export declare function useScheduleBoard(handlers?: {
290
313
  dayLocked: (dayIdx: number) => boolean;
291
314
  pendingChanges: import("vue").Ref<{
292
315
  empId: number;
316
+ employeeKey: string;
293
317
  dayIdx: number;
294
318
  kind: "add" | "change" | "remove";
295
319
  label: string;
296
320
  }[], PendingChange[] | {
297
321
  empId: number;
322
+ employeeKey: string;
298
323
  dayIdx: number;
299
324
  kind: "add" | "change" | "remove";
300
325
  label: string;
@@ -304,7 +329,8 @@ export declare function useScheduleBoard(handlers?: {
304
329
  empId: number;
305
330
  dayIdx: number;
306
331
  slot: WorkSlot;
307
- }>) => Promise<void>;
332
+ }>) => Promise<boolean>;
333
+ flushAssignmentWrites: () => Promise<void>;
308
334
  recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
309
335
  scheduleVersions: import("vue").Ref<{
310
336
  v: number;
@@ -321,6 +347,7 @@ export declare function useScheduleBoard(handlers?: {
321
347
  start: string;
322
348
  end: string;
323
349
  role: string;
350
+ positionId?: string | undefined;
324
351
  status: import("../types").ShiftStatus;
325
352
  clock?: {
326
353
  in: string | null;
@@ -342,6 +369,7 @@ export declare function useScheduleBoard(handlers?: {
342
369
  breakPayType: "PAID" | "UNPAID";
343
370
  })[] | undefined;
344
371
  assignmentId?: string | undefined;
372
+ updatedAt?: string | undefined;
345
373
  splitGroupId?: string | undefined;
346
374
  } | {
347
375
  timeOff: "approved" | "pending";
@@ -368,6 +396,7 @@ export declare function useScheduleBoard(handlers?: {
368
396
  start: string;
369
397
  end: string;
370
398
  role: string;
399
+ positionId?: string | undefined;
371
400
  status: import("../types").ShiftStatus;
372
401
  clock?: {
373
402
  in: string | null;
@@ -389,6 +418,7 @@ export declare function useScheduleBoard(handlers?: {
389
418
  breakPayType: "PAID" | "UNPAID";
390
419
  })[] | undefined;
391
420
  assignmentId?: string | undefined;
421
+ updatedAt?: string | undefined;
392
422
  splitGroupId?: string | undefined;
393
423
  }[] | null)[];
394
424
  }[];
@@ -407,6 +437,7 @@ export declare function useScheduleBoard(handlers?: {
407
437
  start: string;
408
438
  end: string;
409
439
  role: string;
440
+ positionId?: string | undefined;
410
441
  status: import("../types").ShiftStatus;
411
442
  clock?: {
412
443
  in: string | null;
@@ -428,6 +459,7 @@ export declare function useScheduleBoard(handlers?: {
428
459
  breakPayType: "PAID" | "UNPAID";
429
460
  })[] | undefined;
430
461
  assignmentId?: string | undefined;
462
+ updatedAt?: string | undefined;
431
463
  splitGroupId?: string | undefined;
432
464
  } | {
433
465
  timeOff: "approved" | "pending";
@@ -454,6 +486,7 @@ export declare function useScheduleBoard(handlers?: {
454
486
  start: string;
455
487
  end: string;
456
488
  role: string;
489
+ positionId?: string | undefined;
457
490
  status: import("../types").ShiftStatus;
458
491
  clock?: {
459
492
  in: string | null;
@@ -475,6 +508,7 @@ export declare function useScheduleBoard(handlers?: {
475
508
  breakPayType: "PAID" | "UNPAID";
476
509
  })[] | undefined;
477
510
  assignmentId?: string | undefined;
511
+ updatedAt?: string | undefined;
478
512
  splitGroupId?: string | undefined;
479
513
  }[] | null)[];
480
514
  }[];
@@ -498,6 +532,7 @@ export declare function useScheduleBoard(handlers?: {
498
532
  rangeLabel: import("vue").ComputedRef<string>;
499
533
  isToday: (dayIdx: number) => boolean;
500
534
  dateKey: (dayIdx: number) => string | null;
535
+ dateKeyAt: (offset: number, dayIdx: number) => string | null;
501
536
  navigate: (delta: number) => void;
502
537
  goToday: () => void;
503
538
  membersOf: (sectionId: string) => Employee[];
@@ -508,6 +543,10 @@ export declare function useScheduleBoard(handlers?: {
508
543
  commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
509
544
  removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
510
545
  removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
546
+ employeeShiftsToClear: (empId: number) => number[];
547
+ clearEmployeeShifts: (empId: number) => {
548
+ shifts: number;
549
+ };
511
550
  moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
512
551
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
513
552
  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[]>;
@@ -6,7 +6,7 @@ export interface ScheduleDemandSuggestion {
6
6
  periods: DemandPeriod[];
7
7
  }
8
8
  export interface ScheduleDemandSheetOptions {
9
- onToast?: (message: string) => void;
9
+ onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
10
10
  /** Positions the breakdown can name — the same list the shift editor offers. */
11
11
  positionOptions: () => string[];
12
12
  /** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
@@ -14,8 +14,7 @@ export interface ScheduleDemandSheetOptions {
14
14
  onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
15
15
  }
16
16
  /** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
17
- * real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
18
- * property of the statement being made rather than a second screen. */
17
+ * real cancel. Apply scopes are expanded into explicit dates in the visible week. */
19
18
  export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand: ScheduleDemandApi, opts: ScheduleDemandSheetOptions): {
20
19
  open: import("vue").Ref<boolean, boolean>;
21
20
  dayIdx: import("vue").Ref<number | null, number | null>;
@@ -25,6 +24,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
25
24
  n: number;
26
25
  roles?: {
27
26
  position: string;
27
+ positionId?: string | undefined;
28
28
  n: number;
29
29
  }[] | undefined;
30
30
  }[], DemandPeriod[] | {
@@ -33,6 +33,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
33
33
  n: number;
34
34
  roles?: {
35
35
  position: string;
36
+ positionId?: string | undefined;
36
37
  n: number;
37
38
  }[] | undefined;
38
39
  }[]>;
@@ -68,7 +69,17 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
68
69
  overlapWarning: import("vue").ComputedRef<string>;
69
70
  whenLabel: import("vue").ComputedRef<string>;
70
71
  openFor: (idx: number) => void;
71
- close: () => void;
72
+ close: (preserveDraft?: boolean) => void;
73
+ hasUnsavedChanges: import("vue").ComputedRef<boolean>;
74
+ diffSummary: import("vue").ComputedRef<{
75
+ changed: number;
76
+ added: number;
77
+ removed: number;
78
+ modified: number;
79
+ }>;
80
+ isPeriodChanged: (index: number) => boolean;
81
+ isPeriodFieldChanged: (index: number, field: "from" | "to" | "n") => boolean;
82
+ revert: () => void;
72
83
  addPeriod: () => void;
73
84
  removePeriod: (i: number) => void;
74
85
  setHeads: (i: number, value: number | string) => void;
@@ -105,6 +116,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
105
116
  n: number;
106
117
  roles?: {
107
118
  position: string;
119
+ positionId?: string | undefined;
108
120
  n: number;
109
121
  }[] | undefined;
110
122
  }[];
@@ -116,6 +128,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
116
128
  n: number;
117
129
  roles?: {
118
130
  position: string;
131
+ positionId?: string | undefined;
119
132
  n: number;
120
133
  }[] | undefined;
121
134
  }[];
@@ -126,6 +139,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
126
139
  word: string;
127
140
  }[]>;
128
141
  suggest: () => void;
142
+ askRemy: () => Promise<void>;
129
143
  acceptSuggestion: () => void;
130
144
  dismissSuggestion: () => void;
131
145
  canCopy: import("vue").ComputedRef<boolean>;
@@ -140,6 +154,6 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
140
154
  openCopy: () => void;
141
155
  closeCopy: () => void;
142
156
  confirmCopy: () => Promise<void>;
143
- setApply: (k: DemandApplyMode) => DemandApplyMode;
157
+ setApply: (mode: DemandApplyMode) => void;
144
158
  };
145
159
  export type ScheduleDemandSheetApi = ReturnType<typeof useScheduleDemandSheet>;