@feedmepos/mf-hrm-portal 2.3.0-dev.9 → 2.3.1-dev.1

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 (130) hide show
  1. package/dist/{ApprovalCodeList-BDpxEJpC.js → ApprovalCodeList-CDU3yUHy.js} +7 -7
  2. package/dist/AuditLogList-BU11Q5sF.js +1950 -0
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BBK2gl7r.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BjHwyaXu.js} +2 -2
  4. package/dist/{EmployeeList-C8cbVcmY.js → EmployeeList-BqzXg3uA.js} +255 -266
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-Clh43Y-8.js} +6 -6
  6. package/dist/{GrantUserList-zul0_Dlm.js → GrantUserList-Cw8RkFqf.js} +8 -8
  7. package/dist/{Main-Cjo4FMZZ.js → Main-BxcRbcce.js} +5 -5
  8. package/dist/{Main-5TsFTFpc.js → Main-CL-ysWRu.js} +8 -8
  9. package/dist/{Main-DSr9KbjT.js → Main-Dlar77Zq.js} +11 -11
  10. package/dist/{PermissionSetList-CDhiiu37.js → PermissionSetList-_8aBzGy7.js} +19 -18
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DoK944l0.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CNgtAtYH.js} +896 -896
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js} +1 -1
  13. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  14. package/dist/{RoleList-DEbOPQD_.js → RoleList-C3n_zOB3.js} +21 -20
  15. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CnrbCggg.js +544 -0
  16. package/dist/ScheduleGeneralPage-DGHKW_ww.js +811 -0
  17. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-AfTAGsh1.js +2556 -0
  18. package/dist/SchedulePage-UzDPRldO.js +19458 -0
  19. package/dist/SchedulePositionPage-RHETW36P.js +282 -0
  20. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-CeBV_Kug.js} +1 -1
  21. package/dist/{TeamMemberList-DpCGqHCk.js → TeamMemberList-B-qR7VS3.js} +27 -27
  22. package/dist/{TimesheetList-B7HAC5zS.js → TimesheetList-BqRIZBt1.js} +52 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BGD6m5M-.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-oIBUAjtv.js} +3 -3
  24. package/dist/{app-Lh0cqgHy.js → app-DFL6Nv_p.js} +10822 -3893
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-DHsUgc4K.js → approval-code-BXUiojPH.js} +1 -1
  27. package/dist/{dayjs.min-joq4stsa.js → dayjs.min-CH-gVmsz.js} +1 -1
  28. package/dist/{employee-BPmp9c6i.js → employee-3xpIjR6i.js} +51 -47
  29. package/dist/{grant-user-qzKHFTro.js → grant-user-CBJ3gEgW.js} +1 -1
  30. package/dist/{iteration-jvdTHQUx.js → iteration-D6wutq5U.js} +1 -1
  31. package/dist/{lodash-CIAEpr9s.js → lodash-D5kU1nPN.js} +1 -1
  32. package/dist/object-Dwyg2LgX.js +16 -0
  33. package/dist/{restaurant-BbYRA_IT.js → restaurant-D2mfKHaH.js} +44 -45
  34. package/dist/{role-Dd1TUMhn.js → role-B7nu6hH1.js} +2 -2
  35. package/dist/{rule-DmxI7qEY.js → rule-CMd6SL3n.js} +3 -3
  36. package/dist/src/api/audit-log/index.d.ts +4 -0
  37. package/dist/src/api/employee/index.d.ts +2 -2
  38. package/dist/src/api/schedule/index.d.ts +11 -1
  39. package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
  40. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  41. package/dist/src/stores/employee.d.ts +12 -12
  42. package/dist/src/types/schedule.d.ts +1 -1
  43. package/dist/src/views/audit-log/constants.d.ts +9 -30
  44. package/dist/src/views/audit-log/locales/index.d.ts +488 -0
  45. package/dist/src/views/audit-log/pos-row.d.ts +27 -0
  46. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +6 -2
  47. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
  48. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +2 -0
  49. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
  50. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -0
  51. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
  52. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
  53. package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
  54. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -3
  55. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
  56. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
  59. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +7 -5
  60. package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +2 -0
  61. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  62. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +4 -2
  63. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +1 -1
  64. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
  65. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +10 -0
  66. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +5 -0
  67. package/dist/src/views/scheduling/composables/schedule-currency.d.ts +22 -0
  68. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  69. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  70. package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
  71. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +1 -1
  72. package/dist/src/views/scheduling/composables/schedule-leave-split.d.ts +9 -0
  73. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +23 -0
  74. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
  75. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +3 -1
  76. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +1 -0
  77. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +30 -7
  78. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +5 -11
  79. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -1
  80. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +22 -13
  81. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +58 -7
  82. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
  83. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  84. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
  85. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -2
  86. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +9 -2
  87. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  88. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  89. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +2 -2
  90. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -4
  91. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +1 -1
  92. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +3 -0
  93. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  94. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +1 -0
  95. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +13 -12
  96. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
  97. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +28 -2
  98. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +210 -14
  99. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
  100. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
  101. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
  102. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +13 -0
  103. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +6 -0
  104. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -1
  105. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +46 -0
  106. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +1 -1
  107. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  108. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +29 -1
  109. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +33 -4
  110. package/dist/src/views/scheduling/country-rules/index.d.ts +13 -4
  111. package/dist/src/views/scheduling/data.d.ts +17 -0
  112. package/dist/src/views/scheduling/locales/index.d.ts +6300 -0
  113. package/dist/src/views/scheduling/schedule-state.d.ts +236 -236
  114. package/dist/src/views/scheduling/schedule-store.d.ts +29 -7
  115. package/dist/src/views/scheduling/types.d.ts +8 -0
  116. package/dist/style.css +1 -1
  117. package/dist/tsconfig.app.tsbuildinfo +1 -1
  118. package/dist/{useAppStore-BoLkvkE2.js → useAppStore-DZCdxlCd.js} +1 -1
  119. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  120. package/dist/{useLoading-Ch1AUYT1.js → useLoading-Nygx2zn8.js} +1 -1
  121. package/dist/{useReportPermissions-DM3GOFCC.js → useReportPermissions-BcxIKxlF.js} +3 -3
  122. package/package.json +2 -2
  123. package/dist/AuditLogList-Dgwj1gz8.js +0 -1779
  124. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Cx9jFgBS.js +0 -492
  125. package/dist/ScheduleGeneralPage-B8PWNsc2.js +0 -776
  126. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-V1sZ_xhO.js +0 -2253
  127. package/dist/SchedulePage-ndLByVBl.js +0 -17785
  128. package/dist/SchedulePositionPage-Cuv4ydOK.js +0 -264
  129. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  130. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
@@ -101,6 +101,28 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
101
101
  updatedAt?: string | undefined;
102
102
  splitGroupId?: string | undefined;
103
103
  }[] | null)[];
104
+ timeOff?: ({
105
+ timeOff: "approved" | "pending";
106
+ requestId?: string | undefined;
107
+ type?: "OFF_DAY" | "LEAVE" | undefined;
108
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
109
+ reason: string;
110
+ half?: boolean | undefined;
111
+ halfPart?: "AM" | "PM" | undefined;
112
+ from?: string | undefined;
113
+ to?: string | undefined;
114
+ appliedOn?: string | undefined;
115
+ note?: string | undefined;
116
+ cert?: {
117
+ name: string;
118
+ size: string;
119
+ } | null | undefined;
120
+ bal?: {
121
+ type: string;
122
+ entitled: number;
123
+ used: number;
124
+ } | undefined;
125
+ } | null)[] | undefined;
104
126
  remarks: {
105
127
  author: string;
106
128
  date: string;
@@ -133,6 +155,7 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
133
155
  to: string;
134
156
  }[] | undefined;
135
157
  passcode?: string | undefined;
158
+ code?: string | undefined;
136
159
  masterUser?: boolean | undefined;
137
160
  };
138
161
  row: TeamRow;
@@ -147,17 +170,17 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
147
170
  end: string;
148
171
  }[]>;
149
172
  rawEmployee: (empId: number) => {
173
+ minHoursPerDay?: number | null | undefined;
150
174
  overtime?: {
151
175
  maxHoursPerMonth: number | null;
152
176
  } | undefined;
153
- minHoursPerDay?: number | null | undefined;
154
177
  workingHours?: {
155
178
  minHoursPerDay: number | null;
156
179
  maxHoursPerDay: number | null;
157
180
  maxHoursPerWeek: number | null;
158
181
  } | undefined;
159
- name: string;
160
182
  employeeId: string;
183
+ name: string;
161
184
  employmentType: "FULLTIME" | "PARTTIME";
162
185
  wage: {
163
186
  type: "HOURLY" | "MONTHLY";
@@ -180,7 +203,10 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
180
203
  seedEmployees: (missingOnly?: boolean) => void;
181
204
  pickAll: (checked: boolean) => void;
182
205
  setPosition: (empId: number, value: string) => void;
206
+ removePositionFromRows: (position: string) => void;
207
+ toggleSecond: (empId: number, position: string) => void;
183
208
  setEmployment: (empId: number, kind: TeamEmployment) => void;
209
+ maxHoursFor: (employment: TeamEmployment) => number | null;
184
210
  setHours: (empId: number, value: string) => void;
185
211
  setRate: (empId: number, value: string) => void;
186
212
  bulkOpen: import("vue").Ref<boolean, boolean>;
@@ -1,7 +1,8 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleAddEmployeeApi } from './useScheduleAddEmployee';
3
3
  import type { IntroRecapRow, ReviewRow, ScheduleOnboardingStep } from './onboarding-types';
4
- export declare const STEP_LABELS: Record<ScheduleOnboardingStep, string>;
4
+ /** i18n keys for each step's label — translate at render with `t(STEP_LABEL_KEYS[step])`. */
5
+ export declare const STEP_LABEL_KEYS: Record<ScheduleOnboardingStep, string>;
5
6
  export { MAX_OPERATIONAL_SESSIONS } from './useScheduleOnboardingHours';
6
7
  /** Steps that can be passed over without answering — the footer shows "Skip for now" on these. */
7
8
  /** "Set up scheduling", step by step — V6.2's six-step flow. Positions, staffing demand and the
@@ -12,14 +13,12 @@ export { MAX_OPERATIONAL_SESSIONS } from './useScheduleOnboardingHours';
12
13
  export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, addEmployee: ScheduleAddEmployeeApi, onDemandChanged?: () => void | Promise<void>): {
13
14
  board: {
14
15
  dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
15
- setDayNote: (dayIdx: number, title: string, desc: string) => void;
16
+ setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
16
17
  clearDayNote: (dayIdx: number) => void;
17
18
  isStandingClosedWeekday: (dayIdx: number) => boolean;
18
19
  holidayName: (dayIdx: number) => string | null;
19
- holidayIsAuto: (dayIdx: number) => boolean;
20
20
  isPublicHoliday: (dayIdx: number) => boolean;
21
21
  holidayRateApplies: (dayIdx: number) => boolean;
22
- setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
23
22
  setPublicHoliday: (dayIdx: number, on: boolean) => void;
24
23
  otRateOn: (dayIdx: number) => number;
25
24
  regularRateOn: (dayIdx: number) => number;
@@ -116,6 +115,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
116
115
  updatedAt?: string | undefined;
117
116
  splitGroupId?: string | undefined;
118
117
  }[] | null)[];
118
+ timeOff?: ({
119
+ timeOff: "approved" | "pending";
120
+ requestId?: string | undefined;
121
+ type?: "OFF_DAY" | "LEAVE" | undefined;
122
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
123
+ reason: string;
124
+ half?: boolean | undefined;
125
+ halfPart?: "AM" | "PM" | undefined;
126
+ from?: string | undefined;
127
+ to?: string | undefined;
128
+ appliedOn?: string | undefined;
129
+ note?: string | undefined;
130
+ cert?: {
131
+ name: string;
132
+ size: string;
133
+ } | null | undefined;
134
+ bal?: {
135
+ type: string;
136
+ entitled: number;
137
+ used: number;
138
+ } | undefined;
139
+ } | null)[] | undefined;
119
140
  remarks: {
120
141
  author: string;
121
142
  date: string;
@@ -148,6 +169,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
148
169
  to: string;
149
170
  }[] | undefined;
150
171
  passcode?: string | undefined;
172
+ code?: string | undefined;
151
173
  masterUser?: boolean | undefined;
152
174
  }[], import("../types").Employee[] | {
153
175
  id: number;
@@ -241,6 +263,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
241
263
  updatedAt?: string | undefined;
242
264
  splitGroupId?: string | undefined;
243
265
  }[] | null)[];
266
+ timeOff?: ({
267
+ timeOff: "approved" | "pending";
268
+ requestId?: string | undefined;
269
+ type?: "OFF_DAY" | "LEAVE" | undefined;
270
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
271
+ reason: string;
272
+ half?: boolean | undefined;
273
+ halfPart?: "AM" | "PM" | undefined;
274
+ from?: string | undefined;
275
+ to?: string | undefined;
276
+ appliedOn?: string | undefined;
277
+ note?: string | undefined;
278
+ cert?: {
279
+ name: string;
280
+ size: string;
281
+ } | null | undefined;
282
+ bal?: {
283
+ type: string;
284
+ entitled: number;
285
+ used: number;
286
+ } | undefined;
287
+ } | null)[] | undefined;
244
288
  remarks: {
245
289
  author: string;
246
290
  date: string;
@@ -273,6 +317,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
273
317
  to: string;
274
318
  }[] | undefined;
275
319
  passcode?: string | undefined;
320
+ code?: string | undefined;
276
321
  masterUser?: boolean | undefined;
277
322
  }[]>;
278
323
  sections: import("vue").Ref<{
@@ -323,12 +368,14 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
323
368
  dayIdx: number;
324
369
  kind: "add" | "change" | "remove";
325
370
  label: string;
371
+ conflict?: boolean | undefined;
326
372
  }[], import("../types").PendingChange[] | {
327
373
  empId: number;
328
374
  employeeKey: string;
329
375
  dayIdx: number;
330
376
  kind: "add" | "change" | "remove";
331
377
  label: string;
378
+ conflict?: boolean | undefined;
332
379
  }[]>;
333
380
  unpublishedChanges: import("vue").ComputedRef<import("../types").PendingChange[]>;
334
381
  persistPublish: (items: Array<{
@@ -553,12 +600,17 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
553
600
  clearEmployeeShifts: (empId: number) => {
554
601
  shifts: number;
555
602
  };
556
- moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
603
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string, allowLocked?: boolean) => boolean;
557
604
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
558
- clearShiftsInRange: () => {
605
+ swapPositions: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
606
+ clearShiftsInRange: (options?: {
607
+ persist?: boolean;
608
+ mutate?: boolean;
609
+ }) => {
559
610
  shifts: number;
560
611
  open: number;
561
612
  leave: number;
613
+ assignmentIds: string[];
562
614
  };
563
615
  requiredFor: (dayIdx: number, position: string) => number;
564
616
  scheduledFor: (dayIdx: number, position: string) => number;
@@ -583,6 +635,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
583
635
  id: string;
584
636
  name: string;
585
637
  }[]>;
638
+ pendingCreates: string[];
639
+ pendingDeletes: Set<string>;
586
640
  count: import("vue").ComputedRef<number>;
587
641
  isAdding: import("vue").Ref<boolean, boolean>;
588
642
  newName: import("vue").Ref<string, string>;
@@ -596,6 +650,9 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
596
650
  askDelete: (id: string) => void;
597
651
  cancelDelete: () => void;
598
652
  confirmDelete: (id: string) => Promise<void>;
653
+ commitCreates: () => Promise<void>;
654
+ commitDeletes: () => Promise<void>;
655
+ discardPending: () => void;
599
656
  };
600
657
  steps: ScheduleOnboardingStep[];
601
658
  isSkippable: import("vue").ComputedRef<boolean>;
@@ -643,8 +700,29 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
643
700
  removeRole: (index: number, roleIndex: number) => void;
644
701
  namedTotal: (range: import("./onboarding-types").ScheduleOnboardingRange) => number;
645
702
  copyDay: (mode: "all" | "wk" | "we") => void;
703
+ settings: {
704
+ payRate: {
705
+ NORMAL: {
706
+ overtime: number;
707
+ };
708
+ REST_DAY: {
709
+ regular: number;
710
+ overtime: number;
711
+ };
712
+ PUBLIC_HOLIDAY: {
713
+ regular: number;
714
+ overtime: number;
715
+ };
716
+ };
717
+ otCapHours: number | null;
718
+ workingHours: {
719
+ minHoursPerDay: number | null;
720
+ maxHoursPerDay: number | null;
721
+ maxHoursPerWeek: number | null;
722
+ };
723
+ };
646
724
  addPositionNamed: (name?: string) => void;
647
- removePosition: (id: string) => void;
725
+ removePosition: (id: string) => Promise<void>;
648
726
  reviewRows: import("vue").ComputedRef<ReviewRow[]>;
649
727
  goTo: (target: ScheduleOnboardingStep) => void;
650
728
  avail: Record<number, import("./onboarding-types").AvailRow>;
@@ -782,6 +860,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
782
860
  updatedAt?: string | undefined;
783
861
  splitGroupId?: string | undefined;
784
862
  }[] | null)[];
863
+ timeOff?: ({
864
+ timeOff: "approved" | "pending";
865
+ requestId?: string | undefined;
866
+ type?: "OFF_DAY" | "LEAVE" | undefined;
867
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
868
+ reason: string;
869
+ half?: boolean | undefined;
870
+ halfPart?: "AM" | "PM" | undefined;
871
+ from?: string | undefined;
872
+ to?: string | undefined;
873
+ appliedOn?: string | undefined;
874
+ note?: string | undefined;
875
+ cert?: {
876
+ name: string;
877
+ size: string;
878
+ } | null | undefined;
879
+ bal?: {
880
+ type: string;
881
+ entitled: number;
882
+ used: number;
883
+ } | undefined;
884
+ } | null)[] | undefined;
785
885
  remarks: {
786
886
  author: string;
787
887
  date: string;
@@ -814,6 +914,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
814
914
  to: string;
815
915
  }[] | undefined;
816
916
  passcode?: string | undefined;
917
+ code?: string | undefined;
817
918
  masterUser?: boolean | undefined;
818
919
  };
819
920
  row: import("./onboarding-types").TeamRow;
@@ -823,7 +924,10 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
823
924
  teamSomePicked: import("vue").ComputedRef<boolean>;
824
925
  pickAll: (checked: boolean) => void;
825
926
  setPosition: (empId: number, value: string) => void;
927
+ removePositionFromRows: (position: string) => void;
928
+ toggleSecond: (empId: number, position: string) => void;
826
929
  setEmployment: (empId: number, kind: import("./onboarding-types").TeamEmployment) => void;
930
+ maxHoursFor: (employment: import("./onboarding-types").TeamEmployment) => number | null;
827
931
  setHours: (empId: number, value: string) => void;
828
932
  setRate: (empId: number, value: string) => void;
829
933
  bulkOpen: import("vue").Ref<boolean, boolean>;
@@ -933,6 +1037,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
933
1037
  updatedAt?: string | undefined;
934
1038
  splitGroupId?: string | undefined;
935
1039
  }[] | null)[];
1040
+ timeOff?: ({
1041
+ timeOff: "approved" | "pending";
1042
+ requestId?: string | undefined;
1043
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1044
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1045
+ reason: string;
1046
+ half?: boolean | undefined;
1047
+ halfPart?: "AM" | "PM" | undefined;
1048
+ from?: string | undefined;
1049
+ to?: string | undefined;
1050
+ appliedOn?: string | undefined;
1051
+ note?: string | undefined;
1052
+ cert?: {
1053
+ name: string;
1054
+ size: string;
1055
+ } | null | undefined;
1056
+ bal?: {
1057
+ type: string;
1058
+ entitled: number;
1059
+ used: number;
1060
+ } | undefined;
1061
+ } | null)[] | undefined;
936
1062
  remarks: {
937
1063
  author: string;
938
1064
  date: string;
@@ -965,6 +1091,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
965
1091
  to: string;
966
1092
  }[] | undefined;
967
1093
  passcode?: string | undefined;
1094
+ code?: string | undefined;
968
1095
  masterUser?: boolean | undefined;
969
1096
  }[];
970
1097
  candidatesFor: (key: string) => {
@@ -1059,6 +1186,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1059
1186
  updatedAt?: string | undefined;
1060
1187
  splitGroupId?: string | undefined;
1061
1188
  }[] | null)[];
1189
+ timeOff?: ({
1190
+ timeOff: "approved" | "pending";
1191
+ requestId?: string | undefined;
1192
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1193
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1194
+ reason: string;
1195
+ half?: boolean | undefined;
1196
+ halfPart?: "AM" | "PM" | undefined;
1197
+ from?: string | undefined;
1198
+ to?: string | undefined;
1199
+ appliedOn?: string | undefined;
1200
+ note?: string | undefined;
1201
+ cert?: {
1202
+ name: string;
1203
+ size: string;
1204
+ } | null | undefined;
1205
+ bal?: {
1206
+ type: string;
1207
+ entitled: number;
1208
+ used: number;
1209
+ } | undefined;
1210
+ } | null)[] | undefined;
1062
1211
  remarks: {
1063
1212
  author: string;
1064
1213
  date: string;
@@ -1091,6 +1240,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1091
1240
  to: string;
1092
1241
  }[] | undefined;
1093
1242
  passcode?: string | undefined;
1243
+ code?: string | undefined;
1094
1244
  masterUser?: boolean | undefined;
1095
1245
  }[];
1096
1246
  posPicker: import("vue").Ref<string | null, string | null>;
@@ -1189,6 +1339,28 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1189
1339
  updatedAt?: string | undefined;
1190
1340
  splitGroupId?: string | undefined;
1191
1341
  }[] | null)[];
1342
+ timeOff?: ({
1343
+ timeOff: "approved" | "pending";
1344
+ requestId?: string | undefined;
1345
+ type?: "OFF_DAY" | "LEAVE" | undefined;
1346
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
1347
+ reason: string;
1348
+ half?: boolean | undefined;
1349
+ halfPart?: "AM" | "PM" | undefined;
1350
+ from?: string | undefined;
1351
+ to?: string | undefined;
1352
+ appliedOn?: string | undefined;
1353
+ note?: string | undefined;
1354
+ cert?: {
1355
+ name: string;
1356
+ size: string;
1357
+ } | null | undefined;
1358
+ bal?: {
1359
+ type: string;
1360
+ entitled: number;
1361
+ used: number;
1362
+ } | undefined;
1363
+ } | null)[] | undefined;
1192
1364
  remarks: {
1193
1365
  author: string;
1194
1366
  date: string;
@@ -1221,6 +1393,7 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1221
1393
  to: string;
1222
1394
  }[] | undefined;
1223
1395
  passcode?: string | undefined;
1396
+ code?: string | undefined;
1224
1397
  masterUser?: boolean | undefined;
1225
1398
  }[]>;
1226
1399
  pickerAllChecked: import("vue").ComputedRef<boolean>;
@@ -1278,22 +1451,21 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1278
1451
  secondaryOptions: import("vue").ComputedRef<string[]>;
1279
1452
  isPart: import("vue").ComputedRef<boolean>;
1280
1453
  dayLit: (index: number) => boolean;
1281
- avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
1282
- avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
1454
+ avLabel: import("vue").ComputedRef<string>;
1455
+ avAllLabel: import("vue").ComputedRef<string>;
1283
1456
  maxHoursPlaceholder: import("vue").ComputedRef<string>;
1284
1457
  minHoursPlaceholder: import("vue").ComputedRef<string>;
1285
1458
  maxHoursPerDayPlaceholder: import("vue").ComputedRef<string>;
1286
1459
  maxHoursPerMonthPlaceholder: import("vue").ComputedRef<string>;
1287
1460
  toggleOvertime: () => void;
1288
- payUnit: import("vue").ComputedRef<"/month" | "/hour">;
1461
+ payUnit: import("vue").ComputedRef<string>;
1289
1462
  effectiveRate: import("vue").ComputedRef<number>;
1290
1463
  passcodeValue: import("vue").ComputedRef<string>;
1291
1464
  passcodeOk: import("vue").ComputedRef<boolean>;
1292
1465
  currentLocationLabel: import("vue").ComputedRef<string>;
1293
1466
  locationOptions: import("vue").Reactive<string[]>;
1294
- masterCodeError: import("vue").ComputedRef<boolean>;
1295
1467
  isNewUser: import("vue").ComputedRef<boolean>;
1296
- footerHint: import("vue").ComputedRef<"Pick who — this outlet's own pay, position and hours are still set here." | "One short form. Rest days are set on their profile afterwards.">;
1468
+ footerHint: import("vue").ComputedRef<string>;
1297
1469
  primaryRoleLabel: import("vue").ComputedRef<string>;
1298
1470
  locationsSummary: import("vue").ComputedRef<string>;
1299
1471
  payLine: import("vue").ComputedRef<string>;
@@ -1303,10 +1475,30 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1303
1475
  availabilityError: import("vue").ComputedRef<boolean>;
1304
1476
  saving: import("vue").Ref<boolean, boolean>;
1305
1477
  saveError: import("vue").Ref<string | null, string | null>;
1478
+ deferScheduleWrites: import("vue").Ref<boolean, boolean>;
1306
1479
  candidatesLoading: import("vue").Ref<boolean, boolean>;
1307
1480
  candidatesError: import("vue").Ref<string | null, string | null>;
1481
+ selectingExisting: import("vue").Ref<boolean, boolean>;
1482
+ candidates: import("vue").Ref<{
1483
+ employeeId: string;
1484
+ name: string;
1485
+ otherOutlets: string[];
1486
+ locations: string[];
1487
+ }[], import("../types").ExistingStaffCandidate[] | {
1488
+ employeeId: string;
1489
+ name: string;
1490
+ otherOutlets: string[];
1491
+ locations: string[];
1492
+ }[]>;
1493
+ candidatesTotal: import("vue").Ref<number, number>;
1494
+ candidatesPage: import("vue").Ref<number, number>;
1495
+ candidatesPageItemCount: import("vue").Ref<number, number>;
1496
+ candidatesPageSize: number;
1497
+ searchExisting: (search: string) => void;
1498
+ goToExistingPage: (page: number, search: string) => void;
1308
1499
  openWizard: (section: string) => void;
1309
1500
  openEditFor: (emp: import("../types").Employee) => void;
1501
+ confirmClose: () => void;
1310
1502
  close: () => void;
1311
1503
  setMode: (m: import("./schedule-add-employee-form").ScheduleAddEmployeeMode) => void;
1312
1504
  openSelectExisting: () => void;
@@ -1326,7 +1518,8 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1326
1518
  setAvailHour: (index: number, field: "from" | "to", value: string) => void;
1327
1519
  copyAvailHourDown: (index: number) => void;
1328
1520
  setPasscodeDigit: (index: number, value: string) => void;
1329
- generatePasscode: () => void;
1521
+ generatePasscode: () => Promise<void>;
1522
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
1330
1523
  togglePosAccess: () => void;
1331
1524
  addPosRoleRow: () => void;
1332
1525
  removePosRoleRow: (index: number) => void;
@@ -1334,7 +1527,10 @@ export declare function useScheduleOnboardingWizard(board: ScheduleBoardApi, add
1334
1527
  setPosRoleOutlet: (index: number, outlet: string) => void;
1335
1528
  setPosRoleId: (index: number, roleId: string) => void;
1336
1529
  posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
1337
- 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.">;
1530
+ isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
1531
+ setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
1532
+ isPosOutletUsable: (outlet: string) => boolean;
1533
+ posRolesHint: import("vue").ComputedRef<string>;
1338
1534
  create: () => Promise<boolean>;
1339
1535
  };
1340
1536
  openWizard: () => void;
@@ -1,16 +1,18 @@
1
1
  import type { ScheduleSelectOption } from '../components/ScheduleSelect.vue';
2
2
  /** Which outlet the board is scheduling, and the picker that changes it.
3
3
  *
4
- * On entry the host shell's own selection wins — mf-common keeps `currentRestaurant` in sync
5
- * with the `?restaurantId=` in the URL, so arriving from anywhere else in the portal lands on
6
- * the outlet that was already being looked at. Only when the shell has no opinion does this
7
- * fall back to the first outlet in the business, which is better than an empty board.
4
+ * On entry the outlet last picked in the schedule wins, remembered per business in localStorage.
5
+ * The host shell (mf-common) resets its own `currentRestaurant` to the first manageable outlet
6
+ * and rewrites `?restaurantId=` on every reload, so neither the URL nor the shell's selection
7
+ * can carry the user's pick across a refresh. Only when nothing was ever picked here does the
8
+ * shell's selection decide, so arriving from elsewhere in the portal lands on the outlet that
9
+ * was already being looked at. Failing that it falls back to the first outlet in the business,
10
+ * which is better than an empty board. The picker offers only restaurants the user can manage.
8
11
  *
9
- * Switching from the picker writes the new id back into `?restaurantId=` too — via
10
- * `router.replace`, not a navigation, so it does not reload the page or add a history entry.
12
+ * Switching from the picker saves the pick and writes the new id back into `?restaurantId=` too,
13
+ * via `router.replace`, not a navigation, so it does not reload the page or add a history entry.
11
14
  * The picker already re-fetches everything the new outlet needs (see switchTo below); this just
12
- * keeps the address bar honest about which one is on screen, so a refresh or a copied link lands
13
- * back on it instead of silently snapping to whatever the shell had before. */
15
+ * keeps the address bar honest about which one is on screen. */
14
16
  export declare function useScheduleOutlet(): {
15
17
  options: import("vue").ComputedRef<ScheduleSelectOption[]>;
16
18
  ready: import("vue").Ref<boolean, boolean>;
@@ -18,5 +20,6 @@ export declare function useScheduleOutlet(): {
18
20
  resolve: () => Promise<string>;
19
21
  resolveOutlet: () => Promise<string>;
20
22
  switchTo: (restaurantId: string, weekStart: Date) => Promise<boolean>;
23
+ setBeforeSwitch: (handler: (restaurantId: string) => boolean | Promise<boolean>) => void;
21
24
  };
22
25
  export type ScheduleOutletApi = ReturnType<typeof useScheduleOutlet>;
@@ -11,7 +11,7 @@ export declare function useSchedulePageActions(options: UseSchedulePageActionsOp
11
11
  comingSoon: () => void;
12
12
  onSchedStatusClick: () => void;
13
13
  onApplyProposals: (count: number) => void;
14
- onApplyAndPublishProposals: (count: number) => void;
14
+ onApplyAndPublishProposals: (count: number) => Promise<void>;
15
15
  onProposalDragStart: (id: number, event: DragEvent) => void;
16
16
  onScroll: (delta: number) => void;
17
17
  };
@@ -13,6 +13,8 @@ interface UseSchedulePageCellDropOptions {
13
13
  notify: (message: string, type: 'error') => void;
14
14
  }
15
15
  export declare function useSchedulePageCellDrop(options: UseSchedulePageCellDropOptions): {
16
- onCellDrop: (empId: number, dayIdx: number, event: DragEvent) => void;
16
+ onCellDrop: (empId: number, dayIdx: number, event: DragEvent, targetSlotIndex?: number, kind?: "employee" | "position") => void;
17
+ confirmPositionSwap: (toEmpId: number, toDayIdx: number, onConfirm: () => void) => void;
18
+ confirmPositionDrop: (targetDayIdx: number, onConfirm: () => void) => void;
17
19
  };
18
20
  export {};
@@ -6,6 +6,13 @@ export declare const CLEAR_COPY: Record<ClearKind, {
6
6
  message: string;
7
7
  confirm: string;
8
8
  }>;
9
+ /** i18n keys behind each confirm dialog — `CLEAR_COPY` above is the English fallback kept for
10
+ * existing callers; prefer the translated `clearCopy` the composable returns. */
11
+ export declare const CLEAR_COPY_KEYS: Record<ClearKind, {
12
+ title: string;
13
+ message: string;
14
+ confirm: string;
15
+ }>;
9
16
  type Snackbar = {
10
17
  open: (options: {
11
18
  message: string;
@@ -14,6 +21,12 @@ type Snackbar = {
14
21
  };
15
22
  export declare function useSchedulePageClearActions(board: ScheduleBoardApi, demand: ScheduleDemandApi, snackbar: Snackbar): {
16
23
  clearKind: import("vue").Ref<ClearKind | null, ClearKind | null>;
24
+ clearCopy: import("vue").ComputedRef<{
25
+ title: string;
26
+ message: string;
27
+ confirm: string;
28
+ } | null>;
29
+ clearing: import("vue").Ref<boolean, boolean>;
17
30
  onConfirmClear: () => Promise<void>;
18
31
  };
19
32
  export type SchedulePageClearActionsApi = ReturnType<typeof useSchedulePageClearActions>;
@@ -4,6 +4,7 @@ export interface SchedulePositionRow {
4
4
  }
5
5
  export declare function useSchedulePositions(options?: {
6
6
  notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
7
+ deferWrites?: boolean;
7
8
  }): {
8
9
  positions: import("vue").Ref<{
9
10
  id: string;
@@ -12,6 +13,8 @@ export declare function useSchedulePositions(options?: {
12
13
  id: string;
13
14
  name: string;
14
15
  }[]>;
16
+ pendingCreates: string[];
17
+ pendingDeletes: Set<string>;
15
18
  count: import("vue").ComputedRef<number>;
16
19
  isAdding: import("vue").Ref<boolean, boolean>;
17
20
  newName: import("vue").Ref<string, string>;
@@ -25,5 +28,8 @@ export declare function useSchedulePositions(options?: {
25
28
  askDelete: (id: string) => void;
26
29
  cancelDelete: () => void;
27
30
  confirmDelete: (id: string) => Promise<void>;
31
+ commitCreates: () => Promise<void>;
32
+ commitDeletes: () => Promise<void>;
33
+ discardPending: () => void;
28
34
  };
29
35
  export type SchedulePositionsApi = ReturnType<typeof useSchedulePositions>;
@@ -22,6 +22,7 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
22
22
  close: () => void;
23
23
  conflicts: import("vue").ComputedRef<number>;
24
24
  confirmDisabled: import("vue").ComputedRef<boolean>;
25
+ publishing: import("vue").Ref<boolean, boolean>;
25
26
  visibleVersions: import("vue").ComputedRef<{
26
27
  v: number;
27
28
  at: Date;
@@ -117,10 +118,10 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
117
118
  toggleVersionDiff: (v: number) => void;
118
119
  diffFor: (version: ScheduleVersion) => VersionDiffRow[];
119
120
  confirm: () => Promise<void>;
120
- restoreVersion: (v: number) => void;
121
121
  shareOpen: import("vue").Ref<boolean, boolean>;
122
122
  shareVersion: import("vue").Ref<number | null, number | null>;
123
123
  shareStaffAffected: import("vue").Ref<number, number>;
124
+ showShareCompletion: (changeCount: number, staffAffected: number) => void;
124
125
  closeShare: () => void;
125
126
  };
126
127
  export type SchedulePublishApi = ReturnType<typeof useSchedulePublish>;