@feedmepos/mf-hrm-portal 2.3.0-dev.9 → 2.3.1-dev.1

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 (130) hide show
  1. package/dist/{ApprovalCodeList-BDpxEJpC.js → ApprovalCodeList-CDU3yUHy.js} +7 -7
  2. package/dist/AuditLogList-BU11Q5sF.js +1950 -0
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BBK2gl7r.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BjHwyaXu.js} +2 -2
  4. package/dist/{EmployeeList-C8cbVcmY.js → EmployeeList-BqzXg3uA.js} +255 -266
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-Clh43Y-8.js} +6 -6
  6. package/dist/{GrantUserList-zul0_Dlm.js → GrantUserList-Cw8RkFqf.js} +8 -8
  7. package/dist/{Main-Cjo4FMZZ.js → Main-BxcRbcce.js} +5 -5
  8. package/dist/{Main-5TsFTFpc.js → Main-CL-ysWRu.js} +8 -8
  9. package/dist/{Main-DSr9KbjT.js → Main-Dlar77Zq.js} +11 -11
  10. package/dist/{PermissionSetList-CDhiiu37.js → PermissionSetList-_8aBzGy7.js} +19 -18
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DoK944l0.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CNgtAtYH.js} +896 -896
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js} +1 -1
  13. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  14. package/dist/{RoleList-DEbOPQD_.js → RoleList-C3n_zOB3.js} +21 -20
  15. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-CnrbCggg.js +544 -0
  16. package/dist/ScheduleGeneralPage-DGHKW_ww.js +811 -0
  17. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-AfTAGsh1.js +2556 -0
  18. package/dist/SchedulePage-UzDPRldO.js +19458 -0
  19. package/dist/SchedulePositionPage-RHETW36P.js +282 -0
  20. package/dist/{SelectFilter-CG13h83-.js → SelectFilter-CeBV_Kug.js} +1 -1
  21. package/dist/{TeamMemberList-DpCGqHCk.js → TeamMemberList-B-qR7VS3.js} +27 -27
  22. package/dist/{TimesheetList-B7HAC5zS.js → TimesheetList-BqRIZBt1.js} +52 -53
  23. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BGD6m5M-.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-oIBUAjtv.js} +3 -3
  24. package/dist/{app-Lh0cqgHy.js → app-DFL6Nv_p.js} +10822 -3893
  25. package/dist/app.js +1 -1
  26. package/dist/{approval-code-DHsUgc4K.js → approval-code-BXUiojPH.js} +1 -1
  27. package/dist/{dayjs.min-joq4stsa.js → dayjs.min-CH-gVmsz.js} +1 -1
  28. package/dist/{employee-BPmp9c6i.js → employee-3xpIjR6i.js} +51 -47
  29. package/dist/{grant-user-qzKHFTro.js → grant-user-CBJ3gEgW.js} +1 -1
  30. package/dist/{iteration-jvdTHQUx.js → iteration-D6wutq5U.js} +1 -1
  31. package/dist/{lodash-CIAEpr9s.js → lodash-D5kU1nPN.js} +1 -1
  32. package/dist/object-Dwyg2LgX.js +16 -0
  33. package/dist/{restaurant-BbYRA_IT.js → restaurant-D2mfKHaH.js} +44 -45
  34. package/dist/{role-Dd1TUMhn.js → role-B7nu6hH1.js} +2 -2
  35. package/dist/{rule-DmxI7qEY.js → rule-CMd6SL3n.js} +3 -3
  36. package/dist/src/api/audit-log/index.d.ts +4 -0
  37. package/dist/src/api/employee/index.d.ts +2 -2
  38. package/dist/src/api/schedule/index.d.ts +11 -1
  39. package/dist/src/components/layout/SchedulePromoBanner.vue.d.ts +2 -0
  40. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  41. package/dist/src/stores/employee.d.ts +12 -12
  42. package/dist/src/types/schedule.d.ts +1 -1
  43. package/dist/src/views/audit-log/constants.d.ts +9 -30
  44. package/dist/src/views/audit-log/locales/index.d.ts +488 -0
  45. package/dist/src/views/audit-log/pos-row.d.ts +27 -0
  46. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +6 -2
  47. package/dist/src/views/scheduling/components/ScheduleAutoScheduleDoneArt.vue.d.ts +2 -0
  48. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +2 -0
  49. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +5 -0
  50. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +2 -0
  51. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +1 -0
  52. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +0 -1
  53. package/dist/src/views/scheduling/components/ScheduleCompletionDialog.vue.d.ts +1 -1
  54. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +4 -3
  55. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +5 -0
  56. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +0 -1
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingSettings.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +1 -1
  59. package/dist/src/views/scheduling/composables/auto-schedule-mapping.d.ts +7 -5
  60. package/dist/src/views/scheduling/composables/onboarding-constants.d.ts +2 -0
  61. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +2 -1
  62. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +4 -2
  63. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +1 -1
  64. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +4 -0
  65. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +10 -0
  66. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +5 -0
  67. package/dist/src/views/scheduling/composables/schedule-currency.d.ts +22 -0
  68. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  69. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +13 -1
  70. package/dist/src/views/scheduling/composables/schedule-error.d.ts +1 -0
  71. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +1 -1
  72. package/dist/src/views/scheduling/composables/schedule-leave-split.d.ts +9 -0
  73. package/dist/src/views/scheduling/composables/schedule-quick-pick.d.ts +23 -0
  74. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +3 -0
  75. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +3 -1
  76. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +1 -0
  77. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +30 -7
  78. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +5 -11
  79. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -1
  80. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +22 -13
  81. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +58 -7
  82. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +3 -10
  83. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +13 -1
  84. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -1
  85. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +16 -2
  86. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +9 -2
  87. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +1 -0
  88. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +14 -6
  89. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +2 -2
  90. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +26 -4
  91. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +1 -1
  92. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +3 -0
  93. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +0 -2
  94. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +1 -0
  95. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +13 -12
  96. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +1 -1
  97. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +28 -2
  98. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +210 -14
  99. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +11 -8
  100. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +1 -1
  101. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +3 -1
  102. package/dist/src/views/scheduling/composables/useSchedulePageClearActions.d.ts +13 -0
  103. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +6 -0
  104. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -1
  105. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +46 -0
  106. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +1 -1
  107. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +2 -2
  108. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +29 -1
  109. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +33 -4
  110. package/dist/src/views/scheduling/country-rules/index.d.ts +13 -4
  111. package/dist/src/views/scheduling/data.d.ts +17 -0
  112. package/dist/src/views/scheduling/locales/index.d.ts +6300 -0
  113. package/dist/src/views/scheduling/schedule-state.d.ts +236 -236
  114. package/dist/src/views/scheduling/schedule-store.d.ts +29 -7
  115. package/dist/src/views/scheduling/types.d.ts +8 -0
  116. package/dist/style.css +1 -1
  117. package/dist/tsconfig.app.tsbuildinfo +1 -1
  118. package/dist/{useAppStore-BoLkvkE2.js → useAppStore-DZCdxlCd.js} +1 -1
  119. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  120. package/dist/{useLoading-Ch1AUYT1.js → useLoading-Nygx2zn8.js} +1 -1
  121. package/dist/{useReportPermissions-DM3GOFCC.js → useReportPermissions-BcxIKxlF.js} +3 -3
  122. package/package.json +2 -2
  123. package/dist/AuditLogList-Dgwj1gz8.js +0 -1779
  124. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Cx9jFgBS.js +0 -492
  125. package/dist/ScheduleGeneralPage-B8PWNsc2.js +0 -776
  126. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-V1sZ_xhO.js +0 -2253
  127. package/dist/SchedulePage-ndLByVBl.js +0 -17785
  128. package/dist/SchedulePositionPage-Cuv4ydOK.js +0 -264
  129. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  130. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
@@ -5,6 +5,7 @@ import type { useScheduleStatsRow } from '../composables/useScheduleStatsRow';
5
5
  import type { ScheduleDayTimelineApi } from '../composables/useScheduleDayTimeline';
6
6
  import type { ScheduleRosterApi } from '../composables/useScheduleRoster';
7
7
  import type { ScheduleAreaDragDropApi } from '../composables/useScheduleAreaDragDrop';
8
+ import type { ScheduleDragDropApi } from '../composables/useScheduleDragDrop';
8
9
  type ScheduleLegendApi = ReturnType<typeof useScheduleLegend>;
9
10
  type ScheduleStatsRowApi = ReturnType<typeof useScheduleStatsRow>;
10
11
  type __VLS_Props = {
@@ -15,6 +16,10 @@ type __VLS_Props = {
15
16
  dayTimeline: ScheduleDayTimelineApi;
16
17
  roster: ScheduleRosterApi;
17
18
  areaDragDrop: ScheduleAreaDragDropApi;
19
+ shiftDragDrop: ScheduleDragDropApi;
20
+ onDropEmployee: (employeeId: number, event: DragEvent, slotIndex?: number) => void;
21
+ onDropPosition: (employeeId: number, event: DragEvent, slotIndex?: number) => void;
22
+ onDropPositionCell: (position: string, event: DragEvent) => void;
18
23
  mode: 'employee' | 'area';
19
24
  onScroll: (delta: number) => void;
20
25
  onComingSoon: () => void;
@@ -6,6 +6,7 @@ import type { SchedulePositionModalApi } from '../composables/useSchedulePositio
6
6
  import type { ScheduleShiftActionsApi } from '../composables/useScheduleShiftActions';
7
7
  import type { ScheduleShiftPopoverApi } from '../composables/useScheduleShiftPopover';
8
8
  import type { ScheduleAutoScheduleApi } from '../composables/useScheduleAutoSchedule';
9
+ import type { ScheduleTourApi } from '../composables/useScheduleTour';
9
10
  import type { ScheduleDemandSheetApi } from '../composables/useScheduleDemandSheet';
10
11
  type ScheduleEmployeeProfileApi = ReturnType<typeof useScheduleEmployeeProfile>;
11
12
  type __VLS_Props = {
@@ -17,6 +18,7 @@ type __VLS_Props = {
17
18
  shiftActions: ScheduleShiftActionsApi;
18
19
  popover: ScheduleShiftPopoverApi;
19
20
  autoSchedule: ScheduleAutoScheduleApi;
21
+ tour: ScheduleTourApi;
20
22
  demandSheet: ScheduleDemandSheetApi;
21
23
  removeEmployeeOpen: boolean;
22
24
  removeEmployeeName: string;
@@ -18,6 +18,7 @@ type __VLS_Props = {
18
18
  clearTitle: string;
19
19
  clearMessage: string;
20
20
  clearConfirmLabel: string;
21
+ clearLoading: boolean;
21
22
  onConfirmClear: () => void;
22
23
  onCloseClear: () => void;
23
24
  };
@@ -22,7 +22,6 @@ type __VLS_Props = {
22
22
  filterBar: ScheduleFilterBarApi;
23
23
  outlet: ScheduleOutletApi;
24
24
  roster: ScheduleRosterApi;
25
- loading: boolean;
26
25
  error: string | null;
27
26
  onSchedStatusClick: () => void;
28
27
  onComingSoon: () => void;
@@ -4,7 +4,7 @@ import type { ScheduleAutoScheduleApi } from '../composables/useScheduleAutoSche
4
4
  import type { ScheduleExportApi } from '../composables/useScheduleExport';
5
5
  import type { SchedulePublishApi } from '../composables/useSchedulePublish';
6
6
  type __VLS_Props = {
7
- kind: 'onboarding' | 'tour' | 'export' | 'publish-share';
7
+ kind: 'onboarding' | 'tour' | 'auto-schedule' | 'export' | 'publish-share';
8
8
  wizard?: ScheduleOnboardingWizardApi;
9
9
  tour?: ScheduleTourApi;
10
10
  autoSchedule?: ScheduleAutoScheduleApi;
@@ -2,6 +2,7 @@ type __VLS_Props = {
2
2
  open: boolean;
3
3
  title: string;
4
4
  message: string;
5
+ affectedDates?: string[];
5
6
  /** `clash-q` gives the message an orange warning-callout background instead of plain text —
6
7
  * used by the "might conflict" dialog, kept as an opt-in rather than the default look. */
7
8
  messageClass?: string;
@@ -10,6 +11,7 @@ type __VLS_Props = {
10
11
  * consequence of pressing the button. Omitted entirely when there's nothing to point to. */
11
12
  note?: string;
12
13
  confirmLabel?: string;
14
+ loading?: boolean;
13
15
  cancelLabel?: string;
14
16
  tone?: 'primary' | 'danger';
15
17
  /** The "!" mark is for dialogs guarding something irreversible — a reversible action
@@ -24,9 +26,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
24
26
  onConfirm?: (() => any) | undefined;
25
27
  }>, {
26
28
  icon: boolean;
27
- confirmLabel: string;
28
- tone: "primary" | "danger";
29
+ loading: boolean;
29
30
  messageClass: string;
30
- cancelLabel: string;
31
+ tone: "primary" | "danger";
31
32
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
32
33
  export default _default;
@@ -2,11 +2,16 @@ import type { ScheduleDayTimelineApi } from '../composables/useScheduleDayTimeli
2
2
  import type { ScheduleRosterApi } from '../composables/useScheduleRoster';
3
3
  import type { ScheduleViewMode } from '../composables/useScheduleFilterBar';
4
4
  import type { ScheduleAreaDragDropApi } from '../composables/useScheduleAreaDragDrop';
5
+ import type { ScheduleDragDropApi } from '../composables/useScheduleDragDrop';
5
6
  type __VLS_Props = {
6
7
  timeline: ScheduleDayTimelineApi;
7
8
  roster: ScheduleRosterApi;
8
9
  mode: ScheduleViewMode;
9
10
  dragDrop?: ScheduleAreaDragDropApi;
11
+ shiftDragDrop?: ScheduleDragDropApi;
12
+ onDropEmployee?: (employeeId: number, event: DragEvent, slotIndex?: number) => void;
13
+ onDropPosition?: (employeeId: number, event: DragEvent, slotIndex?: number) => void;
14
+ onDropPositionCell?: (position: string, event: DragEvent) => void;
10
15
  };
11
16
  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>;
12
17
  export default _default;
@@ -1,5 +1,4 @@
1
1
  type __VLS_Props = {
2
- loading: boolean;
3
2
  error: string | null;
4
3
  };
5
4
  declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -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;
@@ -1,6 +1,6 @@
1
1
  import type { ScheduleBoardApi } from '../composables/useScheduleBoard';
2
2
  import type { ScheduleShiftPopoverApi } from '../composables/useScheduleShiftPopover';
3
- import type { ScheduleTimePickerApi } from '../composables/useScheduleTimePicker';
3
+ import { type ScheduleTimePickerApi } from '../composables/useScheduleTimePicker';
4
4
  type __VLS_Props = {
5
5
  board: ScheduleBoardApi;
6
6
  popover: ScheduleShiftPopoverApi;
@@ -1,4 +1,4 @@
1
- import type { FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleObjective, FdtoScheduleAutoSchedulePlanner, FdtoScheduleAutoScheduleProposal, FdtoScheduleAutoScheduleResult } from '@/types/schedule';
1
+ import type { FdtoScheduleAutoScheduleApplyReq, FdtoScheduleAutoScheduleObjective, FdtoScheduleAutoScheduleProposal, FdtoScheduleAutoScheduleResult } from '@/types/schedule';
2
2
  import { ApiError } from '@/api';
3
3
  import type { Proposal } from '../types';
4
4
  /** ISO date of `dayIdx` in the week starting `weekKey` (YYYY-MM-DD, local arithmetic). */
@@ -8,7 +8,9 @@ export declare function dateOfProposal(weekKey: string, dayIdx: number): string;
8
8
  * dropped. Ids come from `nextId` so they stay unique across weeks. */
9
9
  export declare function proposalsFromResult(proposals: FdtoScheduleAutoScheduleProposal[], weekKey: string, dateKeyOf: (dayIdx: number) => string | null, nextId: () => number, holds: (empId: number) => boolean): Proposal[];
10
10
  /** The apply body for the accepted proposals, each re-dated from its own week and day. */
11
- export declare function applyRequestOf(proposals: Proposal[], allowOvertime: boolean): FdtoScheduleAutoScheduleApplyReq;
11
+ export declare function applyRequestOf(proposals: Proposal[], allowOvertime: boolean, status?: FdtoScheduleAutoScheduleApplyReq['status']): FdtoScheduleAutoScheduleApplyReq;
12
+ /** The `t` from `useI18n()`, passed into these pure helpers so they stay free of Vue setup. */
13
+ export type TranslateFn = (key: string, params?: Record<string, unknown>) => string;
12
14
  export interface ClassifiedExplanation {
13
15
  kind: 'reject' | 'ai' | 'plain';
14
16
  text: string;
@@ -21,13 +23,13 @@ export declare function classifyExplanation(line: string): ClassifiedExplanation
21
23
  * (0 < status < 500). A network failure (0) or a server error (5xx) is not. */
22
24
  export declare function isClientRefusal(error: unknown): error is ApiError;
23
25
  /** A client-error refusal shows its own message; a network failure or 5xx shows the generic one. */
24
- export declare function generateErrorMessage(error: unknown): string;
26
+ export declare function generateErrorMessage(error: unknown, t: TranslateFn): string;
25
27
  /** The result shown when "fill gaps" is off: nothing proposed, one explanation. */
26
28
  export declare function fillGapsOffResult(week: {
27
29
  from: string;
28
30
  to: string;
29
- }, objective: FdtoScheduleAutoScheduleObjective, allowOvertime: boolean): FdtoScheduleAutoScheduleResult;
31
+ }, objective: FdtoScheduleAutoScheduleObjective, allowOvertime: boolean, t: TranslateFn): FdtoScheduleAutoScheduleResult;
30
32
  /** The snackbar shown once a run finishes, whether it went to the server or (fill gaps off) was
31
33
  * answered locally. `wallMs` is measured client-side around the request — it is what the manager
32
34
  * actually waited, not just the server's own `timing.totalMs`. */
33
- export declare function generateDoneMessage(result: FdtoScheduleAutoScheduleResult, requested: FdtoScheduleAutoSchedulePlanner, wallMs: number): string;
35
+ export declare function generateDoneMessage(result: FdtoScheduleAutoScheduleResult, wallMs: number, t: TranslateFn): string;
@@ -3,3 +3,5 @@ export declare const ONBOARDING_STEPS: ScheduleOnboardingStep[];
3
3
  export declare const SKIPPABLE_ONBOARDING_STEPS: ScheduleOnboardingStep[];
4
4
  export declare const COMMON_POSITION_SUGGESTIONS: string[];
5
5
  export declare const ANY_POSITION_KEY = "__any__";
6
+ /** i18n key for a Monday-first weekday index's short name (WEEKDAYS in ../data stays English). */
7
+ export declare function weekdayKey(dayIdx: number): string;
@@ -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;
@@ -8,6 +8,8 @@ export type RemyDemandScope = {
8
8
  } | {
9
9
  mode: 'weekdays';
10
10
  };
11
- /** The sentence prefilled into the host Remy panel. Names the outlet the way a manager knows it;
12
- * Remy resolves it to an id itself (hrm_find_outlet), so no identifier appears in the text. */
11
+ /** The text prefilled into the host Remy panel: one line naming the outlet and day, which the
12
+ * user continues with their demand. The "attach a roster image or describe it in words" guidance
13
+ * lives on the sheet's Ask Remy tooltip, not here. Names the outlet the way a manager knows it;
14
+ * Remy resolves it to an id itself (hrm_find_outlet), so no outlet id appears in the text. */
13
15
  export declare function remyDemandPrompt(outletName: string, scope: RemyDemandScope): string;
@@ -79,4 +79,4 @@ export declare function availabilityPayload(form: ScheduleAddEmployeeForm): Arra
79
79
  /** The EmployeeProfile fields `createExisting` and `updateExisting` both send — everything but
80
80
  * `employeeId`, which only the create path has (an update targets one already known from the
81
81
  * URL). Shared here so the two payloads cannot silently drift apart. */
82
- export declare function toEmployeeProfileFields(form: ScheduleAddEmployeeForm, name: string, payAmountNumber: number): FdtoScheduleUpdateEmployeeProfileReq;
82
+ export declare function toEmployeeProfileFields(form: ScheduleAddEmployeeForm, name: string, payAmountNumber: number, t: (key: string) => string): FdtoScheduleUpdateEmployeeProfileReq;
@@ -6,6 +6,10 @@ export { isoDateKey } from './schedule-calendar';
6
6
  export declare function isWorkSlot(slot: DaySlot): slot is WorkSlot;
7
7
  export declare function isLeaveSlot(slot: DaySlot): slot is LeaveSlot;
8
8
  export declare function workSlotsOf(day: DaySlot): WorkSlot[];
9
+ /** Whether two periods occupy any of the same working time. Endpoints that touch are
10
+ * back-to-back, not a conflict. Overnight ranges use the shared clock rules. */
11
+ export declare function shiftsOverlap(a: Pick<WorkSlot, 'start' | 'end'>, b: Pick<WorkSlot, 'start' | 'end'>): boolean;
12
+ export declare function overlapsAnotherSlot(slots: WorkSlot[], target: WorkSlot): boolean;
9
13
  /** The inverse of `workSlotsOf` — bare slot for one, the array for two or more, so a day
10
14
  * that's back down to its last period reads as a normal single shift again rather than a
11
15
  * one-element array everything else has to unwrap. */
@@ -5,3 +5,13 @@ export declare function mostRecentMonday(from: Date): Date;
5
5
  export declare function weekDates(offset: number, from?: Date): Date[];
6
6
  export declare function weeksBetween(a: Date, b: Date): number;
7
7
  export declare function todayWeekdayIdx(): number;
8
+ /** Monday-first weekday ids, matching the board's `dayIdx` (0 = Mon .. 6 = Sun). */
9
+ export declare const WEEKDAY_IDS: readonly ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
10
+ /** i18n key of a weekday's short name ("Mon" / "จ."). */
11
+ export declare function weekdayShortKey(dayIdx: number): string;
12
+ /** i18n key of a weekday's full name ("Monday" / "วันจันทร์"). */
13
+ export declare function weekdayLongKey(dayIdx: number): string;
14
+ /** BCP 47 tag for `Intl`/`toLocale*String` from the active i18n locale. English keeps the
15
+ * board's existing format (`enFallback`); Thai stays on the Gregorian calendar so years line up
16
+ * with ISO dates shown elsewhere instead of switching to the Buddhist era. */
17
+ export declare function intlLocale(locale: string | undefined, enFallback?: string): string;
@@ -17,3 +17,8 @@ export declare function costOfSlots(employee: Employee, slots: Array<{
17
17
  slot: WorkSlot;
18
18
  multiplier: number;
19
19
  }>): ScheduleCostBreakdown;
20
+ /** The slice of vue-i18n's `t` the format helpers below need, so pure modules can take it as a
21
+ * parameter instead of calling `useI18n()` themselves. */
22
+ export type ScheduleTranslate = (key: string, named?: Record<string, unknown>) => string;
23
+ /** "7h 30m" / "7 ชม. 30 น." — hours rendered as whole hours plus leftover minutes. */
24
+ export declare function formatHoursMinutes(hours: number, t: ScheduleTranslate): string;
@@ -0,0 +1,22 @@
1
+ import { type ComputedRef } from 'vue';
2
+ interface CurrencyFormat {
3
+ label: string;
4
+ /** Where the label sits next to the number: "RM 3" vs "3 บาท" — how each market reads it. */
5
+ position: 'before' | 'after';
6
+ }
7
+ export declare function currencyFormatFor(country: string | null | undefined): CurrencyFormat;
8
+ export declare function currencyLabelFor(country: string | null | undefined): string;
9
+ /** Adds the label to an already-formatted number, on the side that market reads it. */
10
+ export declare function withCurrency(value: string, format: CurrencyFormat): string;
11
+ export interface ScheduleCurrency {
12
+ /** "RM" / "บาท", from the current business country (not the UI language). */
13
+ currency: ComputedRef<string>;
14
+ /** True when the label goes after the number (บาท), so input adornments flip sides. */
15
+ currencyAfter: ComputedRef<boolean>;
16
+ /** "RM 1,234" / "1,234 บาท" — rounded to whole units unless `fractionDigits` is given. */
17
+ formatMoney: (amount: number, fractionDigits?: number) => string;
18
+ /** Adds the currency label to a number that is already formatted. */
19
+ withCurrency: (value: string | number) => string;
20
+ }
21
+ export declare function useScheduleCurrency(): ScheduleCurrency;
22
+ export {};
@@ -8,14 +8,12 @@ export declare function useScheduleDayMeta(dateKey: (dayIdx: number) => string |
8
8
  onPersistError?: (message: string) => void;
9
9
  }): {
10
10
  dayNote: (dayIdx: number) => ScheduleDayNote | null;
11
- setDayNote: (dayIdx: number, title: string, desc: string) => void;
11
+ setDayNote: (dayIdx: number, title: string, desc: string, isPublicHoliday?: boolean) => void;
12
12
  clearDayNote: (dayIdx: number) => void;
13
13
  isStandingClosedWeekday: (dayIdx: number) => boolean;
14
14
  holidayName: (dayIdx: number) => string | null;
15
- holidayIsAuto: (dayIdx: number) => boolean;
16
15
  isPublicHoliday: (dayIdx: number) => boolean;
17
16
  holidayRateApplies: (dayIdx: number) => boolean;
18
- setHolidayNormal: (dayIdx: number, toNormal: boolean) => void;
19
17
  setPublicHoliday: (dayIdx: number, on: boolean) => void;
20
18
  otRateOn: (dayIdx: number) => number;
21
19
  regularRateOn: (dayIdx: number) => number;
@@ -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 @@
1
+ export declare function errorMessage(error: unknown, fallback: string): string;
@@ -11,4 +11,4 @@ export declare function dayCellLines(value: ExportShiftCell): {
11
11
  text: string;
12
12
  kind: 'note' | 'when' | 'pos';
13
13
  }[];
14
- export declare function dayHeaderLabel(date: Date): string;
14
+ export declare function dayHeaderLabel(date: Date, locale?: string): string;
@@ -0,0 +1,9 @@
1
+ import type { FdtoScheduleCreateTimeOffReq, FdtoScheduleTimeOff } from '@/types/schedule';
2
+ import type { LeaveSlot } from '../types';
3
+ /** The i18n key naming a leave slot's type, for display — `LeaveSlot.reason` stays English
4
+ * (other code matches on it). */
5
+ export declare function timeOffLabelKey(slot: Pick<LeaveSlot, 'type' | 'leaveType'>): string;
6
+ /** The create requests that keep the rest of a multi-day record alive once `date` is carved out
7
+ * of it. Single-day records leave nothing behind. The contract requires a same-day request to
8
+ * have matching parts, so a one-day remainder takes the part from its outer edge. */
9
+ export declare function remainderRequests(record: FdtoScheduleTimeOff, date: string): FdtoScheduleCreateTimeOffReq[];
@@ -0,0 +1,23 @@
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
+ export type QuickPickTranslate = (key: string, named?: Record<string, unknown>) => string;
19
+ /** Up to 3 shifts for one employee on one day, built the way the auto-schedule planner builds
20
+ * them: one per (short run, position the person can fill), padded to their daily minimum,
21
+ * capped at their maximum, kept inside their availability window and clear of their existing
22
+ * shifts. Rest-gap and weekly-cap checks are left to the shift editor's own warnings. */
23
+ export declare function buildQuickPicks(emp: Employee, dayIdx: number, segments: CoverageSegment[], axis: ScheduleCoverageAxis, rules: QuickPickRules, qualifiedFor: (emp: Employee, position: string) => boolean, t?: QuickPickTranslate): QuickPickCandidate[];
@@ -12,6 +12,9 @@ export declare function timeRangeBreakOf(sl: WorkSlot): {
12
12
  startTime: string;
13
13
  endTime: string;
14
14
  } | null;
15
+ /** The two visible paid periods around a custom clock-window break. Shared by Weekly cards and
16
+ * Daily timeline bars so the split wording cannot drift between views. */
17
+ export declare function splitTimeLabels(sl: WorkSlot): [string, string] | null;
15
18
  /** Same face as `t12`, but never drops the minutes — two ranges stacked on a split card need
16
19
  * to line up at a glance, and "10am" next to "10:30am" reads as two different units. */
17
20
  export declare function t12Full(hhmm: string): string;
@@ -4,4 +4,6 @@ export interface WeekBucket {
4
4
  employees: Employee[];
5
5
  openShifts: OpenShift[];
6
6
  }
7
- export declare function weekData(offset: number): WeekBucket;
7
+ /** `from` is the date the offset is relative to (the board passes the Monday it anchored on, so a
8
+ * tab left open past midnight keeps building the week it is showing). */
9
+ export declare function weekData(offset: number, from?: Date): WeekBucket;
@@ -2,6 +2,7 @@ import { useAppStore } from '@feedmepos/mf-remy-panel';
2
2
  export interface RemyActivateOptions {
3
3
  prompt?: string;
4
4
  forceNewConversation?: boolean;
5
+ fullscreen?: boolean;
5
6
  }
6
7
  /** HRM never bundles or mounts a Remy panel of its own — `@feedmepos/mf-remy-panel` is externalised
7
8
  * by the shared vite preset, so inside the host portal this import resolves to the ONE panel
@@ -52,22 +52,21 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
52
52
  secondaryOptions: import("vue").ComputedRef<string[]>;
53
53
  isPart: import("vue").ComputedRef<boolean>;
54
54
  dayLit: (index: number) => boolean;
55
- avLabel: import("vue").ComputedRef<"Weekly availability" | "Time off days">;
56
- avAllLabel: import("vue").ComputedRef<"Clear all" | "Select all" | "No days off" | "Every day off">;
55
+ avLabel: import("vue").ComputedRef<string>;
56
+ avAllLabel: import("vue").ComputedRef<string>;
57
57
  maxHoursPlaceholder: import("vue").ComputedRef<string>;
58
58
  minHoursPlaceholder: import("vue").ComputedRef<string>;
59
59
  maxHoursPerDayPlaceholder: import("vue").ComputedRef<string>;
60
60
  maxHoursPerMonthPlaceholder: import("vue").ComputedRef<string>;
61
61
  toggleOvertime: () => void;
62
- payUnit: import("vue").ComputedRef<"/month" | "/hour">;
62
+ payUnit: import("vue").ComputedRef<string>;
63
63
  effectiveRate: import("vue").ComputedRef<number>;
64
64
  passcodeValue: import("vue").ComputedRef<string>;
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
- 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.">;
69
+ footerHint: import("vue").ComputedRef<string>;
71
70
  primaryRoleLabel: import("vue").ComputedRef<string>;
72
71
  locationsSummary: import("vue").ComputedRef<string>;
73
72
  payLine: import("vue").ComputedRef<string>;
@@ -77,10 +76,30 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
77
76
  availabilityError: import("vue").ComputedRef<boolean>;
78
77
  saving: import("vue").Ref<boolean, boolean>;
79
78
  saveError: import("vue").Ref<string | null, string | null>;
79
+ deferScheduleWrites: import("vue").Ref<boolean, boolean>;
80
80
  candidatesLoading: import("vue").Ref<boolean, boolean>;
81
81
  candidatesError: import("vue").Ref<string | null, string | null>;
82
+ selectingExisting: import("vue").Ref<boolean, boolean>;
83
+ candidates: import("vue").Ref<{
84
+ employeeId: string;
85
+ name: string;
86
+ otherOutlets: string[];
87
+ locations: string[];
88
+ }[], import("../types").ExistingStaffCandidate[] | {
89
+ employeeId: string;
90
+ name: string;
91
+ otherOutlets: string[];
92
+ locations: string[];
93
+ }[]>;
94
+ candidatesTotal: import("vue").Ref<number, number>;
95
+ candidatesPage: import("vue").Ref<number, number>;
96
+ candidatesPageItemCount: import("vue").Ref<number, number>;
97
+ candidatesPageSize: number;
98
+ searchExisting: (search: string) => void;
99
+ goToExistingPage: (page: number, search: string) => void;
82
100
  openWizard: (section: string) => void;
83
101
  openEditFor: (emp: Employee) => void;
102
+ confirmClose: () => void;
84
103
  close: () => void;
85
104
  setMode: (m: ScheduleAddEmployeeMode) => void;
86
105
  openSelectExisting: () => void;
@@ -100,7 +119,8 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
100
119
  setAvailHour: (index: number, field: "from" | "to", value: string) => void;
101
120
  copyAvailHourDown: (index: number) => void;
102
121
  setPasscodeDigit: (index: number, value: string) => void;
103
- generatePasscode: () => void;
122
+ generatePasscode: () => Promise<void>;
123
+ isGeneratingPasscode: import("vue").Ref<boolean, boolean>;
104
124
  togglePosAccess: () => void;
105
125
  addPosRoleRow: () => void;
106
126
  removePosRoleRow: (index: number) => void;
@@ -108,7 +128,10 @@ export declare function useScheduleAddEmployee(board: ScheduleBoardApi, options?
108
128
  setPosRoleOutlet: (index: number, outlet: string) => void;
109
129
  setPosRoleId: (index: number, roleId: string) => void;
110
130
  posRoleOptionsFor: (outlet: string) => import("../../../types/role").Role[];
111
- 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.">;
131
+ isPosRoleUsable: (role: import("../../../types/role").Role) => boolean;
132
+ setMasterUserRoleAccess: (roleIds: string[] | null | undefined) => void;
133
+ isPosOutletUsable: (outlet: string) => boolean;
134
+ posRolesHint: import("vue").ComputedRef<string>;
112
135
  create: () => Promise<boolean>;
113
136
  };
114
137
  export type ScheduleAddEmployeeApi = ReturnType<typeof useScheduleAddEmployee>;
@@ -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;
@@ -13,17 +14,10 @@ export interface ScheduleAddPickState {
13
14
  }
14
15
  export interface ScheduleAddPickLeaveOption {
15
16
  reason: string;
17
+ /** i18n key for the row's label — `reason` itself is an id and stays English. */
18
+ labelKey: string;
16
19
  swatch: string;
17
20
  }
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
21
  /** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
28
22
  * openAddShiftPicker()/renderAddPickList(), scoped to what this board actually has: our one
29
23
  * active shift pattern, a fixed leave-reason list, and a demand-gap suggestion, all committed
@@ -57,7 +51,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
57
51
  start: string;
58
52
  end: string;
59
53
  } | null>;
60
- suggested: import("vue").ComputedRef<ScheduleAddPickSuggestion | null>;
54
+ suggestions: import("vue").ComputedRef<QuickPickCandidate[]>;
61
55
  filteredPatterns: import("vue").ComputedRef<{
62
56
  key: string;
63
57
  label: string;
@@ -71,7 +65,7 @@ export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: Sche
71
65
  hasResults: import("vue").ComputedRef<boolean>;
72
66
  openFor: (empId: number, dayIdx: number, anchor: HTMLElement) => void;
73
67
  close: () => void;
74
- pickSuggested: () => void;
68
+ pickSuggested: (index: number) => void;
75
69
  pickPattern: (key: string) => void;
76
70
  pickTypedRange: (start: string, end: string) => void;
77
71
  pickLeave: (reason: string) => void;
@@ -2,7 +2,6 @@ import type { ScheduleBoardApi } from './useScheduleBoard';
2
2
  /** Dragging a person from the staff rail onto a position/day cell opens a normal assigned shift. */
3
3
  export declare function useScheduleAreaDragDrop(board: ScheduleBoardApi, handlers: {
4
4
  onCreateShift: (empId: number, dayIdx: number, position: string) => void;
5
- onNotQualified: (empName: string, position: string) => void;
6
5
  }): {
7
6
  draggingEmpId: import("vue").Ref<number | null, number | null>;
8
7
  startRailDrag: (empId: number) => void;