@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
@@ -6,9 +6,11 @@ import type { ScheduleSelectOption } from '../components/ScheduleSelect.vue';
6
6
  * the outlet that was already being looked at. Only when the shell has no opinion does this
7
7
  * fall back to the first outlet in the business, which is better than an empty board.
8
8
  *
9
- * Switching from the picker deliberately does NOT write back to the shell: the URL is the
10
- * shell's to own, and a board that silently repoints the whole portal is doing more than the
11
- * control it was clicked on said it would. */
9
+ * Switching from the picker writes the new id back into `?restaurantId=` too — via
10
+ * `router.replace`, not a navigation, so it does not reload the page or add a history entry.
11
+ * The picker already re-fetches everything the new outlet needs (see switchTo below); this just
12
+ * keeps the address bar honest about which one is on screen, so a refresh or a copied link lands
13
+ * back on it instead of silently snapping to whatever the shell had before. */
12
14
  export declare function useScheduleOutlet(): {
13
15
  options: import("vue").ComputedRef<ScheduleSelectOption[]>;
14
16
  ready: import("vue").Ref<boolean, boolean>;
@@ -0,0 +1,9 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleDemandApi } from './useScheduleDemand';
3
+ import type { ScheduleOutletApi } from './useScheduleOutlet';
4
+ /** Owns SchedulePage's data bootstrap and loading lifecycle, separate from rendering concerns. */
5
+ export declare function useSchedulePageBootstrap(board: ScheduleBoardApi, demand: ScheduleDemandApi, outlet: ScheduleOutletApi): {
6
+ booting: import("vue").Ref<boolean, boolean>;
7
+ showSkeleton: import("vue").ComputedRef<boolean>;
8
+ applyStoredDemand: () => void;
9
+ };
@@ -0,0 +1,20 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleDemandApi } from './useScheduleDemand';
3
+ export type ClearKind = 'both' | 'shifts' | 'demand';
4
+ export declare const CLEAR_COPY: Record<ClearKind, {
5
+ title: string;
6
+ message: string;
7
+ confirm: string;
8
+ }>;
9
+ type Snackbar = {
10
+ open: (options: {
11
+ message: string;
12
+ type: 'error' | 'info' | 'success';
13
+ }) => void;
14
+ };
15
+ export declare function useSchedulePageClearActions(board: ScheduleBoardApi, demand: ScheduleDemandApi, snackbar: Snackbar): {
16
+ clearKind: import("vue").Ref<ClearKind | null, ClearKind | null>;
17
+ onConfirmClear: () => Promise<void>;
18
+ };
19
+ export type SchedulePageClearActionsApi = ReturnType<typeof useSchedulePageClearActions>;
20
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { ScheduleAddPickApi } from './useScheduleAddPick';
2
+ import type { ScheduleAllShiftsRowApi } from './useScheduleAllShiftsRow';
3
+ import type { ScheduleDayNoteApi } from './useScheduleDayNote';
4
+ import type { ScheduleGapPopoverApi } from './useScheduleGapPopover';
5
+ import type { ScheduleOpenShiftCardApi } from './useScheduleOpenShiftCard';
6
+ import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
7
+ import type { ScheduleTimePickerApi } from './useScheduleTimePicker';
8
+ import type { ScheduleTopbarApi } from './useScheduleTopbar';
9
+ export declare function useSchedulePageOverlays(apis: {
10
+ topbar: ScheduleTopbarApi;
11
+ dayNote: ScheduleDayNoteApi;
12
+ allShiftsRow: ScheduleAllShiftsRowApi;
13
+ gap: ScheduleGapPopoverApi;
14
+ timePicker: ScheduleTimePickerApi;
15
+ addPick: ScheduleAddPickApi;
16
+ shiftActions: ScheduleShiftActionsApi;
17
+ openShiftCard: ScheduleOpenShiftCardApi;
18
+ }): void;
@@ -39,7 +39,9 @@ export declare function useSchedulePositionModal(onCreated?: (positionName: stri
39
39
  allPicked: import("vue").ComputedRef<boolean>;
40
40
  nameTaken: import("vue").ComputedRef<boolean>;
41
41
  canSave: import("vue").ComputedRef<boolean>;
42
+ editingId: import("vue").Ref<string | null, string | null>;
42
43
  openNew: () => void;
44
+ openEdit: (id: string, currentName: string) => void;
43
45
  close: () => void;
44
46
  toggle: (employeeId: string) => void;
45
47
  toggleAll: () => void;
@@ -13,8 +13,6 @@ export declare function useSchedulePositions(): {
13
13
  count: import("vue").ComputedRef<number>;
14
14
  isAdding: import("vue").Ref<boolean, boolean>;
15
15
  newName: import("vue").Ref<string, string>;
16
- editingId: import("vue").Ref<string | null, string | null>;
17
- editingName: import("vue").Ref<string, string>;
18
16
  pendingDeleteId: import("vue").Ref<string | null, string | null>;
19
17
  saving: import("vue").Ref<boolean, boolean>;
20
18
  error: import("vue").Ref<string | null, string | null>;
@@ -22,9 +20,6 @@ export declare function useSchedulePositions(): {
22
20
  startAdd: () => void;
23
21
  cancelAdd: () => void;
24
22
  confirmAdd: () => Promise<void>;
25
- startEdit: (id: string) => void;
26
- cancelEdit: () => void;
27
- saveEdit: (id: string) => Promise<void>;
28
23
  askDelete: (id: string) => void;
29
24
  cancelDelete: () => void;
30
25
  confirmDelete: (id: string) => Promise<void>;
@@ -47,9 +47,23 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
47
47
  conflictReason?: string | undefined;
48
48
  openId?: number | undefined;
49
49
  breakMins?: number | undefined;
50
+ breaks?: ({
51
+ type: "DURATION";
52
+ minutes: number;
53
+ breakPayType: "PAID" | "UNPAID";
54
+ } | {
55
+ type: "TIME_RANGE";
56
+ startTime: string;
57
+ endTime: string;
58
+ breakPayType: "PAID" | "UNPAID";
59
+ })[] | undefined;
50
60
  assignmentId?: string | undefined;
61
+ splitGroupId?: string | undefined;
51
62
  } | {
52
63
  timeOff: "approved" | "pending";
64
+ requestId?: string | undefined;
65
+ type?: "OFF_DAY" | "LEAVE" | undefined;
66
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
53
67
  reason: string;
54
68
  half?: boolean | undefined;
55
69
  halfPart?: "AM" | "PM" | undefined;
@@ -80,7 +94,18 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
80
94
  conflictReason?: string | undefined;
81
95
  openId?: number | undefined;
82
96
  breakMins?: number | undefined;
97
+ breaks?: ({
98
+ type: "DURATION";
99
+ minutes: number;
100
+ breakPayType: "PAID" | "UNPAID";
101
+ } | {
102
+ type: "TIME_RANGE";
103
+ startTime: string;
104
+ endTime: string;
105
+ breakPayType: "PAID" | "UNPAID";
106
+ })[] | undefined;
83
107
  assignmentId?: string | undefined;
108
+ splitGroupId?: string | undefined;
84
109
  }[] | null)[];
85
110
  }[];
86
111
  }[]>;
@@ -12,6 +12,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
12
12
  filteredEmployees: import("vue").ComputedRef<{
13
13
  id: number;
14
14
  name: string;
15
+ employmentType: "FULLTIME" | "PARTTIME";
15
16
  role: string;
16
17
  initials: string;
17
18
  color: string;
@@ -34,9 +35,23 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
34
35
  conflictReason?: string | undefined;
35
36
  openId?: number | undefined;
36
37
  breakMins?: number | undefined;
38
+ breaks?: ({
39
+ type: "DURATION";
40
+ minutes: number;
41
+ breakPayType: "PAID" | "UNPAID";
42
+ } | {
43
+ type: "TIME_RANGE";
44
+ startTime: string;
45
+ endTime: string;
46
+ breakPayType: "PAID" | "UNPAID";
47
+ })[] | undefined;
37
48
  assignmentId?: string | undefined;
49
+ splitGroupId?: string | undefined;
38
50
  } | {
39
51
  timeOff: "approved" | "pending";
52
+ requestId?: string | undefined;
53
+ type?: "OFF_DAY" | "LEAVE" | undefined;
54
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
40
55
  reason: string;
41
56
  half?: boolean | undefined;
42
57
  halfPart?: "AM" | "PM" | undefined;
@@ -67,7 +82,18 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
67
82
  conflictReason?: string | undefined;
68
83
  openId?: number | undefined;
69
84
  breakMins?: number | undefined;
85
+ breaks?: ({
86
+ type: "DURATION";
87
+ minutes: number;
88
+ breakPayType: "PAID" | "UNPAID";
89
+ } | {
90
+ type: "TIME_RANGE";
91
+ startTime: string;
92
+ endTime: string;
93
+ breakPayType: "PAID" | "UNPAID";
94
+ })[] | undefined;
70
95
  assignmentId?: string | undefined;
96
+ splitGroupId?: string | undefined;
71
97
  }[] | null)[];
72
98
  remarks: {
73
99
  author: string;
@@ -99,6 +125,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
99
125
  orderedEmployees: import("vue").ComputedRef<{
100
126
  id: number;
101
127
  name: string;
128
+ employmentType: "FULLTIME" | "PARTTIME";
102
129
  role: string;
103
130
  initials: string;
104
131
  color: string;
@@ -121,9 +148,23 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
121
148
  conflictReason?: string | undefined;
122
149
  openId?: number | undefined;
123
150
  breakMins?: number | undefined;
151
+ breaks?: ({
152
+ type: "DURATION";
153
+ minutes: number;
154
+ breakPayType: "PAID" | "UNPAID";
155
+ } | {
156
+ type: "TIME_RANGE";
157
+ startTime: string;
158
+ endTime: string;
159
+ breakPayType: "PAID" | "UNPAID";
160
+ })[] | undefined;
124
161
  assignmentId?: string | undefined;
162
+ splitGroupId?: string | undefined;
125
163
  } | {
126
164
  timeOff: "approved" | "pending";
165
+ requestId?: string | undefined;
166
+ type?: "OFF_DAY" | "LEAVE" | undefined;
167
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
127
168
  reason: string;
128
169
  half?: boolean | undefined;
129
170
  halfPart?: "AM" | "PM" | undefined;
@@ -154,7 +195,18 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
154
195
  conflictReason?: string | undefined;
155
196
  openId?: number | undefined;
156
197
  breakMins?: number | undefined;
198
+ breaks?: ({
199
+ type: "DURATION";
200
+ minutes: number;
201
+ breakPayType: "PAID" | "UNPAID";
202
+ } | {
203
+ type: "TIME_RANGE";
204
+ startTime: string;
205
+ endTime: string;
206
+ breakPayType: "PAID" | "UNPAID";
207
+ })[] | undefined;
157
208
  assignmentId?: string | undefined;
209
+ splitGroupId?: string | undefined;
158
210
  }[] | null)[];
159
211
  remarks: {
160
212
  author: string;
@@ -184,6 +236,6 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
184
236
  masterUser?: boolean | undefined;
185
237
  }[]>;
186
238
  order: import("vue").Ref<number[], number[]>;
187
- reorder: (draggedId: number, targetId: number, after: boolean) => void;
239
+ reorder: (draggedId: number, targetId: number, after: boolean) => Promise<void>;
188
240
  };
189
241
  export type ScheduleRosterApi = ReturnType<typeof useScheduleRoster>;
@@ -1,8 +1,9 @@
1
- export type ScheduleSettingsSection = 'budget' | 'overtime' | 'notify';
1
+ export type ScheduleSettingsSection = 'budget' | 'payrates' | 'overtime' | 'notify';
2
2
  /** Labour budget and Notifications are out of the General page for now — see
3
3
  * ScheduleSettingsPage's own note. `ScheduleSettingsSection` stays the full union (rather
4
- * than narrowing to a literal `'overtime'`) so `draft`/`save()` below don't have to change
5
- * shape the day a section comes back; only the nav and the page's own rendering are trimmed. */
4
+ * than narrowing to a literal `'payrates' | 'overtime'`) so `draft`/`save()` below don't have
5
+ * to change shape the day a section comes back; only the nav and the page's own rendering
6
+ * are trimmed. */
6
7
  export declare const SETTINGS_SECTIONS: {
7
8
  key: ScheduleSettingsSection;
8
9
  label: string;
@@ -46,9 +47,11 @@ export declare function useScheduleSettings(): {
46
47
  };
47
48
  };
48
49
  dirty: import("vue").ComputedRef<boolean>;
50
+ loading: import("vue").Ref<boolean, boolean>;
51
+ load: () => Promise<void>;
49
52
  open: (section?: ScheduleSettingsSection) => void;
50
53
  close: () => boolean;
51
54
  discard: () => void;
52
- save: () => void;
55
+ save: () => Promise<void>;
53
56
  };
54
57
  export type ScheduleSettingsApi = ReturnType<typeof useScheduleSettings>;
@@ -1,18 +1,17 @@
1
1
  /** "Set it up" banner — shown while the outlet has not finished scheduling setup, i.e. while
2
- * `scheduleSetupCompleted` (schedule-store) is false. That flag is a placeholder until the
3
- * backend settings carry it. Dismissing is a session choice: the banner is cheap enough to see
2
+ * `scheduleSetupCompleted` (schedule-store) is false. Dismissing is a session choice: the banner is cheap enough to see
4
3
  * again on the next visit while the outlet really is unconfigured.
5
4
  *
6
- * The welcome dialog answers a different question — "has this outlet's owner seen the
7
- * onboarding greeting" — and is deliberately NOT tied to whether positions currently exist:
8
- * the board's data lands from an async fetch, so gating the dialog on it
9
- * meant a fast response for an outlet that already had positions saved could yank the dialog
10
- * shut within the same tick it opened, before anyone could read it. `localStorage`, keyed per
11
- * outlet, is what makes "seen" durable and independent of that fetch. */
5
+ * The welcome dialog shares that same gate, plus its own session dismiss so closing it doesn't
6
+ * also close the banner. `scheduleSetupCompleted` lands from an async fetch and starts `false`
7
+ * before that fetch resolves, so gating on it alone would flash the dialog open for an outlet
8
+ * whose real answer just hasn't arrived yet — `payload` is what distinguishes "not set up" from
9
+ * "don't know yet": it is only ever non-null once a board fetch for the current outlet has
10
+ * actually landed. */
12
11
  export declare function useScheduleSetupBanner(): {
13
12
  open: import("vue").ComputedRef<boolean>;
14
13
  start: () => void;
15
- dismiss: () => void;
14
+ dismiss: () => Promise<void>;
16
15
  welcomeOpen: import("vue").ComputedRef<boolean>;
17
16
  dismissWelcome: () => void;
18
17
  };
@@ -1,8 +1,11 @@
1
+ import type { Employee } from '../types';
1
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
3
  export interface ScheduleCardMenuState {
3
4
  open: boolean;
4
5
  empId: number | null;
5
6
  dayIdx: number | null;
7
+ /** Which period on that day the menu was opened from — the card's own slot index. */
8
+ slotIndex: number;
6
9
  left: number;
7
10
  top: number;
8
11
  }
@@ -10,11 +13,23 @@ export interface ScheduleChangeState {
10
13
  open: boolean;
11
14
  empId: number | null;
12
15
  dayIdx: number | null;
16
+ slotIndex: number;
13
17
  }
14
18
  export interface ScheduleSwapState {
15
19
  open: boolean;
16
20
  empId: number | null;
17
21
  dayIdx: number | null;
22
+ /** Which period of `dayIdx` is actually being traded — a sibling shift on that same day
23
+ * stays with its owner untouched. */
24
+ slotIndex: number;
25
+ /** How many periods starting at `slotIndex` go together — a genuine split's own period
26
+ * count, so dragging its one merged card trades the whole shift; 1 for anything else. */
27
+ slotCount: number;
28
+ /** Set when the swap came from dropping one shift on another: that shift is the only choice. */
29
+ preset: {
30
+ empId: number;
31
+ dayIdx: number;
32
+ } | null;
18
33
  }
19
34
  /** The shift card's "⋯" menu (Change employee / Swap shifts / Edit / Remove), plus the two
20
35
  * dialogs it opens that the rest of Phase 1 didn't need: handing a shift to somebody else,
@@ -26,20 +41,23 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
26
41
  open: boolean;
27
42
  empId: number | null;
28
43
  dayIdx: number | null;
44
+ slotIndex: number;
29
45
  left: number;
30
46
  top: number;
31
47
  };
32
- openMenu: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
48
+ openMenu: (empId: number, dayIdx: number, anchor: HTMLElement, slotIndex?: number) => void;
33
49
  closeMenu: () => void;
34
50
  change: {
35
51
  open: boolean;
36
52
  empId: number | null;
37
53
  dayIdx: number | null;
54
+ slotIndex: number;
38
55
  };
39
56
  changeSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
40
57
  changeCandidates: import("vue").ComputedRef<{
41
58
  id: number;
42
59
  name: string;
60
+ employmentType: "FULLTIME" | "PARTTIME";
43
61
  role: string;
44
62
  initials: string;
45
63
  color: string;
@@ -62,9 +80,23 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
62
80
  conflictReason?: string | undefined;
63
81
  openId?: number | undefined;
64
82
  breakMins?: number | undefined;
83
+ breaks?: ({
84
+ type: "DURATION";
85
+ minutes: number;
86
+ breakPayType: "PAID" | "UNPAID";
87
+ } | {
88
+ type: "TIME_RANGE";
89
+ startTime: string;
90
+ endTime: string;
91
+ breakPayType: "PAID" | "UNPAID";
92
+ })[] | undefined;
65
93
  assignmentId?: string | undefined;
94
+ splitGroupId?: string | undefined;
66
95
  } | {
67
96
  timeOff: "approved" | "pending";
97
+ requestId?: string | undefined;
98
+ type?: "OFF_DAY" | "LEAVE" | undefined;
99
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
68
100
  reason: string;
69
101
  half?: boolean | undefined;
70
102
  halfPart?: "AM" | "PM" | undefined;
@@ -95,7 +127,18 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
95
127
  conflictReason?: string | undefined;
96
128
  openId?: number | undefined;
97
129
  breakMins?: number | undefined;
130
+ breaks?: ({
131
+ type: "DURATION";
132
+ minutes: number;
133
+ breakPayType: "PAID" | "UNPAID";
134
+ } | {
135
+ type: "TIME_RANGE";
136
+ startTime: string;
137
+ endTime: string;
138
+ breakPayType: "PAID" | "UNPAID";
139
+ })[] | undefined;
98
140
  assignmentId?: string | undefined;
141
+ splitGroupId?: string | undefined;
99
142
  }[] | null)[];
100
143
  remarks: {
101
144
  author: string;
@@ -124,108 +167,36 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
124
167
  passcode?: string | undefined;
125
168
  masterUser?: boolean | undefined;
126
169
  }[]>;
127
- openChange: (empId: number, dayIdx: number) => void;
170
+ openChange: (empId: number, dayIdx: number, slotIndex?: number) => void;
128
171
  closeChange: () => void;
129
172
  confirmChange: (toId: number) => void;
130
173
  swap: {
131
174
  open: boolean;
132
175
  empId: number | null;
133
176
  dayIdx: number | null;
177
+ slotIndex: number;
178
+ slotCount: number;
179
+ preset: {
180
+ empId: number;
181
+ dayIdx: number;
182
+ } | null;
134
183
  };
135
184
  swapSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
136
185
  swapCandidates: import("vue").ComputedRef<{
137
- emp: {
138
- id: number;
139
- name: string;
140
- role: string;
141
- initials: string;
142
- color: string;
143
- weekHours: number;
144
- pct: number;
145
- contractHours?: number | undefined;
146
- rate: number;
147
- positions: string[];
148
- shifts: ({
149
- start: string;
150
- end: string;
151
- role: string;
152
- status: import("../types").ShiftStatus;
153
- clock?: {
154
- in: string | null;
155
- out: string | null;
156
- status: "on-time" | "late" | "early-out" | "absent";
157
- } | undefined;
158
- conflict?: boolean | undefined;
159
- conflictReason?: string | undefined;
160
- openId?: number | undefined;
161
- breakMins?: number | undefined;
162
- assignmentId?: string | undefined;
163
- } | {
164
- timeOff: "approved" | "pending";
165
- reason: string;
166
- half?: boolean | undefined;
167
- halfPart?: "AM" | "PM" | undefined;
168
- from?: string | undefined;
169
- to?: string | undefined;
170
- appliedOn?: string | undefined;
171
- note?: string | undefined;
172
- cert?: {
173
- name: string;
174
- size: string;
175
- } | null | undefined;
176
- bal?: {
177
- type: string;
178
- entitled: number;
179
- used: number;
180
- } | undefined;
181
- } | {
182
- start: string;
183
- end: string;
184
- role: string;
185
- status: import("../types").ShiftStatus;
186
- clock?: {
187
- in: string | null;
188
- out: string | null;
189
- status: "on-time" | "late" | "early-out" | "absent";
190
- } | undefined;
191
- conflict?: boolean | undefined;
192
- conflictReason?: string | undefined;
193
- openId?: number | undefined;
194
- breakMins?: number | undefined;
195
- assignmentId?: string | undefined;
196
- }[] | null)[];
197
- remarks: {
198
- author: string;
199
- date: string;
200
- type: "note" | "warning" | "praise";
201
- text: string;
202
- }[];
203
- section: string;
204
- compGroup?: string | undefined;
205
- mobile?: string | undefined;
206
- dial?: string | undefined;
207
- locations?: string[] | undefined;
208
- payBasis?: "hourly" | "monthly" | undefined;
209
- payAmount?: number | undefined;
210
- maxHours?: number | undefined;
211
- maxOtHours?: number | undefined;
212
- minHours?: number | undefined;
213
- otAfterDaily?: number | undefined;
214
- preferences?: string[] | undefined;
215
- seniority?: "senior" | "junior" | "" | undefined;
216
- availDays?: boolean[] | undefined;
217
- availHours?: {
218
- from: string;
219
- to: string;
220
- }[] | undefined;
221
- passcode?: string | undefined;
222
- masterUser?: boolean | undefined;
223
- };
186
+ emp: Employee;
187
+ dayIdx: number;
224
188
  slot: import("../types").WorkSlot[];
189
+ soft: string | null;
225
190
  }[]>;
226
- openSwap: (empId: number, dayIdx: number) => void;
191
+ swapPreset: import("vue").ComputedRef<{
192
+ emp: Employee;
193
+ dayIdx: number;
194
+ slot: import("../types").WorkSlot[];
195
+ soft: string | null;
196
+ } | null>;
197
+ openSwap: (empId: number, dayIdx: number, preset?: ScheduleSwapState["preset"], slotIndex?: number, slotCount?: number) => void;
227
198
  closeSwap: () => void;
228
- confirmSwap: (toEmpId: number) => void;
229
- removeShift: (empId: number, dayIdx: number) => void;
199
+ confirmSwap: (toEmpId: number, toDayIdx: number) => void;
200
+ removeShift: (empId: number, dayIdx: number, slotIndex?: number) => void;
230
201
  };
231
202
  export type ScheduleShiftActionsApi = ReturnType<typeof useScheduleShiftActions>;
@@ -65,6 +65,9 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
65
65
  breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
66
66
  breakCustomMins: import("vue").Ref<number, number>;
67
67
  breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
68
+ breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
69
+ breakStartTime: import("vue").Ref<string, string>;
70
+ breakEndTime: import("vue").Ref<string, string>;
68
71
  repeatDays: import("vue").Ref<boolean[], boolean[]>;
69
72
  gapNote: import("vue").Ref<string | null, string | null>;
70
73
  conflictNote: import("vue").Ref<string | null, string | null>;
@@ -75,6 +78,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
75
78
  whoOptions: import("vue").ComputedRef<{
76
79
  id: number;
77
80
  name: string;
81
+ employmentType: "FULLTIME" | "PARTTIME";
78
82
  role: string;
79
83
  initials: string;
80
84
  color: string;
@@ -97,9 +101,23 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
97
101
  conflictReason?: string | undefined;
98
102
  openId?: number | undefined;
99
103
  breakMins?: number | undefined;
104
+ breaks?: ({
105
+ type: "DURATION";
106
+ minutes: number;
107
+ breakPayType: "PAID" | "UNPAID";
108
+ } | {
109
+ type: "TIME_RANGE";
110
+ startTime: string;
111
+ endTime: string;
112
+ breakPayType: "PAID" | "UNPAID";
113
+ })[] | undefined;
100
114
  assignmentId?: string | undefined;
115
+ splitGroupId?: string | undefined;
101
116
  } | {
102
117
  timeOff: "approved" | "pending";
118
+ requestId?: string | undefined;
119
+ type?: "OFF_DAY" | "LEAVE" | undefined;
120
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
103
121
  reason: string;
104
122
  half?: boolean | undefined;
105
123
  halfPart?: "AM" | "PM" | undefined;
@@ -130,7 +148,18 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
130
148
  conflictReason?: string | undefined;
131
149
  openId?: number | undefined;
132
150
  breakMins?: number | undefined;
151
+ breaks?: ({
152
+ type: "DURATION";
153
+ minutes: number;
154
+ breakPayType: "PAID" | "UNPAID";
155
+ } | {
156
+ type: "TIME_RANGE";
157
+ startTime: string;
158
+ endTime: string;
159
+ breakPayType: "PAID" | "UNPAID";
160
+ })[] | undefined;
133
161
  assignmentId?: string | undefined;
162
+ splitGroupId?: string | undefined;
134
163
  }[] | null)[];
135
164
  remarks: {
136
165
  author: string;
@@ -167,11 +196,10 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
167
196
  totalHours: import("vue").ComputedRef<number>;
168
197
  totalLabel: import("vue").ComputedRef<string>;
169
198
  warnings: import("vue").ComputedRef<string[]>;
170
- openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment) => void;
199
+ openForEmployee: (forEmpId: number, day: number, roleHint?: string, hours?: ScheduleShiftSegment, slotIndex?: number) => void;
171
200
  openForNewOpenShift: (day: number, roleHint?: string, hours?: ScheduleShiftSegment) => void;
172
201
  openForEditOpenShift: (openShiftId: number) => void;
173
202
  close: () => void;
174
- addSegment: () => void;
175
203
  removeSegment: (i: number) => void;
176
204
  addRole: () => void;
177
205
  removeRole: (i: number) => void;
@@ -1,23 +1,17 @@
1
1
  import type { Proposal } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
3
  import type { ScheduleEmployeeLoad } from './useScheduleEmployeeIdentity';
4
- export type ScheduleRailSort = 'load' | 'name' | 'hours' | 'cost';
5
4
  /** The rail's rows ARE the shared identity block's data — one derivation, so the rail and the
6
5
  * employee grid's name column can't disagree about somebody's load. */
7
6
  export type ScheduleRailRow = ScheduleEmployeeLoad;
8
- /** The area view's staff rail — search/sort over the same roster the employee view's name
9
- * column shows, plus each person's load bar and an "Open shifts" jump summary. Ported from
10
- * the mockup's renderStaffRail()/orderedRoster()/staffLoad(), scoped to a single week (no
11
- * day/area combination — Daily view stays employee-only for now). */
7
+ /** The area view's staff rail — least-loaded first over the same roster the employee view's
8
+ * name column shows, plus each person's load bar. Search and the sort picker both live in the
9
+ * filter bar / name column now, not here. Ported from the mockup's
10
+ * renderStaffRail()/orderedRoster()/staffLoad(), scoped to a single week (no day/area
11
+ * combination — Daily view stays employee-only for now). */
12
12
  export declare function useScheduleStaffRail(board: ScheduleBoardApi,
13
13
  /** Lazy: the auto-scheduler is built after the rail, and only read when rows are computed. */
14
14
  proposalAt?: () => ((empId: number, dayIdx: number) => Proposal | undefined) | undefined): {
15
- search: import("vue").Ref<string, string>;
16
- sort: import("vue").Ref<ScheduleRailSort, ScheduleRailSort>;
17
15
  rows: import("vue").ComputedRef<ScheduleEmployeeLoad[]>;
18
- openSummary: import("vue").ComputedRef<{
19
- count: number;
20
- hours: number;
21
- }>;
22
16
  };
23
17
  export type ScheduleStaffRailApi = ReturnType<typeof useScheduleStaffRail>;
@@ -17,7 +17,6 @@ export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: S
17
17
  visibleHours: import("vue").ComputedRef<number>;
18
18
  salesFor: (dayIdx: number) => number;
19
19
  isDayOverridden: (dayIdx: number) => boolean;
20
- setForecast: (value: string) => void;
21
20
  setDayForecast: (dayIdx: number, value: string) => void;
22
21
  labourPct: (dayIdx: number) => number | null;
23
22
  isShort: (dayIdx: number) => boolean;