@feedmepos/mf-hrm-portal 2.2.5-dev → 2.2.5-dev.4

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-DgcWZ3SZ.js → ApprovalCodeList-D0B_X3Sf.js} +4 -4
  2. package/dist/{AuditLogList-vWKMMGvd.js → AuditLogList-D9anf4YQ.js} +18 -17
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DuhXogXK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-4oENMRO3.js} +2 -2
  4. package/dist/EmployeeList-DREDu3Ou.js +788 -0
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js → FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js} +1 -1
  6. package/dist/{GrantUserList-BAW0C1bA.js → GrantUserList-CLDshEN9.js} +5 -5
  7. package/dist/{Main-Wr6cTqfM.js → Main-DtMaG42L.js} +2 -2
  8. package/dist/{Main-NzpdRNB3.js → Main-QhQxU593.js} +5 -5
  9. package/dist/{Main-B7Nn8CLQ.js → Main-lqlb8tPw.js} +9 -9
  10. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +243 -0
  11. package/dist/{PermissionSetList-D6AFOleD.js → PermissionSetList-BK8yBpJJ.js} +22 -21
  12. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-Bzq2_BMn.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-uSdvH81B.js} +924 -923
  13. package/dist/{RoleList-BuqpmXn_.js → RoleList-D6AX6BqB.js} +7 -7
  14. package/dist/ScheduleGeneralPage-DAECTCDu.js +242 -0
  15. package/dist/SchedulePage-CdFR7JuO.js +10751 -0
  16. package/dist/SchedulePositionPage-DTtKg0sx.js +220 -0
  17. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-BiuUrr50.js +199 -0
  18. package/dist/SelectFilter-CG13h83-.js +264 -0
  19. package/dist/TeamMemberList-BM5JoR6J.js +1155 -0
  20. package/dist/{TimesheetList-B5FyVyCz.js → TimesheetList-Ch_f_PD5.js} +54 -53
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-C99Jr6Ax.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CxqxqwyD.js} +2 -2
  22. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
  23. package/dist/{app-8samJY5z.js → app-tDHL6k4G.js} +3092 -2499
  24. package/dist/app.js +1 -1
  25. package/dist/{dayjs.min-Ba4X_9nY.js → dayjs.min-B_XWc0Hu.js} +1 -1
  26. package/dist/employee-Bs_2vqBY.js +139 -0
  27. package/dist/index-Cz2b95YF.js +70 -0
  28. package/dist/{iteration-Dhdew1jW.js → index-jxRluZiW.js} +698 -726
  29. package/dist/iteration-CcXrOMQe.js +30 -0
  30. package/dist/{lodash-CJ3mHku0.js → lodash-D5vM3paU.js} +1 -1
  31. package/dist/{role-BViYS7RK.js → role-7ccipEEe.js} +4 -3
  32. package/dist/{rule-Dxt1ZSQS.js → rule-7faruCdz.js} +282 -277
  33. package/dist/src/api/schedule/index.d.ts +44 -0
  34. package/dist/src/components/form/OutletRoleAssignment.vue.d.ts +16 -0
  35. package/dist/src/components/layout/AppSidebar.vue.d.ts +2 -0
  36. package/dist/src/components/layout/PortalShell.vue.d.ts +12 -0
  37. package/dist/src/components/layout/withShell.d.ts +14 -0
  38. package/dist/src/helpers/outlet-role-assignment.d.ts +40 -0
  39. package/dist/src/helpers/rule.d.ts +15 -0
  40. package/dist/src/router/shared.d.ts +4 -1
  41. package/dist/src/types/schedule.d.ts +232 -0
  42. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +4 -0
  43. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +4 -0
  44. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +4 -0
  45. package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +6 -0
  46. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +6 -0
  47. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +6 -0
  48. package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +6 -0
  49. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +6 -0
  50. package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +6 -0
  51. package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +6 -0
  52. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +22 -0
  53. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +34 -0
  54. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +6 -0
  55. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +6 -0
  56. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +8 -0
  57. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +24 -0
  58. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +8 -0
  59. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +6 -0
  60. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +12 -0
  62. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +23 -0
  63. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +10 -0
  64. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +2 -0
  65. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +12 -0
  66. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +17 -0
  67. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +18 -0
  68. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +6 -0
  69. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +18 -0
  70. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +6 -0
  71. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +6 -0
  72. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +12 -0
  73. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +6 -0
  74. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +14 -0
  75. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +6 -0
  76. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +8 -0
  77. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +12 -0
  78. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +24 -0
  79. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +6 -0
  80. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +12 -0
  81. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +31 -0
  82. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +6 -0
  83. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +6 -0
  84. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +6 -0
  85. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +14 -0
  86. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +8 -0
  87. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +8 -0
  88. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +25 -0
  89. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +14 -0
  90. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +16 -0
  91. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +54 -0
  92. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +12 -0
  93. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +8 -0
  94. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +6 -0
  95. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +22 -0
  96. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +67 -0
  97. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +38 -0
  98. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +29 -0
  99. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +7 -0
  100. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +14 -0
  101. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +10 -0
  102. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +86 -0
  103. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +66 -0
  104. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +77 -0
  105. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +50 -0
  106. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +18 -0
  107. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +113 -0
  108. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +136 -0
  109. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +415 -0
  110. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +27 -0
  111. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +18 -0
  112. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +17 -0
  113. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +43 -0
  114. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +48 -0
  115. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +82 -0
  116. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +68 -0
  117. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +45 -0
  118. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +139 -0
  119. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +22 -0
  120. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +32 -0
  121. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +16 -0
  122. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +26 -0
  123. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +14 -0
  124. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +80 -0
  125. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +20 -0
  126. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +15 -0
  127. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +35 -0
  128. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +179 -0
  129. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +23 -0
  130. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +19 -0
  131. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +32 -0
  132. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +91 -0
  133. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +18 -0
  134. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +183 -0
  135. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +54 -0
  136. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +18 -0
  137. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +225 -0
  138. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +174 -0
  139. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +20 -0
  140. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +25 -0
  141. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +44 -0
  142. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +10 -0
  143. package/dist/src/views/scheduling/data.d.ts +105 -0
  144. package/dist/src/views/scheduling/locales/index.d.ts +496 -0
  145. package/dist/src/views/scheduling/schedule-store.d.ts +116 -0
  146. package/dist/src/views/scheduling/types.d.ts +311 -0
  147. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  148. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  149. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +12 -3
  150. package/dist/style.css +1 -1
  151. package/dist/tsconfig.app.tsbuildinfo +1 -1
  152. package/dist/{useReportPermissions-BiyAfGvZ.js → useReportPermissions-FieO4EAD.js} +3 -3
  153. package/dist/useScheduleOutlet-CmIG5dwQ.js +557 -0
  154. package/dist/useSchedulePositions-DPVAgdB2.js +103 -0
  155. package/package.json +1 -1
  156. package/dist/EmployeeList-Cu4RxVQX.js +0 -889
  157. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-BUI0Xsgc.js +0 -85
  158. package/dist/SelectFilter-ATOm0hdn.js +0 -269
  159. package/dist/TeamMemberList-M6HA9BWu.js +0 -1248
  160. package/dist/employee-BcFgm8Rt.js +0 -204
@@ -0,0 +1,38 @@
1
+ import type { DaySlot, Employee, LeaveSlot, WorkSlot } from '../types';
2
+ import type { FdtoScheduleSaveAssignmentReq } from '@/types/schedule';
3
+ /** dayjs-free local-date key — matches on the browser's local Y/M/D, not UTC, so this stays
4
+ * correct regardless of timezone. */
5
+ export declare function isoDateKey(d: Date): string;
6
+ export declare function isWorkSlot(slot: DaySlot): slot is WorkSlot;
7
+ export declare function isLeaveSlot(slot: DaySlot): slot is LeaveSlot;
8
+ export declare function workSlotsOf(day: DaySlot): WorkSlot[];
9
+ /** A WorkSlot, in the shape ShiftAssignments actually stores. `pending` is the only status
10
+ * this board's own writers ever set on a fresh slot (see commitShift's callers) — `ot` is
11
+ * derived at cost-rail time, never authored, so it has nowhere sensible to map but PUBLISHED. */
12
+ export declare function toAssignmentReq(employeeId: string, date: string, slot: WorkSlot): FdtoScheduleSaveAssignmentReq;
13
+ /** Which coverage-position (a RULES.coverage.full key, e.g. 'grill', 'customer service') a
14
+ * work slot's `role` counts toward for area-view grouping and cost-by-position breakdowns.
15
+ * The shift popover's "Position needed" field writes a coverage-position key directly into
16
+ * `role` for anything authored through it — so a role that's already a coverage key is
17
+ * used as-is. Seed data instead recorded a station label ('FOH', 'Kitchen', ...), which
18
+ * ROLE_POSITIONS translates to that station's first/primary position. This can't tell a
19
+ * Kitchen employee's grill shifts apart from their prep shifts when the seed data only
20
+ * ever recorded the station — that distinction only exists once a shift is authored (or
21
+ * re-saved) through the popover, which does record the specific position. */
22
+ export declare function positionKeyOf(role: string): string;
23
+ /** The hours this employee is contracted to in a week — what "18h / 44h" measures against.
24
+ * Stated per person on their own profile now that ScheduleSettings carries pay rates alone, so
25
+ * there is no venue-wide full/part pair to fall back to: somebody nobody has agreed hours with
26
+ * reads 0, which is the truth rather than a default they never signed. */
27
+ export declare function contractCapFor(emp: Employee): number;
28
+ /** Whether `hours` runs past what this person is contracted to.
29
+ *
30
+ * A cap of 0 means no hours were ever agreed, which is NOT a contract of zero hours: read
31
+ * naively, `hours > 0` makes every rostered minute overtime, flags everybody on the cost rail's
32
+ * over-contract list and makes copy-week refuse every shift. An unknown limit cannot be
33
+ * exceeded, so it is treated as no limit and the question is answered false. */
34
+ export declare function overContract(emp: Employee, hours: number): boolean;
35
+ export declare function isPartTime(emp: Employee): boolean;
36
+ /** Which weekday (0 = Mon) is today, relative to no particular week — used to seed
37
+ * focusDayIdx whenever "today" needs a weekday index rather than a date. */
38
+ export declare function todayWeekdayIdx(): number;
@@ -0,0 +1,29 @@
1
+ import { type Ref } from 'vue';
2
+ import type { Employee, ScheduleDayNote } from '../types';
3
+ /** Everything a manager authors about a DATE rather than about a shift — the note on its
4
+ * card, whether the venue opens, whether it bills at the holiday rate. Keyed by ISO date
5
+ * (via the board's `dateKey`), not by weekday index: the mockup's flat single-week horizon
6
+ * could use the weekday index directly, but the board pages through weeks, and a note put on
7
+ * this Monday must not reappear on every other Monday. */
8
+ export declare function useScheduleDayMeta(employees: Ref<Employee[]>, dateKey: (dayIdx: number) => string | null, handlers?: {
9
+ onPersistError?: (message: string) => void;
10
+ }): {
11
+ dayNote: (dayIdx: number) => ScheduleDayNote | null;
12
+ setDayNote: (dayIdx: number, title: string, desc: string) => void;
13
+ clearDayNote: (dayIdx: number) => void;
14
+ toggleClosed: (dayIdx: number) => {
15
+ closed: boolean;
16
+ rostered: number;
17
+ };
18
+ isManuallyClosed: (dayIdx: number) => boolean;
19
+ isStandingClosedWeekday: (dayIdx: number) => boolean;
20
+ holidayName: (dayIdx: number) => string | null;
21
+ holidayIsAuto: (dayIdx: number) => boolean;
22
+ isPublicHoliday: (dayIdx: number) => boolean;
23
+ holidayRateApplies: (dayIdx: number) => boolean;
24
+ setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
25
+ setPublicHoliday: (dayIdx: number, on: boolean) => void;
26
+ otRateOn: (dayIdx: number) => number;
27
+ regularRateOn: (dayIdx: number) => number;
28
+ isHoliday: (dayIdx: number) => boolean;
29
+ };
@@ -0,0 +1,7 @@
1
+ import type { Employee } from '../types';
2
+ /** Adds `positionName` to the employee's own profile — the backend write path a real
3
+ * "existing employee" record has (see `useScheduleAddEmployee.ts`'s `toEmployeeProfileFields`
4
+ * for the same shape, built from the add-employee form instead of a live `Employee`).
5
+ * Fire-and-forget: the local roster already shows the grant, and a failed profile write isn't
6
+ * worth a second error dialog on top of whatever caller-side save this followed. */
7
+ export declare function grantSkillToEmployee(emp: Employee, positionName: string): void;
@@ -0,0 +1,14 @@
1
+ export type ScheduleBreakChoice = 0 | 30 | 60 | 90 | 120 | 'custom';
2
+ export interface ScheduleShiftSegment {
3
+ start: string;
4
+ end: string;
5
+ }
6
+ /** A break length that doesn't match one of the presets becomes 'custom', carrying its own
7
+ * minutes/unit back out for the caller to seed its custom-break fields from. */
8
+ export declare function normalizeBreak(mins: number | undefined): {
9
+ choice: ScheduleBreakChoice;
10
+ customMins?: number;
11
+ customUnit?: 'mins' | 'hrs';
12
+ };
13
+ export declare function resolvedBreakMins(choice: ScheduleBreakChoice, customMins: number, customUnit: 'mins' | 'hrs'): number | undefined;
14
+ export declare function segmentHours(seg: ScheduleShiftSegment, breakMins: number): number;
@@ -0,0 +1,10 @@
1
+ import type { Employee, OpenShift } from '../types';
2
+ export declare const RANGE_LEN = 7;
3
+ export declare function mostRecentMonday(from: Date): Date;
4
+ export declare function weekDates(offset: number): Date[];
5
+ export declare function weeksBetween(a: Date, b: Date): number;
6
+ export interface WeekBucket {
7
+ employees: Employee[];
8
+ openShifts: OpenShift[];
9
+ }
10
+ export declare function weekData(offset: number): WeekBucket;
@@ -0,0 +1,86 @@
1
+ import type { Employee } from '../types';
2
+ import type { ScheduleBoardApi } from './useScheduleBoard';
3
+ import { type ScheduleAddEmployeeMode, type ScheduleAddEmployeeStep } from './schedule-add-employee-form';
4
+ export type { ScheduleAddEmployeeForm, ScheduleAddEmployeeMode, ScheduleAddEmployeeStep, } from './schedule-add-employee-form';
5
+ /** Add-employee wizard: a "how do you want to add them" step, then one detail form covering
6
+ * identity, locations, pay, scheduling caps, availability, positions and POS access — plus
7
+ * the "select existing POS staff" side dialog the first step can hand off to. */
8
+ export declare function useScheduleAddEmployee(board: ScheduleBoardApi): {
9
+ open: import("vue").Ref<boolean, boolean>;
10
+ selectExistingOpen: import("vue").Ref<boolean, boolean>;
11
+ step: import("vue").Ref<ScheduleAddEmployeeStep, ScheduleAddEmployeeStep>;
12
+ mode: import("vue").Ref<ScheduleAddEmployeeMode, ScheduleAddEmployeeMode>;
13
+ form: {
14
+ name: string;
15
+ mobile: string;
16
+ dial: string;
17
+ employment: "full" | "part";
18
+ locations: string[];
19
+ payBasis: "hourly" | "monthly";
20
+ payAmount: string;
21
+ maxHours: string;
22
+ otAfterDaily: string;
23
+ maxOtHours: string;
24
+ availDays: boolean[];
25
+ availHours: {
26
+ from: string;
27
+ to: string;
28
+ }[];
29
+ preferences: string;
30
+ primaryPosition: string;
31
+ secondaryPositions: string[];
32
+ seniority: "" | "senior" | "junior";
33
+ passcode: string[];
34
+ masterUser: boolean;
35
+ };
36
+ sectionId: import("vue").Ref<string, string>;
37
+ isEditing: import("vue").ComputedRef<boolean>;
38
+ locOpen: import("vue").Ref<boolean, boolean>;
39
+ secOpen: import("vue").Ref<boolean, boolean>;
40
+ secondaryOptions: import("vue").ComputedRef<string[]>;
41
+ isPart: import("vue").ComputedRef<boolean>;
42
+ dayLit: (i: number) => boolean;
43
+ avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
44
+ avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
45
+ maxHoursPlaceholder: import("vue").ComputedRef<"Hours per week" | "No cap">;
46
+ otAfterDailyPlaceholder: import("vue").ComputedRef<string>;
47
+ payUnit: import("vue").ComputedRef<"/month" | "/hour">;
48
+ effectiveRate: import("vue").ComputedRef<number>;
49
+ passcodeValue: import("vue").ComputedRef<string>;
50
+ passcodeOk: import("vue").ComputedRef<boolean>;
51
+ footerHint: import("vue").ComputedRef<"Pick who — this outlet's own pay, position and hours are still set here." | "One short form. Rest days are set on their profile afterwards.">;
52
+ primaryRoleLabel: import("vue").ComputedRef<string>;
53
+ locationsSummary: import("vue").ComputedRef<string>;
54
+ payLine: import("vue").ComputedRef<string>;
55
+ nameError: import("vue").ComputedRef<boolean>;
56
+ passError: import("vue").ComputedRef<boolean>;
57
+ availabilityError: import("vue").ComputedRef<boolean>;
58
+ saving: import("vue").Ref<boolean, boolean>;
59
+ saveError: import("vue").Ref<string | null, string | null>;
60
+ candidatesLoading: import("vue").Ref<boolean, boolean>;
61
+ candidatesError: import("vue").Ref<string | null, string | null>;
62
+ openWizard: (section: string) => void;
63
+ openEditFor: (emp: Employee) => void;
64
+ close: () => void;
65
+ setMode: (m: ScheduleAddEmployeeMode) => void;
66
+ openSelectExisting: () => void;
67
+ closeSelectExisting: () => void;
68
+ pickExisting: (employeeId: string) => void;
69
+ next: () => void;
70
+ back: () => void;
71
+ toggleMulti: (which: "loc" | "sec") => void;
72
+ toggleLocation: (loc: string) => void;
73
+ removeLocation: (loc: string) => void;
74
+ toggleSecondary: (pos: string) => void;
75
+ removeSecondary: (pos: string) => void;
76
+ setPrimaryPosition: (pos: string) => void;
77
+ setPayBasis: (basis: "hourly" | "monthly") => void;
78
+ toggleAvailDay: (i: number) => void;
79
+ availAll: () => void;
80
+ setAvailHour: (i: number, field: "from" | "to", value: string) => void;
81
+ copyAvailHourDown: (i: number) => void;
82
+ setPasscodeDigit: (i: number, value: string) => void;
83
+ generatePasscode: () => void;
84
+ create: () => Promise<boolean>;
85
+ };
86
+ export type ScheduleAddEmployeeApi = ReturnType<typeof useScheduleAddEmployee>;
@@ -0,0 +1,66 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleDemandApi } from './useScheduleDemand';
3
+ export interface ScheduleAddPickState {
4
+ open: boolean;
5
+ empId: number | null;
6
+ dayIdx: number | null;
7
+ left: number;
8
+ /** Only one of `top`/`bottom` is live at a time, picked by `openAbove` — anchoring from the
9
+ * bottom when flipped up lets the box grow with its own content (the query input plus
10
+ * however many pick-list rows there are) instead of a height guessed in JS. */
11
+ top: number;
12
+ bottom: number;
13
+ openAbove: boolean;
14
+ }
15
+ export interface ScheduleAddPickLeaveOption {
16
+ reason: string;
17
+ swatch: string;
18
+ }
19
+ export interface ScheduleAddPickSuggestion {
20
+ start: string;
21
+ end: string;
22
+ short: number;
23
+ label: string;
24
+ title: string;
25
+ }
26
+ /** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
27
+ * openAddShiftPicker()/renderAddPickList(), scoped to what this board actually has: our one
28
+ * active shift pattern, a fixed leave-reason list, and a demand-gap suggestion, all committed
29
+ * directly (no clash confirmation dialogs — this board has no such infrastructure yet, and none
30
+ * of its existing write paths gate on one either). Leave picks write a full-day approved leave
31
+ * immediately rather than opening a creation form — there's no "book a leave" authoring flow
32
+ * anywhere in this port yet, only the existing pending-request review modal, which assumes the
33
+ * leave already exists. The mockup's "On this day" (join an existing open-shift group) section is
34
+ * left out — it needs split-shift/group-joining machinery this board doesn't model. */
35
+ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: ScheduleDemandApi, handlers: {
36
+ onCommitted: (message: string) => void;
37
+ onOpenFullEditor: (empId: number, dayIdx: number) => void;
38
+ }): {
39
+ state: {
40
+ open: boolean;
41
+ empId: number | null;
42
+ dayIdx: number | null;
43
+ left: number;
44
+ top: number;
45
+ bottom: number;
46
+ openAbove: boolean;
47
+ };
48
+ query: import("vue").Ref<string, string>;
49
+ parsedRange: import("vue").ComputedRef<{
50
+ start: string;
51
+ end: string;
52
+ } | null>;
53
+ suggested: import("vue").ComputedRef<ScheduleAddPickSuggestion | null>;
54
+ filteredPatterns: import("vue").ComputedRef<import("../types").ShiftTemplate[]>;
55
+ filteredLeaves: import("vue").ComputedRef<ScheduleAddPickLeaveOption[]>;
56
+ hasResults: import("vue").ComputedRef<boolean>;
57
+ openFor: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
58
+ close: () => void;
59
+ pickSuggested: () => void;
60
+ pickPattern: (key: string) => void;
61
+ pickTypedRange: (start: string, end: string) => void;
62
+ pickLeave: (reason: string) => void;
63
+ submitQuery: () => void;
64
+ openBlank: () => void;
65
+ };
66
+ export type ScheduleAddPickApi = ReturnType<typeof useScheduleAddPick>;
@@ -0,0 +1,77 @@
1
+ import type { Employee, OpenShift } from '../types';
2
+ import type { ScheduleBoardApi } from './useScheduleBoard';
3
+ export interface ScheduleShiftPart {
4
+ start: string;
5
+ end: string;
6
+ }
7
+ /** One shift on the All-shifts row, whichever way it was authored. A split shift is ONE
8
+ * entry carrying both of its periods — two periods one person works is one shift, and
9
+ * counting it twice made a day of three split shifts report as six. */
10
+ export interface ScheduleRowEntry {
11
+ /** Stable across redraws, so the row can be keyed on it. */
12
+ key: string;
13
+ kind: 'open' | 'emp';
14
+ /** The demand record this came from, when it came from one. */
15
+ open?: OpenShift;
16
+ /** Whoever holds it, or null while it is still asking for somebody. */
17
+ who: Employee | null;
18
+ parts: ScheduleShiftPart[];
19
+ position: string;
20
+ /** A shift with a name of its own ("Weekend cover"), distinct from its position. */
21
+ label?: string;
22
+ filled: boolean;
23
+ hours: number;
24
+ }
25
+ export interface ScheduleStackState {
26
+ open: boolean;
27
+ dayIdx: number | null;
28
+ left: number;
29
+ top: number;
30
+ }
31
+ /** The "Open shifts" row: a pseudo-row above the people holding the shifts nobody is on yet.
32
+ *
33
+ * It used to be the "All shifts" row and it used to LEAD this view, carrying every shift on
34
+ * the day whichever way it was authored. The coverage band has both of those now — and the
35
+ * band measures something this row could not, because a shift with nobody on it contributes
36
+ * zero to coverage, so counting untaken records was never an answer to "is this week staffed".
37
+ *
38
+ * What is left is the job only this row can do. An unassigned shift has no person, so the
39
+ * employee rows have nowhere to draw it; the old row would have shown it alongside every
40
+ * other shift, which is the same cards twice — once here and once on the row of whoever is on
41
+ * them. So the subject narrows to the shifts still waiting for somebody, and the row renders
42
+ * only while at least one exists. That makes it a to-do list rather than furniture: it appears
43
+ * when you author open demand and disappears the moment the last of it is staffed, which is
44
+ * the completion signal the old row had to paint itself green to fake. */
45
+ export declare function useScheduleAllShiftsRow(board: ScheduleBoardApi): {
46
+ dayEntries: (dayIdx: number) => ScheduleRowEntry[];
47
+ dayStack: (dayIdx: number) => {
48
+ entries: ScheduleRowEntry[];
49
+ done: number;
50
+ total: number;
51
+ hours: number;
52
+ allOpen: boolean;
53
+ mixShown: {
54
+ name: string;
55
+ n: number;
56
+ }[];
57
+ mixRest: number;
58
+ title: string;
59
+ };
60
+ summary: import("vue").ComputedRef<{
61
+ count: number;
62
+ meta: string;
63
+ tip: string;
64
+ }>;
65
+ hasPending: import("vue").ComputedRef<boolean>;
66
+ stack: {
67
+ open: boolean;
68
+ dayIdx: number | null;
69
+ left: number;
70
+ top: number;
71
+ };
72
+ stackEntries: import("vue").ComputedRef<ScheduleRowEntry[]>;
73
+ openStack: (dayIdx: number, anchor: HTMLElement) => void;
74
+ closeStack: () => void;
75
+ whenOf: (e: ScheduleRowEntry) => string;
76
+ };
77
+ export type ScheduleAllShiftsRowApi = ReturnType<typeof useScheduleAllShiftsRow>;
@@ -0,0 +1,50 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { Employee, WorkSlot } from '../types';
3
+ export interface ScheduleAssignedSlot {
4
+ emp: Employee;
5
+ slot: WorkSlot;
6
+ }
7
+ export interface SchedulePositionCellMeta {
8
+ required: number;
9
+ filled: number;
10
+ open: number;
11
+ short: number;
12
+ }
13
+ /** Shared by the week and day area views, so a position's colour never disagrees between them. */
14
+ export declare function positionSwatchClass(position: string): string;
15
+ /** Whether this employee can be put on `position` — ported from the mockup's qualifiedFor().
16
+ * Nobody having a named position yet reads as "any station", the same way an unspecialised
17
+ * new-account roster does in the reference: rostering shouldn't be blocked on the Positions
18
+ * page being filled in first. */
19
+ export declare function qualifiedFor(emp: Employee, position: string): boolean;
20
+ /** Week-by-area grouping: rows are positions (a RULES.coverage.full key), not employees.
21
+ * Ported from the mockup's positionRows()/renderPositionBlock() — scoped to this board's single
22
+ * "Unassigned" section and its existing WorkSlot/OpenShift model, so no split shifts and
23
+ * no locked/closed-day states (neither exists anywhere in this port yet). */
24
+ export declare function useScheduleAreaBoard(board: ScheduleBoardApi): {
25
+ positionRows: import("vue").ComputedRef<string[]>;
26
+ assignedOn: (dayIdx: number, position: string) => ScheduleAssignedSlot[];
27
+ unfilledOpenShiftsOn: (dayIdx: number, position: string) => {
28
+ id: number;
29
+ dayIdx: number;
30
+ position: string;
31
+ required: number;
32
+ filledBy: number | null;
33
+ sen?: "junior" | "senior" | undefined;
34
+ empType?: "full" | "part" | undefined;
35
+ name?: string | undefined;
36
+ start: string;
37
+ end: string;
38
+ breakMins?: number | undefined;
39
+ }[];
40
+ poolFor: (position: string) => Employee[];
41
+ cellMeta: (dayIdx: number, position: string) => SchedulePositionCellMeta;
42
+ positionWeekMeta: (position: string) => {
43
+ required: number;
44
+ filled: number;
45
+ open: number;
46
+ short: number;
47
+ pool: number;
48
+ };
49
+ };
50
+ export type ScheduleAreaBoardApi = ReturnType<typeof useScheduleAreaBoard>;
@@ -0,0 +1,18 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
3
+ /** Dragging a person from the staff rail onto a position/day cell — ported from the mockup's
4
+ * dropStaffOnCell(), scoped to this board's model (no "unspecialised, so ask what they can
5
+ * do" grant flow, no split shifts): dropping fills an existing open shift for that position/day
6
+ * if there is one, otherwise opens the shift editor pre-filled with this person, day and
7
+ * position so the manager sets the hours. */
8
+ export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, areaBoard: ScheduleAreaBoardApi, handlers: {
9
+ onFillOpenShift: (openId: number, empId: number) => void;
10
+ onCreateShift: (empId: number, dayIdx: number, position: string) => void;
11
+ onNotQualified: (empName: string, position: string) => void;
12
+ }): {
13
+ draggingEmpId: import("vue").Ref<number | null, number | null>;
14
+ startRailDrag: (empId: number) => void;
15
+ endRailDrag: () => void;
16
+ dropOnCell: (dayIdx: number, position: string) => void;
17
+ };
18
+ export type ScheduleAreaDragDropApi = ReturnType<typeof useScheduleAreaDragDrop>;
@@ -0,0 +1,113 @@
1
+ import type { ScheduleBoardApi } from './useScheduleBoard';
2
+ import type { ScheduleClashDetectionApi } from './useScheduleClashDetection';
3
+ import type { ScheduleDemandApi } from './useScheduleDemand';
4
+ /** What this sitting is trying to fill — an on-screen open-shift row (never backed by a
5
+ * persisted Shift doc; `openShiftId` only ever identifies it within this session) or a raw
6
+ * demand gap. Either way the assignment created is a plain one-off, same shape as the +Add
7
+ * popover's — nothing here carries a shift/assignment linkage back to the server. */
8
+ export interface ScheduleAssignTarget {
9
+ dayIdx: number;
10
+ position: string;
11
+ start: string;
12
+ end: string;
13
+ breakMins?: number;
14
+ openShiftId?: number;
15
+ }
16
+ export interface ScheduleAssignState {
17
+ open: boolean;
18
+ target: ScheduleAssignTarget | null;
19
+ /** How many heads this sitting is answering, and how many it has landed so far — the
20
+ * footer's "N still needed" note. Tracked locally rather than re-derived from
21
+ * `demand.coverageSegments` on every assign: a fresh assign can reshape segment boundaries
22
+ * entirely (met/short is a function of ALL current coverage, not just this one target), so a
23
+ * simple running count is the honest thing to show without re-deriving segment math here. */
24
+ required: number;
25
+ scheduled: number;
26
+ }
27
+ /** `free` — no shift that day, the ordinary case. `busy` — has a shift, but this is the
28
+ * manager's call to override (soft clash, asks first). `leave` — approved leave, a hard block:
29
+ * inert, not something a second tap should be able to push past. `mine` — already the one
30
+ * filling THIS open shift; only meaningful when the target has an `openShiftId` (a demand gap
31
+ * has no single "holder"), and the tile becomes the unassign control instead. */
32
+ export type ScheduleAssignTileState = 'free' | 'busy' | 'leave' | 'mine';
33
+ export interface ScheduleAssignTile {
34
+ id: number;
35
+ name: string;
36
+ initials: string;
37
+ weekHours: number;
38
+ cap: number;
39
+ over: boolean;
40
+ state: ScheduleAssignTileState;
41
+ title: string;
42
+ }
43
+ export interface ScheduleAssignGroup {
44
+ label: string;
45
+ tiles: ScheduleAssignTile[];
46
+ }
47
+ /** One entry in the day's shift rail — either the thing this sitting was opened to answer (the
48
+ * ORIGIN, always first), or another shift already on the same day, so a manager can jump to
49
+ * reassigning it without leaving the panel. Every entry is a `target` the tile grid can be
50
+ * pointed at via `switchTo`. */
51
+ export interface ScheduleAssignSlot {
52
+ key: string;
53
+ position: string;
54
+ start: string;
55
+ end: string;
56
+ chip: string;
57
+ full: boolean;
58
+ sub: string;
59
+ who: string;
60
+ whoNone: boolean;
61
+ on: boolean;
62
+ target: ScheduleAssignTarget;
63
+ required: number;
64
+ scheduled: number;
65
+ }
66
+ /** Assign panel — the one modal both the open-shifts row and a demand gap's "Assign employee"
67
+ * button open, per the reference's own note that they are "the same assign panel". Every pick
68
+ * lands immediately (through the canonical `commitShift` mutator, so it persists exactly like
69
+ * any other assignment); a soft clash — the person already has a shift that day — asks first via
70
+ * the shared clash-confirmation dialog, and approved leave is a hard block the tile itself
71
+ * refuses rather than asking about. */
72
+ export declare function useScheduleAssign(board: ScheduleBoardApi, demand: ScheduleDemandApi, clash: ScheduleClashDetectionApi): {
73
+ state: {
74
+ open: boolean;
75
+ target: {
76
+ dayIdx: number;
77
+ position: string;
78
+ start: string;
79
+ end: string;
80
+ breakMins?: number | undefined;
81
+ openShiftId?: number | undefined;
82
+ } | null;
83
+ required: number;
84
+ scheduled: number;
85
+ };
86
+ search: import("vue").Ref<string, string>;
87
+ activeOpenShift: import("vue").ComputedRef<{
88
+ id: number;
89
+ dayIdx: number;
90
+ position: string;
91
+ required: number;
92
+ filledBy: number | null;
93
+ sen?: "junior" | "senior" | undefined;
94
+ empType?: "full" | "part" | undefined;
95
+ name?: string | undefined;
96
+ start: string;
97
+ end: string;
98
+ breakMins?: number | undefined;
99
+ } | null>;
100
+ title: import("vue").ComputedRef<string>;
101
+ sub: import("vue").ComputedRef<string>;
102
+ footLead: import("vue").ComputedRef<string>;
103
+ footRest: import("vue").ComputedRef<string>;
104
+ groups: import("vue").ComputedRef<ScheduleAssignGroup[]>;
105
+ shiftSlots: import("vue").ComputedRef<ScheduleAssignSlot[]>;
106
+ switchTo: (slot: ScheduleAssignSlot) => void;
107
+ openFor: (openShiftId: number) => void;
108
+ openForGap: (dayIdx: number, position: string, start: string, end: string, required: number, scheduled: number, gapFrom: number, gapTo: number) => void;
109
+ close: () => void;
110
+ fillOpenShift: (openShiftId: number, empId: number) => void;
111
+ armAssign: (empId: number) => void;
112
+ };
113
+ export type ScheduleAssignApi = ReturnType<typeof useScheduleAssign>;
@@ -0,0 +1,136 @@
1
+ import type { FdtoScheduleAutoScheduleObjective, FdtoScheduleAutoScheduleResult } from '@/types/schedule';
2
+ import type { Proposal } from '../types';
3
+ import type { ScheduleBoardApi } from './useScheduleBoard';
4
+ import type { ScheduleDemandApi } from './useScheduleDemand';
5
+ export type ScheduleAutoScheduleStep = 'options' | 'summary';
6
+ export interface ScheduleAutoScheduleOptions {
7
+ fillGaps: boolean;
8
+ objective: FdtoScheduleAutoScheduleObjective;
9
+ allowOvertime: boolean;
10
+ }
11
+ /** Backend-powered draft generation and local proposal review. Generation never writes;
12
+ * accepted proposals use the board's existing assignment persistence path. */
13
+ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
14
+ wizardOpen: import("vue").Ref<boolean, boolean>;
15
+ step: import("vue").Ref<ScheduleAutoScheduleStep, ScheduleAutoScheduleStep>;
16
+ options: {
17
+ fillGaps: boolean;
18
+ objective: FdtoScheduleAutoScheduleObjective;
19
+ allowOvertime: boolean;
20
+ };
21
+ generating: import("vue").Ref<boolean, boolean>;
22
+ generateError: import("vue").Ref<string | null, string | null>;
23
+ result: import("vue").Ref<{
24
+ proposals: {
25
+ employeeId: string;
26
+ date: string;
27
+ startTime: string;
28
+ endTime: string;
29
+ position: string;
30
+ }[];
31
+ unfilledCount: number;
32
+ metrics: {
33
+ minimumCoveragePercent: number;
34
+ recommendedCoveragePercent: number;
35
+ totalHours: number;
36
+ estimatedLabourCost: number | null;
37
+ costCoveragePercent: number;
38
+ overtimeHours: number;
39
+ targetHoursVariance: number;
40
+ unfilledIntervals: number;
41
+ };
42
+ readiness: {
43
+ ready: boolean;
44
+ capabilities: string[];
45
+ issues: {
46
+ code: string;
47
+ severity: "BLOCKER" | "WARNING" | "INFO";
48
+ message: string;
49
+ }[];
50
+ coverage: {
51
+ position: number;
52
+ availability: number;
53
+ wage: number;
54
+ targetHours: number;
55
+ };
56
+ };
57
+ explanations: string[];
58
+ solver: string;
59
+ } | null, FdtoScheduleAutoScheduleResult | {
60
+ proposals: {
61
+ employeeId: string;
62
+ date: string;
63
+ startTime: string;
64
+ endTime: string;
65
+ position: string;
66
+ }[];
67
+ unfilledCount: number;
68
+ metrics: {
69
+ minimumCoveragePercent: number;
70
+ recommendedCoveragePercent: number;
71
+ totalHours: number;
72
+ estimatedLabourCost: number | null;
73
+ costCoveragePercent: number;
74
+ overtimeHours: number;
75
+ targetHoursVariance: number;
76
+ unfilledIntervals: number;
77
+ };
78
+ readiness: {
79
+ ready: boolean;
80
+ capabilities: string[];
81
+ issues: {
82
+ code: string;
83
+ severity: "BLOCKER" | "WARNING" | "INFO";
84
+ message: string;
85
+ }[];
86
+ coverage: {
87
+ position: number;
88
+ availability: number;
89
+ wage: number;
90
+ targetHours: number;
91
+ };
92
+ };
93
+ explanations: string[];
94
+ solver: string;
95
+ } | null>;
96
+ gapCount: import("vue").ComputedRef<number>;
97
+ openWizard: () => void;
98
+ closeWizard: () => void;
99
+ next: () => void;
100
+ back: () => void;
101
+ generate: () => Promise<void>;
102
+ reviewMode: import("vue").Ref<boolean, boolean>;
103
+ proposals: import("vue").Ref<{
104
+ id: number;
105
+ empId: number;
106
+ dayIdx: number;
107
+ start: string;
108
+ end: string;
109
+ role: string;
110
+ openId?: number | undefined;
111
+ status: "pending" | "rejected";
112
+ }[], Proposal[] | {
113
+ id: number;
114
+ empId: number;
115
+ dayIdx: number;
116
+ start: string;
117
+ end: string;
118
+ role: string;
119
+ openId?: number | undefined;
120
+ status: "pending" | "rejected";
121
+ }[]>;
122
+ unmetCount: import("vue").Ref<number, number>;
123
+ acceptedCount: import("vue").ComputedRef<number>;
124
+ rejectedCount: import("vue").ComputedRef<number>;
125
+ removedCount: import("vue").ComputedRef<number>;
126
+ changedCount: import("vue").ComputedRef<number>;
127
+ unqualifiedCount: import("vue").ComputedRef<number>;
128
+ conflictCount: import("vue").ComputedRef<number>;
129
+ projectedCost: import("vue").ComputedRef<number | null>;
130
+ proposalAt: (empId: number, dayIdx: number) => Proposal | undefined;
131
+ toggleReject: (id: number) => void;
132
+ rejectAll: () => void;
133
+ exitReview: () => void;
134
+ apply: () => number;
135
+ };
136
+ export type ScheduleAutoScheduleApi = ReturnType<typeof useScheduleAutoSchedule>;