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

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 (116) hide show
  1. package/dist/{ApprovalCodeList-D5l9vIsE.js → ApprovalCodeList-cG0zmQVJ.js} +5 -5
  2. package/dist/{AuditLogList-ByTa5UJY.js → AuditLogList-BTifJhO1.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js} +2 -2
  4. package/dist/{EmployeeList-Bv6ANk-P.js → EmployeeList-DzcMtxJ3.js} +6 -6
  5. package/dist/{GrantUserList-Bt8w3p4j.js → GrantUserList-D5b7tJ8Y.js} +6 -6
  6. package/dist/{Main-DqiGpT4v.js → Main-B2r59IOW.js} +5 -5
  7. package/dist/{Main-DHJcgePj.js → Main-DFwdAWqn.js} +8 -8
  8. package/dist/{Main-DkP8dWgn.js → Main-DkLBemi7.js} +11 -11
  9. package/dist/{PermissionSetList-BIGv1u67.js → PermissionSetList-B80hrfMW.js} +7 -7
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +4167 -0
  11. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js} +1 -1
  12. package/dist/{RoleList-CH6NDKPU.js → RoleList-DHO4JRKF.js} +9 -9
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +452 -0
  14. package/dist/ScheduleGeneralPage-WlBM8bxV.js +629 -0
  15. package/dist/SchedulePage-Nm0krGVU.js +17056 -0
  16. package/dist/SchedulePositionPage-C0hrO11d.js +263 -0
  17. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +1150 -0
  18. package/dist/{TeamMemberList-BwfG3go2.js → TeamMemberList-CgFWLRBM.js} +10 -10
  19. package/dist/{TimesheetList-DcoqzbLO.js → TimesheetList-Dp40G-0I.js} +7 -7
  20. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js} +3 -3
  21. package/dist/{app-BcZ6C8M8.js → app-CmBSTvaI.js} +851 -739
  22. package/dist/app.js +1 -1
  23. package/dist/{approval-code-jIjkeVEb.js → approval-code-C9DmR4Md.js} +1 -1
  24. package/dist/{dayjs.min-Ch0iysTG.js → dayjs.min-CfL2DQ3d.js} +1 -1
  25. package/dist/{employee-DwYHFacQ.js → employee-DQcHjoij.js} +4 -4
  26. package/dist/{grant-user-SNiDV22U.js → grant-user-Bv-pJ9Wt.js} +1 -1
  27. package/dist/{iteration-D1uWLp0V.js → iteration-BlavheWG.js} +1 -1
  28. package/dist/{lodash-DErxm7xf.js → lodash-QerqayrJ.js} +1 -1
  29. package/dist/{restaurant-BTpBmfBV.js → restaurant-D7PEQjPY.js} +257 -251
  30. package/dist/{role-B9VanAny.js → role-RM2YLO7n.js} +2 -2
  31. package/dist/{rule-C4f_Ilzr.js → rule-DjlvYIuP.js} +3 -3
  32. package/dist/src/api/restaurant/index.d.ts +2 -0
  33. package/dist/src/api/schedule/index.d.ts +12 -2
  34. package/dist/src/composables/useMessage.d.ts +8 -2
  35. package/dist/src/types/schedule.d.ts +10 -218
  36. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +2 -0
  37. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +11 -0
  38. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDetailsModal.vue.d.ts +6 -0
  39. package/dist/src/views/scheduling/components/ScheduleCloneOutletModal.vue.d.ts +6 -0
  40. package/dist/src/views/scheduling/components/{ScheduleLegendBar.vue.d.ts → ScheduleCoach.vue.d.ts} +2 -2
  41. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +9 -1
  42. package/dist/src/views/scheduling/components/ScheduleCostRailEmptyArt.vue.d.ts +2 -0
  43. package/dist/src/views/scheduling/components/ScheduleExportDoneDialog.vue.d.ts +6 -0
  44. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -2
  45. package/dist/src/views/scheduling/components/ScheduleOnboardingComplete.vue.d.ts +10 -0
  46. package/dist/src/views/scheduling/components/ScheduleOnboardingDoneArt.vue.d.ts +2 -0
  47. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +1 -2
  48. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +2 -2
  49. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +6 -6
  50. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +2 -0
  51. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -2
  52. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +6 -6
  53. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +6 -0
  54. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +33 -0
  55. package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +5 -0
  56. package/dist/src/views/scheduling/composables/onboarding-hours.d.ts +7 -0
  57. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +50 -0
  58. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +8 -2
  59. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +22 -1
  60. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +3 -0
  61. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +2 -8
  62. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +12 -0
  63. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +11 -8
  64. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +10 -2
  65. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +13 -0
  66. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +158 -12
  67. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +110 -13
  68. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +11 -1
  69. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +19 -0
  70. package/dist/src/views/scheduling/composables/useScheduleCoach.d.ts +80 -0
  71. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -3
  72. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +24 -1
  73. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +4 -2
  74. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +33 -1
  75. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +17 -0
  76. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +1 -3
  77. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -31
  78. package/dist/src/views/scheduling/composables/useScheduleOnboardingFlow.d.ts +9 -0
  79. package/dist/src/views/scheduling/composables/useScheduleOnboardingPersistence.d.ts +13 -0
  80. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +327 -75
  81. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +5 -3
  82. package/dist/src/views/scheduling/composables/useSchedulePageBootstrap.d.ts +9 -0
  83. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +20 -0
  84. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +18 -0
  85. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +2 -0
  86. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -5
  87. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +25 -0
  88. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +53 -1
  89. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -4
  90. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +8 -9
  91. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +63 -92
  92. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +30 -2
  93. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +5 -11
  94. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -1
  95. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +4 -4
  96. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +93 -0
  97. package/dist/src/views/scheduling/data.d.ts +6 -19
  98. package/dist/src/views/scheduling/locales/index.d.ts +116 -4
  99. package/dist/src/views/scheduling/schedule-state.d.ts +679 -0
  100. package/dist/src/views/scheduling/schedule-store.d.ts +16 -60
  101. package/dist/src/views/scheduling/types.d.ts +29 -2
  102. package/dist/style.css +1 -1
  103. package/dist/tsconfig.app.tsbuildinfo +1 -1
  104. package/dist/{useAppStore-DCwd8GWN.js → useAppStore-d_nHyK5u.js} +1 -1
  105. package/dist/{useLoading-CXzTpIVv.js → useLoading-JFoghhRz.js} +1 -1
  106. package/dist/{useReportPermissions-CTr56kBo.js → useReportPermissions-Bl6Br79r.js} +3 -3
  107. package/package.json +3 -2
  108. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js +0 -4167
  109. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +0 -426
  110. package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +0 -690
  111. package/dist/ScheduleGeneralPage-DJPENJZ2.js +0 -320
  112. package/dist/SchedulePage-C1egcbIC.js +0 -14421
  113. package/dist/SchedulePositionPage-OhL_hsqG.js +0 -293
  114. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +0 -242
  115. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +0 -21
  116. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
@@ -1,7 +1,7 @@
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, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf } from './schedule-board-helpers';
4
- export { contractCapFor, isLeaveSlot, isPartTime, isoDateKey, isWorkSlot, overContract, positionKeyOf, workSlotsOf, };
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, };
5
5
  export { RANGE_LEN };
6
6
  export type ScheduleGranularity = 'day' | 'week';
7
7
  export declare function useScheduleBoard(handlers?: {
@@ -10,11 +10,6 @@ export declare function useScheduleBoard(handlers?: {
10
10
  dayNote: (dayIdx: number) => import("../types").ScheduleDayNote | null;
11
11
  setDayNote: (dayIdx: number, title: string, desc: string) => void;
12
12
  clearDayNote: (dayIdx: number) => void;
13
- toggleClosed: (dayIdx: number) => {
14
- closed: boolean;
15
- rostered: number;
16
- };
17
- isManuallyClosed: (dayIdx: number) => boolean;
18
13
  isStandingClosedWeekday: (dayIdx: number) => boolean;
19
14
  holidayName: (dayIdx: number) => string | null;
20
15
  holidayIsAuto: (dayIdx: number) => boolean;
@@ -28,6 +23,7 @@ export declare function useScheduleBoard(handlers?: {
28
23
  employees: import("vue").Ref<{
29
24
  id: number;
30
25
  name: string;
26
+ employmentType: "FULLTIME" | "PARTTIME";
31
27
  role: string;
32
28
  initials: string;
33
29
  color: string;
@@ -50,9 +46,23 @@ export declare function useScheduleBoard(handlers?: {
50
46
  conflictReason?: string | undefined;
51
47
  openId?: number | undefined;
52
48
  breakMins?: number | undefined;
49
+ breaks?: ({
50
+ type: "DURATION";
51
+ minutes: number;
52
+ breakPayType: "PAID" | "UNPAID";
53
+ } | {
54
+ type: "TIME_RANGE";
55
+ startTime: string;
56
+ endTime: string;
57
+ breakPayType: "PAID" | "UNPAID";
58
+ })[] | undefined;
53
59
  assignmentId?: string | undefined;
60
+ splitGroupId?: string | undefined;
54
61
  } | {
55
62
  timeOff: "approved" | "pending";
63
+ requestId?: string | undefined;
64
+ type?: "OFF_DAY" | "LEAVE" | undefined;
65
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
56
66
  reason: string;
57
67
  half?: boolean | undefined;
58
68
  halfPart?: "AM" | "PM" | undefined;
@@ -83,7 +93,18 @@ export declare function useScheduleBoard(handlers?: {
83
93
  conflictReason?: string | undefined;
84
94
  openId?: number | undefined;
85
95
  breakMins?: number | undefined;
96
+ breaks?: ({
97
+ type: "DURATION";
98
+ minutes: number;
99
+ breakPayType: "PAID" | "UNPAID";
100
+ } | {
101
+ type: "TIME_RANGE";
102
+ startTime: string;
103
+ endTime: string;
104
+ breakPayType: "PAID" | "UNPAID";
105
+ })[] | undefined;
86
106
  assignmentId?: string | undefined;
107
+ splitGroupId?: string | undefined;
87
108
  }[] | null)[];
88
109
  remarks: {
89
110
  author: string;
@@ -114,6 +135,7 @@ export declare function useScheduleBoard(handlers?: {
114
135
  }[], Employee[] | {
115
136
  id: number;
116
137
  name: string;
138
+ employmentType: "FULLTIME" | "PARTTIME";
117
139
  role: string;
118
140
  initials: string;
119
141
  color: string;
@@ -136,9 +158,23 @@ export declare function useScheduleBoard(handlers?: {
136
158
  conflictReason?: string | undefined;
137
159
  openId?: number | undefined;
138
160
  breakMins?: number | undefined;
161
+ breaks?: ({
162
+ type: "DURATION";
163
+ minutes: number;
164
+ breakPayType: "PAID" | "UNPAID";
165
+ } | {
166
+ type: "TIME_RANGE";
167
+ startTime: string;
168
+ endTime: string;
169
+ breakPayType: "PAID" | "UNPAID";
170
+ })[] | undefined;
139
171
  assignmentId?: string | undefined;
172
+ splitGroupId?: string | undefined;
140
173
  } | {
141
174
  timeOff: "approved" | "pending";
175
+ requestId?: string | undefined;
176
+ type?: "OFF_DAY" | "LEAVE" | undefined;
177
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
142
178
  reason: string;
143
179
  half?: boolean | undefined;
144
180
  halfPart?: "AM" | "PM" | undefined;
@@ -169,7 +205,18 @@ export declare function useScheduleBoard(handlers?: {
169
205
  conflictReason?: string | undefined;
170
206
  openId?: number | undefined;
171
207
  breakMins?: number | undefined;
208
+ breaks?: ({
209
+ type: "DURATION";
210
+ minutes: number;
211
+ breakPayType: "PAID" | "UNPAID";
212
+ } | {
213
+ type: "TIME_RANGE";
214
+ startTime: string;
215
+ endTime: string;
216
+ breakPayType: "PAID" | "UNPAID";
217
+ })[] | undefined;
172
218
  assignmentId?: string | undefined;
219
+ splitGroupId?: string | undefined;
173
220
  }[] | null)[];
174
221
  remarks: {
175
222
  author: string;
@@ -284,9 +331,23 @@ export declare function useScheduleBoard(handlers?: {
284
331
  conflictReason?: string | undefined;
285
332
  openId?: number | undefined;
286
333
  breakMins?: number | undefined;
334
+ breaks?: ({
335
+ type: "DURATION";
336
+ minutes: number;
337
+ breakPayType: "PAID" | "UNPAID";
338
+ } | {
339
+ type: "TIME_RANGE";
340
+ startTime: string;
341
+ endTime: string;
342
+ breakPayType: "PAID" | "UNPAID";
343
+ })[] | undefined;
287
344
  assignmentId?: string | undefined;
345
+ splitGroupId?: string | undefined;
288
346
  } | {
289
347
  timeOff: "approved" | "pending";
348
+ requestId?: string | undefined;
349
+ type?: "OFF_DAY" | "LEAVE" | undefined;
350
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
290
351
  reason: string;
291
352
  half?: boolean | undefined;
292
353
  halfPart?: "AM" | "PM" | undefined;
@@ -317,7 +378,18 @@ export declare function useScheduleBoard(handlers?: {
317
378
  conflictReason?: string | undefined;
318
379
  openId?: number | undefined;
319
380
  breakMins?: number | undefined;
381
+ breaks?: ({
382
+ type: "DURATION";
383
+ minutes: number;
384
+ breakPayType: "PAID" | "UNPAID";
385
+ } | {
386
+ type: "TIME_RANGE";
387
+ startTime: string;
388
+ endTime: string;
389
+ breakPayType: "PAID" | "UNPAID";
390
+ })[] | undefined;
320
391
  assignmentId?: string | undefined;
392
+ splitGroupId?: string | undefined;
321
393
  }[] | null)[];
322
394
  }[];
323
395
  }[], ScheduleVersion[] | {
@@ -345,9 +417,23 @@ export declare function useScheduleBoard(handlers?: {
345
417
  conflictReason?: string | undefined;
346
418
  openId?: number | undefined;
347
419
  breakMins?: number | undefined;
420
+ breaks?: ({
421
+ type: "DURATION";
422
+ minutes: number;
423
+ breakPayType: "PAID" | "UNPAID";
424
+ } | {
425
+ type: "TIME_RANGE";
426
+ startTime: string;
427
+ endTime: string;
428
+ breakPayType: "PAID" | "UNPAID";
429
+ })[] | undefined;
348
430
  assignmentId?: string | undefined;
431
+ splitGroupId?: string | undefined;
349
432
  } | {
350
433
  timeOff: "approved" | "pending";
434
+ requestId?: string | undefined;
435
+ type?: "OFF_DAY" | "LEAVE" | undefined;
436
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
351
437
  reason: string;
352
438
  half?: boolean | undefined;
353
439
  halfPart?: "AM" | "PM" | undefined;
@@ -378,7 +464,18 @@ export declare function useScheduleBoard(handlers?: {
378
464
  conflictReason?: string | undefined;
379
465
  openId?: number | undefined;
380
466
  breakMins?: number | undefined;
467
+ breaks?: ({
468
+ type: "DURATION";
469
+ minutes: number;
470
+ breakPayType: "PAID" | "UNPAID";
471
+ } | {
472
+ type: "TIME_RANGE";
473
+ startTime: string;
474
+ endTime: string;
475
+ breakPayType: "PAID" | "UNPAID";
476
+ })[] | undefined;
381
477
  assignmentId?: string | undefined;
478
+ splitGroupId?: string | undefined;
382
479
  }[] | null)[];
383
480
  }[];
384
481
  }[]>;
@@ -407,12 +504,12 @@ export declare function useScheduleBoard(handlers?: {
407
504
  sectionCost: (sectionId: string, members?: Employee[]) => number;
408
505
  totalWeeklyCost: import("vue").ComputedRef<number>;
409
506
  employeeById: (id: number) => Employee | undefined;
410
- commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
411
- commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[]) => void;
412
- removeShift: (empId: number, dayIdx: number) => void;
413
- removeShiftAt: (offset: number, empId: number, dayIdx: number) => void;
414
- moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number) => boolean;
415
- swapShifts: (empIdA: number, empIdB: number, dayIdx: number) => boolean;
507
+ commitShift: (empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
508
+ commitShiftAt: (offset: number, empId: number, dayIdx: number, slot: WorkSlot | WorkSlot[], replaceIndex?: number, replaceCount?: number) => void;
509
+ removeShift: (empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
510
+ removeShiftAt: (offset: number, empId: number, dayIdx: number, slotIndex?: number, count?: number) => void;
511
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
512
+ swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
416
513
  clearShiftsInRange: () => {
417
514
  shifts: number;
418
515
  open: number;
@@ -1,6 +1,11 @@
1
1
  export interface ScheduleClashState {
2
2
  open: boolean;
3
3
  message: string;
4
+ /** Per-call overrides, falling back to the "might conflict" wording every call used before
5
+ * these existed — only the closed-day confirmation (see SchedulePage's onAddShift/
6
+ * onOpenDemandSheet) needs its own title and button label so far. */
7
+ title: string | null;
8
+ confirmLabel: string | null;
4
9
  onConfirm: (() => void) | null;
5
10
  }
6
11
  /** Generic Yes/No conflict-confirmation primitive — the mockup's `askClash`/clashModal,
@@ -9,9 +14,14 @@ export declare function useScheduleClashDetection(): {
9
14
  state: {
10
15
  open: boolean;
11
16
  message: string;
17
+ title: string | null;
18
+ confirmLabel: string | null;
12
19
  onConfirm: (() => void) | null;
13
20
  };
14
- ask: (message: string, onConfirm: () => void) => void;
21
+ ask: (message: string, onConfirm: () => void, opts?: {
22
+ title?: string;
23
+ confirmLabel?: string;
24
+ }) => void;
15
25
  confirm: () => void;
16
26
  close: () => void;
17
27
  };
@@ -0,0 +1,19 @@
1
+ import type { ScheduleOutletApi } from './useScheduleOutlet';
2
+ /** "Clone setup to…" on the General page. Copies this outlet's *saved* pay rates — `RULES`,
3
+ * not the page's draft — to one or more other outlets the manager ticks. Scoped to pay rates
4
+ * because that is the only outlet-scoped setting this page persists; the mockup's broader
5
+ * "rules, shifts, coverage and positions" clone lives on pages this one doesn't own. */
6
+ export declare function useScheduleCloneOutletModal(outlet: ScheduleOutletApi): {
7
+ open: import("vue").Ref<boolean, boolean>;
8
+ query: import("vue").Ref<string, string>;
9
+ selected: import("vue").Ref<Set<string> & Omit<Set<string>, keyof Set<any>>, Set<string> | (Set<string> & Omit<Set<string>, keyof Set<any>>)>;
10
+ saving: import("vue").Ref<boolean, boolean>;
11
+ done: import("vue").Ref<number | null, number | null>;
12
+ sourceLabel: import("vue").ComputedRef<string>;
13
+ targets: import("vue").ComputedRef<import("../components/ScheduleSelect.vue").ScheduleSelectOption[]>;
14
+ openModal: () => void;
15
+ close: () => void;
16
+ toggle: (id: string) => void;
17
+ confirm: () => Promise<void>;
18
+ };
19
+ export type ScheduleCloneOutletModalApi = ReturnType<typeof useScheduleCloneOutletModal>;
@@ -0,0 +1,80 @@
1
+ export interface CoachTipData {
2
+ title: string;
3
+ body: string;
4
+ count?: string;
5
+ nextLabel?: string;
6
+ skipLabel?: string;
7
+ next?: () => void;
8
+ skip?: () => void;
9
+ }
10
+ type CoachArrowSide = 'top' | 'bottom' | 'left' | 'right';
11
+ /** A spotlight-and-tooltip overlay that frames one live element at a time — the engine behind
12
+ * the guided tour. Ported from V6.2's `coach*` functions: same 4-panel mask, same below /
13
+ * above / left / right tip placement with viewport clamping, same arrow-follows-target-center
14
+ * math. Deliberately has no Back button and no "click to advance" wiring — every tour step
15
+ * here always supplies `next`, so the Next button is the one way on. */
16
+ export declare function useScheduleCoach(): {
17
+ open: import("vue").Ref<boolean, boolean>;
18
+ placing: import("vue").Ref<boolean, boolean>;
19
+ tip: import("vue").Ref<{
20
+ title: string;
21
+ body: string;
22
+ count?: string | undefined;
23
+ nextLabel?: string | undefined;
24
+ skipLabel?: string | undefined;
25
+ next?: (() => void) | undefined;
26
+ skip?: (() => void) | undefined;
27
+ } | null, CoachTipData | {
28
+ title: string;
29
+ body: string;
30
+ count?: string | undefined;
31
+ nextLabel?: string | undefined;
32
+ skipLabel?: string | undefined;
33
+ next?: (() => void) | undefined;
34
+ skip?: (() => void) | undefined;
35
+ } | null>;
36
+ maskT: {
37
+ left: number;
38
+ top: number;
39
+ width: number;
40
+ height: number;
41
+ };
42
+ maskB: {
43
+ left: number;
44
+ top: number;
45
+ width: number;
46
+ height: number;
47
+ };
48
+ maskL: {
49
+ left: number;
50
+ top: number;
51
+ width: number;
52
+ height: number;
53
+ };
54
+ maskR: {
55
+ left: number;
56
+ top: number;
57
+ width: number;
58
+ height: number;
59
+ };
60
+ spot: {
61
+ left: number;
62
+ top: number;
63
+ width: number;
64
+ height: number;
65
+ };
66
+ tipPos: {
67
+ left: number;
68
+ top: number;
69
+ };
70
+ arrow: {
71
+ side: CoachArrowSide;
72
+ offset: number;
73
+ };
74
+ start: (el: HTMLElement, data: CoachTipData, onMiss?: () => void) => void;
75
+ end: () => void;
76
+ next: () => void;
77
+ skip: () => void;
78
+ };
79
+ export type ScheduleCoachApi = ReturnType<typeof useScheduleCoach>;
80
+ export {};
@@ -33,14 +33,11 @@ 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
- isClosed: import("vue").ComputedRef<boolean>;
37
36
  isAuto: import("vue").ComputedRef<boolean>;
38
37
  rateApplies: import("vue").ComputedRef<boolean>;
39
- closedHint: import("vue").ComputedRef<"Nothing is required or rostered on this date." | "The venue does not open — this date only.">;
40
38
  holidayHint: import("vue").ComputedRef<string>;
41
39
  openFor: (dayIdx: number, anchor: HTMLElement) => void;
42
40
  close: () => void;
43
- toggleClosed: () => void;
44
41
  toggleHoliday: () => void;
45
42
  save: () => void;
46
43
  remove: () => void;
@@ -1,6 +1,7 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleRosterApi } from './useScheduleRoster';
3
3
  import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
4
+ import type { ScheduleDemandApi } from './useScheduleDemand';
4
5
  declare function minToHHMM(m: number): string;
5
6
  export interface ScheduleTimelineBar {
6
7
  key: string;
@@ -25,6 +26,11 @@ export interface ScheduleTimelineRow {
25
26
  swatchClass?: string;
26
27
  avatarInitials?: string;
27
28
  avatarColor?: string;
29
+ employeeId?: number;
30
+ roleLabel?: string;
31
+ hoursLabel?: string;
32
+ hoursPct?: number;
33
+ onMenu?: (anchor: HTMLElement) => void;
28
34
  name: string;
29
35
  sub: string;
30
36
  bars: ScheduleTimelineBar[];
@@ -41,12 +47,15 @@ export interface ScheduleHourCell {
41
47
  title: string;
42
48
  n: number;
43
49
  }
44
- export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
50
+ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
45
51
  onAddShift: (empId: number, dayIdx: number) => void;
46
52
  onEditShift: (empId: number, dayIdx: number) => void;
47
53
  onEditLeave: (empId: number, dayIdx: number) => void;
48
54
  onOpenAssign: (openId: number) => void;
49
55
  onAddAreaShift: (dayIdx: number, position: string) => void;
56
+ onOpenDemand: (dayIdx: number) => void;
57
+ onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
58
+ onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
50
59
  }): {
51
60
  dayIdx: import("vue").ComputedRef<number>;
52
61
  axis: import("vue").ComputedRef<{
@@ -62,6 +71,20 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
62
71
  openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
63
72
  employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
64
73
  positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
74
+ demandRow: import("vue").ComputedRef<{
75
+ blank: boolean;
76
+ segments: {
77
+ key: string;
78
+ from: number;
79
+ to: number;
80
+ left: number;
81
+ width: number;
82
+ cls: string;
83
+ }[];
84
+ title: string;
85
+ }>;
86
+ openDemand: () => void;
87
+ openDemandSegment: (from: number, to: number, anchor: HTMLElement) => void;
65
88
  footer: import("vue").ComputedRef<{
66
89
  cells: ScheduleHourCell[];
67
90
  staffCount: number;
@@ -12,8 +12,10 @@ export interface ScheduleDemandSeg {
12
12
  }
13
13
  export interface ScheduleDemandCell {
14
14
  dayIdx: number;
15
- closed: boolean;
16
- /** No demand stated on this day — the cell carries its own "+ Set demand" instead. */
15
+ /** No demand stated on this day — the cell carries its own "+ Set demand" instead. Whether
16
+ * the day is closed is a separate, purely visual fact read off cellStateClasses by the
17
+ * template — closing a day is informational for staffing, not a lock, so it doesn't change
18
+ * what this cell has to show. */
17
19
  blank: boolean;
18
20
  pct: number;
19
21
  tone: '' | 'part' | 'short';
@@ -2,6 +2,20 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  export interface ScheduleDragPayload {
3
3
  empId: number;
4
4
  dayIdx: number;
5
+ /** Which period on that day this card is — 0 for an ordinary single shift. A genuine split
6
+ * shift's one merged card drags both periods together (`slotCount` > 1); any other card on
7
+ * a multi-shift day is its own independent slot and carries just itself. */
8
+ slotIndex: number;
9
+ slotCount: number;
10
+ }
11
+ /** Where a drag is currently hovering — read by ScheduleShiftCell to decide what to light up.
12
+ * `onCard`/`slotIndex` distinguish the two outcomes a drop here actually has: over an existing
13
+ * card it's a swap offer (that one card), over the rest of the cell it lands alongside it. */
14
+ export interface ScheduleDragHoverTarget {
15
+ empId: number;
16
+ dayIdx: number;
17
+ onCard: boolean;
18
+ slotIndex: number | null;
5
19
  }
6
20
  /** Native HTML5 drag & drop for moving an existing shift card between employee/day cells.
7
21
  * The mockup's other drag source — a staff-rail row dragged onto an open shift — is an
@@ -12,11 +26,29 @@ export declare function useScheduleDragDrop(board: ScheduleBoardApi): {
12
26
  dragging: import("vue").Ref<{
13
27
  empId: number;
14
28
  dayIdx: number;
29
+ slotIndex: number;
30
+ slotCount: number;
15
31
  } | null, ScheduleDragPayload | {
16
32
  empId: number;
17
33
  dayIdx: number;
34
+ slotIndex: number;
35
+ slotCount: number;
36
+ } | null>;
37
+ hoverTarget: import("vue").Ref<{
38
+ empId: number;
39
+ dayIdx: number;
40
+ onCard: boolean;
41
+ slotIndex: number | null;
42
+ } | null, ScheduleDragHoverTarget | {
43
+ empId: number;
44
+ dayIdx: number;
45
+ onCard: boolean;
46
+ slotIndex: number | null;
18
47
  } | null>;
19
- startShiftDrag: (empId: number, dayIdx: number, ev: DragEvent) => void;
48
+ startShiftDrag: (empId: number, dayIdx: number, ev: DragEvent, slotIndex?: number) => void;
20
49
  endDrag: () => void;
50
+ setDragHover: (empId: number, dayIdx: number, onCard: boolean, slotIndex: number | null) => void;
51
+ clearDragHover: (empId: number, dayIdx: number) => void;
21
52
  dropOnCell: (targetEmpId: number, targetDayIdx: number) => void;
22
53
  };
54
+ export type ScheduleDragDropApi = ReturnType<typeof useScheduleDragDrop>;
@@ -10,6 +10,10 @@ export interface ExportMatrix {
10
10
  head: string[];
11
11
  body: (string | ExportShiftCell)[][];
12
12
  foot: string[];
13
+ /** Worked shifts across the whole matrix, split-shift pairs counted once — whether there is
14
+ * anything to print. Not read off the footer's own last column: that column is OT hours now,
15
+ * and a fully-staffed week with nobody over contract totals 0.0 there. */
16
+ shiftTotal: number;
13
17
  }
14
18
  /** The mockup's Share/export feature (buildExportMatrix/exportPDF/exportJPG) — no external
15
19
  * PDF/canvas library anywhere in the mockup; PDF is an HTML preview handed to window.print(),
@@ -18,9 +22,22 @@ export declare function useScheduleExport(board: ScheduleBoardApi): {
18
22
  buildExportMatrix: () => ExportMatrix;
19
23
  pdfPreviewOpen: import("vue").Ref<boolean, boolean>;
20
24
  pdfHtml: import("vue").ComputedRef<string>;
25
+ pdfBarMeta: import("vue").ComputedRef<string>;
21
26
  openPdfPreview: () => void;
22
27
  closePdfPreview: () => void;
23
28
  printNow: () => void;
24
29
  exportJpg: () => void;
30
+ exportDoneOpen: import("vue").Ref<boolean, boolean>;
31
+ exportDoneRecap: import("vue").Ref<{
32
+ label: string;
33
+ value: string;
34
+ }[], {
35
+ label: string;
36
+ value: string;
37
+ }[] | {
38
+ label: string;
39
+ value: string;
40
+ }[]>;
41
+ closeExportDone: () => void;
25
42
  };
26
43
  export type ScheduleExportApi = ReturnType<typeof useScheduleExport>;
@@ -1,12 +1,11 @@
1
1
  import type { CoverageSegment } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
3
  import type { ScheduleDemandApi } from './useScheduleDemand';
4
- import type { ScheduleAssignApi } from './useScheduleAssign';
5
4
  export interface ScheduleGapActions {
6
5
  /** Open the shift editor on a brand new shift for this day and these hours. */
7
6
  addShift: (dayIdx: number, position: string, start: string, end: string) => void;
8
7
  }
9
- export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, assign: ScheduleAssignApi, actions: ScheduleGapActions): {
8
+ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, actions: ScheduleGapActions): {
10
9
  state: {
11
10
  open: boolean;
12
11
  pinned: boolean;
@@ -76,7 +75,6 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
76
75
  segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
77
76
  segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
78
77
  addShift: () => void;
79
- suggestStaffing: () => void;
80
78
  close: () => void;
81
79
  };
82
80
  export type ScheduleGapPopoverApi = ReturnType<typeof useScheduleGapPopover>;
@@ -1,25 +1,22 @@
1
1
  import type { LeaveSlot } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
- /** What a day off can be booked as. "Rest Day" leads: it is the most-used reason a day is not
4
- * worked. */
5
- export declare const LEAVE_REASONS: string[];
6
- /** The type the menu's plain "Leave" row books. */
7
- export declare const DEFAULT_LEAVE_REASON = "Annual Leave";
8
- export type ScheduleLeaveMode = 'all' | 'am' | 'pm' | 'custom';
3
+ export type TimeOffSelection = 'OFF_DAY' | 'ANNUAL' | 'MEDICAL' | 'EMERGENCY' | 'UNPAID';
4
+ export declare const TIME_OFF_OPTIONS: Array<{
5
+ value: TimeOffSelection;
6
+ label: string;
7
+ }>;
8
+ export type ScheduleLeaveMode = 'all' | 'am' | 'pm';
9
9
  export interface ScheduleLeaveState {
10
10
  open: boolean;
11
11
  empId: number | null;
12
12
  dayIdx: number | null;
13
13
  /** Booking a new record, rather than editing one that is already on the day. */
14
14
  isNew: boolean;
15
- reason: string;
15
+ selection: TimeOffSelection;
16
16
  mode: ScheduleLeaveMode;
17
- /** The hours when mode is 'custom'. */
18
- from: string;
19
- to: string;
20
17
  }
21
18
  /** The leave editor — V6.2's "Book leave" dialog: a reason, how much of the day it covers, and
22
- * what that does to the person's availability. Opened from the add popup's Rest Day / Leave rows
19
+ * what that does to the person's availability. Opened from the add popup's Off day / Leave rows
23
20
  * (booking) and from an existing leave card (editing, or approving a pending request). */
24
21
  export declare function useScheduleLeave(board: ScheduleBoardApi): {
25
22
  state: {
@@ -27,29 +24,20 @@ export declare function useScheduleLeave(board: ScheduleBoardApi): {
27
24
  empId: number | null;
28
25
  dayIdx: number | null;
29
26
  isNew: boolean;
30
- reason: string;
27
+ selection: TimeOffSelection;
31
28
  mode: ScheduleLeaveMode;
32
- from: string;
33
- to: string;
34
29
  };
35
30
  employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
36
31
  activeSlot: import("vue").ComputedRef<LeaveSlot | null>;
37
32
  options: import("vue").ComputedRef<({
38
- hrs: string;
39
- mode: "custom";
40
- name: "Specific hours";
41
- } | {
42
- hrs: string;
43
- mode: "all";
44
- name: "All day";
33
+ readonly mode: "all";
34
+ readonly name: "Full day";
45
35
  } | {
46
- hrs: string;
47
- mode: "am";
48
- name: "Morning";
36
+ readonly mode: "am";
37
+ readonly name: "Half day AM";
49
38
  } | {
50
- hrs: string;
51
- mode: "pm";
52
- name: "Afternoon";
39
+ readonly mode: "pm";
40
+ readonly name: "Half day PM";
53
41
  })[]>;
54
42
  span: import("vue").ComputedRef<{
55
43
  from: string;
@@ -57,14 +45,15 @@ export declare function useScheduleLeave(board: ScheduleBoardApi): {
57
45
  hours: number;
58
46
  }>;
59
47
  valid: import("vue").ComputedRef<boolean>;
48
+ selectionLabel: import("vue").ComputedRef<string>;
60
49
  dayLabel: import("vue").ComputedRef<string>;
61
50
  hoursText: import("vue").ComputedRef<string>;
62
- coverText: import("vue").ComputedRef<string>;
51
+ coverText: import("vue").ComputedRef<"Full day" | "Half day AM" | "Half day PM">;
63
52
  openFor: (empId: number, dayIdx: number, reason?: string | null) => void;
64
53
  close: () => void;
65
- save: () => void;
66
- approve: () => void;
54
+ save: () => Promise<void>;
55
+ approve: () => Promise<void>;
67
56
  reject: () => void;
68
- remove: () => void;
57
+ remove: () => Promise<void>;
69
58
  };
70
59
  export type ScheduleLeaveApi = ReturnType<typeof useScheduleLeave>;
@@ -0,0 +1,9 @@
1
+ import type { useScheduleOnboardingWizard } from './useScheduleOnboardingWizard';
2
+ import type { useScheduleSetupBanner } from './useScheduleSetupBanner';
3
+ type SetupBannerApi = ReturnType<typeof useScheduleSetupBanner>;
4
+ type OnboardingWizardApi = ReturnType<typeof useScheduleOnboardingWizard>;
5
+ /** Coordinates the welcome banner and wizard without making SchedulePage own onboarding flow. */
6
+ export declare function useScheduleOnboardingFlow(setupBanner: SetupBannerApi, wizard: OnboardingWizardApi): {
7
+ onWelcomeSetUp: () => void;
8
+ };
9
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { Employee } from '../types';
2
+ import type { FdtoScheduleEmployee } from '@feedmepos/hrm-schedule-contract';
3
+ import type { TeamRow } from './onboarding-types';
4
+ export interface OnboardingProfileRow {
5
+ emp: Employee;
6
+ row: TeamRow;
7
+ }
8
+ /** Writes the queued team and availability drafts once per employee. */
9
+ export declare function saveOnboardingProfiles(pendingTeam: Set<number>, pendingAvail: Map<number, Array<{
10
+ dayOfWeek: number;
11
+ start: string;
12
+ end: string;
13
+ }>>, rows: OnboardingProfileRow[], rawEmployee: (id: number) => FdtoScheduleEmployee | undefined): Promise<void>;