@feedmepos/mf-hrm-portal 2.3.0-dev.13 → 2.3.0-dev.15

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 (65) hide show
  1. package/dist/{ApprovalCodeList-D3egZFML.js → ApprovalCodeList-CY0ox1dX.js} +4 -4
  2. package/dist/{AuditLogList-BzbaEsSj.js → AuditLogList-CBkA-KQT.js} +17 -18
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-Do52KbKm.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B8cb8yqV.js} +2 -2
  4. package/dist/{EmployeeList-BiM8dRwZ.js → EmployeeList-0PrcuHPJ.js} +255 -267
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-rjDE1B4E.js} +6 -6
  6. package/dist/{GrantUserList-Dj2ms20E.js → GrantUserList-Dw923P2j.js} +5 -5
  7. package/dist/{Main-DmpwTPaI.js → Main-BqX7n1ik.js} +9 -9
  8. package/dist/{Main-C2z7Jf9A.js → Main-C0bcn2NY.js} +5 -5
  9. package/dist/{Main-DklZWoKj.js → Main-Dpf2KdSH.js} +2 -2
  10. package/dist/{PermissionSetList-C-qgCcRO.js → PermissionSetList-xrI130SW.js} +5 -5
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ggZB5zWW.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-3_8qycrF.js} +465 -465
  12. package/dist/{RoleList-ohfin77B.js → RoleList-DPkG5dg9.js} +7 -7
  13. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DYLLW46A.js +501 -0
  14. package/dist/{ScheduleGeneralPage-aCljFf21.js → ScheduleGeneralPage-CISbuAff.js} +141 -143
  15. package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-x_-BYkcc.js → ScheduleModal.vue_vue_type_script_setup_true_lang-BeTuMw3f.js} +989 -858
  16. package/dist/SchedulePage-Dn6_TiBS.js +18757 -0
  17. package/dist/{SchedulePositionPage-CID91orD.js → SchedulePositionPage-Cu3WRfH-.js} +79 -81
  18. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-ssnRUIN6.js} +1 -1
  19. package/dist/{TeamMemberList-DJIKL4dE.js → TeamMemberList-DTqNCDJb.js} +35 -36
  20. package/dist/{TimesheetList-BPXWPNfT.js → TimesheetList-CA19TmKm.js} +52 -53
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DVcV0knM.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-B1jnsZpD.js} +2 -2
  22. package/dist/{app-Bz8568j8.js → app-3xGY2Rn0.js} +2062 -1800
  23. package/dist/app.js +1 -1
  24. package/dist/{dayjs.min-DhSRKSu4.js → dayjs.min-C_c8OoEU.js} +1 -1
  25. package/dist/{employee-BM44u8b-.js → employee-Dt0y51t3.js} +3 -3
  26. package/dist/{iteration-BHDxs89d.js → iteration-C4YvbrCe.js} +1 -1
  27. package/dist/{lodash-DgSYLwYD.js → lodash-huRs3Cbj.js} +1 -1
  28. package/dist/object-Dwyg2LgX.js +16 -0
  29. package/dist/{role-BMJ7LEHN.js → role-fM58UmtC.js} +1 -1
  30. package/dist/{rule-CCo7_ckA.js → rule-CCN0QCPF.js} +2 -2
  31. package/dist/src/views/audit-log/locales/index.d.ts +252 -0
  32. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +2 -0
  33. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +1 -0
  34. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  35. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  36. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  37. package/dist/src/views/scheduling/composables/schedule-error.d.ts +3 -0
  38. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +22 -0
  39. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +5 -2
  40. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +3 -11
  41. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +7 -0
  42. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +45 -1
  43. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  44. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +2 -2
  45. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  46. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  47. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +3 -0
  48. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  49. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +25 -0
  50. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +163 -4
  51. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +44 -0
  52. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  53. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +22 -0
  54. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +26 -2
  55. package/dist/src/views/scheduling/country-rules/index.d.ts +8 -3
  56. package/dist/src/views/scheduling/data.d.ts +17 -0
  57. package/dist/src/views/scheduling/schedule-store.d.ts +7 -7
  58. package/dist/src/views/scheduling/types.d.ts +5 -0
  59. package/dist/style.css +1 -1
  60. package/dist/tsconfig.app.tsbuildinfo +1 -1
  61. package/dist/{useReportPermissions-C_Cd__n1.js → useReportPermissions-BlX_Mk5f.js} +3 -3
  62. package/package.json +1 -1
  63. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-diuWysro.js +0 -492
  64. package/dist/SchedulePage-DdMHF6kX.js +0 -17993
  65. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
package/dist/app.js CHANGED
@@ -1,4 +1,4 @@
1
- import { h as e, i as r, r as o } from "./app-Bz8568j8.js";
1
+ import { j as e, i as r, r as o } from "./app-3xGY2Rn0.js";
2
2
  export {
3
3
  e as FmApp,
4
4
  r as i18nMessages,
@@ -1,4 +1,4 @@
1
- import { g as Q, f as K } from "./app-Bz8568j8.js";
1
+ import { g as Q, f as K } from "./app-3xGY2Rn0.js";
2
2
  var E = { exports: {} };
3
3
  (function(V, X) {
4
4
  (function(W, k) {
@@ -1,10 +1,10 @@
1
- import { d as g } from "./dayjs.min-DhSRKSu4.js";
1
+ import { d as g } from "./dayjs.min-C_c8OoEU.js";
2
2
  import { defineStore as $, storeToRefs as x } from "pinia";
3
3
  import { ref as m } from "vue";
4
- import { s as E } from "./iteration-BHDxs89d.js";
4
+ import { s as E } from "./iteration-C4YvbrCe.js";
5
5
  import { b as l, g as f, u as I } from "./restaurant-BbYRA_IT.js";
6
6
  import { i as v } from "./utils-BZkjJbju.js";
7
- import { u as P } from "./role-BMJ7LEHN.js";
7
+ import { u as P } from "./role-fM58UmtC.js";
8
8
  const o = {
9
9
  async readEmployees() {
10
10
  return f(await l().get("/pos-users"));
@@ -1,4 +1,4 @@
1
- import { f as B } from "./app-Bz8568j8.js";
1
+ import { f as B } from "./app-3xGY2Rn0.js";
2
2
  var ma = {}, Zt = {}, l = {}, ji = {}, Ei = {}, Ii = {}, Dn = {};
3
3
  (function(e) {
4
4
  Object.defineProperty(e, "__esModule", { value: !0 }), e.getParsedType = e.ZodParsedType = e.util = void 0;
@@ -1,4 +1,4 @@
1
- import { f as jt } from "./app-Bz8568j8.js";
1
+ import { f as jt } from "./app-3xGY2Rn0.js";
2
2
  var Jr = { exports: {} };
3
3
  /**
4
4
  * @license
@@ -0,0 +1,16 @@
1
+ import { toRaw as n } from "vue";
2
+ function t(r) {
3
+ return JSON.parse(JSON.stringify(r));
4
+ }
5
+ function o(r) {
6
+ if (typeof structuredClone > "u")
7
+ return t(r);
8
+ try {
9
+ return structuredClone(n(r));
10
+ } catch {
11
+ return t(r);
12
+ }
13
+ }
14
+ export {
15
+ o as c
16
+ };
@@ -1,7 +1,7 @@
1
1
  import { defineStore as x, storeToRefs as b } from "pinia";
2
2
  import { ref as w } from "vue";
3
3
  import { useCoreStore as B } from "@feedmepos/mf-common";
4
- import { s as v } from "./iteration-BHDxs89d.js";
4
+ import { s as v } from "./iteration-C4YvbrCe.js";
5
5
  import { g as f, b as p, u as I } from "./restaurant-BbYRA_IT.js";
6
6
  const R = {
7
7
  async readRoles() {
@@ -1,5 +1,5 @@
1
- import { s as W, c as q, e as y } from "./iteration-BHDxs89d.js";
2
- import { e as O, b as V, c as _, v as F, n as h, O as ee, D as M } from "./app-Bz8568j8.js";
1
+ import { s as W, c as q, e as y } from "./iteration-C4YvbrCe.js";
2
+ import { h as O, c as V, d as _, v as F, n as h, O as ee, D as M } from "./app-3xGY2Rn0.js";
3
3
  import { s as se } from "./utils-BZkjJbju.js";
4
4
  import { g, b as v, q as x, u as te } from "./restaurant-BbYRA_IT.js";
5
5
  import { defineStore as z, storeToRefs as K } from "pinia";
@@ -222,6 +222,69 @@ export declare const i18nMessages: {
222
222
  view: string;
223
223
  update: string;
224
224
  };
225
+ "schedule-shift": {
226
+ create: string;
227
+ update: string;
228
+ "bulk-save": string;
229
+ publish: string;
230
+ unpublish: string;
231
+ confirm: string;
232
+ delete: string;
233
+ "auto-apply": string;
234
+ };
235
+ "schedule-demand": {
236
+ create: string;
237
+ update: string;
238
+ replace: string;
239
+ delete: string;
240
+ };
241
+ "schedule-time-off": {
242
+ create: string;
243
+ "update-status": string;
244
+ delete: string;
245
+ };
246
+ "schedule-day": {
247
+ save: string;
248
+ delete: string;
249
+ };
250
+ "schedule-settings": {
251
+ update: string;
252
+ };
253
+ "schedule-employee-config": {
254
+ update: string;
255
+ };
256
+ "schedule-operating-hours": {
257
+ update: string;
258
+ };
259
+ "schedule-position": {
260
+ create: string;
261
+ update: string;
262
+ delete: string;
263
+ };
264
+ "schedule-employee": {
265
+ create: string;
266
+ delete: string;
267
+ };
268
+ "schedule-shift-item": {
269
+ create: string;
270
+ update: string;
271
+ delete: string;
272
+ publish: string;
273
+ unpublish: string;
274
+ confirm: string;
275
+ };
276
+ "schedule-demand-item": {
277
+ create: string;
278
+ update: string;
279
+ delete: string;
280
+ };
281
+ "schedule-time-off-item": {
282
+ create: string;
283
+ approve: string;
284
+ reject: string;
285
+ cancel: string;
286
+ delete: string;
287
+ };
225
288
  };
226
289
  };
227
290
  };
@@ -448,6 +511,69 @@ export declare const i18nMessages: {
448
511
  view: string;
449
512
  update: string;
450
513
  };
514
+ "schedule-shift": {
515
+ create: string;
516
+ update: string;
517
+ "bulk-save": string;
518
+ publish: string;
519
+ unpublish: string;
520
+ confirm: string;
521
+ delete: string;
522
+ "auto-apply": string;
523
+ };
524
+ "schedule-demand": {
525
+ create: string;
526
+ update: string;
527
+ replace: string;
528
+ delete: string;
529
+ };
530
+ "schedule-time-off": {
531
+ create: string;
532
+ "update-status": string;
533
+ delete: string;
534
+ };
535
+ "schedule-day": {
536
+ save: string;
537
+ delete: string;
538
+ };
539
+ "schedule-settings": {
540
+ update: string;
541
+ };
542
+ "schedule-employee-config": {
543
+ update: string;
544
+ };
545
+ "schedule-operating-hours": {
546
+ update: string;
547
+ };
548
+ "schedule-position": {
549
+ create: string;
550
+ update: string;
551
+ delete: string;
552
+ };
553
+ "schedule-employee": {
554
+ create: string;
555
+ delete: string;
556
+ };
557
+ "schedule-shift-item": {
558
+ create: string;
559
+ update: string;
560
+ delete: string;
561
+ publish: string;
562
+ unpublish: string;
563
+ confirm: string;
564
+ };
565
+ "schedule-demand-item": {
566
+ create: string;
567
+ update: string;
568
+ delete: string;
569
+ };
570
+ "schedule-time-off-item": {
571
+ create: string;
572
+ approve: string;
573
+ reject: string;
574
+ cancel: string;
575
+ delete: string;
576
+ };
451
577
  };
452
578
  };
453
579
  };
@@ -674,6 +800,69 @@ export declare const i18nMessages: {
674
800
  view: string;
675
801
  update: string;
676
802
  };
803
+ "schedule-shift": {
804
+ create: string;
805
+ update: string;
806
+ "bulk-save": string;
807
+ publish: string;
808
+ unpublish: string;
809
+ confirm: string;
810
+ delete: string;
811
+ "auto-apply": string;
812
+ };
813
+ "schedule-demand": {
814
+ create: string;
815
+ update: string;
816
+ replace: string;
817
+ delete: string;
818
+ };
819
+ "schedule-time-off": {
820
+ create: string;
821
+ "update-status": string;
822
+ delete: string;
823
+ };
824
+ "schedule-day": {
825
+ save: string;
826
+ delete: string;
827
+ };
828
+ "schedule-settings": {
829
+ update: string;
830
+ };
831
+ "schedule-employee-config": {
832
+ update: string;
833
+ };
834
+ "schedule-operating-hours": {
835
+ update: string;
836
+ };
837
+ "schedule-position": {
838
+ create: string;
839
+ update: string;
840
+ delete: string;
841
+ };
842
+ "schedule-employee": {
843
+ create: string;
844
+ delete: string;
845
+ };
846
+ "schedule-shift-item": {
847
+ create: string;
848
+ update: string;
849
+ delete: string;
850
+ publish: string;
851
+ unpublish: string;
852
+ confirm: string;
853
+ };
854
+ "schedule-demand-item": {
855
+ create: string;
856
+ update: string;
857
+ delete: string;
858
+ };
859
+ "schedule-time-off-item": {
860
+ create: string;
861
+ approve: string;
862
+ reject: string;
863
+ cancel: string;
864
+ delete: string;
865
+ };
677
866
  };
678
867
  };
679
868
  };
@@ -900,6 +1089,69 @@ export declare const i18nMessages: {
900
1089
  view: string;
901
1090
  update: string;
902
1091
  };
1092
+ "schedule-shift": {
1093
+ create: string;
1094
+ update: string;
1095
+ "bulk-save": string;
1096
+ publish: string;
1097
+ unpublish: string;
1098
+ confirm: string;
1099
+ delete: string;
1100
+ "auto-apply": string;
1101
+ };
1102
+ "schedule-demand": {
1103
+ create: string;
1104
+ update: string;
1105
+ replace: string;
1106
+ delete: string;
1107
+ };
1108
+ "schedule-time-off": {
1109
+ create: string;
1110
+ "update-status": string;
1111
+ delete: string;
1112
+ };
1113
+ "schedule-day": {
1114
+ save: string;
1115
+ delete: string;
1116
+ };
1117
+ "schedule-settings": {
1118
+ update: string;
1119
+ };
1120
+ "schedule-employee-config": {
1121
+ update: string;
1122
+ };
1123
+ "schedule-operating-hours": {
1124
+ update: string;
1125
+ };
1126
+ "schedule-position": {
1127
+ create: string;
1128
+ update: string;
1129
+ delete: string;
1130
+ };
1131
+ "schedule-employee": {
1132
+ create: string;
1133
+ delete: string;
1134
+ };
1135
+ "schedule-shift-item": {
1136
+ create: string;
1137
+ update: string;
1138
+ delete: string;
1139
+ publish: string;
1140
+ unpublish: string;
1141
+ confirm: string;
1142
+ };
1143
+ "schedule-demand-item": {
1144
+ create: string;
1145
+ update: string;
1146
+ delete: string;
1147
+ };
1148
+ "schedule-time-off-item": {
1149
+ create: string;
1150
+ approve: string;
1151
+ reject: string;
1152
+ cancel: string;
1153
+ delete: string;
1154
+ };
903
1155
  };
904
1156
  };
905
1157
  };
@@ -20,6 +20,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
20
20
  segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
21
21
  segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
22
22
  openDemandSheet: (dayIdx: number) => any;
23
+ openNewShift: (dayIdx: number, position: string) => any;
23
24
  addPosition: () => any;
24
25
  scheduleByPerson: () => any;
25
26
  openSwap: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, slotIndex: number) => any;
@@ -30,6 +31,7 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
30
31
  onSegClick?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
31
32
  onSegFocus?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
32
33
  onOpenDemandSheet?: ((dayIdx: number) => any) | undefined;
34
+ onOpenNewShift?: ((dayIdx: number, position: string) => any) | undefined;
33
35
  onAddPosition?: (() => any) | undefined;
34
36
  onScheduleByPerson?: (() => any) | undefined;
35
37
  onOpenSwap?: ((fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, slotIndex: number) => any) | undefined;
@@ -10,6 +10,7 @@ type __VLS_Props = {
10
10
  shiftDragDrop: ScheduleDragDropApi;
11
11
  demandRow: ScheduleDemandRowApi;
12
12
  onEditShift: (...args: any[]) => void;
13
+ onOpenNewShift: (...args: any[]) => void;
13
14
  onOpenDemandSheet: (...args: any[]) => void;
14
15
  onSegEnter: (...args: any[]) => void;
15
16
  onSegLeave: (...args: any[]) => void;
@@ -0,0 +1,6 @@
1
+ import type { ScheduleOnboardingWizardApi } from '../composables/useScheduleOnboardingWizard';
2
+ type __VLS_Props = {
3
+ wizard: ScheduleOnboardingWizardApi;
4
+ };
5
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
6
+ export default _default;
@@ -23,7 +23,8 @@ export interface TeamRow {
23
23
  picked: boolean;
24
24
  /** '' means "Any position" — a person with none. */
25
25
  position: string;
26
- second: string;
26
+ /** Additional positions this employee also covers. */
27
+ second: string[];
27
28
  employment: TeamEmployment;
28
29
  maxHours: string;
29
30
  rate: string;
@@ -1,4 +1,4 @@
1
- import type { DemandPeriod } from '../types';
1
+ import type { DemandPeriod, Employee } from '../types';
2
2
  import { format12h as t12, formatShortMinutes as minToShort, fromMinutes as minToHHMM, spanMinutes as spanOf, toMinutes as toMin } from './schedule-time';
3
3
  export { minToHHMM, minToShort, spanOf, t12, toMin };
4
4
  export declare function rangeText(from: number, to: number): string;
@@ -9,3 +9,15 @@ export interface ScheduleCoverageAxis {
9
9
  from: number;
10
10
  to: number;
11
11
  }
12
+ /** Fills named position rows from the people on, as a maximum matching (Kuhn's augmenting
13
+ * paths) so a flexible person is moved off one row when another row has nobody else. Rows are
14
+ * tried in the order given (scarcest first); within a row, main-position holders are offered
15
+ * first, then secondary holders, then people with no positions. Returns heads filled per row
16
+ * (same order as `rows`) and the ids spent. */
17
+ export declare function matchSlots(rows: Array<{
18
+ position: string;
19
+ required: number;
20
+ }>, on: Employee[], qualified: (e: Employee, position: string) => boolean): {
21
+ got: number[];
22
+ spent: Set<number>;
23
+ };
@@ -0,0 +1,3 @@
1
+ /** API clients do not all normalize failed responses into Error instances. The local portal
2
+ * client does, while the shared dev client may reject with the raw Axios/fetch-shaped object. */
3
+ export declare function errorMessage(error: unknown, fallback: string): string;
@@ -0,0 +1,22 @@
1
+ import type { CoverageSegment, Employee } from '../types';
2
+ import type { ScheduleCoverageAxis } from './schedule-demand-domain';
3
+ export interface QuickPickRules {
4
+ minHoursPerDay: number | null;
5
+ maxHoursPerDay: number | null;
6
+ }
7
+ export interface QuickPickCandidate {
8
+ start: string;
9
+ end: string;
10
+ /** Position name, or '' for any position. */
11
+ role: string;
12
+ /** Max short among the runs this shift covers. */
13
+ short: number;
14
+ label: string;
15
+ covers: string;
16
+ title: string;
17
+ }
18
+ /** Up to 3 shifts for one employee on one day, built the way the auto-schedule planner builds
19
+ * them: one per (short run, position the person can fill), padded to their daily minimum,
20
+ * capped at their maximum, kept inside their availability window and clear of their existing
21
+ * shifts. Rest-gap and weekly-cap checks are left to the shift editor's own warnings. */
22
+ export declare function buildQuickPicks(emp: Employee, dayIdx: number, segments: CoverageSegment[], axis: ScheduleCoverageAxis, rules: QuickPickRules, qualifiedFor: (emp: Employee, position: string) => boolean): QuickPickCandidate[];
@@ -65,7 +65,6 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
65
65
  passcodeOk: import("vue").ComputedRef<boolean>;
66
66
  currentLocationLabel: import("vue").ComputedRef<string>;
67
67
  locationOptions: import("vue").Reactive<string[]>;
68
- masterCodeError: import("vue").ComputedRef<boolean>;
69
68
  isNewUser: import("vue").ComputedRef<boolean>;
70
69
  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.">;
71
70
  primaryRoleLabel: import("vue").ComputedRef<string>;
@@ -101,7 +100,8 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
101
100
  setAvailHour: (index: number, field: "from" | "to", value: string) => void;
102
101
  copyAvailHourDown: (index: number) => void;
103
102
  setPasscodeDigit: (index: number, value: string) => void;
104
- generatePasscode: () => void;
103
+ generatePasscode: () => Promise<void>;
104
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
105
105
  togglePosAccess: () => void;
106
106
  addPosRoleRow: () => void;
107
107
  removePosRoleRow: (index: number) => void;
@@ -109,6 +109,9 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
109
109
  setPosRoleOutlet: (index: number, outlet: string) => void;
110
110
  setPosRoleId: (index: number, roleId: string) => void;
111
111
  posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
112
+ isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
113
+ setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
114
+ isPosOutletUsable: (outlet: string) => boolean;
112
115
  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.">;
113
116
  create: () => Promise<boolean>;
114
117
  };
@@ -1,5 +1,6 @@
1
1
  import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  import type { ScheduleDemandApi } from './useScheduleDemand';
3
+ import { type QuickPickCandidate } from './schedule-quick-pick';
3
4
  import { type ScheduleAnchorRect } from './schedule-popover-position';
4
5
  export interface ScheduleAddPickState {
5
6
  open: boolean;
@@ -15,15 +16,6 @@ export interface ScheduleAddPickLeaveOption {
15
16
  reason: string;
16
17
  swatch: string;
17
18
  }
18
- export interface ScheduleAddPickSuggestion {
19
- start: string;
20
- end: string;
21
- short: number;
22
- label: string;
23
- /** "Covers 16:00–22:00 demand" — the demand this offer answers, shown under the label. */
24
- covers: string;
25
- title: string;
26
- }
27
19
  /** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
28
20
  * openAddShiftPicker()/renderAddPickList(), scoped to what this board actually has: our one
29
21
  * active shift pattern, a fixed leave-reason list, and a demand-gap suggestion, all committed
@@ -57,7 +49,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
57
49
  start: string;
58
50
  end: string;
59
51
  } | null>;
60
- suggested: import("vue").ComputedRef<ScheduleAddPickSuggestion | null>;
52
+ suggestions: import("vue").ComputedRef<QuickPickCandidate[]>;
61
53
  filteredPatterns: import("vue").ComputedRef<{
62
54
  key: string;
63
55
  label: string;
@@ -71,7 +63,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
71
63
  hasResults: import("vue").ComputedRef<boolean>;
72
64
  openFor: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
73
65
  close: () => void;
74
- pickSuggested: () => void;
66
+ pickSuggested: (index: number) => void;
75
67
  pickPattern: (key: string) => void;
76
68
  pickTypedRange: (start: string, end: string) => void;
77
69
  pickLeave: (reason: string) => void;
@@ -37,6 +37,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
37
37
  objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
38
38
  allowOvertime: boolean;
39
39
  proposals: {
40
+ rejectReason?: string | null | undefined | undefined;
40
41
  date: string;
41
42
  startTime: string;
42
43
  endTime: string;
@@ -101,6 +102,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
101
102
  objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
102
103
  allowOvertime: boolean;
103
104
  proposals: {
105
+ rejectReason?: string | null | undefined;
104
106
  date: string;
105
107
  startTime: string;
106
108
  endTime: string;
@@ -165,6 +167,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
165
167
  objective: "BALANCED" | "SERVICE" | "LOWER_COST" | "STABLE_HOURS";
166
168
  allowOvertime: boolean;
167
169
  proposals: {
170
+ rejectReason?: string | null | undefined | undefined;
168
171
  date: string;
169
172
  startTime: string;
170
173
  endTime: string;
@@ -248,6 +251,7 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
248
251
  status: "pending" | "rejected";
249
252
  weekKey?: string | undefined;
250
253
  reason?: string | undefined;
254
+ rejectReason?: string | undefined;
251
255
  }[]>;
252
256
  weekHasProposals: import("vue").ComputedRef<boolean>;
253
257
  unmetCount: import("vue").Ref<number, number>;
@@ -264,6 +268,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
264
268
  toggleReject: (id: number) => void;
265
269
  rejectAll: () => void;
266
270
  exitReview: () => void;
271
+ leaveReviewOpen: import("vue").Ref<boolean, boolean>;
272
+ confirmLeaveReview: () => void;
273
+ cancelLeaveReview: () => void;
267
274
  apply: () => Promise<number | null>;
268
275
  applying: import("vue").Ref<boolean, boolean>;
269
276
  applyRejections: import("vue").Ref<{
@@ -110,6 +110,28 @@ export declare function useScheduleBoard(handlers?: {
110
110
  updatedAt?: string | undefined;
111
111
  splitGroupId?: string | undefined;
112
112
  }[] | null)[];
113
+ timeOff?: ({
114
+ timeOff: "approved" | "pending";
115
+ requestId?: string | undefined;
116
+ type?: "OFF_DAY" | "LEAVE" | undefined;
117
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
118
+ reason: string;
119
+ half?: boolean | undefined;
120
+ halfPart?: "AM" | "PM" | undefined;
121
+ from?: string | undefined;
122
+ to?: string | undefined;
123
+ appliedOn?: string | undefined;
124
+ note?: string | undefined;
125
+ cert?: {
126
+ name: string;
127
+ size: string;
128
+ } | null | undefined;
129
+ bal?: {
130
+ type: string;
131
+ entitled: number;
132
+ used: number;
133
+ } | undefined;
134
+ } | null)[] | undefined;
113
135
  remarks: {
114
136
  author: string;
115
137
  date: string;
@@ -236,6 +258,28 @@ export declare function useScheduleBoard(handlers?: {
236
258
  updatedAt?: string | undefined;
237
259
  splitGroupId?: string | undefined;
238
260
  }[] | null)[];
261
+ timeOff?: ({
262
+ timeOff: "approved" | "pending";
263
+ requestId?: string | undefined;
264
+ type?: "OFF_DAY" | "LEAVE" | undefined;
265
+ leaveType?: "ANNUAL" | "MEDICAL" | "EMERGENCY" | "UNPAID" | undefined;
266
+ reason: string;
267
+ half?: boolean | undefined;
268
+ halfPart?: "AM" | "PM" | undefined;
269
+ from?: string | undefined;
270
+ to?: string | undefined;
271
+ appliedOn?: string | undefined;
272
+ note?: string | undefined;
273
+ cert?: {
274
+ name: string;
275
+ size: string;
276
+ } | null | undefined;
277
+ bal?: {
278
+ type: string;
279
+ entitled: number;
280
+ used: number;
281
+ } | undefined;
282
+ } | null)[] | undefined;
239
283
  remarks: {
240
284
  author: string;
241
285
  date: string;
@@ -549,7 +593,7 @@ export declare function useScheduleBoard(handlers?: {
549
593
  clearEmployeeShifts: (empId: number) => {
550
594
  shifts: number;
551
595
  };
552
- moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number) => boolean;
596
+ moveShift: (fromEmpId: number, fromDayIdx: number, toEmpId: number, toDayIdx: number, fromSlotIndex?: number, fromSlotCount?: number, targetPosition?: string) => boolean;
553
597
  swapShifts: (empIdA: number, empIdB: number, dayA: number, dayB?: number, slotIndexA?: number, slotIndexB?: number, slotCountA?: number) => boolean;
554
598
  clearShiftsInRange: () => {
555
599
  shifts: number;
@@ -27,8 +27,17 @@ export interface ScheduleOtRisk {
27
27
  empId: number;
28
28
  name: string;
29
29
  hours: number;
30
+ otHours: number;
30
31
  contract: number;
31
32
  }
33
+ export interface ScheduleMonthlyOtSummary {
34
+ key: string;
35
+ label: string;
36
+ used: number;
37
+ cap: number | null;
38
+ progress: number;
39
+ high: boolean;
40
+ }
32
41
  /** The staff rail consumes the same employee identity/load derivation as the area view. */
33
42
  export type ScheduleRailRow = ScheduleEmployeeLoad;
34
43
  /** Weekly labour cost + monthly OT gauge for the collapsible cost rail, built off one
@@ -41,7 +50,10 @@ export declare function useScheduleCostRail(board: ScheduleBoardApi, proposalAt?
41
50
  weeklyCost: import("vue").ComputedRef<number>;
42
51
  otHours: import("vue").ComputedRef<number>;
43
52
  monthlyOtUsed: import("vue").ComputedRef<number>;
44
- monthlyOtCapHours: number;
53
+ monthlyOtSummaries: import("vue").ComputedRef<ScheduleMonthlyOtSummary[]>;
54
+ monthlyOtCapHours: import("vue").ComputedRef<number | null>;
55
+ monthlyOtProgress: import("vue").ComputedRef<number>;
56
+ monthlyOtHigh: import("vue").ComputedRef<boolean>;
45
57
  bySection: import("vue").ComputedRef<ScheduleSectionCost[]>;
46
58
  otRisk: import("vue").ComputedRef<ScheduleOtRisk[]>;
47
59
  };