@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.11

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 (160) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-Ce9BWzt9.js} +5 -5
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-Cw7WN8K4.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BuofBFPC.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-B8qWPNvj.js} +25 -24
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-CgigJIPF.js} +6 -6
  6. package/dist/{Main-DFwdAWqn.js → Main-BfoVdxlY.js} +8 -8
  7. package/dist/{Main-B2r59IOW.js → Main-Cg2vC_cj.js} +5 -5
  8. package/dist/{Main-DkLBemi7.js → Main-D26pgKy1.js} +11 -11
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-CbtDiF4k.js} +19 -18
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DW1oBTbb.js +4167 -0
  11. 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-BVz6q3HE.js} +1 -1
  12. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  13. package/dist/{RoleList-DHO4JRKF.js → RoleList-D0I8mbyI.js} +21 -20
  14. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Ctwukt6o.js +492 -0
  15. package/dist/ScheduleGeneralPage-Kv4pnxCL.js +778 -0
  16. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CSA0aaqJ.js +2285 -0
  17. package/dist/SchedulePage-BMWd0bod.js +17942 -0
  18. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-5Xvx6Dk5.js} +66 -65
  19. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Bh7i5l16.js} +24 -23
  20. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-BJKU-hnk.js} +7 -7
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-MMWnb9bj.js} +3 -3
  22. package/dist/{app-CmBSTvaI.js → app-BDJ5qxhF.js} +678 -594
  23. package/dist/app.js +1 -1
  24. package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
  25. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-BWM0vY4w.js} +1 -1
  26. package/dist/{employee-DQcHjoij.js → employee-bBSuAJUr.js} +29 -28
  27. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
  28. package/dist/{iteration-BlavheWG.js → iteration-Dg7VAkAn.js} +1 -1
  29. package/dist/{lodash-QerqayrJ.js → lodash-BknY3p4o.js} +1 -1
  30. package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
  31. package/dist/{role-RM2YLO7n.js → role-BJnJnNd_.js} +2 -2
  32. package/dist/{rule-DjlvYIuP.js → rule-BEuOY7Wf.js} +3 -3
  33. package/dist/src/api/schedule/index.d.ts +8 -1
  34. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  35. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  36. package/dist/src/types/employee.d.ts +1 -0
  37. package/dist/src/types/schedule.d.ts +3 -4
  38. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
  39. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
  42. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  43. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
  44. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  46. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
  47. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  48. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  49. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +2 -1
  50. package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
  51. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  52. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
  53. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  54. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  55. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  56. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  62. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  63. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  64. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
  65. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  66. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  67. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  68. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
  69. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  70. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  71. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  72. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  73. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
  74. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  75. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  76. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  77. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  78. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  79. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  80. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  81. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  82. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
  83. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +35 -21
  84. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  85. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
  86. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  87. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -3
  88. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +52 -11
  89. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  90. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  91. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
  92. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
  93. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
  94. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +26 -5
  95. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
  96. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  97. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
  98. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  99. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  100. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  101. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  102. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
  103. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
  104. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  105. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
  106. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  107. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  108. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +206 -0
  109. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  110. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  111. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +313 -529
  112. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  113. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  114. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  115. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  116. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
  117. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  118. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
  119. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
  120. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
  121. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  122. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +32 -4
  123. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
  124. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +19 -3
  125. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
  126. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  127. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +31 -9
  128. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  129. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  130. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  131. package/dist/src/views/scheduling/data.d.ts +16 -7
  132. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  133. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  134. package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
  135. package/dist/src/views/scheduling/schedule-store.d.ts +30 -6
  136. package/dist/src/views/scheduling/types.d.ts +29 -5
  137. package/dist/style.css +1 -1
  138. package/dist/tsconfig.app.tsbuildinfo +1 -1
  139. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
  140. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  141. package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
  142. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-D8hJ5W0t.js} +3 -3
  143. package/package.json +2 -1
  144. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
  145. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  146. package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
  147. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  148. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  149. package/dist/src/components/layout/withShell.d.ts +0 -14
  150. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  151. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  152. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  153. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  154. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  155. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
  156. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  157. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  158. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  159. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
  160. /package/dist/src/{components/layout/AppSidebar.vue.d.ts → views/scheduling/components/SchedulePublishShareArt.vue.d.ts} +0 -0
@@ -6,7 +6,7 @@ export interface ScheduleDemandSuggestion {
6
6
  periods: DemandPeriod[];
7
7
  }
8
8
  export interface ScheduleDemandSheetOptions {
9
- onToast?: (message: string) => void;
9
+ onToast?: (message: string, type?: 'info' | 'success' | 'error') => void;
10
10
  /** Positions the breakdown can name — the same list the shift editor offers. */
11
11
  positionOptions: () => string[];
12
12
  /** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
@@ -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,10 +66,27 @@ 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;
71
- close: () => void;
79
+ close: (preserveDraft?: boolean) => void;
80
+ hasUnsavedChanges: import("vue").ComputedRef<boolean>;
81
+ diffSummary: import("vue").ComputedRef<{
82
+ changed: number;
83
+ added: number;
84
+ removed: number;
85
+ modified: number;
86
+ }>;
87
+ isPeriodChanged: (index: number) => boolean;
88
+ isPeriodFieldChanged: (index: number, field: "from" | "to" | "n") => boolean;
89
+ revert: () => void;
72
90
  addPeriod: () => void;
73
91
  removePeriod: (i: number) => void;
74
92
  setHeads: (i: number, value: number | string) => void;
@@ -105,6 +123,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
105
123
  n: number;
106
124
  roles?: {
107
125
  position: string;
126
+ positionId?: string | undefined;
108
127
  n: number;
109
128
  }[] | undefined;
110
129
  }[];
@@ -116,6 +135,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
116
135
  n: number;
117
136
  roles?: {
118
137
  position: string;
138
+ positionId?: string | undefined;
119
139
  n: number;
120
140
  }[] | undefined;
121
141
  }[];
@@ -126,6 +146,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
126
146
  word: string;
127
147
  }[]>;
128
148
  suggest: () => void;
149
+ askRemy: () => Promise<void>;
129
150
  acceptSuggestion: () => void;
130
151
  dismissSuggestion: () => void;
131
152
  canCopy: import("vue").ComputedRef<boolean>;
@@ -140,6 +161,6 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
140
161
  openCopy: () => void;
141
162
  closeCopy: () => void;
142
163
  confirmCopy: () => Promise<void>;
143
- setApply: (k: DemandApplyMode) => DemandApplyMode;
164
+ setApply: (mode: DemandApplyMode) => void;
144
165
  };
145
166
  export type ScheduleDemandSheetApi = ReturnType<typeof useScheduleDemandSheet>;
@@ -0,0 +1,16 @@
1
+ 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>;
6
+ setPasscodeDigit: (index: number, value: string) => void;
7
+ generatePasscode: () => void;
8
+ togglePosAccess: () => void;
9
+ addPosRoleRow: () => void;
10
+ removePosRoleRow: (index: number) => void;
11
+ isCurrentOutletRow: (index: number) => boolean;
12
+ setPosRoleOutlet: (index: number, outlet: string) => void;
13
+ setPosRoleId: (index: number, roleId: string) => void;
14
+ posRoleOptionsFor: (outlet: string) => Role[];
15
+ posRolesHint: import("vue").ComputedRef<"" | "No outlet assigned, so their passcode will not open a till yet." | "The same outlet is listed twice — only the last role on it will apply.">;
16
+ };
@@ -0,0 +1,13 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ export declare function useScheduleEmployeeAvailability(form: ScheduleAddEmployeeForm, isPart: ComputedRef<boolean>): {
4
+ dayLit: (index: number) => boolean;
5
+ avLabel: ComputedRef<"Weekly availability" | "Time off days">;
6
+ avAllLabel: ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
7
+ maxHoursPlaceholder: ComputedRef<string>;
8
+ ensureAvailHours: (index: number) => void;
9
+ toggleAvailDay: (index: number) => void;
10
+ availAll: () => void;
11
+ setAvailHour: (index: number, field: "from" | "to", value: string) => void;
12
+ copyAvailHourDown: (index: number) => void;
13
+ };
@@ -0,0 +1,27 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { ScheduleAddEmployeeForm, ScheduleAddEmployeeStep } from './schedule-add-employee-form';
3
+ import type { ScheduleBoardApi } from './useScheduleBoard';
4
+ interface UseScheduleEmployeeCandidatesOptions {
5
+ board: ScheduleBoardApi;
6
+ form: ScheduleAddEmployeeForm;
7
+ currentLocationLabel: ComputedRef<string>;
8
+ step: {
9
+ value: ScheduleAddEmployeeStep;
10
+ };
11
+ open: {
12
+ value: boolean;
13
+ };
14
+ onPicked: (employeeId: string) => void;
15
+ onPrefillPasscode: (employeeId: string) => void | Promise<void>;
16
+ onPrefillPosRoles: (employeeId: string) => void | Promise<void>;
17
+ }
18
+ /** Directory lookup and profile prefill for the existing-employee path of the add wizard. */
19
+ export declare function useScheduleEmployeeCandidates(options: UseScheduleEmployeeCandidatesOptions): {
20
+ selectExistingOpen: import("vue").Ref<boolean, boolean>;
21
+ candidatesLoading: import("vue").Ref<boolean, boolean>;
22
+ candidatesError: import("vue").Ref<string | null, string | null>;
23
+ openSelectExisting: () => void;
24
+ closeSelectExisting: () => void;
25
+ pickExisting: (employeeId: string) => Promise<void>;
26
+ };
27
+ export {};
@@ -0,0 +1,7 @@
1
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
2
+ export declare function useScheduleEmployeeCompensation(form: ScheduleAddEmployeeForm): {
3
+ setPayBasis: (basis: "hourly" | "monthly") => void;
4
+ payUnit: import("vue").ComputedRef<"/month" | "/hour">;
5
+ payAmountNumber: import("vue").ComputedRef<number>;
6
+ effectiveRate: import("vue").ComputedRef<number>;
7
+ };
@@ -0,0 +1,22 @@
1
+ import { type Ref } from 'vue';
2
+ import type { ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ interface UseScheduleEmployeeFormOptions {
4
+ form: ScheduleAddEmployeeForm;
5
+ currentLocationLabel: {
6
+ value: string;
7
+ };
8
+ positions: readonly string[];
9
+ locOpen: Ref<boolean>;
10
+ secOpen: Ref<boolean>;
11
+ }
12
+ /** Field editing for locations and positions in the employee wizard. */
13
+ export declare function useScheduleEmployeeForm(options: UseScheduleEmployeeFormOptions): {
14
+ secondaryOptions: import("vue").ComputedRef<string[]>;
15
+ toggleMulti: (which: "loc" | "sec") => void;
16
+ toggleLocation: (location: string) => void;
17
+ removeLocation: (location: string) => void;
18
+ toggleSecondary: (position: string) => void;
19
+ removeSecondary: (position: string) => void;
20
+ setPrimaryPosition: (position: string) => void;
21
+ };
22
+ export {};
@@ -28,6 +28,15 @@ export interface ScheduleEmployeeLoad {
28
28
  /** The suggested part's width on the bar, as a fraction of contract. With no contract to measure
29
29
  * against it fills the track, so suggested hours still show. */
30
30
  proposedPct: number;
31
+ /** Of `boardPct`, how much is still DRAFT (unpublished) rather than confirmed — drawn as a
32
+ * hatch over the tail of the bar rather than a different colour, same as the grid's own
33
+ * closed-day treatment: the colour still says over/under contract, the hatch just adds
34
+ * "and part of this hasn't gone out to the employee yet" on top of it. */
35
+ draftPct: number;
36
+ /** Of `hours`, how many are on the board but still DRAFT (unpublished) — kept as its own
37
+ * number rather than folded into `hours` so the label can say "published + draft" instead
38
+ * of one merged total that can't tell the employee has actually seen only part of it. */
39
+ draftHours: number;
31
40
  }
32
41
  /** This person's live (not rejected) suggestions in the week on screen. */
33
42
  export declare function proposedSlotsOf(emp: Employee, proposalAt?: (empId: number, dayIdx: number) => Proposal | undefined): Pick<Proposal, 'start' | 'end'>[];
@@ -1,6 +1,6 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleAnchorRect } from './schedule-popover-position';
3
- export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'hl' | 'remove';
3
+ export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'freeall' | 'remove';
4
4
  export interface ScheduleEmployeeMenuState {
5
5
  open: boolean;
6
6
  empId: number | null;
@@ -8,11 +8,13 @@ export interface ScheduleEmployeeMenuState {
8
8
  left: number;
9
9
  top: number;
10
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. */
11
+ /** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, clear shifts, remove.
12
+ * The actions that need a page-level surface (profile panel, edit wizard, confirm dialog) come in
13
+ * as handlers. */
13
14
  export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
14
15
  onProfile: (empId: number) => void;
15
16
  onEdit: (empId: number) => void;
17
+ onClearAllShifts: (empId: number) => void;
16
18
  onRemove: (empId: number) => void;
17
19
  }): {
18
20
  state: {
@@ -28,6 +30,7 @@ export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handler
28
30
  top: number;
29
31
  };
30
32
  employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
33
+ hasShifts: import("vue").ComputedRef<boolean>;
31
34
  openFor: (empId: number, anchor: HTMLElement) => void;
32
35
  close: () => void;
33
36
  go: (action: ScheduleEmployeeMenuAction) => void;
@@ -0,0 +1,29 @@
1
+ import type { ComputedRef, Ref } from 'vue';
2
+ import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ import type { ScheduleBoardApi } from './useScheduleBoard';
4
+ interface UseScheduleEmployeePersistenceOptions {
5
+ form: ScheduleAddEmployeeForm;
6
+ pickedEmployeeId: Ref<string | null>;
7
+ payAmountNumber: ComputedRef<number>;
8
+ saving: Ref<boolean>;
9
+ saveError: Ref<string | null>;
10
+ close: () => void;
11
+ restaurantIdOfLabel: (label: string) => string | undefined;
12
+ board: ScheduleBoardApi;
13
+ editingEmployeeId: Ref<number | null>;
14
+ originalLocations: Ref<string[]>;
15
+ originalPosRoles: Ref<{
16
+ outlet: string;
17
+ roleId: string;
18
+ }[]>;
19
+ effectiveRate: ComputedRef<number>;
20
+ passcodeValue: ComputedRef<string>;
21
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
22
+ }
23
+ /** Persistence for an existing business employee being added to this schedule. */
24
+ export declare function useScheduleEmployeePersistence(options: UseScheduleEmployeePersistenceOptions): {
25
+ createExisting: (name: string) => Promise<boolean>;
26
+ createNew: (name: string) => Promise<boolean>;
27
+ updateExisting: (name: string) => Promise<boolean>;
28
+ };
29
+ export {};
@@ -0,0 +1,20 @@
1
+ import { type ComputedRef, type Ref } from 'vue';
2
+ import { type ScheduleAddEmployeeForm } from './schedule-add-employee-form';
3
+ interface UseScheduleEmployeeValidationOptions {
4
+ form: ScheduleAddEmployeeForm;
5
+ submitAttempted: Ref<boolean>;
6
+ passcodeOk: ComputedRef<boolean>;
7
+ isNewUser: ComputedRef<boolean>;
8
+ }
9
+ /** Validation guards for the add/edit employee form. Keeping them together makes create and
10
+ * the field-level error indicators consume the same rules. */
11
+ export declare function useScheduleEmployeeValidation(options: UseScheduleEmployeeValidationOptions): {
12
+ nameError: ComputedRef<boolean>;
13
+ passError: ComputedRef<boolean>;
14
+ posRolesOk: ComputedRef<boolean>;
15
+ posRolesError: ComputedRef<boolean>;
16
+ availabilityOk: ComputedRef<boolean>;
17
+ availabilityError: ComputedRef<boolean>;
18
+ masterCodeError: ComputedRef<boolean>;
19
+ };
20
+ export {};
@@ -1,11 +1,5 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ExportShiftCell {
3
- note: string;
4
- shifts: {
5
- when: string;
6
- pos: string;
7
- }[];
8
- }
2
+ import type { ExportShiftCell } from './schedule-export-matrix';
9
3
  export interface ExportMatrix {
10
4
  head: string[];
11
5
  body: (string | ExportShiftCell)[][];
@@ -15,19 +9,33 @@ export interface ExportMatrix {
15
9
  * and a fully-staffed week with nobody over contract totals 0.0 there. */
16
10
  shiftTotal: number;
17
11
  }
12
+ export { cellText, dayCellLines, dayHeaderLabel, esc } from './schedule-export-matrix';
13
+ export type { ExportShiftCell } from './schedule-export-matrix';
18
14
  /** The mockup's Share/export feature (buildExportMatrix/exportPDF/exportJPG) — no external
19
- * PDF/canvas library anywhere in the mockup; PDF is an HTML preview handed to window.print(),
20
- * JPG is a hand-drawn Canvas 2D table converted with toBlob. */
15
+ * PDF/canvas library here; both PDF and JPG are the same hand-drawn Canvas 2D table
16
+ * (`buildJpgCanvas`). PDF used to be a separate HTML/`<table>` rendering handed to
17
+ * window.print(), but printing the live page and CSS-hiding everything around the sheet proved
18
+ * unreliable (see printNow's own comment) — "Save as PDF" now wraps that same canvas image into a
19
+ * standalone print window instead, so PDF and JPG are guaranteed to look identical. */
21
20
  export declare function useScheduleExport(board: ScheduleBoardApi): {
22
21
  buildExportMatrix: () => ExportMatrix;
23
22
  pdfPreviewOpen: import("vue").Ref<boolean, boolean>;
24
- pdfHtml: import("vue").ComputedRef<string>;
25
23
  pdfBarMeta: import("vue").ComputedRef<string>;
26
24
  openPdfPreview: () => void;
27
25
  closePdfPreview: () => void;
28
26
  printNow: () => void;
29
- exportJpg: () => void;
27
+ jpgPreviewOpen: import("vue").Ref<boolean, boolean>;
28
+ jpgPreviewUrl: import("vue").Ref<string | null, string | null>;
29
+ jpgPreviewWidth: import("vue").Ref<number, number>;
30
+ jpgPreviewHeight: import("vue").Ref<number, number>;
31
+ jpgFilename: import("vue").Ref<string, string>;
32
+ jpgBarMeta: import("vue").ComputedRef<string>;
33
+ openJpgPreview: () => void;
34
+ closeJpgPreview: () => void;
35
+ saveJpgPreview: () => void;
30
36
  exportDoneOpen: import("vue").Ref<boolean, boolean>;
37
+ exportDoneTitle: import("vue").Ref<string, string>;
38
+ exportDoneDescription: import("vue").Ref<string, string>;
31
39
  exportDoneRecap: import("vue").Ref<{
32
40
  label: string;
33
41
  value: string;
@@ -1,11 +1,9 @@
1
1
  import type { CoverageSegment } from '../types';
2
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
3
3
  import type { ScheduleDemandApi } from './useScheduleDemand';
4
- export interface ScheduleGapActions {
5
- /** Open the shift editor on a brand new shift for this day and these hours. */
6
- addShift: (dayIdx: number, position: string, start: string, end: string) => void;
7
- }
8
- export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, actions: ScheduleGapActions): {
4
+ /** The gap popover: what a striped stretch of the coverage bar means. Read-only — it states the
5
+ * shortfall and which positions are missing; nothing here writes. */
6
+ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
9
7
  state: {
10
8
  open: boolean;
11
9
  pinned: boolean;
@@ -23,6 +21,7 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
23
21
  over: number;
24
22
  roles: {
25
23
  position: string;
24
+ positionId?: string | undefined;
26
25
  n: number;
27
26
  required: number;
28
27
  got: number;
@@ -43,6 +42,7 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
43
42
  over: number;
44
43
  roles: {
45
44
  position: string;
45
+ positionId?: string | undefined;
46
46
  n: number;
47
47
  required: number;
48
48
  got: number;
@@ -74,7 +74,6 @@ export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: S
74
74
  hold: () => void;
75
75
  segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
76
76
  segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
77
- addShift: () => void;
78
77
  close: () => void;
79
78
  };
80
79
  export type ScheduleGapPopoverApi = ReturnType<typeof useScheduleGapPopover>;
@@ -0,0 +1,58 @@
1
+ import { type ComputedRef } from 'vue';
2
+ import type { Employee } from '../types';
3
+ import type { AvailRow, ScheduleOnboardingDayHours, TeamRow } from './onboarding-types';
4
+ import type { ScheduleBoardApi } from './useScheduleBoard';
5
+ type EmployeeRow = {
6
+ emp: Employee;
7
+ row: TeamRow;
8
+ };
9
+ type BulkMark = '' | 'y' | 'n';
10
+ export interface ScheduleOnboardingAvailabilityOptions {
11
+ board: ScheduleBoardApi;
12
+ hours: ScheduleOnboardingDayHours[];
13
+ openDays: ComputedRef<number[]>;
14
+ employeeRows: ComputedRef<EmployeeRow[]>;
15
+ isShut: (dayIdx: number) => boolean;
16
+ pendingAvail: Map<number, Array<{
17
+ dayOfWeek: number;
18
+ start: string;
19
+ end: string;
20
+ }>>;
21
+ }
22
+ export declare function useScheduleOnboardingAvailability(options: ScheduleOnboardingAvailabilityOptions): {
23
+ avail: Record<number, AvailRow>;
24
+ avTab: import("vue").Ref<"full" | "part", "full" | "part">;
25
+ avPicked: Record<number, boolean>;
26
+ avVary: Record<number, boolean>;
27
+ avBulkOpen: import("vue").Ref<boolean, boolean>;
28
+ avBulk: {
29
+ off: BulkMark[];
30
+ on: BulkMark[];
31
+ from: string;
32
+ to: string;
33
+ };
34
+ seedAvailability: (missingOnly?: boolean) => void;
35
+ avFulls: ComputedRef<EmployeeRow[]>;
36
+ avParts: ComputedRef<EmployeeRow[]>;
37
+ avGroup: ComputedRef<EmployeeRow[]>;
38
+ avSelected: ComputedRef<EmployeeRow[]>;
39
+ restDays: (empId: number) => number[];
40
+ avFullDone: ComputedRef<number>;
41
+ avPartDone: ComputedRef<number>;
42
+ avOffCount: (dayIdx: number) => number | null;
43
+ avFullSub: (empId: number) => string;
44
+ avPartSummary: (empId: number) => string;
45
+ avShowsByDay: (empId: number) => boolean;
46
+ canDays: (empId: number) => number[];
47
+ avPickAll: (checked: boolean) => void;
48
+ toggleOff: (empId: number, dayIdx: number) => void;
49
+ toggleCan: (empId: number, dayIdx: number) => void;
50
+ setAvailTime: (empId: number, dayIdx: number | null, field: "from" | "to", value: string) => void;
51
+ toggleVary: (empId: number) => void;
52
+ bulkDay: (which: "off" | "on", dayIdx: number) => void;
53
+ avBulkReady: ComputedRef<boolean>;
54
+ applyAvBulk: () => void;
55
+ saveAvailability: () => void;
56
+ };
57
+ export type ScheduleOnboardingAvailabilityApi = ReturnType<typeof useScheduleOnboardingAvailability>;
58
+ export {};
@@ -0,0 +1,45 @@
1
+ import { type Ref } from 'vue';
2
+ import type { ScheduleOnboardingDayHours, ScheduleOnboardingRange } from './onboarding-types';
3
+ import type { SchedulePositionsApi } from './useSchedulePositions';
4
+ export declare function useScheduleOnboardingDemand(hours: ScheduleOnboardingDayHours[], positions: SchedulePositionsApi, note: Ref<string>): {
5
+ demand: import("vue").Reactive<ScheduleOnboardingRange[][]>;
6
+ dmDay: Ref<number, number>;
7
+ staffingSaving: Ref<boolean, boolean>;
8
+ note: Ref<string, string>;
9
+ isShut: (dayIdx: number) => boolean;
10
+ dayClosedConfirm: {
11
+ state: {
12
+ open: boolean;
13
+ message: string;
14
+ title: string | null;
15
+ confirmLabel: string | null;
16
+ onConfirm: (() => void) | null;
17
+ };
18
+ ask: (message: string, onConfirm: () => void, opts?: {
19
+ title?: string;
20
+ confirmLabel?: string;
21
+ }) => void;
22
+ confirm: () => void;
23
+ close: () => void;
24
+ };
25
+ shutAcknowledged: Record<number, boolean>;
26
+ dmPeak: (dayIdx: number) => number;
27
+ namedPositions: import("vue").ComputedRef<string[]>;
28
+ remainingCommon: import("vue").ComputedRef<string[]>;
29
+ suggestedPositions: import("vue").ComputedRef<string[]>;
30
+ openDays: import("vue").ComputedRef<number[]>;
31
+ daysSet: import("vue").ComputedRef<number>;
32
+ daySpan: (dayIdx: number) => string;
33
+ seedDemand: () => void;
34
+ selectDay: (dayIdx: number) => void;
35
+ setRangeTime: (index: number, field: "from" | "to", value: string) => void;
36
+ setRangeCount: (index: number, value: string) => void;
37
+ addRange: () => void;
38
+ removeRange: (index: number) => void;
39
+ addRole: (index: number) => void;
40
+ setRole: (index: number, roleIndex: number, field: "position" | "n", value: string) => void;
41
+ removeRole: (index: number, roleIndex: number) => void;
42
+ namedTotal: (range: ScheduleOnboardingRange) => number;
43
+ copyDay: (mode: "all" | "wk" | "we") => void;
44
+ };
45
+ export type ScheduleOnboardingDemandApi = ReturnType<typeof useScheduleOnboardingDemand>;