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

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 (94) hide show
  1. package/dist/{ApprovalCodeList-dn-WwNAd.js → ApprovalCodeList-D5l9vIsE.js} +2 -2
  2. package/dist/{AuditLogList-BqVp9fxD.js → AuditLogList-ByTa5UJY.js} +3 -3
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DnAet2oc.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-mNdn1TYV.js} +2 -2
  4. package/dist/{EmployeeList-BwTJre5k.js → EmployeeList-Bv6ANk-P.js} +8 -9
  5. package/dist/{GrantUserList-CZek1r4F.js → GrantUserList-Bt8w3p4j.js} +3 -3
  6. package/dist/{Main-MjSYZdOq.js → Main-DHJcgePj.js} +5 -5
  7. package/dist/{Main-CbmA-SYo.js → Main-DkP8dWgn.js} +9 -9
  8. package/dist/{Main-DVA51sj2.js → Main-DqiGpT4v.js} +2 -2
  9. package/dist/{PermissionSetList-lkHmXhNm.js → PermissionSetList-BIGv1u67.js} +10 -11
  10. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-cFQDQCal.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-niywl_DX.js} +687 -688
  11. package/dist/{RoleList-BSs0SmFo.js → RoleList-CH6NDKPU.js} +7 -7
  12. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-T1ACkX_6.js +426 -0
  13. package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-BzQuLLf5.js +690 -0
  14. package/dist/ScheduleGeneralPage-DJPENJZ2.js +320 -0
  15. package/dist/SchedulePage-C1egcbIC.js +14421 -0
  16. package/dist/SchedulePositionPage-OhL_hsqG.js +293 -0
  17. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-B8W4sTsA.js +242 -0
  18. package/dist/{TeamMemberList-Dit_nV6d.js → TeamMemberList-BwfG3go2.js} +8 -9
  19. package/dist/{TimesheetList-B-FlRO7E.js → TimesheetList-DcoqzbLO.js} +5 -5
  20. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DZUJR8K_.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-RyhiKTSd.js} +2 -2
  21. package/dist/{app-BpnOPodL.js → app-BcZ6C8M8.js} +8 -8
  22. package/dist/app.js +1 -1
  23. package/dist/{dayjs.min-4GLfSOGZ.js → dayjs.min-Ch0iysTG.js} +1 -1
  24. package/dist/employee-DwYHFacQ.js +204 -0
  25. package/dist/{index-DYoVJQTd.js → iteration-D1uWLp0V.js} +726 -698
  26. package/dist/{lodash-CcFIMCiJ.js → lodash-DErxm7xf.js} +1 -1
  27. package/dist/{role-OXCiWTVq.js → role-B9VanAny.js} +3 -4
  28. package/dist/{rule-8iyCO_LZ.js → rule-C4f_Ilzr.js} +36 -37
  29. package/dist/src/api/schedule/index.d.ts +0 -3
  30. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +1 -2
  31. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +1 -2
  32. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +1 -2
  33. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +5 -1
  34. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +5 -1
  35. package/dist/src/views/scheduling/components/ScheduleAddPositionModal.vue.d.ts +6 -0
  36. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +5 -1
  37. package/dist/src/views/scheduling/components/ScheduleButton.vue.d.ts +23 -0
  38. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +1 -1
  39. package/dist/src/views/scheduling/components/ScheduleEmployeeMenu.vue.d.ts +6 -0
  40. package/dist/src/views/scheduling/components/ScheduleGridSkeleton.vue.d.ts +2 -0
  41. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +4 -2
  42. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +3 -0
  43. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +32 -2
  44. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +4 -0
  45. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +5 -1
  46. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -0
  47. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -2
  48. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +8 -2
  49. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +4 -6
  50. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +5 -0
  51. package/dist/src/views/scheduling/composables/schedule-popover-position.d.ts +16 -0
  52. package/dist/src/views/scheduling/composables/scheduleAutoSolver.d.ts +21 -0
  53. package/dist/src/views/scheduling/composables/useCollapsedList.d.ts +9 -0
  54. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +12 -0
  55. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +14 -7
  56. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +11 -2
  57. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +18 -11
  58. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +11 -0
  59. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +5 -3
  60. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -5
  61. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +12 -4
  62. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +7 -1
  63. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +11 -2
  64. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +35 -0
  65. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +2 -0
  66. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +53 -3
  67. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1192 -55
  68. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +1 -0
  69. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +50 -0
  70. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -0
  71. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +10 -1
  72. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
  73. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +5 -5
  74. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -0
  75. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +7 -0
  76. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +4 -1
  77. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +6 -1
  78. package/dist/src/views/scheduling/composables/useScheduleViewportFit.d.ts +9 -0
  79. package/dist/src/views/scheduling/data.d.ts +6 -1
  80. package/dist/src/views/scheduling/schedule-store.d.ts +36 -1
  81. package/dist/src/views/scheduling/types.d.ts +14 -1
  82. package/dist/style.css +1 -1
  83. package/dist/tsconfig.app.tsbuildinfo +1 -1
  84. package/dist/{useReportPermissions-C3fuFTUC.js → useReportPermissions-CTr56kBo.js} +3 -3
  85. package/package.json +1 -1
  86. package/dist/ScheduleGeneralPage-DD9n2TUe.js +0 -242
  87. package/dist/SchedulePage-B0X97zVC.js +0 -10761
  88. package/dist/SchedulePositionPage-BXz1USn3.js +0 -220
  89. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DAHke2rH.js +0 -201
  90. package/dist/employee-ChdVnSmd.js +0 -139
  91. package/dist/index-CilJxsY7.js +0 -70
  92. package/dist/iteration-CcXrOMQe.js +0 -30
  93. package/dist/useScheduleOutlet-TPZJHgSY.js +0 -546
  94. package/dist/useSchedulePositions-DCkaKHQm.js +0 -103
@@ -19,6 +19,7 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
19
19
  payBasis: "hourly" | "monthly";
20
20
  payAmount: string;
21
21
  maxHours: string;
22
+ minHours: string;
22
23
  otAfterDaily: string;
23
24
  maxOtHours: string;
24
25
  availDays: boolean[];
@@ -32,6 +33,8 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
32
33
  seniority: "" | "senior" | "junior";
33
34
  passcode: string[];
34
35
  masterUser: boolean;
36
+ roleId: string;
37
+ masterCode: string;
35
38
  };
36
39
  sectionId: import("vue").Ref<string, string>;
37
40
  isEditing: import("vue").ComputedRef<boolean>;
@@ -48,6 +51,15 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
48
51
  effectiveRate: import("vue").ComputedRef<number>;
49
52
  passcodeValue: import("vue").ComputedRef<string>;
50
53
  passcodeOk: import("vue").ComputedRef<boolean>;
54
+ currentLocationLabel: import("vue").ComputedRef<string>;
55
+ roleOptions: import("vue").ComputedRef<{
56
+ value: string;
57
+ label: string;
58
+ }[]>;
59
+ roleError: import("vue").ComputedRef<boolean>;
60
+ masterCodeError: import("vue").ComputedRef<boolean>;
61
+ isNewUser: import("vue").ComputedRef<boolean>;
62
+ needsRole: import("vue").ComputedRef<boolean>;
51
63
  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.">;
52
64
  primaryRoleLabel: import("vue").ComputedRef<string>;
53
65
  locationsSummary: import("vue").ComputedRef<string>;
@@ -1,16 +1,15 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleDemandApi } from './useScheduleDemand';
3
+ import { type ScheduleAnchorRect } from './schedule-popover-position';
3
4
  export interface ScheduleAddPickState {
4
5
  open: boolean;
5
6
  empId: number | null;
6
7
  dayIdx: number | null;
8
+ /** Measured rect of the cell the popup opened from; the popup component places itself from it
9
+ * once rendered (V6.2 placePopover), writing the result to `left`/`top`. */
10
+ anchor: ScheduleAnchorRect | null;
7
11
  left: number;
8
- /** Only one of `top`/`bottom` is live at a time, picked by `openAbove` — anchoring from the
9
- * bottom when flipped up lets the box grow with its own content (the query input plus
10
- * however many pick-list rows there are) instead of a height guessed in JS. */
11
12
  top: number;
12
- bottom: number;
13
- openAbove: boolean;
14
13
  }
15
14
  export interface ScheduleAddPickLeaveOption {
16
15
  reason: string;
@@ -21,6 +20,8 @@ export interface ScheduleAddPickSuggestion {
21
20
  end: string;
22
21
  short: number;
23
22
  label: string;
23
+ /** "Covers 16:00–22:00 demand" — the demand this offer answers, shown under the label. */
24
+ covers: string;
24
25
  title: string;
25
26
  }
26
27
  /** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
@@ -35,15 +36,21 @@ export interface ScheduleAddPickSuggestion {
35
36
  export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: ScheduleDemandApi, handlers: {
36
37
  onCommitted: (message: string) => void;
37
38
  onOpenFullEditor: (empId: number, dayIdx: number) => void;
39
+ /** The leave editor, on this cell. `reason` is the row's own type, or null for the plain "Leave" row. */
40
+ onOpenLeave: (empId: number, dayIdx: number, reason: string | null) => void;
38
41
  }): {
39
42
  state: {
40
43
  open: boolean;
41
44
  empId: number | null;
42
45
  dayIdx: number | null;
46
+ anchor: {
47
+ left: number;
48
+ right: number;
49
+ top: number;
50
+ bottom: number;
51
+ } | null;
43
52
  left: number;
44
53
  top: number;
45
- bottom: number;
46
- openAbove: boolean;
47
54
  };
48
55
  query: import("vue").Ref<string, string>;
49
56
  parsedRange: import("vue").ComputedRef<{
@@ -51,6 +51,11 @@ export interface ScheduleAssignGroup {
51
51
  export interface ScheduleAssignSlot {
52
52
  key: string;
53
53
  position: string;
54
+ /** One requirement of a demand gap: shows whether the people scheduled fulfil it (progress bar),
55
+ * and can be picked to assign people as that position. */
56
+ tracker?: boolean;
57
+ /** 0–100, for a tracker's progress bar. */
58
+ pct?: number;
54
59
  start: string;
55
60
  end: string;
56
61
  chip: string;
@@ -98,14 +103,18 @@ export declare function useScheduleAssign(board: ScheduleBoardApi, demand: Sched
98
103
  breakMins?: number | undefined;
99
104
  } | null>;
100
105
  title: import("vue").ComputedRef<string>;
101
- sub: import("vue").ComputedRef<string>;
106
+ subParts: import("vue").ComputedRef<{
107
+ position: string;
108
+ range: string;
109
+ duration: string;
110
+ } | null>;
102
111
  footLead: import("vue").ComputedRef<string>;
103
112
  footRest: import("vue").ComputedRef<string>;
104
113
  groups: import("vue").ComputedRef<ScheduleAssignGroup[]>;
105
114
  shiftSlots: import("vue").ComputedRef<ScheduleAssignSlot[]>;
106
115
  switchTo: (slot: ScheduleAssignSlot) => void;
107
116
  openFor: (openShiftId: number) => void;
108
- openForGap: (dayIdx: number, position: string, start: string, end: string, required: number, scheduled: number, gapFrom: number, gapTo: number) => void;
117
+ openForGap: (dayIdx: number, _position: string, start: string, end: string, required: number, scheduled: number, gapFrom: number, gapTo: number) => void;
109
118
  close: () => void;
110
119
  fillOpenShift: (openShiftId: number, empId: number) => void;
111
120
  armAssign: (empId: number) => void;
@@ -7,6 +7,11 @@ export interface ScheduleAutoScheduleOptions {
7
7
  fillGaps: boolean;
8
8
  objective: FdtoScheduleAutoScheduleObjective;
9
9
  allowOvertime: boolean;
10
+ /** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
11
+ * (availability and time off are always respected; patterns and cost ride on the objective). */
12
+ respectAvailability: boolean;
13
+ followPatterns: boolean;
14
+ costEfficient: boolean;
10
15
  }
11
16
  /** Backend-powered draft generation and local proposal review. Generation never writes;
12
17
  * accepted proposals use the board's existing assignment persistence path. */
@@ -17,6 +22,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
17
22
  fillGaps: boolean;
18
23
  objective: FdtoScheduleAutoScheduleObjective;
19
24
  allowOvertime: boolean;
25
+ respectAvailability: boolean;
26
+ followPatterns: boolean;
27
+ costEfficient: boolean;
20
28
  };
21
29
  generating: import("vue").Ref<boolean, boolean>;
22
30
  generateError: import("vue").Ref<string | null, string | null>;
@@ -94,22 +102,16 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
94
102
  solver: string;
95
103
  } | null>;
96
104
  gapCount: import("vue").ComputedRef<number>;
105
+ hasDemand: import("vue").ComputedRef<boolean>;
106
+ noDemandOpen: import("vue").Ref<boolean, boolean>;
107
+ rangeLabel: import("vue").ComputedRef<string>;
97
108
  openWizard: () => void;
98
109
  closeWizard: () => void;
99
110
  next: () => void;
100
111
  back: () => void;
101
112
  generate: () => Promise<void>;
102
- reviewMode: import("vue").Ref<boolean, boolean>;
103
- proposals: import("vue").Ref<{
104
- id: number;
105
- empId: number;
106
- dayIdx: number;
107
- start: string;
108
- end: string;
109
- role: string;
110
- openId?: number | undefined;
111
- status: "pending" | "rejected";
112
- }[], Proposal[] | {
113
+ reviewMode: import("vue").ComputedRef<boolean>;
114
+ proposals: import("vue").ComputedRef<{
113
115
  id: number;
114
116
  empId: number;
115
117
  dayIdx: number;
@@ -118,7 +120,10 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
118
120
  role: string;
119
121
  openId?: number | undefined;
120
122
  status: "pending" | "rejected";
123
+ weekKey?: string | undefined;
124
+ reason?: string | undefined;
121
125
  }[]>;
126
+ weekHasProposals: import("vue").ComputedRef<boolean>;
122
127
  unmetCount: import("vue").Ref<number, number>;
123
128
  acceptedCount: import("vue").ComputedRef<number>;
124
129
  rejectedCount: import("vue").ComputedRef<number>;
@@ -128,6 +133,8 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
128
133
  conflictCount: import("vue").ComputedRef<number>;
129
134
  projectedCost: import("vue").ComputedRef<number | null>;
130
135
  proposalAt: (empId: number, dayIdx: number) => Proposal | undefined;
136
+ draggingId: import("vue").Ref<number | null, number | null>;
137
+ moveProposal: (id: number, empId: number, dayIdx: number) => string | null;
131
138
  toggleReject: (id: number) => void;
132
139
  rejectAll: () => void;
133
140
  exitReview: () => void;
@@ -56,6 +56,8 @@ export declare function useScheduleBoard(handlers?: {
56
56
  reason: string;
57
57
  half?: boolean | undefined;
58
58
  halfPart?: "AM" | "PM" | undefined;
59
+ from?: string | undefined;
60
+ to?: string | undefined;
59
61
  appliedOn?: string | undefined;
60
62
  note?: string | undefined;
61
63
  cert?: {
@@ -98,6 +100,7 @@ export declare function useScheduleBoard(handlers?: {
98
100
  payAmount?: number | undefined;
99
101
  maxHours?: number | undefined;
100
102
  maxOtHours?: number | undefined;
103
+ minHours?: number | undefined;
101
104
  otAfterDaily?: number | undefined;
102
105
  preferences?: string[] | undefined;
103
106
  seniority?: "senior" | "junior" | "" | undefined;
@@ -139,6 +142,8 @@ export declare function useScheduleBoard(handlers?: {
139
142
  reason: string;
140
143
  half?: boolean | undefined;
141
144
  halfPart?: "AM" | "PM" | undefined;
145
+ from?: string | undefined;
146
+ to?: string | undefined;
142
147
  appliedOn?: string | undefined;
143
148
  note?: string | undefined;
144
149
  cert?: {
@@ -181,6 +186,7 @@ export declare function useScheduleBoard(handlers?: {
181
186
  payAmount?: number | undefined;
182
187
  maxHours?: number | undefined;
183
188
  maxOtHours?: number | undefined;
189
+ minHours?: number | undefined;
184
190
  otAfterDaily?: number | undefined;
185
191
  preferences?: string[] | undefined;
186
192
  seniority?: "senior" | "junior" | "" | undefined;
@@ -228,6 +234,7 @@ export declare function useScheduleBoard(handlers?: {
228
234
  end: string;
229
235
  breakMins?: number | undefined;
230
236
  }[]>;
237
+ highlightEmpId: import("vue").Ref<number | null, number | null>;
231
238
  rangeStart: import("vue").Ref<Date, Date>;
232
239
  weekOffset: import("vue").ComputedRef<number>;
233
240
  peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
@@ -283,6 +290,8 @@ export declare function useScheduleBoard(handlers?: {
283
290
  reason: string;
284
291
  half?: boolean | undefined;
285
292
  halfPart?: "AM" | "PM" | undefined;
293
+ from?: string | undefined;
294
+ to?: string | undefined;
286
295
  appliedOn?: string | undefined;
287
296
  note?: string | undefined;
288
297
  cert?: {
@@ -342,6 +351,8 @@ export declare function useScheduleBoard(handlers?: {
342
351
  reason: string;
343
352
  half?: boolean | undefined;
344
353
  halfPart?: "AM" | "PM" | undefined;
354
+ from?: string | undefined;
355
+ to?: string | undefined;
345
356
  appliedOn?: string | undefined;
346
357
  note?: string | undefined;
347
358
  cert?: {
@@ -10,8 +10,10 @@ export interface ScheduleCopySkipReport {
10
10
  * board's per-week-offset bucket cache instead of the mockup's absolute 91-day horizon. Split
11
11
  * shifts (copyUnitsOf in the mockup) aren't ported — WorkSlot has no splitId concept in this
12
12
  * data model, so each slot is copied as its own unit. */
13
- export declare function useScheduleCopyWeek(board: ScheduleBoardApi): {
14
- copyLastWeek: (mode: "staffed" | "open") => void;
15
- copyThisWeekForward: (mode: "staffed" | "open") => void;
13
+ export declare function useScheduleCopyWeek(board: ScheduleBoardApi, handlers?: {
14
+ onDemandChanged?: () => void;
15
+ }): {
16
+ copyLastWeek: (mode: "staffed" | "open") => Promise<void>;
17
+ copyThisWeekForward: (mode: "staffed" | "open") => Promise<void>;
16
18
  };
17
19
  export type ScheduleCopyWeekApi = ReturnType<typeof useScheduleCopyWeek>;
@@ -41,11 +41,6 @@ export interface ScheduleHourCell {
41
41
  title: string;
42
42
  n: number;
43
43
  }
44
- /** The day's hourly timeline (rows with shift bars placed by time), replacing the multi-day
45
- * grid for the one day Daily view is looking at. Ported from the mockup's
46
- * renderDayTimeline() + renderHourFooter() — the `else` (area) branch groups rows by position
47
- * instead of by employee, reusing the same axis/bar/lane geometry. Auto-Schedule proposal
48
- * review isn't carried over here; it stays week-view-only for now. */
49
44
  export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
50
45
  onAddShift: (empId: number, dayIdx: number) => void;
51
46
  onEditShift: (empId: number, dayIdx: number) => void;
@@ -1,4 +1,4 @@
1
- import type { CoverageSegment, DaySlot, DemandPeriod } from '../types';
1
+ import type { CoverageSegment, DaySlot, DemandPeriod, Employee, Proposal } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
3
  export declare function toMin(t: string): number;
4
4
  export declare function minToHHMM(m: number): string;
@@ -8,8 +8,7 @@ export declare function spanOf(start: string, end: string): [number, number];
8
8
  /** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
9
9
  * middle of one does not. */
10
10
  export declare function t12(hhmm: string): string;
11
- /** The terse form the timeline's two end labels use — "8a", "10:30p". At 8.5px there is room
12
- * for the hour and not for the meridiem spelled out. */
11
+ /** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
13
12
  export declare function minToShort(m: number): string;
14
13
  export declare function rangeText(from: number, to: number): string;
15
14
  export declare function roleTotalOf(p: DemandPeriod): number;
@@ -41,8 +40,17 @@ export declare function useScheduleDemand(board: ScheduleBoardApi): {
41
40
  setWeekdayDemand: (weekday: number, periods: DemandPeriod[]) => void;
42
41
  coverageAxis: (dayIdx: number) => ScheduleCoverageAxis;
43
42
  coverageSegments: (dayIdx: number) => CoverageSegment[];
44
- coverageImpact: (dayIdx: number, empId: number, slot: DaySlot) => {
43
+ setPreview: (items: Proposal[]) => void;
44
+ segmentsWith: (dayIdx: number, employees: Employee[]) => CoverageSegment[];
45
+ dayHeadcount: (dayIdx: number) => {
46
+ crew: number;
47
+ peak: number;
48
+ };
49
+ coverageImpact: (dayIdx: number, empId: number | null, slot: DaySlot) => {
45
50
  when: string;
51
+ pctBefore: number;
52
+ pctAfter: number;
53
+ stillShort: number;
46
54
  before: {
47
55
  required: number;
48
56
  scheduled: number;
@@ -9,6 +9,9 @@ export interface ScheduleDemandSheetOptions {
9
9
  onToast?: (message: string) => void;
10
10
  /** Positions the breakdown can name — the same list the shift editor offers. */
11
11
  positionOptions: () => string[];
12
+ /** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
13
+ * to name yet — the page opens its Add Position popup for that period. */
14
+ onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
12
15
  }
13
16
  /** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
14
17
  * real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
@@ -41,7 +44,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
41
44
  sub: string;
42
45
  } | {
43
46
  on: boolean;
44
- key: "weekday";
47
+ key: "every";
45
48
  label: string;
46
49
  sub: string;
47
50
  } | {
@@ -70,6 +73,8 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
70
73
  removePeriod: (i: number) => void;
71
74
  setHeads: (i: number, value: number | string) => void;
72
75
  addRole: (i: number) => void;
76
+ addRoleNamed: (i: number, position: string) => void;
77
+ requestNewPosition: (i: number, k: number) => void;
73
78
  removeRole: (i: number, k: number) => void;
74
79
  setRoleCount: (i: number, k: number, value: number | string) => void;
75
80
  setRolePosition: (i: number, k: number, position: string) => void;
@@ -78,6 +83,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
78
83
  when: string;
79
84
  required: number;
80
85
  scheduled: number;
86
+ varies: boolean;
81
87
  pct: number;
82
88
  tone: "short" | "part" | "met" | "over";
83
89
  note: string;
@@ -1,4 +1,4 @@
1
- import type { Employee } from '../types';
1
+ import type { Employee, Proposal } from '../types';
2
2
  /** The one form every SMALL avatar wears — `.sc-av`, `.ch-av`, `.ap-av`, `.tl-av`, and the
3
3
  * shift editor's `.sp2-who-av`. A tint of the person's colour behind their own colour, never a
4
4
  * solid fill with white text: at 17–30px the initials are the only identifier, and knocking
@@ -21,7 +21,16 @@ export interface ScheduleEmployeeLoad {
21
21
  pct: number;
22
22
  barColor: string;
23
23
  otHours: number;
24
+ /** Of `hours`, how many are auto-schedule suggestions not yet on the board. */
25
+ proposedHours: number;
26
+ /** The board's own hours as a fraction of contract: where the fill ends and the suggested part starts. */
27
+ boardPct: number;
28
+ /** The suggested part's width on the bar, as a fraction of contract. With no contract to measure
29
+ * against it fills the track, so suggested hours still show. */
30
+ proposedPct: number;
24
31
  }
32
+ /** This person's live (not rejected) suggestions in the week on screen. */
33
+ export declare function proposedSlotsOf(emp: Employee, proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined): Pick<Proposal, 'start' | 'end'>[];
25
34
  /** One person's load against their contract, derived from the shifts actually on the board
26
35
  * rather than from the stored `weekHours` field, so the bar can never disagree with the row
27
36
  * of cards beside it.
@@ -29,4 +38,4 @@ export interface ScheduleEmployeeLoad {
29
38
  * The staff rail (area view) and the grid's name column (employee view) are the same list of
30
39
  * the same people; they used to be two pieces of markup reading two different numbers. This
31
40
  * is the single one — the mockup's own note on empIdentityHTML(). */
32
- export declare function employeeLoadOf(emp: Employee): ScheduleEmployeeLoad;
41
+ export declare function employeeLoadOf(emp: Employee, proposed?: Pick<Proposal, 'start' | 'end'>[]): ScheduleEmployeeLoad;
@@ -0,0 +1,35 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleAnchorRect } from './schedule-popover-position';
3
+ export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'hl' | 'remove';
4
+ export interface ScheduleEmployeeMenuState {
5
+ open: boolean;
6
+ empId: number | null;
7
+ anchor: ScheduleAnchorRect | null;
8
+ left: number;
9
+ top: number;
10
+ }
11
+ /** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, highlight, remove. The actions that need a page-level surface (profile panel,
12
+ * edit wizard, confirm dialog) come in as handlers; highlight lives here. */
13
+ export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
14
+ onProfile: (empId: number) => void;
15
+ onEdit: (empId: number) => void;
16
+ onRemove: (empId: number) => void;
17
+ }): {
18
+ state: {
19
+ open: boolean;
20
+ empId: number | null;
21
+ anchor: {
22
+ left: number;
23
+ right: number;
24
+ top: number;
25
+ bottom: number;
26
+ } | null;
27
+ left: number;
28
+ top: number;
29
+ };
30
+ employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
31
+ openFor: (empId: number, anchor: HTMLElement) => void;
32
+ close: () => void;
33
+ go: (action: ScheduleEmployeeMenuAction) => void;
34
+ };
35
+ export type ScheduleEmployeeMenuApi = ReturnType<typeof useScheduleEmployeeMenu>;
@@ -55,6 +55,8 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
55
55
  dayIdx: number;
56
56
  } | null>;
57
57
  view: import("vue").ComputedRef<{
58
+ crew: number;
59
+ peak: number;
58
60
  when: string;
59
61
  day: string;
60
62
  none: boolean;
@@ -1,20 +1,70 @@
1
+ import type { LeaveSlot } from '../types';
1
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';
2
9
  export interface ScheduleLeaveState {
3
10
  open: boolean;
4
11
  empId: number | null;
5
12
  dayIdx: number | null;
13
+ /** Booking a new record, rather than editing one that is already on the day. */
14
+ isNew: boolean;
15
+ reason: string;
16
+ mode: ScheduleLeaveMode;
17
+ /** The hours when mode is 'custom'. */
18
+ from: string;
19
+ to: string;
6
20
  }
7
- /** Approve / reject / remove a leave record on a day — the mockup's leave editor modal. */
21
+ /** 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
23
+ * (booking) and from an existing leave card (editing, or approving a pending request). */
8
24
  export declare function useScheduleLeave(board: ScheduleBoardApi): {
9
25
  state: {
10
26
  open: boolean;
11
27
  empId: number | null;
12
28
  dayIdx: number | null;
29
+ isNew: boolean;
30
+ reason: string;
31
+ mode: ScheduleLeaveMode;
32
+ from: string;
33
+ to: string;
13
34
  };
14
- activeSlot: import("vue").ComputedRef<import("../types").LeaveSlot | null>;
15
- openFor: (empId: number, dayIdx: number) => void;
35
+ employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
36
+ activeSlot: import("vue").ComputedRef<LeaveSlot | null>;
37
+ 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";
45
+ } | {
46
+ hrs: string;
47
+ mode: "am";
48
+ name: "Morning";
49
+ } | {
50
+ hrs: string;
51
+ mode: "pm";
52
+ name: "Afternoon";
53
+ })[]>;
54
+ span: import("vue").ComputedRef<{
55
+ from: string;
56
+ to: string;
57
+ hours: number;
58
+ }>;
59
+ valid: import("vue").ComputedRef<boolean>;
60
+ dayLabel: import("vue").ComputedRef<string>;
61
+ hoursText: import("vue").ComputedRef<string>;
62
+ coverText: import("vue").ComputedRef<string>;
63
+ openFor: (empId: number, dayIdx: number, reason?: string | null) => void;
16
64
  close: () => void;
65
+ save: () => void;
17
66
  approve: () => void;
18
67
  reject: () => void;
19
68
  remove: () => void;
20
69
  };
70
+ export type ScheduleLeaveApi = ReturnType<typeof useScheduleLeave>;