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

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 (137) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-SjyWZghY.js} +2 -2
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-aTI3QeO0.js} +3 -3
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang--JTV7non.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-D2Q_2ZE0.js} +4 -4
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-6YXLPuHR.js} +3 -3
  6. package/dist/{Main-DFwdAWqn.js → Main-B-a6F9g8.js} +5 -5
  7. package/dist/{Main-B2r59IOW.js → Main-CFIWlIaC.js} +2 -2
  8. package/dist/{Main-DkLBemi7.js → Main-dSqOeBRJ.js} +9 -9
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DxkaPCMs.js} +5 -5
  10. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DnKckKZ0.js} +1165 -1165
  11. package/dist/{RoleList-DHO4JRKF.js → RoleList-DQZ_w5uM.js} +7 -7
  12. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Dr6QruG6.js +470 -0
  13. package/dist/{ScheduleGeneralPage-WlBM8bxV.js → ScheduleGeneralPage-CvskrXcV.js} +273 -236
  14. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-C4On5sVD.js +2157 -0
  15. package/dist/SchedulePage-CW-K836l.js +18248 -0
  16. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-BGrZBU3g.js} +67 -66
  17. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-BiTHVJwE.js} +6 -6
  18. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CUkYacGW.js} +5 -5
  19. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1Y587O-.js} +2 -2
  20. package/dist/{app-CmBSTvaI.js → app-CAKCDrbJ.js} +657 -577
  21. package/dist/app.js +1 -1
  22. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-CZ8QYRoc.js} +1 -1
  23. package/dist/{employee-DQcHjoij.js → employee-D56eWEFe.js} +28 -27
  24. package/dist/{iteration-BlavheWG.js → iteration-BVJdyLNq.js} +1 -1
  25. package/dist/{lodash-QerqayrJ.js → lodash-BcIRkQPW.js} +1 -1
  26. package/dist/{role-RM2YLO7n.js → role-B-eZDaBX.js} +1 -1
  27. package/dist/{rule-DjlvYIuP.js → rule-D6AIfx8b.js} +2 -2
  28. package/dist/src/api/schedule/index.d.ts +6 -4
  29. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  30. package/dist/src/composables/useMessage.d.ts +2 -8
  31. package/dist/src/types/employee.d.ts +1 -0
  32. package/dist/src/types/schedule.d.ts +1 -1
  33. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +28 -0
  34. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +19 -0
  35. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +38 -0
  36. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  37. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +38 -0
  38. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  39. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +39 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  42. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  43. package/dist/src/views/scheduling/components/{ScheduleOpenShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +10 -3
  44. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  45. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +10 -0
  46. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  47. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  48. package/dist/src/views/scheduling/components/{ScheduleAutoScheduleDetailsModal.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  49. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandFooter.vue.d.ts} +2 -2
  50. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  51. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  52. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  53. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  56. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +7 -1
  57. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  58. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  59. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  60. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -2
  61. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  62. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  63. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +1 -1
  64. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  65. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  66. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  67. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  68. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  69. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  70. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  71. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +23 -0
  72. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +14 -13
  73. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +3 -1
  74. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  75. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +4 -114
  76. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +18 -2
  77. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  78. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  79. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -1
  80. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +4 -19
  81. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +12 -2
  82. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +11 -0
  83. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  84. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -0
  85. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  86. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  87. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  88. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  89. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +25 -0
  90. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +18 -0
  91. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  92. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +3 -6
  93. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  94. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  95. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +187 -0
  96. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  97. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  98. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +64 -487
  99. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  100. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  101. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  102. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  103. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -3
  104. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  105. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +3 -1
  106. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +3 -1
  107. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +7 -1
  108. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  109. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
  110. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +2 -24
  111. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -1
  112. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +62 -0
  113. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  114. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +10 -5
  115. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  116. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  117. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  118. package/dist/src/views/scheduling/data.d.ts +11 -6
  119. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  120. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  121. package/dist/src/views/scheduling/schedule-state.d.ts +134 -110
  122. package/dist/src/views/scheduling/schedule-store.d.ts +6 -5
  123. package/dist/src/views/scheduling/types.d.ts +5 -3
  124. package/dist/style.css +1 -1
  125. package/dist/tsconfig.app.tsbuildinfo +1 -1
  126. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-DHA0jrIr.js} +3 -3
  127. package/package.json +1 -1
  128. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  129. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  130. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  131. package/dist/src/components/layout/AppSidebar.vue.d.ts +0 -2
  132. package/dist/src/components/layout/withShell.d.ts +0 -14
  133. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
  134. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  135. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +0 -33
  136. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  137. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
@@ -1,4 +1,4 @@
1
- import type { FdtoScheduleAutoScheduleObjective, FdtoScheduleAutoSchedulePlanner } from '@/types/schedule';
1
+ import type { FdtoScheduleAutoScheduleObjective } from '@/types/schedule';
2
2
  import type { Proposal } from '../types';
3
3
  import type { ScheduleBoardApi } from './useScheduleBoard';
4
4
  import type { ScheduleDemandApi } from './useScheduleDemand';
@@ -6,7 +6,6 @@ export type ScheduleAutoScheduleStep = 'options' | 'summary';
6
6
  export interface ScheduleAutoScheduleOptions {
7
7
  fillGaps: boolean;
8
8
  objective: FdtoScheduleAutoScheduleObjective;
9
- planner: FdtoScheduleAutoSchedulePlanner;
10
9
  allowOvertime: boolean;
11
10
  /** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
12
11
  * (availability and time off are always respected; patterns and cost ride on the objective). */
@@ -14,54 +13,30 @@ export interface ScheduleAutoScheduleOptions {
14
13
  followPatterns: boolean;
15
14
  costEfficient: boolean;
16
15
  }
17
- /** Backend-powered draft generation and local proposal review — the engine lives in hr-backend;
18
- * this composable only maps its result onto the board and lets a manager review it. Generation
19
- * never writes; accepted proposals use the board's existing assignment persistence path. */
16
+ /** Backend-powered draft generation and local proposal review. Generation never writes;
17
+ * accepted proposals use the board's existing assignment persistence path. */
20
18
  export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
21
19
  wizardOpen: import("vue").Ref<boolean, boolean>;
22
20
  step: import("vue").Ref<ScheduleAutoScheduleStep, ScheduleAutoScheduleStep>;
23
21
  options: {
24
22
  fillGaps: boolean;
25
23
  objective: FdtoScheduleAutoScheduleObjective;
26
- planner: FdtoScheduleAutoSchedulePlanner;
27
24
  allowOvertime: boolean;
28
25
  respectAvailability: boolean;
29
26
  followPatterns: boolean;
30
27
  costEfficient: boolean;
31
28
  };
32
- planners: import("vue").Ref<("GREEDY" | "LLM")[], ("GREEDY" | "LLM")[]>;
33
- plannerChoice: import("vue").ComputedRef<boolean>;
34
29
  generating: import("vue").Ref<boolean, boolean>;
35
30
  generateError: import("vue").Ref<string | null, string | null>;
36
31
  result: import("vue").Ref<{
37
- objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
38
- allowOvertime: boolean;
39
32
  proposals: {
40
33
  date: string;
41
34
  startTime: string;
42
35
  endTime: string;
43
- positionId: string | null;
44
36
  employeeId: string;
45
- employeeName: string;
46
37
  position: string;
47
- reason: string;
48
38
  }[];
49
39
  unfilledCount: number;
50
- unfilledNeeds: {
51
- date: string;
52
- startTime: string;
53
- endTime: string;
54
- position: string | null;
55
- short: number;
56
- excluded: {
57
- occupied: number;
58
- notQualified: number;
59
- weeklyCap: number;
60
- rest: number;
61
- dayOff: number;
62
- dayCap: number;
63
- };
64
- }[];
65
40
  metrics: {
66
41
  minimumCoveragePercent: number;
67
42
  recommendedCoveragePercent: number;
@@ -89,43 +64,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
89
64
  };
90
65
  explanations: string[];
91
66
  solver: string;
92
- week: {
93
- from: string;
94
- to: string;
95
- };
96
- timing: {
97
- totalMs: number;
98
- modelMs: number | null;
99
- };
100
67
  } | null, {
101
- objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
102
- allowOvertime: boolean;
103
68
  proposals: {
104
69
  date: string;
105
70
  startTime: string;
106
71
  endTime: string;
107
- positionId: string | null;
108
72
  employeeId: string;
109
- employeeName: string;
110
73
  position: string;
111
- reason: string;
112
74
  }[];
113
75
  unfilledCount: number;
114
- unfilledNeeds: {
115
- date: string;
116
- startTime: string;
117
- endTime: string;
118
- position: string | null;
119
- short: number;
120
- excluded: {
121
- occupied: number;
122
- notQualified: number;
123
- weeklyCap: number;
124
- rest: number;
125
- dayOff: number;
126
- dayCap: number;
127
- };
128
- }[];
129
76
  metrics: {
130
77
  minimumCoveragePercent: number;
131
78
  recommendedCoveragePercent: number;
@@ -153,43 +100,15 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
153
100
  };
154
101
  explanations: string[];
155
102
  solver: string;
156
- week: {
157
- from: string;
158
- to: string;
159
- };
160
- timing: {
161
- totalMs: number;
162
- modelMs: number | null;
163
- };
164
103
  } | {
165
- objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
166
- allowOvertime: boolean;
167
104
  proposals: {
168
105
  date: string;
169
106
  startTime: string;
170
107
  endTime: string;
171
- positionId: string | null;
172
108
  employeeId: string;
173
- employeeName: string;
174
109
  position: string;
175
- reason: string;
176
110
  }[];
177
111
  unfilledCount: number;
178
- unfilledNeeds: {
179
- date: string;
180
- startTime: string;
181
- endTime: string;
182
- position: string | null;
183
- short: number;
184
- excluded: {
185
- occupied: number;
186
- notQualified: number;
187
- weeklyCap: number;
188
- rest: number;
189
- dayOff: number;
190
- dayCap: number;
191
- };
192
- }[];
193
112
  metrics: {
194
113
  minimumCoveragePercent: number;
195
114
  recommendedCoveragePercent: number;
@@ -217,14 +136,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
217
136
  };
218
137
  explanations: string[];
219
138
  solver: string;
220
- week: {
221
- from: string;
222
- to: string;
223
- };
224
- timing: {
225
- totalMs: number;
226
- modelMs: number | null;
227
- };
228
139
  } | null>;
229
140
  gapCount: import("vue").ComputedRef<number>;
230
141
  hasDemand: import("vue").ComputedRef<boolean>;
@@ -243,7 +154,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
243
154
  start: string;
244
155
  end: string;
245
156
  role: string;
246
- positionId?: string | null | undefined;
247
157
  openId?: number | undefined;
248
158
  status: "pending" | "rejected";
249
159
  weekKey?: string | undefined;
@@ -264,26 +174,6 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
264
174
  toggleReject: (id: number) => void;
265
175
  rejectAll: () => void;
266
176
  exitReview: () => void;
267
- apply: () => Promise<number | null>;
268
- applying: import("vue").Ref<boolean, boolean>;
269
- applyRejections: import("vue").Ref<{
270
- employeeName: string;
271
- day: string;
272
- time: string;
273
- message: string;
274
- }[], {
275
- employeeName: string;
276
- day: string;
277
- time: string;
278
- message: string;
279
- }[] | {
280
- employeeName: string;
281
- day: string;
282
- time: string;
283
- message: string;
284
- }[]>;
285
- applyError: import("vue").Ref<string | null, string | null>;
286
- detailsOpen: import("vue").Ref<boolean, boolean>;
287
- toggleDetails: () => void;
177
+ apply: () => number;
288
178
  };
289
179
  export type ScheduleAutoScheduleApi = ReturnType<typeof useScheduleAutoSchedule>;
@@ -22,6 +22,7 @@ export declare function useScheduleBoard(handlers?: {
22
22
  isHoliday: (dayIdx: number) => boolean;
23
23
  employees: import("vue").Ref<{
24
24
  id: number;
25
+ sourceId: string;
25
26
  name: string;
26
27
  employmentType: "FULLTIME" | "PARTTIME";
27
28
  role: string;
@@ -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";
@@ -104,6 +106,7 @@ export declare function useScheduleBoard(handlers?: {
104
106
  breakPayType: "PAID" | "UNPAID";
105
107
  })[] | undefined;
106
108
  assignmentId?: string | undefined;
109
+ updatedAt?: string | undefined;
107
110
  splitGroupId?: string | undefined;
108
111
  }[] | null)[];
109
112
  remarks: {
@@ -134,6 +137,7 @@ export declare function useScheduleBoard(handlers?: {
134
137
  masterUser?: boolean | undefined;
135
138
  }[], Employee[] | {
136
139
  id: number;
140
+ sourceId: string;
137
141
  name: string;
138
142
  employmentType: "FULLTIME" | "PARTTIME";
139
143
  role: string;
@@ -169,6 +173,7 @@ export declare function useScheduleBoard(handlers?: {
169
173
  breakPayType: "PAID" | "UNPAID";
170
174
  })[] | undefined;
171
175
  assignmentId?: string | undefined;
176
+ updatedAt?: string | undefined;
172
177
  splitGroupId?: string | undefined;
173
178
  } | {
174
179
  timeOff: "approved" | "pending";
@@ -216,6 +221,7 @@ export declare function useScheduleBoard(handlers?: {
216
221
  breakPayType: "PAID" | "UNPAID";
217
222
  })[] | undefined;
218
223
  assignmentId?: string | undefined;
224
+ updatedAt?: string | undefined;
219
225
  splitGroupId?: string | undefined;
220
226
  }[] | null)[];
221
227
  remarks: {
@@ -281,7 +287,6 @@ export declare function useScheduleBoard(handlers?: {
281
287
  end: string;
282
288
  breakMins?: number | undefined;
283
289
  }[]>;
284
- highlightEmpId: import("vue").Ref<number | null, number | null>;
285
290
  rangeStart: import("vue").Ref<Date, Date>;
286
291
  weekOffset: import("vue").ComputedRef<number>;
287
292
  peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
@@ -290,11 +295,13 @@ export declare function useScheduleBoard(handlers?: {
290
295
  dayLocked: (dayIdx: number) => boolean;
291
296
  pendingChanges: import("vue").Ref<{
292
297
  empId: number;
298
+ employeeKey: string;
293
299
  dayIdx: number;
294
300
  kind: "add" | "change" | "remove";
295
301
  label: string;
296
302
  }[], PendingChange[] | {
297
303
  empId: number;
304
+ employeeKey: string;
298
305
  dayIdx: number;
299
306
  kind: "add" | "change" | "remove";
300
307
  label: string;
@@ -304,7 +311,8 @@ export declare function useScheduleBoard(handlers?: {
304
311
  empId: number;
305
312
  dayIdx: number;
306
313
  slot: WorkSlot;
307
- }>) => Promise<void>;
314
+ }>) => Promise<boolean>;
315
+ flushAssignmentWrites: () => Promise<void>;
308
316
  recordChange: (empId: number, dayIdx: number, kind: PendingChange["kind"], label: string) => void;
309
317
  scheduleVersions: import("vue").Ref<{
310
318
  v: number;
@@ -342,6 +350,7 @@ export declare function useScheduleBoard(handlers?: {
342
350
  breakPayType: "PAID" | "UNPAID";
343
351
  })[] | undefined;
344
352
  assignmentId?: string | undefined;
353
+ updatedAt?: string | undefined;
345
354
  splitGroupId?: string | undefined;
346
355
  } | {
347
356
  timeOff: "approved" | "pending";
@@ -389,6 +398,7 @@ export declare function useScheduleBoard(handlers?: {
389
398
  breakPayType: "PAID" | "UNPAID";
390
399
  })[] | undefined;
391
400
  assignmentId?: string | undefined;
401
+ updatedAt?: string | undefined;
392
402
  splitGroupId?: string | undefined;
393
403
  }[] | null)[];
394
404
  }[];
@@ -428,6 +438,7 @@ export declare function useScheduleBoard(handlers?: {
428
438
  breakPayType: "PAID" | "UNPAID";
429
439
  })[] | undefined;
430
440
  assignmentId?: string | undefined;
441
+ updatedAt?: string | undefined;
431
442
  splitGroupId?: string | undefined;
432
443
  } | {
433
444
  timeOff: "approved" | "pending";
@@ -475,6 +486,7 @@ export declare function useScheduleBoard(handlers?: {
475
486
  breakPayType: "PAID" | "UNPAID";
476
487
  })[] | undefined;
477
488
  assignmentId?: string | undefined;
489
+ updatedAt?: string | undefined;
478
490
  splitGroupId?: string | undefined;
479
491
  }[] | null)[];
480
492
  }[];
@@ -508,6 +520,10 @@ export declare function useScheduleBoard(handlers?: {
508
520
  commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
509
521
  removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
510
522
  removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
523
+ employeeShiftsToClear: (empId: number) => number[];
524
+ clearEmployeeShifts: (empId: number) => {
525
+ shifts: number;
526
+ };
511
527
  moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
512
528
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
513
529
  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(). */
@@ -1,24 +1,9 @@
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
@@ -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
@@ -68,7 +68,17 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
68
68
  overlapWarning: import("vue").ComputedRef<string>;
69
69
  whenLabel: import("vue").ComputedRef<string>;
70
70
  openFor: (idx: number) => void;
71
- close: () => void;
71
+ close: (preserveDraft?: boolean) => void;
72
+ hasUnsavedChanges: import("vue").ComputedRef<boolean>;
73
+ diffSummary: import("vue").ComputedRef<{
74
+ changed: number;
75
+ added: number;
76
+ removed: number;
77
+ modified: number;
78
+ }>;
79
+ isPeriodChanged: (index: number) => boolean;
80
+ isPeriodFieldChanged: (index: number, field: "from" | "to" | "n") => boolean;
81
+ revert: () => void;
72
82
  addPeriod: () => void;
73
83
  removePeriod: (i: number) => void;
74
84
  setHeads: (i: number, value: number | string) => void;
@@ -0,0 +1,11 @@
1
+ import type { Role } from '@/types/role';
2
+ import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm): {
4
+ passcodeValue: import("vue").ComputedRef<string>;
5
+ passcodeOk: import("vue").ComputedRef<boolean>;
6
+ setPasscodeDigit: (index: number, value: string) => void;
7
+ generatePasscode: () => void;
8
+ togglePosAccess: () => void;
9
+ setPosRole: (roleId: string) => void;
10
+ posRoleOptions: import("vue").ComputedRef<Role[]>;
11
+ };
@@ -0,0 +1,13 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ export declare function useScheduleEmployeeAvailability(form: ScheduleAddEmployeeForm, isPart: ComputedRef<boolean>): {
4
+ dayLit: (index: number) => boolean;
5
+ avLabel: ComputedRef<"Weekly availability" | "Time off days">;
6
+ avAllLabel: ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
7
+ maxHoursPlaceholder: ComputedRef<"Hours per week" | "No cap">;
8
+ ensureAvailHours: (index: number) => void;
9
+ toggleAvailDay: (index: number) => void;
10
+ availAll: () => void;
11
+ setAvailHour: (index: number, field: "from" | "to", value: string) => void;
12
+ copyAvailHourDown: (index: number) => void;
13
+ };
@@ -0,0 +1,26 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { ScheduleAddEmployeeForm, ScheduleAddEmployeeStep } from './schedule-add-employee-form';
3
+ import type { ScheduleBoardApi } from './useScheduleBoard';
4
+ interface UseScheduleEmployeeCandidatesOptions {
5
+ board: ScheduleBoardApi;
6
+ form: ScheduleAddEmployeeForm;
7
+ currentLocationLabel: ComputedRef<string>;
8
+ step: {
9
+ value: ScheduleAddEmployeeStep;
10
+ };
11
+ open: {
12
+ value: boolean;
13
+ };
14
+ onPicked: (employeeId: string) => void;
15
+ onPrefillPasscode: (employeeId: string) => void;
16
+ }
17
+ /** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
18
+ export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
19
+ selectExistingOpen: import("vue").Ref<boolean, boolean>;
20
+ candidatesLoading: import("vue").Ref<boolean, boolean>;
21
+ candidatesError: import("vue").Ref<string | null, string | null>;
22
+ openSelectExisting: () => void;
23
+ closeSelectExisting: () => void;
24
+ pickExisting: (employeeId: string) => Promise<void>;
25
+ };
26
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
2
+ export declare function useScheduleEmployeeCompensation(form: ScheduleAddEmployeeForm): {
3
+ setPayBasis: (basis: "hourly" | "monthly") => void;
4
+ payUnit: import("vue").ComputedRef<"/month" | "/hour">;
5
+ payAmountNumber: import("vue").ComputedRef<number>;
6
+ effectiveRate: import("vue").ComputedRef<number>;
7
+ };
@@ -0,0 +1,22 @@
1
+ import { type Ref } from 'vue';
2
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ interface UseScheduleEmployeeFormOptions {
4
+ form: ScheduleAddEmployeeForm;
5
+ currentLocationLabel: {
6
+ value: string;
7
+ };
8
+ positions: readonly string[];
9
+ locOpen: Ref<boolean>;
10
+ secOpen: Ref<boolean>;
11
+ }
12
+ /** Field editing for locations and positions in the employee wizard. */
13
+ export declare function useScheduleEmployeeForm(options: UseScheduleEmployeeFormOptions): {
14
+ secondaryOptions: import("vue").ComputedRef<string[]>;
15
+ toggleMulti: (which: "loc" | "sec") => void;
16
+ toggleLocation: (location: string) => void;
17
+ removeLocation: (location: string) => void;
18
+ toggleSecondary: (position: string) => void;
19
+ removeSecondary: (position: string) => void;
20
+ setPrimaryPosition: (position: string) => void;
21
+ };
22
+ export {};
@@ -28,6 +28,15 @@ export interface ScheduleEmployeeLoad {
28
28
  /** The suggested part's width on the bar, as a fraction of contract. With no contract to measure
29
29
  * against it fills the track, so suggested hours still show. */
30
30
  proposedPct: number;
31
+ /** Of `boardPct`, how much is still DRAFT (unpublished) rather than confirmed — drawn as a
32
+ * hatch over the tail of the bar rather than a different colour, same as the grid's own
33
+ * closed-day treatment: the colour still says over/under contract, the hatch just adds
34
+ * "and part of this hasn't gone out to the employee yet" on top of it. */
35
+ draftPct: number;
36
+ /** Of `hours`, how many are on the board but still DRAFT (unpublished) — kept as its own
37
+ * number rather than folded into `hours` so the label can say "published + draft" instead
38
+ * of one merged total that can't tell the employee has actually seen only part of it. */
39
+ draftHours: number;
31
40
  }
32
41
  /** This person's live (not rejected) suggestions in the week on screen. */
33
42
  export declare function proposedSlotsOf(emp: Employee, proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined): Pick<Proposal, 'start' | 'end'>[];
@@ -1,6 +1,6 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleAnchorRect } from './schedule-popover-position';
3
- export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'hl' | 'remove';
3
+ export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'freeall' | 'remove';
4
4
  export interface ScheduleEmployeeMenuState {
5
5
  open: boolean;
6
6
  empId: number | null;
@@ -8,11 +8,13 @@ export interface ScheduleEmployeeMenuState {
8
8
  left: number;
9
9
  top: number;
10
10
  }
11
- /** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, highlight, remove. The actions that need a page-level surface (profile panel,
12
- * edit wizard, confirm dialog) come in as handlers; highlight lives here. */
11
+ /** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, clear shifts, remove.
12
+ * The actions that need a page-level surface (profile panel, edit wizard, confirm dialog) come in
13
+ * as handlers. */
13
14
  export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
14
15
  onProfile: (empId: number) => void;
15
16
  onEdit: (empId: number) => void;
17
+ onClearAllShifts: (empId: number) => void;
16
18
  onRemove: (empId: number) => void;
17
19
  }): {
18
20
  state: {
@@ -28,6 +30,7 @@ export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handler
28
30
  top: number;
29
31
  };
30
32
  employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
33
+ hasShifts: import("vue").ComputedRef<boolean>;
31
34
  openFor: (empId: number, anchor: HTMLElement) => void;
32
35
  close: () => void;
33
36
  go: (action: ScheduleEmployeeMenuAction) => void;
@@ -0,0 +1,25 @@
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ import type { ScheduleBoardApi } from './useScheduleBoard';
4
+ interface UseScheduleEmployeePersistenceOptions {
5
+ form: ScheduleAddEmployeeForm;
6
+ pickedEmployeeId: Ref<string | null>;
7
+ payAmountNumber: ComputedRef<number>;
8
+ saving: Ref<boolean>;
9
+ saveError: Ref<string | null>;
10
+ close: () => void;
11
+ restaurantIdOfLabel: (label: string) => string | undefined;
12
+ board: ScheduleBoardApi;
13
+ editingEmployeeId: Ref<number | null>;
14
+ originalLocations: Ref<string[]>;
15
+ effectiveRate: ComputedRef<number>;
16
+ passcodeValue: ComputedRef<string>;
17
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
18
+ }
19
+ /** Persistence for an existing business employee being added to this schedule. */
20
+ export declare function useScheduleEmployeePersistence(options: UseScheduleEmployeePersistenceOptions): {
21
+ createExisting: (name: string) => Promise<boolean>;
22
+ createNew: (name: string) => Promise<boolean>;
23
+ updateExisting: (name: string) => Promise<boolean>;
24
+ };
25
+ export {};
@@ -0,0 +1,18 @@
1
+ import { type ComputedRef, type Ref } from 'vue';
2
+ import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ interface UseScheduleEmployeeValidationOptions {
4
+ form: ScheduleAddEmployeeForm;
5
+ submitAttempted: Ref<boolean>;
6
+ passcodeOk: ComputedRef<boolean>;
7
+ isNewUser: ComputedRef<boolean>;
8
+ }
9
+ /** Validation guards for the add/edit employee form. Keeping them together makes create and
10
+ * the field-level error indicators consume the same rules. */
11
+ export declare function useScheduleEmployeeValidation(options: UseScheduleEmployeeValidationOptions): {
12
+ nameError: ComputedRef<boolean>;
13
+ passError: ComputedRef<boolean>;
14
+ availabilityOk: ComputedRef<boolean>;
15
+ availabilityError: ComputedRef<boolean>;
16
+ masterCodeError: ComputedRef<boolean>;
17
+ };
18
+ export {};