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

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 (155) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-BLA2rhLB.js} +5 -5
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-DBYdZhZl.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CtCEzPbE.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-CA7DWLmy.js} +6 -6
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-BYnegeEr.js} +6 -6
  6. package/dist/{Main-DFwdAWqn.js → Main-BeXx0hAc.js} +8 -8
  7. package/dist/{Main-B2r59IOW.js → Main-Dh-gZSaa.js} +5 -5
  8. package/dist/{Main-DkLBemi7.js → Main-NDK7LUmm.js} +11 -11
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-DDIacDpQ.js} +7 -7
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ONMn3v_f.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/{RoleList-DHO4JRKF.js → RoleList-B30FHIzu.js} +9 -9
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CRRguWTG.js +492 -0
  14. package/dist/ScheduleGeneralPage-8gEeZbFR.js +776 -0
  15. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-TfxTAjO8.js +2252 -0
  16. package/dist/SchedulePage-DQ0VXWWi.js +17832 -0
  17. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-oGIDGneA.js} +66 -65
  18. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Drj6R4Y3.js} +10 -10
  19. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-CDQfN5LE.js} +7 -7
  20. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Bx-6hjs7.js} +3 -3
  21. package/dist/{app-CmBSTvaI.js → app-DWe_4-ct.js} +678 -594
  22. package/dist/app.js +1 -1
  23. package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
  24. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-QSwC9dtX.js} +1 -1
  25. package/dist/{employee-DQcHjoij.js → employee-Bb2b3dP6.js} +29 -28
  26. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
  27. package/dist/{iteration-BlavheWG.js → iteration-TDU7bFxZ.js} +1 -1
  28. package/dist/{lodash-QerqayrJ.js → lodash-D3Ns5VMN.js} +1 -1
  29. package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
  30. package/dist/{role-RM2YLO7n.js → role-D57Le_-U.js} +2 -2
  31. package/dist/{rule-DjlvYIuP.js → rule-DzesUEX7.js} +3 -3
  32. package/dist/src/api/schedule/index.d.ts +8 -1
  33. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  34. package/dist/src/types/employee.d.ts +1 -0
  35. package/dist/src/types/schedule.d.ts +3 -4
  36. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
  37. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
  38. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
  39. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
  42. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  43. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  44. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  46. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  47. package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
  48. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  49. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
  50. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  51. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  52. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  53. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  61. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
  62. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  63. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  64. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  65. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
  66. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  67. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  68. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  69. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  70. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
  71. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  72. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  73. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  74. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  75. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  76. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  77. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  78. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  79. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
  80. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +34 -21
  81. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  82. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
  83. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  84. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -0
  85. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +50 -11
  86. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  87. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  88. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
  89. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
  90. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
  91. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +19 -5
  92. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
  93. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  94. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
  95. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  96. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  97. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  98. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  99. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
  100. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
  101. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  102. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
  103. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  104. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  105. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +205 -0
  106. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  107. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  108. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +306 -529
  109. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  110. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  111. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  112. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  113. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
  114. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  115. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
  116. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
  117. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
  118. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  119. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +30 -4
  120. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
  121. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +18 -3
  122. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
  123. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  124. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +25 -8
  125. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  126. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  127. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  128. package/dist/src/views/scheduling/data.d.ts +16 -7
  129. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  130. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  131. package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
  132. package/dist/src/views/scheduling/schedule-store.d.ts +17 -6
  133. package/dist/src/views/scheduling/types.d.ts +27 -5
  134. package/dist/style.css +1 -1
  135. package/dist/tsconfig.app.tsbuildinfo +1 -1
  136. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
  137. package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
  138. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-Cmuead1K.js} +3 -3
  139. package/package.json +2 -1
  140. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
  141. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  142. package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
  143. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  144. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  145. package/dist/src/components/layout/withShell.d.ts +0 -14
  146. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  147. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  148. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  149. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  150. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  151. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
  152. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  153. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  154. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  155. /package/dist/src/{components/layout/AppSidebar.vue.d.ts → views/scheduling/components/SchedulePublishShareArt.vue.d.ts} +0 -0
@@ -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;
16
+ onPrefillPosRoles: (employeeId: string) => 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>;
@@ -0,0 +1,205 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { TeamBasis, TeamEmployment, TeamRow } from './onboarding-types';
3
+ export interface ScheduleOnboardingEmployeesOptions {
4
+ board: ScheduleBoardApi;
5
+ note: {
6
+ value: string;
7
+ };
8
+ }
9
+ export declare function useScheduleOnboardingEmployees(options: ScheduleOnboardingEmployeesOptions): {
10
+ team: Record<number, TeamRow>;
11
+ employeeRows: import("vue").ComputedRef<{
12
+ emp: {
13
+ id: number;
14
+ sourceId: string;
15
+ name: string;
16
+ employmentType: "FULLTIME" | "PARTTIME";
17
+ role: string;
18
+ initials: string;
19
+ color: string;
20
+ weekHours: number;
21
+ pct: number;
22
+ contractHours?: number | undefined;
23
+ rate: number;
24
+ positions: string[];
25
+ archivedPositions?: string[] | undefined;
26
+ shifts: ({
27
+ start: string;
28
+ end: string;
29
+ role: string;
30
+ positionId?: string | undefined;
31
+ status: import("../types").ShiftStatus;
32
+ clock?: {
33
+ in: string | null;
34
+ out: string | null;
35
+ status: "on-time" | "late" | "early-out" | "absent";
36
+ } | undefined;
37
+ conflict?: boolean | undefined;
38
+ conflictReason?: string | undefined;
39
+ openId?: number | undefined;
40
+ breakMins?: number | undefined;
41
+ breaks?: ({
42
+ type: "DURATION";
43
+ minutes: number;
44
+ breakPayType: "PAID" | "UNPAID";
45
+ } | {
46
+ type: "TIME_RANGE";
47
+ startTime: string;
48
+ endTime: string;
49
+ breakPayType: "PAID" | "UNPAID";
50
+ })[] | undefined;
51
+ assignmentId?: string | undefined;
52
+ updatedAt?: string | undefined;
53
+ splitGroupId?: string | undefined;
54
+ } | {
55
+ timeOff: "approved" | "pending";
56
+ requestId?: string | undefined;
57
+ type?: "OFF_DAY" | "LEAVE" | undefined;
58
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
59
+ reason: string;
60
+ half?: boolean | undefined;
61
+ halfPart?: "AM" | "PM" | undefined;
62
+ from?: string | undefined;
63
+ to?: string | undefined;
64
+ appliedOn?: string | undefined;
65
+ note?: string | undefined;
66
+ cert?: {
67
+ name: string;
68
+ size: string;
69
+ } | null | undefined;
70
+ bal?: {
71
+ type: string;
72
+ entitled: number;
73
+ used: number;
74
+ } | undefined;
75
+ } | {
76
+ start: string;
77
+ end: string;
78
+ role: string;
79
+ positionId?: string | undefined;
80
+ status: import("../types").ShiftStatus;
81
+ clock?: {
82
+ in: string | null;
83
+ out: string | null;
84
+ status: "on-time" | "late" | "early-out" | "absent";
85
+ } | undefined;
86
+ conflict?: boolean | undefined;
87
+ conflictReason?: string | undefined;
88
+ openId?: number | undefined;
89
+ breakMins?: number | undefined;
90
+ breaks?: ({
91
+ type: "DURATION";
92
+ minutes: number;
93
+ breakPayType: "PAID" | "UNPAID";
94
+ } | {
95
+ type: "TIME_RANGE";
96
+ startTime: string;
97
+ endTime: string;
98
+ breakPayType: "PAID" | "UNPAID";
99
+ })[] | undefined;
100
+ assignmentId?: string | undefined;
101
+ updatedAt?: string | undefined;
102
+ splitGroupId?: string | undefined;
103
+ }[] | null)[];
104
+ remarks: {
105
+ author: string;
106
+ date: string;
107
+ type: "note" | "warning" | "praise";
108
+ text: string;
109
+ }[];
110
+ section: string;
111
+ compGroup?: string | undefined;
112
+ mobile?: string | undefined;
113
+ dial?: string | undefined;
114
+ locations?: string[] | undefined;
115
+ payBasis?: "hourly" | "monthly" | undefined;
116
+ payAmount?: number | undefined;
117
+ maxHours?: number | undefined;
118
+ minHours?: number | undefined;
119
+ minHoursPerDay?: number | undefined;
120
+ workingHours?: {
121
+ minHoursPerDay: number | null;
122
+ maxHoursPerDay: number | null;
123
+ maxHoursPerWeek: number | null;
124
+ } | undefined;
125
+ overtime?: {
126
+ maxHoursPerMonth: number | null;
127
+ } | undefined;
128
+ preferences?: string[] | undefined;
129
+ seniority?: "senior" | "junior" | "" | undefined;
130
+ availDays?: boolean[] | undefined;
131
+ availHours?: {
132
+ from: string;
133
+ to: string;
134
+ }[] | undefined;
135
+ passcode?: string | undefined;
136
+ masterUser?: boolean | undefined;
137
+ };
138
+ row: TeamRow;
139
+ }[]>;
140
+ employeePicked: import("vue").ComputedRef<number>;
141
+ employeeAllPicked: import("vue").ComputedRef<boolean>;
142
+ employeeSomePicked: import("vue").ComputedRef<boolean>;
143
+ pendingTeam: Set<number>;
144
+ pendingAvail: Map<number, {
145
+ dayOfWeek: number;
146
+ start: string;
147
+ end: string;
148
+ }[]>;
149
+ rawEmployee: (empId: number) => {
150
+ overtime?: {
151
+ maxHoursPerMonth: number | null;
152
+ } | undefined;
153
+ minHoursPerDay?: number | null | undefined;
154
+ workingHours?: {
155
+ minHoursPerDay: number | null;
156
+ maxHoursPerDay: number | null;
157
+ maxHoursPerWeek: number | null;
158
+ } | undefined;
159
+ name: string;
160
+ employeeId: string;
161
+ employmentType: "FULLTIME" | "PARTTIME";
162
+ wage: {
163
+ type: "HOURLY" | "MONTHLY";
164
+ amount: number;
165
+ };
166
+ primaryPosition: {
167
+ positionId: string;
168
+ positionName: string;
169
+ } | null;
170
+ secondaryPositions: {
171
+ positionId: string;
172
+ positionName: string;
173
+ }[];
174
+ availability: {
175
+ dayOfWeek: number;
176
+ start: string;
177
+ end: string;
178
+ }[];
179
+ } | undefined;
180
+ seedEmployees: (missingOnly?: boolean) => void;
181
+ pickAll: (checked: boolean) => void;
182
+ setPosition: (empId: number, value: string) => void;
183
+ setEmployment: (empId: number, kind: TeamEmployment) => void;
184
+ setHours: (empId: number, value: string) => void;
185
+ setRate: (empId: number, value: string) => void;
186
+ bulkOpen: import("vue").Ref<boolean, boolean>;
187
+ bulk: {
188
+ scope: "all" | "full" | "part" | "nopos" | "nopay";
189
+ position: string;
190
+ second: string;
191
+ employment: "" | TeamEmployment;
192
+ maxHours: string;
193
+ rate: string;
194
+ basis: "" | TeamBasis;
195
+ };
196
+ bulkCount: import("vue").ComputedRef<number>;
197
+ applyBulk: () => void;
198
+ BULK_NONE: string;
199
+ validateEmployees: () => string | null;
200
+ saveEmployees: () => void;
201
+ note: {
202
+ value: string;
203
+ };
204
+ };
205
+ export type ScheduleOnboardingEmployeesApi = ReturnType<typeof useScheduleOnboardingEmployees>;
@@ -0,0 +1,15 @@
1
+ import type { ScheduleOnboardingDayHours } from './onboarding-types';
2
+ export declare const MAX_OPERATIONAL_SESSIONS = 2;
3
+ export declare function useScheduleOnboardingHours(): {
4
+ hours: import("vue").Reactive<ScheduleOnboardingDayHours[]>;
5
+ profileSnapshot: import("vue").Ref<string, string>;
6
+ hoursSnapshot: () => string;
7
+ hoursMatchProfile: import("vue").ComputedRef<boolean>;
8
+ openDayCount: import("vue").ComputedRef<number>;
9
+ resetHours: () => void;
10
+ toggleDay: (dayIdx: number) => void;
11
+ addSession: (dayIdx: number) => void;
12
+ removeSession: (dayIdx: number, sessionIdx: number) => void;
13
+ setSessionTime: (dayIdx: number, sessionIdx: number, field: "from" | "to", value: string) => void;
14
+ };
15
+ export type ScheduleOnboardingHoursApi = ReturnType<typeof useScheduleOnboardingHours>;
@@ -0,0 +1,11 @@
1
+ import type { ScheduleOnboardingStep } from './onboarding-types';
2
+ export declare function useScheduleOnboardingNavigation(): {
3
+ step: import("vue").Ref<ScheduleOnboardingStep, ScheduleOnboardingStep>;
4
+ stepIndex: import("vue").ComputedRef<number>;
5
+ isFirstStep: import("vue").ComputedRef<boolean>;
6
+ isLastStep: import("vue").ComputedRef<boolean>;
7
+ totalSteps: number;
8
+ steps: ScheduleOnboardingStep[];
9
+ isSkippable: import("vue").ComputedRef<boolean>;
10
+ };
11
+ export type ScheduleOnboardingNavigationApi = ReturnType<typeof useScheduleOnboardingNavigation>;