@feedmepos/mf-hrm-portal 2.3.0-dev.2 → 2.3.0-dev.20

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 (126) hide show
  1. package/dist/{ApprovalCodeList-CJaNPHZC.js → ApprovalCodeList-ChZm8Cqn.js} +7 -7
  2. package/dist/{AuditLogList-CHA98ZqW.js → AuditLogList-DNb_HY2b.js} +18 -19
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C7rvthEI.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C1FZLRtw.js} +2 -2
  4. package/dist/{EmployeeList-CVmMKt71.js → EmployeeList-D0_eAXnx.js} +255 -266
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-DZEUOnX-.js} +6 -6
  6. package/dist/{GrantUserList-MYjgt5-F.js → GrantUserList-HHl1a4dz.js} +8 -8
  7. package/dist/{Main-BgB9lD4K.js → Main-B35_MSKW.js} +11 -11
  8. package/dist/{Main-C0cnqQ3B.js → Main-DFk9nc3J.js} +8 -8
  9. package/dist/{Main-hlcHtrsc.js → Main-DMsmgQyL.js} +5 -5
  10. package/dist/{PermissionSetList-5f1WIaVa.js → PermissionSetList-CglEdefD.js} +19 -18
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CFoTAGIX.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-9tG8k0mR.js} +1011 -1011
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js} +1 -1
  13. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  14. package/dist/{RoleList-DNR4miXr.js → RoleList-_UsStsN7.js} +21 -20
  15. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DYhMssqd.js +530 -0
  16. package/dist/ScheduleGeneralPage-CP3Vb4XJ.js +776 -0
  17. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-B_OqKDw_.js +2439 -0
  18. package/dist/SchedulePage-5cbZyAow.js +19250 -0
  19. package/dist/{SchedulePositionPage-DyRckyUx.js → SchedulePositionPage-DwgNOVe8.js} +78 -80
  20. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-BWM2fbe4.js} +1 -1
  21. package/dist/{TeamMemberList-mw5OveZG.js → TeamMemberList-CiYROtup.js} +27 -27
  22. package/dist/{TimesheetList-BzXarZbM.js → TimesheetList-ohxQpGBt.js} +52 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Dq5i4poN.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CHgKOFjZ.js} +3 -3
  24. package/dist/{app-DSsdRLHg.js → app-hqb3iLmH.js} +2891 -2474
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-C9DmR4Md.js → approval-code-BXUiojPH.js} +1 -1
  27. package/dist/{dayjs.min-B6xBXQtU.js → dayjs.min-jdSYngTL.js} +1 -1
  28. package/dist/{employee-hMhzuqk1.js → employee-DQksdva7.js} +4 -4
  29. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-CBJ3gEgW.js} +1 -1
  30. package/dist/{iteration-B34AvpNC.js → iteration-Ws9RBh0x.js} +1 -1
  31. package/dist/{lodash-1Vyuy7Mu.js → lodash-Db0CBH2I.js} +1 -1
  32. package/dist/object-Dwyg2LgX.js +16 -0
  33. package/dist/{restaurant-D7PEQjPY.js → restaurant-D2mfKHaH.js} +48 -48
  34. package/dist/{role-DKOrgO6f.js → role-C5BIFEPz.js} +2 -2
  35. package/dist/{rule-CBzQ3GeV.js → rule-CU0v7pCG.js} +3 -3
  36. package/dist/src/api/schedule/index.d.ts +9 -1
  37. package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
  38. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  39. package/dist/src/types/schedule.d.ts +3 -4
  40. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  41. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +4 -8
  42. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -4
  43. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +0 -2
  44. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +0 -7
  45. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
  46. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +0 -6
  47. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
  48. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
  49. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -1
  50. package/dist/src/views/scheduling/components/ScheduleContextMenu.vue.d.ts +1 -5
  51. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
  52. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
  53. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/SchedulePublishShareArt.vue.d.ts +2 -0
  56. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +10 -0
  57. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -10
  58. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  59. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +4 -2
  60. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  61. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
  62. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  63. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  64. package/dist/src/views/scheduling/composables/schedule-error.d.ts +3 -0
  65. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  66. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
  67. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +6 -0
  68. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +29 -11
  69. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  70. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  71. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -9
  72. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +11 -3
  73. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +84 -11
  74. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
  75. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  76. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
  77. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -5
  78. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +3 -5
  79. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +13 -3
  80. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  81. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +20 -7
  82. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +1 -1
  83. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +5 -1
  84. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +5 -0
  85. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +2 -2
  86. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -0
  87. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
  88. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +47 -3
  89. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +406 -29
  90. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
  91. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
  92. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +1 -0
  93. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +0 -4
  94. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +1 -0
  95. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +7 -1
  96. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -0
  97. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +70 -4
  98. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +7 -2
  99. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  100. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +41 -3
  101. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -0
  102. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +47 -6
  103. package/dist/src/views/scheduling/country-rules/index.d.ts +9 -4
  104. package/dist/src/views/scheduling/data.d.ts +22 -1
  105. package/dist/src/views/scheduling/locales/index.d.ts +28 -0
  106. package/dist/src/views/scheduling/schedule-state.d.ts +272 -208
  107. package/dist/src/views/scheduling/schedule-store.d.ts +36 -11
  108. package/dist/src/views/scheduling/types.d.ts +29 -5
  109. package/dist/style.css +1 -1
  110. package/dist/tsconfig.app.tsbuildinfo +1 -1
  111. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-DZCdxlCd.js} +1 -1
  112. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  113. package/dist/{useLoading-JFoghhRz.js → useLoading-Nygx2zn8.js} +1 -1
  114. package/dist/{useReportPermissions-B2ev0j4w.js → useReportPermissions-DeJMpuw7.js} +3 -3
  115. package/package.json +1 -1
  116. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B4VUyKW3.js +0 -470
  117. package/dist/ScheduleGeneralPage-Cd5AlY4z.js +0 -666
  118. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-Cf0l2MRg.js +0 -2188
  119. package/dist/SchedulePage-C8m0-m3l.js +0 -18257
  120. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  121. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  122. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  123. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  124. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -124
  125. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  126. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
@@ -27,8 +27,17 @@ export interface ScheduleOtRisk {
27
27
  empId: number;
28
28
  name: string;
29
29
  hours: number;
30
+ otHours: number;
30
31
  contract: number;
31
32
  }
33
+ export interface ScheduleMonthlyOtSummary {
34
+ key: string;
35
+ label: string;
36
+ used: number;
37
+ cap: number | null;
38
+ progress: number;
39
+ high: boolean;
40
+ }
32
41
  /** The staff rail consumes the same employee identity/load derivation as the area view. */
33
42
  export type ScheduleRailRow = ScheduleEmployeeLoad;
34
43
  /** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
@@ -41,7 +50,10 @@ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?
41
50
  weeklyCost: import("vue").ComputedRef<number>;
42
51
  otHours: import("vue").ComputedRef<number>;
43
52
  monthlyOtUsed: import("vue").ComputedRef<number>;
44
- monthlyOtCapHours: number;
53
+ monthlyOtSummaries: import("vue").ComputedRef<ScheduleMonthlyOtSummary[]>;
54
+ monthlyOtCapHours: import("vue").ComputedRef<number | null>;
55
+ monthlyOtProgress: import("vue").ComputedRef<number>;
56
+ monthlyOtHigh: import("vue").ComputedRef<boolean>;
45
57
  bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
46
58
  otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
47
59
  };
@@ -33,7 +33,6 @@ export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: Sched
33
33
  savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
34
34
  hasSaved: import("vue").ComputedRef<boolean>;
35
35
  whenLabel: import("vue").ComputedRef<string>;
36
- isAuto: import("vue").ComputedRef<boolean>;
37
36
  rateApplies: import("vue").ComputedRef<boolean>;
38
37
  holidayHint: import("vue").ComputedRef<string>;
39
38
  openFor: (dayIdx: number, anchor: HTMLElement) => void;
@@ -2,14 +2,19 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleRosterApi } from './useScheduleRoster';
3
3
  import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
4
4
  import type { ScheduleDemandApi } from './useScheduleDemand';
5
+ import { type ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
5
6
  declare function minToHHMM(m: number): string;
6
7
  export interface ScheduleTimelineBar {
7
8
  key: string;
9
+ start: number;
10
+ end: number;
8
11
  left: number;
9
12
  width: number;
10
13
  cls: string;
11
14
  label: string;
15
+ labels?: string[];
12
16
  sub?: string;
17
+ conflict?: boolean;
13
18
  title: string;
14
19
  brk?: {
15
20
  left: number;
@@ -17,6 +22,8 @@ export interface ScheduleTimelineBar {
17
22
  };
18
23
  laneTop?: number;
19
24
  laneHeight?: number;
25
+ employeeId?: number;
26
+ slotIndex?: number;
20
27
  onClick?: () => void;
21
28
  }
22
29
  export interface ScheduleTimelineRow {
@@ -27,6 +34,7 @@ export interface ScheduleTimelineRow {
27
34
  avatarInitials?: string;
28
35
  avatarColor?: string;
29
36
  employeeId?: number;
37
+ employeeLoad?: ScheduleEmployeeLoad;
30
38
  roleLabel?: string;
31
39
  hoursLabel?: string;
32
40
  hoursPct?: number;
@@ -34,9 +42,14 @@ export interface ScheduleTimelineRow {
34
42
  name: string;
35
43
  sub: string;
36
44
  bars: ScheduleTimelineBar[];
45
+ pastDay?: boolean;
46
+ lockedDay?: boolean;
47
+ closedDay?: boolean;
48
+ availabilityDay?: boolean;
49
+ availabilityLabel?: string;
37
50
  minHeight?: number;
38
51
  emptyText?: string;
39
- onTrackClick?: () => void;
52
+ onTrackClick?: (anchor: HTMLElement) => void;
40
53
  }
41
54
  export interface ScheduleHourCell {
42
55
  m: number;
@@ -48,11 +61,10 @@ export interface ScheduleHourCell {
48
61
  n: number;
49
62
  }
50
63
  export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, demand: ScheduleDemandApi, handlers: {
51
- onAddShift: (empId: number, dayIdx: number) => void;
64
+ onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
65
+ onAddPositionShift: (dayIdx: number, position: string, anchor: HTMLElement) => void;
52
66
  onEditShift: (empId: number, dayIdx: number) => void;
53
67
  onEditLeave: (empId: number, dayIdx: number) => void;
54
- onOpenAssign: (openId: number) => void;
55
- onAddAreaShift: (dayIdx: number, position: string) => void;
56
68
  onOpenDemand: (dayIdx: number) => void;
57
69
  onOpenEmployeeMenu: (empId: number, anchor: HTMLElement) => void;
58
70
  onDemandSegment: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
@@ -68,7 +80,6 @@ export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster:
68
80
  clock: string;
69
81
  }[]>;
70
82
  isOpenHour: (m: number) => boolean;
71
- openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
72
83
  employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
73
84
  positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
74
85
  demandRow: import("vue").ComputedRef<{
@@ -8,12 +8,10 @@ export type { ScheduleCoverageAxis } from './schedule-demand-domain';
8
8
  *
9
9
  * Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
10
10
  * renders one long horizon so a day index identifies a date, but this board pages through
11
- * weeks, and demand put on this Monday must not reappear on every other Monday. So a date's
12
- * own demand is keyed by ISO date, and a standing weekday rule is keyed by weekday index.
11
+ * weeks, and demand put on this Monday must not reappear on every other Monday. Demand is
12
+ * therefore keyed by explicit ISO date.
13
13
  *
14
- * A date's own demand wins over the weekday rule it would otherwise inherit — "every Tuesday
15
- * needs eight" is a standing statement, and "this Tuesday is different" has to be able to
16
- * override it without rewriting the rule. */
14
+ * The weekday fallback remains only as a defensive read path until legacy records are removed. */
17
15
  export declare function useScheduleDemand(board: ScheduleBoardApi): {
18
16
  byDate: Record<string, DemandPeriod[]>;
19
17
  byWeekday: Record<number, DemandPeriod[]>;
@@ -14,8 +14,7 @@ export interface ScheduleDemandSheetOptions {
14
14
  onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
15
15
  }
16
16
  /** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
17
- * real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
18
- * property of the statement being made rather than a second screen. */
17
+ * real cancel. Apply scopes are expanded into explicit dates in the visible week. */
19
18
  export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand: ScheduleDemandApi, opts: ScheduleDemandSheetOptions): {
20
19
  open: import("vue").Ref<boolean, boolean>;
21
20
  dayIdx: import("vue").Ref<number | null, number | null>;
@@ -25,6 +24,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
25
24
  n: number;
26
25
  roles?: {
27
26
  position: string;
27
+ positionId?: string | undefined;
28
28
  n: number;
29
29
  }[] | undefined;
30
30
  }[], DemandPeriod[] | {
@@ -33,6 +33,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
33
33
  n: number;
34
34
  roles?: {
35
35
  position: string;
36
+ positionId?: string | undefined;
36
37
  n: number;
37
38
  }[] | undefined;
38
39
  }[]>;
@@ -65,6 +66,13 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
65
66
  }[]>;
66
67
  toggleCustomDay: (i: number) => void;
67
68
  applyNote: import("vue").ComputedRef<string>;
69
+ replaceConfirmOpen: import("vue").ComputedRef<boolean>;
70
+ replaceConfirmTitle: import("vue").ComputedRef<"Replace existing demand?" | "Clear existing demand?">;
71
+ replaceConfirmActionLabel: import("vue").ComputedRef<"Confirm" | "Clear demand">;
72
+ replaceConfirmMessage: import("vue").ComputedRef<"Demand already exists on the dates below. Applying this demand will replace it on all selected dates." | "Demand exists on the dates below. Saving an empty time range will clear it on all selected dates.">;
73
+ replaceConfirmDates: import("vue").ComputedRef<string[]>;
74
+ confirmReplace: () => Promise<void>;
75
+ cancelReplace: () => void;
68
76
  overlapWarning: import("vue").ComputedRef<string>;
69
77
  whenLabel: import("vue").ComputedRef<string>;
70
78
  openFor: (idx: number) => void;
@@ -115,6 +123,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
115
123
  n: number;
116
124
  roles?: {
117
125
  position: string;
126
+ positionId?: string | undefined;
118
127
  n: number;
119
128
  }[] | undefined;
120
129
  }[];
@@ -126,6 +135,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
126
135
  n: number;
127
136
  roles?: {
128
137
  position: string;
138
+ positionId?: string | undefined;
129
139
  n: number;
130
140
  }[] | undefined;
131
141
  }[];
@@ -151,6 +161,6 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
151
161
  openCopy: () => void;
152
162
  closeCopy: () => void;
153
163
  confirmCopy: () => Promise<void>;
154
- setApply: (k: DemandApplyMode) => DemandApplyMode;
164
+ setApply: (mode: DemandApplyMode) => void;
155
165
  };
156
166
  export type ScheduleDemandSheetApi = ReturnType<typeof useScheduleDemandSheet>;
@@ -50,5 +50,6 @@ export declare function useScheduleDragDrop(board: ScheduleBoardApi): {
50
50
  setDragHover: (empId: number, dayIdx: number, onCard: boolean, slotIndex: number | null) => void;
51
51
  clearDragHover: (empId: number, dayIdx: number) => void;
52
52
  dropOnCell: (targetEmpId: number, targetDayIdx: number) => void;
53
+ dropOnPosition: (targetDayIdx: number, targetPosition: string, allowLocked?: boolean) => void;
53
54
  };
54
55
  export type ScheduleDragDropApi = ReturnType<typeof useScheduleDragDrop>;
@@ -1,11 +1,24 @@
1
+ import { type ComputedRef } from 'vue';
1
2
  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>;
3
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
4
+ export declare function useScheduleEmployeeAccess(form: ScheduleAddEmployeeForm, options?: {
5
+ excludePosUserId?: ComputedRef<string | undefined>;
6
+ }): {
7
+ passcodeValue: ComputedRef<string>;
8
+ passcodeOk: ComputedRef<boolean>;
6
9
  setPasscodeDigit: (index: number, value: string) => void;
7
- generatePasscode: () => void;
10
+ generatePasscode: () => Promise<void>;
11
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
8
12
  togglePosAccess: () => void;
9
- setPosRole: (roleId: string) => void;
10
- posRoleOptions: import("vue").ComputedRef<Role[]>;
13
+ addPosRoleRow: () => void;
14
+ removePosRoleRow: (index: number) => void;
15
+ isCurrentOutletRow: (index: number) => boolean;
16
+ setPosRoleOutlet: (index: number, outlet: string) => void;
17
+ setPosRoleId: (index: number, roleId: string) => void;
18
+ posRoleOptionsFor: (outlet: string) => Role[];
19
+ isPosRoleUsable: (role: Role) => boolean;
20
+ setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
21
+ isPosOutletUsable: (outlet: string) => boolean;
22
+ setMasterUserRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
23
+ posRolesHint: 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.">;
11
24
  };
@@ -4,7 +4,7 @@ export declare function useScheduleEmployeeAvailability(form: ScheduleAddEmploye
4
4
  dayLit: (index: number) => boolean;
5
5
  avLabel: ComputedRef<"Weekly availability" | "Time off days">;
6
6
  avAllLabel: ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
7
- maxHoursPlaceholder: ComputedRef<"Hours per week" | "No cap">;
7
+ maxHoursPlaceholder: ComputedRef<string>;
8
8
  ensureAvailHours: (index: number) => void;
9
9
  toggleAvailDay: (index: number) => void;
10
10
  availAll: () => void;
@@ -12,13 +12,17 @@ interface UseScheduleEmployeeCandidatesOptions {
12
12
  value: boolean;
13
13
  };
14
14
  onPicked: (employeeId: string) => void;
15
- onPrefillPasscode: (employeeId: string) => void;
15
+ onPrefillPasscode: (employeeId: string) => void | Promise<void>;
16
+ onPrefillPosRoles: (employeeId: string) => void | Promise<void>;
17
+ onPrefillPosRoleAccess: (roleIds: string[] | null | undefined) => void;
18
+ onPrefillPosRestaurantAccess: (restaurantIds: string[] | null | undefined) => void;
16
19
  }
17
20
  /** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
18
21
  export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
19
22
  selectExistingOpen: import("vue").Ref<boolean, boolean>;
20
23
  candidatesLoading: import("vue").Ref<boolean, boolean>;
21
24
  candidatesError: import("vue").Ref<string | null, string | null>;
25
+ selectingExisting: import("vue").Ref<boolean, boolean>;
22
26
  openSelectExisting: () => void;
23
27
  closeSelectExisting: () => void;
24
28
  pickExisting: (employeeId: string) => Promise<void>;
@@ -12,8 +12,13 @@ interface UseScheduleEmployeePersistenceOptions {
12
12
  board: ScheduleBoardApi;
13
13
  editingEmployeeId: Ref<number | null>;
14
14
  originalLocations: Ref<string[]>;
15
+ originalPosRoles: Ref<{
16
+ outlet: string;
17
+ roleId: string;
18
+ }[]>;
15
19
  effectiveRate: ComputedRef<number>;
16
20
  passcodeValue: ComputedRef<string>;
21
+ deferScheduleWrites: Ref<boolean>;
17
22
  notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
18
23
  }
19
24
  /** Persistence for an existing business employee being added to this schedule. */
@@ -4,15 +4,15 @@ interface UseScheduleEmployeeValidationOptions {
4
4
  form: ScheduleAddEmployeeForm;
5
5
  submitAttempted: Ref<boolean>;
6
6
  passcodeOk: ComputedRef<boolean>;
7
- isNewUser: ComputedRef<boolean>;
8
7
  }
9
8
  /** Validation guards for the add/edit employee form. Keeping them together makes create and
10
9
  * the field-level error indicators consume the same rules. */
11
10
  export declare function useScheduleEmployeeValidation(options: UseScheduleEmployeeValidationOptions): {
12
11
  nameError: ComputedRef<boolean>;
13
12
  passError: ComputedRef<boolean>;
13
+ posRolesOk: ComputedRef<boolean>;
14
+ posRolesError: ComputedRef<boolean>;
14
15
  availabilityOk: ComputedRef<boolean>;
15
16
  availabilityError: ComputedRef<boolean>;
16
- masterCodeError: ComputedRef<boolean>;
17
17
  };
18
18
  export {};
@@ -21,6 +21,7 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
21
21
  over: number;
22
22
  roles: {
23
23
  position: string;
24
+ positionId?: string | undefined;
24
25
  n: number;
25
26
  required: number;
26
27
  got: number;
@@ -41,6 +42,7 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
41
42
  over: number;
42
43
  roles: {
43
44
  position: string;
45
+ positionId?: string | undefined;
44
46
  n: number;
45
47
  required: number;
46
48
  got: number;
@@ -1,7 +1,7 @@
1
1
  import { type Ref } from 'vue';
2
2
  import type { ScheduleOnboardingDayHours, ScheduleOnboardingRange } from './onboarding-types';
3
3
  import type { SchedulePositionsApi } from './useSchedulePositions';
4
- export declare function useScheduleOnboardingDemand(hours: ScheduleOnboardingDayHours[], positions: SchedulePositionsApi, note: Ref<string>): {
4
+ export declare function useScheduleOnboardingDemand(hours: ScheduleOnboardingDayHours[], positions: SchedulePositionsApi, note: Ref<string>, isPastDay?: (dayIdx: number) => boolean): {
5
5
  demand: import("vue").Reactive<ScheduleOnboardingRange[][]>;
6
6
  dmDay: Ref<number, number>;
7
7
  staffingSaving: Ref<boolean, boolean>;
@@ -22,10 +22,12 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
22
22
  contractHours?: number | undefined;
23
23
  rate: number;
24
24
  positions: string[];
25
+ archivedPositions?: string[] | undefined;
25
26
  shifts: ({
26
27
  start: string;
27
28
  end: string;
28
29
  role: string;
30
+ positionId?: string | undefined;
29
31
  status: import("../types").ShiftStatus;
30
32
  clock?: {
31
33
  in: string | null;
@@ -74,6 +76,7 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
74
76
  start: string;
75
77
  end: string;
76
78
  role: string;
79
+ positionId?: string | undefined;
77
80
  status: import("../types").ShiftStatus;
78
81
  clock?: {
79
82
  in: string | null;
@@ -98,6 +101,28 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
98
101
  updatedAt?: string | undefined;
99
102
  splitGroupId?: string | undefined;
100
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;
101
126
  remarks: {
102
127
  author: string;
103
128
  date: string;
@@ -112,9 +137,16 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
112
137
  payBasis?: "hourly" | "monthly" | undefined;
113
138
  payAmount?: number | undefined;
114
139
  maxHours?: number | undefined;
115
- maxOtHours?: number | undefined;
116
140
  minHours?: number | undefined;
117
- otAfterDaily?: number | undefined;
141
+ minHoursPerDay?: number | undefined;
142
+ workingHours?: {
143
+ minHoursPerDay: number | null;
144
+ maxHoursPerDay: number | null;
145
+ maxHoursPerWeek: number | null;
146
+ } | undefined;
147
+ overtime?: {
148
+ maxHoursPerMonth: number | null;
149
+ } | undefined;
118
150
  preferences?: string[] | undefined;
119
151
  seniority?: "senior" | "junior" | "" | undefined;
120
152
  availDays?: boolean[] | undefined;
@@ -123,6 +155,7 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
123
155
  to: string;
124
156
  }[] | undefined;
125
157
  passcode?: string | undefined;
158
+ code?: string | undefined;
126
159
  masterUser?: boolean | undefined;
127
160
  };
128
161
  row: TeamRow;
@@ -137,10 +170,18 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
137
170
  end: string;
138
171
  }[]>;
139
172
  rawEmployee: (empId: number) => {
173
+ overtime?: {
174
+ maxHoursPerMonth: number | null;
175
+ } | undefined;
176
+ minHoursPerDay?: number | null | undefined;
177
+ workingHours?: {
178
+ minHoursPerDay: number | null;
179
+ maxHoursPerDay: number | null;
180
+ maxHoursPerWeek: number | null;
181
+ } | undefined;
140
182
  name: string;
141
183
  employeeId: string;
142
184
  employmentType: "FULLTIME" | "PARTTIME";
143
- workingHour: number;
144
185
  wage: {
145
186
  type: "HOURLY" | "MONTHLY";
146
187
  amount: number;
@@ -162,7 +203,10 @@ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardi
162
203
  seedEmployees: (missingOnly?: boolean) => void;
163
204
  pickAll: (checked: boolean) => void;
164
205
  setPosition: (empId: number, value: string) => void;
206
+ removePositionFromRows: (position: string) => void;
207
+ toggleSecond: (empId: number, position: string) => void;
165
208
  setEmployment: (empId: number, kind: TeamEmployment) => void;
209
+ maxHoursFor: (employment: TeamEmployment) => number | null;
166
210
  setHours: (empId: number, value: string) => void;
167
211
  setRate: (empId: number, value: string) => void;
168
212
  bulkOpen: import("vue").Ref<boolean, boolean>;