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

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 (134) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-CJaNPHZC.js} +2 -2
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-CHA98ZqW.js} +3 -3
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C7rvthEI.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-CVmMKt71.js} +4 -4
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-MYjgt5-F.js} +3 -3
  6. package/dist/{Main-DkLBemi7.js → Main-BgB9lD4K.js} +9 -9
  7. package/dist/{Main-DFwdAWqn.js → Main-C0cnqQ3B.js} +5 -5
  8. package/dist/{Main-B2r59IOW.js → Main-hlcHtrsc.js} +2 -2
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-5f1WIaVa.js} +5 -5
  10. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CFoTAGIX.js} +823 -823
  11. package/dist/{RoleList-DHO4JRKF.js → RoleList-DNR4miXr.js} +7 -7
  12. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B4VUyKW3.js +470 -0
  13. package/dist/{ScheduleGeneralPage-WlBM8bxV.js → ScheduleGeneralPage-Cd5AlY4z.js} +273 -236
  14. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-Cf0l2MRg.js +2188 -0
  15. package/dist/SchedulePage-C8m0-m3l.js +18257 -0
  16. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-DyRckyUx.js} +67 -66
  17. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-mw5OveZG.js} +6 -6
  18. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-BzXarZbM.js} +5 -5
  19. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-Dq5i4poN.js} +2 -2
  20. package/dist/{app-CmBSTvaI.js → app-DSsdRLHg.js} +657 -577
  21. package/dist/app.js +1 -1
  22. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-B6xBXQtU.js} +1 -1
  23. package/dist/{employee-DQcHjoij.js → employee-hMhzuqk1.js} +28 -27
  24. package/dist/{iteration-BlavheWG.js → iteration-B34AvpNC.js} +1 -1
  25. package/dist/{lodash-QerqayrJ.js → lodash-1Vyuy7Mu.js} +1 -1
  26. package/dist/{role-RM2YLO7n.js → role-DKOrgO6f.js} +1 -1
  27. package/dist/{rule-DjlvYIuP.js → rule-CBzQ3GeV.js} +2 -2
  28. package/dist/src/api/schedule/index.d.ts +5 -1
  29. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  30. package/dist/src/types/employee.d.ts +1 -0
  31. package/dist/src/types/schedule.d.ts +1 -1
  32. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +28 -0
  33. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +19 -0
  34. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +38 -0
  35. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  36. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +38 -0
  37. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  38. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  39. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +39 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  41. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  42. package/dist/src/views/scheduling/components/{ScheduleOpenShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +10 -3
  43. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  44. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +10 -0
  45. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  46. package/dist/src/views/scheduling/components/{ScheduleTourAllSet.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  47. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  48. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingDemandFooter.vue.d.ts} +2 -2
  49. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  50. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  51. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  52. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  53. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  54. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  55. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +7 -1
  56. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  57. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  58. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  59. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -2
  60. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  61. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  62. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  63. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +1 -1
  64. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  65. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  66. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  67. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  68. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  69. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  70. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  71. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +10 -0
  72. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +14 -13
  73. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +3 -1
  74. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  75. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +18 -2
  76. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  77. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  78. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -1
  79. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +4 -19
  80. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +13 -2
  81. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +11 -0
  82. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  83. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -0
  84. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  85. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  86. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  87. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  88. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +25 -0
  89. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +18 -0
  90. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  91. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +3 -6
  92. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  93. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  94. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +187 -0
  95. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  96. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  97. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +64 -487
  98. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  99. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  100. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  101. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  102. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -3
  103. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  104. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +3 -1
  105. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +3 -1
  106. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +7 -1
  107. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  108. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
  109. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +2 -24
  110. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -1
  111. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +62 -0
  112. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  113. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +10 -5
  114. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  115. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  116. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  117. package/dist/src/views/scheduling/data.d.ts +11 -6
  118. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  119. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  120. package/dist/src/views/scheduling/schedule-state.d.ts +32 -8
  121. package/dist/src/views/scheduling/schedule-store.d.ts +4 -1
  122. package/dist/src/views/scheduling/types.d.ts +5 -0
  123. package/dist/style.css +1 -1
  124. package/dist/tsconfig.app.tsbuildinfo +1 -1
  125. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-B2ev0j4w.js} +3 -3
  126. package/package.json +2 -1
  127. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  128. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  129. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  130. package/dist/src/components/layout/AppSidebar.vue.d.ts +0 -2
  131. package/dist/src/components/layout/withShell.d.ts +0 -14
  132. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
  133. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  134. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
@@ -0,0 +1,18 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleAutoScheduleApi } from './useScheduleAutoSchedule';
3
+ import type { SchedulePublishApi } from './useSchedulePublish';
4
+ interface UseSchedulePageActionsOptions {
5
+ board: ScheduleBoardApi;
6
+ autoSchedule: ScheduleAutoScheduleApi;
7
+ publish: SchedulePublishApi;
8
+ notify: (message: string, type: 'info' | 'success') => void;
9
+ }
10
+ export declare function useSchedulePageActions(options: UseSchedulePageActionsOptions): {
11
+ comingSoon: () => void;
12
+ onSchedStatusClick: () => void;
13
+ onApplyProposals: (count: number) => void;
14
+ onApplyAndPublishProposals: (count: number) => void;
15
+ onProposalDragStart: (id: number, event: DragEvent) => void;
16
+ onScroll: (delta: number) => void;
17
+ };
18
+ export {};
@@ -0,0 +1,21 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
3
+ import type { ScheduleDemandApi } from './useScheduleDemand';
4
+ import type { ScheduleAddPickApi } from './useScheduleAddPick';
5
+ import type { ScheduleShiftPopoverApi } from './useScheduleShiftPopover';
6
+ import type { ScheduleDemandSheetApi } from './useScheduleDemandSheet';
7
+ interface UseSchedulePageCellActionsOptions {
8
+ board: ScheduleBoardApi;
9
+ clash: ScheduleClashDetectionApi;
10
+ demand: ScheduleDemandApi;
11
+ addPick: ScheduleAddPickApi;
12
+ popover: ScheduleShiftPopoverApi;
13
+ demandSheet: ScheduleDemandSheetApi;
14
+ }
15
+ export declare function useSchedulePageCellActions(options: UseSchedulePageCellActionsOptions): {
16
+ dayHasAnyShift: (dayIdx: number) => boolean;
17
+ onAddShift: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
18
+ onEditShift: (empId: number, dayIdx: number, slotIndex?: number) => void;
19
+ onOpenDemandSheet: (dayIdx: number) => void;
20
+ };
21
+ export {};
@@ -0,0 +1,18 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
3
+ import type { ScheduleDragDropApi } from './useScheduleDragDrop';
4
+ import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
5
+ import type { ScheduleAutoScheduleApi } from './useScheduleAutoSchedule';
6
+ interface UseSchedulePageCellDropOptions {
7
+ board: ScheduleBoardApi;
8
+ autoSchedule: ScheduleAutoScheduleApi;
9
+ dragDrop: ScheduleDragDropApi;
10
+ shiftActions: ScheduleShiftActionsApi;
11
+ clash: ScheduleClashDetectionApi;
12
+ dayHasAnyShift: (dayIdx: number) => boolean;
13
+ notify: (message: string, type: 'error') => void;
14
+ }
15
+ export declare function useSchedulePageCellDrop(options: UseSchedulePageCellDropOptions): {
16
+ onCellDrop: (empId: number, dayIdx: number, event: DragEvent) => void;
17
+ };
18
+ export {};
@@ -0,0 +1,22 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { Ref } from 'vue';
3
+ import { useScheduleEmployeeProfile } from './useScheduleEmployeeProfile';
4
+ import type { ScheduleAddEmployeeApi } from './useScheduleAddEmployee';
5
+ import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
6
+ type ScheduleEmployeeProfileApi = ReturnType<typeof useScheduleEmployeeProfile>;
7
+ interface UseSchedulePageEmployeeActionsOptions {
8
+ board: ScheduleBoardApi;
9
+ employeeProfile: ScheduleEmployeeProfileApi;
10
+ addEmployee: ScheduleAddEmployeeApi;
11
+ removeEmployeeId: Ref<number | null>;
12
+ clash: ScheduleClashDetectionApi;
13
+ notify: (message: string, type: 'error' | 'info' | 'success') => void;
14
+ }
15
+ export declare function useSchedulePageEmployeeActions(options: UseSchedulePageEmployeeActionsOptions): {
16
+ onOpenEmployeeMenu: (empId: number) => void;
17
+ onEditEmployee: () => void;
18
+ onClearAllShifts: (empId: number) => void;
19
+ onRemoveEmployee: () => void;
20
+ onConfirmRemoveEmployee: () => Promise<void>;
21
+ };
22
+ export {};
@@ -1,3 +1,4 @@
1
+ import { ref } from 'vue';
1
2
  import type { ScheduleAddPickApi } from './useScheduleAddPick';
2
3
  import type { ScheduleAllShiftsRowApi } from './useScheduleAllShiftsRow';
3
4
  import type { ScheduleDayNoteApi } from './useScheduleDayNote';
@@ -5,9 +6,13 @@ import type { ScheduleGapPopoverApi } from './useScheduleGapPopover';
5
6
  import type { ScheduleOpenShiftCardApi } from './useScheduleOpenShiftCard';
6
7
  import type { ScheduleShiftActionsApi } from './useScheduleShiftActions';
7
8
  import type { ScheduleTimePickerApi } from './useScheduleTimePicker';
8
- import type { ScheduleTopbarApi } from './useScheduleTopbar';
9
+ export type ScheduleTopbarMenu = 'actions' | 'export';
10
+ export interface ScheduleTopbarApi {
11
+ openMenu: ReturnType<typeof ref<ScheduleTopbarMenu | null>>;
12
+ toggleMenu: (id: ScheduleTopbarMenu) => void;
13
+ closeMenus: () => void;
14
+ }
9
15
  export declare function useSchedulePageOverlays(apis: {
10
- topbar: ScheduleTopbarApi;
11
16
  dayNote: ScheduleDayNoteApi;
12
17
  allShiftsRow: ScheduleAllShiftsRowApi;
13
18
  gap: ScheduleGapPopoverApi;
@@ -15,4 +20,6 @@ export declare function useSchedulePageOverlays(apis: {
15
20
  addPick: ScheduleAddPickApi;
16
21
  shiftActions: ScheduleShiftActionsApi;
17
22
  openShiftCard: ScheduleOpenShiftCardApi;
18
- }): void;
23
+ }): {
24
+ topbar: ScheduleTopbarApi;
25
+ };
@@ -0,0 +1,19 @@
1
+ import { type ComputedRef, type Ref } from 'vue';
2
+ export interface SchedulePdfCanvas {
3
+ canvas: HTMLCanvasElement;
4
+ }
5
+ export interface SchedulePdfExportOptions {
6
+ subtitle: ComputedRef<string>;
7
+ title: ComputedRef<string>;
8
+ buildCanvas: () => SchedulePdfCanvas | null;
9
+ buildSheetImage: (onReady: () => void) => void;
10
+ jpgPreviewOpen: Ref<boolean>;
11
+ releaseSheetImage: () => void;
12
+ }
13
+ export declare function useSchedulePdfExport(options: SchedulePdfExportOptions): {
14
+ previewOpen: Ref<boolean, boolean>;
15
+ barMeta: ComputedRef<string>;
16
+ openPreview: () => void;
17
+ closePreview: () => void;
18
+ printNow: () => void;
19
+ };
@@ -16,7 +16,9 @@ export interface PositionModalDone {
16
16
  * as their main position when they have none yet, otherwise as one more they are trained in.
17
17
  * The profile write replaces `secondaryPositions` wholesale, so a person's existing ones are
18
18
  * sent back with the new one rather than being dropped. */
19
- export declare function useSchedulePositionModal(onCreated?: (positionName: string) => void): {
19
+ export declare function useSchedulePositionModal(onCreated?: (positionName: string) => void, options?: {
20
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
21
+ }): {
20
22
  open: import("vue").Ref<boolean, boolean>;
21
23
  name: import("vue").Ref<string, string>;
22
24
  search: import("vue").Ref<string, string>;
@@ -2,7 +2,9 @@ export interface SchedulePositionRow {
2
2
  id: string;
3
3
  name: string;
4
4
  }
5
- export declare function useSchedulePositions(): {
5
+ export declare function useSchedulePositions(options?: {
6
+ notify?: (message: string, type?: 'success' | 'error' | 'info') => void;
7
+ }): {
6
8
  positions: import("vue").Ref<{
7
9
  id: string;
8
10
  name: string;
@@ -58,6 +58,7 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
58
58
  breakPayType: "PAID" | "UNPAID";
59
59
  })[] | undefined;
60
60
  assignmentId?: string | undefined;
61
+ updatedAt?: string | undefined;
61
62
  splitGroupId?: string | undefined;
62
63
  } | {
63
64
  timeOff: "approved" | "pending";
@@ -105,6 +106,7 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
105
106
  breakPayType: "PAID" | "UNPAID";
106
107
  })[] | undefined;
107
108
  assignmentId?: string | undefined;
109
+ updatedAt?: string | undefined;
108
110
  splitGroupId?: string | undefined;
109
111
  }[] | null)[];
110
112
  }[];
@@ -112,7 +114,11 @@ export declare function useSchedulePublish(board: ScheduleBoardApi): {
112
114
  toggleAllVersions: () => void;
113
115
  toggleVersionDiff: (v: number) => void;
114
116
  diffFor: (version: ScheduleVersion) => VersionDiffRow[];
115
- confirm: () => void;
117
+ confirm: () => Promise<void>;
116
118
  restoreVersion: (v: number) => void;
119
+ shareOpen: import("vue").Ref<boolean, boolean>;
120
+ shareVersion: import("vue").Ref<number | null, number | null>;
121
+ shareStaffAffected: import("vue").Ref<number, number>;
122
+ closeShare: () => void;
117
123
  };
118
124
  export type SchedulePublishApi = ReturnType<typeof useSchedulePublish>;
@@ -0,0 +1,11 @@
1
+ import type { WorkSlot } from '../types';
2
+ export interface SchedulePublishPersistenceOptions {
3
+ recoverPersistFailure: (error: unknown, fallback: string) => Promise<void>;
4
+ }
5
+ export declare function useSchedulePublishPersistence(options: SchedulePublishPersistenceOptions): {
6
+ persistPublish: (items: Array<{
7
+ empId: number;
8
+ dayIdx: number;
9
+ slot: WorkSlot;
10
+ }>) => Promise<boolean>;
11
+ };
@@ -11,6 +11,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
11
11
  search: import("vue").Ref<string, string>;
12
12
  filteredEmployees: import("vue").ComputedRef<{
13
13
  id: number;
14
+ sourceId: string;
14
15
  name: string;
15
16
  employmentType: "FULLTIME" | "PARTTIME";
16
17
  role: string;
@@ -46,6 +47,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
46
47
  breakPayType: "PAID" | "UNPAID";
47
48
  })[] | undefined;
48
49
  assignmentId?: string | undefined;
50
+ updatedAt?: string | undefined;
49
51
  splitGroupId?: string | undefined;
50
52
  } | {
51
53
  timeOff: "approved" | "pending";
@@ -93,6 +95,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
93
95
  breakPayType: "PAID" | "UNPAID";
94
96
  })[] | undefined;
95
97
  assignmentId?: string | undefined;
98
+ updatedAt?: string | undefined;
96
99
  splitGroupId?: string | undefined;
97
100
  }[] | null)[];
98
101
  remarks: {
@@ -124,6 +127,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
124
127
  }[]>;
125
128
  orderedEmployees: import("vue").ComputedRef<{
126
129
  id: number;
130
+ sourceId: string;
127
131
  name: string;
128
132
  employmentType: "FULLTIME" | "PARTTIME";
129
133
  role: string;
@@ -159,6 +163,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
159
163
  breakPayType: "PAID" | "UNPAID";
160
164
  })[] | undefined;
161
165
  assignmentId?: string | undefined;
166
+ updatedAt?: string | undefined;
162
167
  splitGroupId?: string | undefined;
163
168
  } | {
164
169
  timeOff: "approved" | "pending";
@@ -206,6 +211,7 @@ export declare function useScheduleRoster(board: ScheduleBoardApi): {
206
211
  breakPayType: "PAID" | "UNPAID";
207
212
  })[] | undefined;
208
213
  assignmentId?: string | undefined;
214
+ updatedAt?: string | undefined;
209
215
  splitGroupId?: string | undefined;
210
216
  }[] | null)[];
211
217
  remarks: {
@@ -1,25 +1,14 @@
1
1
  export type ScheduleSettingsSection = 'budget' | 'payrates' | 'overtime' | 'notify';
2
- /** Labour budget and Notifications are out of the General page for now — see
3
- * ScheduleSettingsPage's own note. `ScheduleSettingsSection` stays the full union (rather
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. */
2
+ /** Keep unsupported sections out of the navigation until their API fields exist. */
7
3
  export declare const SETTINGS_SECTIONS: {
8
4
  key: ScheduleSettingsSection;
9
5
  label: string;
10
6
  }[];
11
- /** The mockup's Scheduling Settings page, scoped to the 3 tabs the topbar gear icon opens
12
- * (Labour budget / Overtime / Notifications). The mockup's sibling Shift & coverage / Seasonal
13
- * / Positions pages are a separate, out-of-scope epic — not built here. One draft object, like
14
- * the mockup's settingsDraft/spSnapshot(). */
7
+ /** Settings currently supported by the schedule API: pay rates and monthly OT hours. */
15
8
  export declare function useScheduleSettings(): {
16
9
  isOpen: import("vue").Ref<boolean, boolean>;
17
10
  activeSection: import("vue").Ref<ScheduleSettingsSection, ScheduleSettingsSection>;
18
11
  draft: {
19
- salesForecast: number;
20
- labourTarget: number;
21
- budgetFromSales: boolean;
22
- budget: number;
23
12
  payRate: {
24
13
  NORMAL: {
25
14
  overtime: number;
@@ -34,17 +23,6 @@ export declare function useScheduleSettings(): {
34
23
  };
35
24
  };
36
25
  otCapHours: number;
37
- otBudget: number;
38
- notify: {
39
- waConnected: boolean;
40
- waNumber: string;
41
- waDisplayName: string;
42
- defaults: {
43
- wa: boolean;
44
- push: boolean;
45
- email: boolean;
46
- };
47
- };
48
26
  };
49
27
  dirty: import("vue").ComputedRef<boolean>;
50
28
  loading: import("vue").Ref<boolean, boolean>;
@@ -36,7 +36,9 @@ export interface ScheduleSwapState {
36
36
  * and trading two people's shifts on the same day. Both skip the mockup's OT/pay-band cost
37
37
  * preview and hard/soft override tiers — this board has no per-person pay bands to price
38
38
  * against, so a candidate is either qualified-and-free or it isn't offered at all. */
39
- export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
39
+ export declare function useScheduleShiftActions(board: ScheduleBoardApi, options?: {
40
+ onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
41
+ }): {
40
42
  menu: {
41
43
  open: boolean;
42
44
  empId: number | null;
@@ -56,6 +58,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
56
58
  changeSlot: import("vue").ComputedRef<import("../types").WorkSlot[]>;
57
59
  changeCandidates: import("vue").ComputedRef<{
58
60
  id: number;
61
+ sourceId: string;
59
62
  name: string;
60
63
  employmentType: "FULLTIME" | "PARTTIME";
61
64
  role: string;
@@ -91,6 +94,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
91
94
  breakPayType: "PAID" | "UNPAID";
92
95
  })[] | undefined;
93
96
  assignmentId?: string | undefined;
97
+ updatedAt?: string | undefined;
94
98
  splitGroupId?: string | undefined;
95
99
  } | {
96
100
  timeOff: "approved" | "pending";
@@ -138,6 +142,7 @@ export declare function useScheduleShiftActions(board: ScheduleBoardApi): {
138
142
  breakPayType: "PAID" | "UNPAID";
139
143
  })[] | undefined;
140
144
  assignmentId?: string | undefined;
145
+ updatedAt?: string | undefined;
141
146
  splitGroupId?: string | undefined;
142
147
  }[] | null)[];
143
148
  remarks: {
@@ -0,0 +1,62 @@
1
+ import type { WorkSlot } from '../types';
2
+ import { type ScheduleBreakChoice, type ScheduleShiftSegment } from './schedule-shift-time';
3
+ export interface ScheduleHeadcountRole {
4
+ position: string;
5
+ count: number;
6
+ sen: '' | 'senior' | 'junior';
7
+ }
8
+ export declare function useScheduleShiftDraft(): {
9
+ open: import("vue").Ref<boolean, boolean>;
10
+ dayIdx: import("vue").Ref<number | null, number | null>;
11
+ empId: import("vue").Ref<number | null, number | null>;
12
+ originalEmpId: import("vue").Ref<number | null, number | null>;
13
+ editingOpenShiftId: import("vue").Ref<number | null, number | null>;
14
+ isNew: import("vue").Ref<boolean, boolean>;
15
+ originalSlotIndex: import("vue").Ref<number, number>;
16
+ originalSlotCount: import("vue").Ref<number, number>;
17
+ originalSplitGroupId: import("vue").Ref<string | undefined, string | undefined>;
18
+ originalDayHadContent: import("vue").Ref<boolean, boolean>;
19
+ name: import("vue").Ref<string, string>;
20
+ segments: import("vue").Ref<{
21
+ start: string;
22
+ end: string;
23
+ }[], ScheduleShiftSegment[] | {
24
+ start: string;
25
+ end: string;
26
+ }[]>;
27
+ role: import("vue").Ref<string, string>;
28
+ required: import("vue").Ref<number, number>;
29
+ sen: import("vue").Ref<"" | "senior" | "junior", "" | "senior" | "junior">;
30
+ empType: import("vue").Ref<"" | "full" | "part", "" | "full" | "part">;
31
+ roles: import("vue").Ref<{
32
+ position: string;
33
+ count: number;
34
+ sen: "" | "senior" | "junior";
35
+ }[], ScheduleHeadcountRole[] | {
36
+ position: string;
37
+ count: number;
38
+ sen: "" | "senior" | "junior";
39
+ }[]>;
40
+ breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
41
+ breakCustomMins: import("vue").Ref<number, number>;
42
+ breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
43
+ breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
44
+ breakStartTime: import("vue").Ref<string, string>;
45
+ breakEndTime: import("vue").Ref<string, string>;
46
+ repeatDays: import("vue").Ref<boolean[], boolean[]>;
47
+ gapNote: import("vue").Ref<string | null, string | null>;
48
+ conflictNote: import("vue").Ref<string | null, string | null>;
49
+ grantSkill: import("vue").Ref<boolean, boolean>;
50
+ unassignMode: import("vue").Ref<boolean, boolean>;
51
+ resetCommon: (day: number) => void;
52
+ applyNormalizedBreak: (minutes: number | undefined) => void;
53
+ applyPersistedBreaks: (breaks: WorkSlot["breaks"], fallbackMins: number | undefined) => void;
54
+ resolvedBreakMins: () => number | undefined;
55
+ resolvedBreaks: () => WorkSlot["breaks"];
56
+ buildDraftSlot: () => WorkSlot | WorkSlot[];
57
+ close: () => void;
58
+ removeSegment: (index: number) => void;
59
+ addRole: () => void;
60
+ removeRole: (index: number) => void;
61
+ segmentHoursOf: (segment: ScheduleShiftSegment) => number;
62
+ };
@@ -0,0 +1,17 @@
1
+ import type { ComputedRef } from 'vue';
2
+ import type { ScheduleBoardApi } from './useScheduleBoard';
3
+ import { useScheduleShiftDraft } from './useScheduleShiftDraft';
4
+ type ShiftDraft = ReturnType<typeof useScheduleShiftDraft>;
5
+ interface UseScheduleShiftPersistenceOptions {
6
+ draft: ShiftDraft;
7
+ saveDisabled: ComputedRef<boolean>;
8
+ showGrantSkill: ComputedRef<boolean>;
9
+ onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
10
+ }
11
+ /** Mutations for the shift popover. Draft editing stays separate so the UI can preview and
12
+ * validate without owning board writes. */
13
+ export declare function useScheduleShiftPersistence(board: ScheduleBoardApi, options: UseScheduleShiftPersistenceOptions): {
14
+ save: () => void;
15
+ remove: () => void;
16
+ };
17
+ export {};
@@ -1,6 +1,6 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleDemandApi } from './useScheduleDemand';
3
- import { type ScheduleBreakChoice, type ScheduleShiftSegment } from './schedule-shift-time';
3
+ import { type ScheduleShiftSegment } from './schedule-shift-time';
4
4
  export type { ScheduleBreakChoice, ScheduleShiftSegment } from './schedule-shift-time';
5
5
  export interface ScheduleHeadcountRole {
6
6
  position: string;
@@ -13,7 +13,9 @@ export interface ScheduleHeadcountRole {
13
13
  * it into open demand. Opened three ways: for an employee's cell (assign/edit), for a brand
14
14
  * new open shift (multi-position headcount authoring), or to edit one existing open-shift
15
15
  * record (single position, like an assigned shift's "Position needed" row). */
16
- export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
16
+ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, options?: {
17
+ onToast?: (message: string, type?: 'success' | 'error' | 'info') => void;
18
+ }): {
17
19
  open: import("vue").Ref<boolean, boolean>;
18
20
  dayIdx: import("vue").Ref<number | null, number | null>;
19
21
  empId: import("vue").Ref<number | null, number | null>;
@@ -36,7 +38,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
36
38
  position: string;
37
39
  count: number;
38
40
  sen: "" | "senior" | "junior";
39
- }[], ScheduleHeadcountRole[] | {
41
+ }[], import("./useScheduleShiftDraft").ScheduleHeadcountRole[] | {
40
42
  position: string;
41
43
  count: number;
42
44
  sen: "" | "senior" | "junior";
@@ -56,13 +58,13 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
56
58
  };
57
59
  beforeSegs: import("../types").CoverageSegment[];
58
60
  afterSegs: import("../types").CoverageSegment[];
59
- axis: import("./useScheduleDemand").ScheduleCoverageAxis;
61
+ axis: import("./schedule-demand-domain").ScheduleCoverageAxis;
60
62
  } | null>;
61
63
  requiresAssignment: import("vue").ComputedRef<boolean>;
62
64
  saveDisabled: import("vue").ComputedRef<boolean>;
63
65
  saveTitle: import("vue").ComputedRef<"" | "Choose who covers it — this shift is answering a staffing gap, and a shift with nobody on it leaves that gap exactly as it is">;
64
66
  saveLabel: import("vue").ComputedRef<"Create & assign" | "Save">;
65
- breakChoice: import("vue").Ref<ScheduleBreakChoice, ScheduleBreakChoice>;
67
+ breakChoice: import("vue").Ref<import("./schedule-shift-time").ScheduleBreakChoice, import("./schedule-shift-time").ScheduleBreakChoice>;
66
68
  breakCustomMins: import("vue").Ref<number, number>;
67
69
  breakCustomUnit: import("vue").Ref<"mins" | "hrs", "mins" | "hrs">;
68
70
  breakMode: import("vue").Ref<"time" | "duration", "time" | "duration">;
@@ -77,6 +79,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
77
79
  positionOptions: import("vue").ComputedRef<string[]>;
78
80
  whoOptions: import("vue").ComputedRef<{
79
81
  id: number;
82
+ sourceId: string;
80
83
  name: string;
81
84
  employmentType: "FULLTIME" | "PARTTIME";
82
85
  role: string;
@@ -112,6 +115,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
112
115
  breakPayType: "PAID" | "UNPAID";
113
116
  })[] | undefined;
114
117
  assignmentId?: string | undefined;
118
+ updatedAt?: string | undefined;
115
119
  splitGroupId?: string | undefined;
116
120
  } | {
117
121
  timeOff: "approved" | "pending";
@@ -159,6 +163,7 @@ export declare function useScheduleShiftPopover(board: ScheduleBoardApi, demand:
159
163
  breakPayType: "PAID" | "UNPAID";
160
164
  })[] | undefined;
161
165
  assignmentId?: string | undefined;
166
+ updatedAt?: string | undefined;
162
167
  splitGroupId?: string | undefined;
163
168
  }[] | null)[];
164
169
  remarks: {
@@ -8,7 +8,10 @@ import type { useScheduleLegend } from './useScheduleLegend';
8
8
  * the reference's renderedDays()-scoped totals. The 7-day RULES.salesForecast/SALES_CURVE
9
9
  * baseline underneath it stays weekly regardless — only the on-screen total and the
10
10
  * redistribution on edit are span-scoped. */
11
- export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: ScheduleCostRailApi, legend: ReturnType<typeof useScheduleLegend>): {
11
+ export declare function useScheduleStatsRow(board: ScheduleBoardApi, costRail: ScheduleCostRailApi, legend: ReturnType<typeof useScheduleLegend>, handlers?: {
12
+ onPersistError?: (message: string) => void;
13
+ onPersistSuccess?: (message: string) => void;
14
+ }): {
12
15
  open: import("vue").Ref<boolean, boolean>;
13
16
  toggle: () => void;
14
17
  forecast: import("vue").Ref<number, number>;
@@ -1,3 +1,4 @@
1
+ import { type Ref } from 'vue';
1
2
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
3
  import type { ScheduleDemandRowApi } from './useScheduleDemandRow';
3
4
  import type { ScheduleDemandSheetApi } from './useScheduleDemandSheet';
@@ -7,6 +8,7 @@ import type { SchedulePublishApi } from './useSchedulePublish';
7
8
  import type { ScheduleExportApi } from './useScheduleExport';
8
9
  import type { IntroRecapRow } from './onboarding-types';
9
10
  interface TourDeps {
11
+ rootEl: Ref<HTMLElement | null>;
10
12
  board: ScheduleBoardApi;
11
13
  demandRow: ScheduleDemandRowApi;
12
14
  demandSheet: ScheduleDemandSheetApi;
@@ -22,9 +24,9 @@ interface TourDeps {
22
24
  * popover. No Back button, matching the source: the only way on is Next or Skip. */
23
25
  export declare function useScheduleTour(deps: TourDeps): {
24
26
  coach: {
25
- open: import("vue").Ref<boolean, boolean>;
26
- placing: import("vue").Ref<boolean, boolean>;
27
- tip: import("vue").Ref<{
27
+ open: Ref<boolean, boolean>;
28
+ placing: Ref<boolean, boolean>;
29
+ tip: Ref<{
28
30
  title: string;
29
31
  body: string;
30
32
  count?: string | undefined;
@@ -85,7 +87,7 @@ export declare function useScheduleTour(deps: TourDeps): {
85
87
  skip: () => void;
86
88
  };
87
89
  start: () => void;
88
- allSetOpen: import("vue").Ref<boolean, boolean>;
90
+ allSetOpen: Ref<boolean, boolean>;
89
91
  allSetRecap: import("vue").ComputedRef<IntroRecapRow[]>;
90
92
  closeAllSet: () => void;
91
93
  };
@@ -0,0 +1,24 @@
1
+ import type { PayRate } from '../types';
2
+ export interface CountryScheduleRules {
3
+ countryCode: string;
4
+ timezone: string;
5
+ payRate: PayRate;
6
+ overtime: {
7
+ maxMonthlyHours: number | null;
8
+ afterDailyHours: number | null;
9
+ };
10
+ workingHours: {
11
+ standardWeeklyHours: number | null;
12
+ maxDailyHours: number | null;
13
+ };
14
+ recurringPublicHolidays: Array<{
15
+ month: number;
16
+ day: number;
17
+ name: string;
18
+ }>;
19
+ publicHolidays: Record<string, Record<string, string>>;
20
+ }
21
+ export declare function normalizeCountryCode(country: unknown): string;
22
+ export declare function getCountryScheduleRules(country?: unknown): CountryScheduleRules;
23
+ export declare function holidayNameForDate(rules: CountryScheduleRules, date: string): string | null;
24
+ export declare const SUPPORTED_SCHEDULE_COUNTRIES: string[];
@@ -7,7 +7,10 @@ export declare const ALL_STATIONS = "All Stations";
7
7
  /** Employment seniority is a closed set in the model, not something an outlet configures. */
8
8
  export declare const SENIORITY_OPTIONS: Array<'senior' | 'junior'>;
9
9
  /** The one section every board has. Scheduling sections are not a Mongo concept yet, so the
10
- * whole roster sits in this bucket and its `roles` list stays empty. */
10
+ * whole roster sits in this bucket and its `roles` list stays empty. Labelled "Assigned" rather
11
+ * than the id's own `UNASSIGNED` — this is where every shift's actual cost lives (the cost rail
12
+ * is the only place this label shows), and "Unassigned" read like a warning that nobody was
13
+ * covering those hours rather than just "not sorted into a work area yet". */
11
14
  export declare const SECTIONS: Section[];
12
15
  /** The position catalogue, from the Positions collection. Name-only: this is read as plain
13
16
  * strings everywhere on this board (dropdown options, coverage-matrix keys, role lookups), and
@@ -41,13 +44,13 @@ export declare function positionSelectorOf(name: string | undefined): FdtoSchedu
41
44
  * no real forecast to shape: a curve invented here would make one day look busier than another
42
45
  * for no reason anybody could point at. */
43
46
  export declare const SALES_CURVE: number[];
44
- /** Scheduling configuration, from two places and no others: `payRate` is the whole content of
45
- * the ScheduleSettings document, and the trading window comes from the outlet's own Restaurants
46
- * profile (see `restaurantProfile` on the DTO).
47
+ /** Scheduling configuration, from two places and no others: pay rates, setup state, and the
48
+ * monthly OT cap come from the ScheduleSettings document, and the trading window comes from the
49
+ * outlet's own Restaurants profile (see `restaurantProfile` on the DTO).
47
50
  *
48
51
  * The fields with no Mongo source stay zero rather than being guessed: `coverage` (per-template
49
- * headcount matrices), `salesForecast`, `labourTarget`, `budget`, the OT caps and the
50
- * notification channels. Nothing on screen derived from them is a figure this file made up.
52
+ * headcount matrices), `salesForecast`, `labourTarget`, `budget`, and notification channels.
53
+ * Nothing on screen derived from them is a figure this file made up.
51
54
  *
52
55
  * `openFrom`/`openTo` are the one pair that must never be blank — they are the axis every
53
56
  * coverage bar, day timeline and shift form is drawn against, and there is no such thing as a
@@ -63,6 +66,8 @@ export declare function gridDayIdx(dayOfWeek: number): number;
63
66
  export declare function jsDayOfWeek(gridIdx: number): number;
64
67
  export declare function employeeIdOf(num: number): string | undefined;
65
68
  export declare function employeeNumberOf(employeeId: string): number;
69
+ /** Stable identity for change tracking. Keep the numeric id only for legacy board lookups. */
70
+ export declare function employeeKeyOf(employee: Pick<Employee, 'sourceId' | 'id'>): string;
66
71
  /** The outlets a person is rostered at, by name, from the POS roster's `restaurantRole`. */
67
72
  /** The outlet being scheduled goes first in a list of locations; the rest keep their order. */
68
73
  export declare function currentLocationFirst(locations: string[]): string[];