@feedmepos/mf-hrm-portal 2.2.5-dev.7 → 2.2.5-dev.8
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.
- package/dist/{ApprovalCodeList-dn-WwNAd.js → ApprovalCodeList-BzL73nqc.js} +2 -2
- package/dist/{AuditLogList-BqVp9fxD.js → AuditLogList-BEZoHLsX.js} +3 -3
- package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DnAet2oc.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-DDrP7ywR.js} +2 -2
- package/dist/{EmployeeList-BwTJre5k.js → EmployeeList-s4FYw1ZF.js} +5 -5
- package/dist/{GrantUserList-CZek1r4F.js → GrantUserList-Ci_ElhHZ.js} +3 -3
- package/dist/{Main-MjSYZdOq.js → Main-BojQuzZI.js} +5 -5
- package/dist/{Main-DVA51sj2.js → Main-CKr3RGvf.js} +2 -2
- package/dist/{Main-CbmA-SYo.js → Main-N1CNGDAy.js} +9 -9
- package/dist/{PermissionSetList-lkHmXhNm.js → PermissionSetList-DLknSOzA.js} +5 -5
- package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-cFQDQCal.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DK2Bx8Aw.js} +772 -772
- package/dist/{RoleList-BSs0SmFo.js → RoleList-Cm7_q5l9.js} +7 -7
- package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-DrJ1vA88.js +426 -0
- package/dist/ScheduleButton.vue_vue_type_script_setup_true_lang-DX5JR7bi.js +600 -0
- package/dist/ScheduleGeneralPage-CmR4BZAp.js +323 -0
- package/dist/SchedulePage-CN3ZsQ9E.js +13905 -0
- package/dist/SchedulePositionPage-Bv3zraaF.js +293 -0
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-Buu8NEQf.js +221 -0
- package/dist/{TeamMemberList-Dit_nV6d.js → TeamMemberList-D2OfkfJP.js} +6 -6
- package/dist/{TimesheetList-B-FlRO7E.js → TimesheetList-DEdLpYuM.js} +4 -4
- package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-DZUJR8K_.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BfMkNvCz.js} +1 -1
- package/dist/{app-BpnOPodL.js → app-Dmmpy4k-.js} +8 -8
- package/dist/app.js +1 -1
- package/dist/{dayjs.min-4GLfSOGZ.js → dayjs.min-DcfKURXN.js} +1 -1
- package/dist/{employee-ChdVnSmd.js → employee-D3ZpYH4j.js} +3 -3
- package/dist/{index-DYoVJQTd.js → index-BxkisKEs.js} +1 -1
- package/dist/{index-CilJxsY7.js → index-D-VlxJu9.js} +1 -1
- package/dist/{lodash-CcFIMCiJ.js → lodash-p40sRkqQ.js} +1 -1
- package/dist/{role-OXCiWTVq.js → role-CM1urkJZ.js} +1 -1
- package/dist/{rule-8iyCO_LZ.js → rule-BPApyMJY.js} +2 -2
- package/dist/src/api/schedule/index.d.ts +0 -3
- package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/SchedulePage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +1 -2
- package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleAddPositionModal.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleButton.vue.d.ts +23 -0
- package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +1 -1
- package/dist/src/views/scheduling/components/ScheduleEmployeeMenu.vue.d.ts +6 -0
- package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +4 -2
- package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +3 -0
- package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +14 -0
- package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +5 -1
- package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -0
- package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -2
- package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +4 -2
- package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +2 -4
- package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +1 -0
- package/dist/src/views/scheduling/composables/schedule-popover-position.d.ts +16 -0
- package/dist/src/views/scheduling/composables/useCollapsedList.d.ts +9 -0
- package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +1 -0
- package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +14 -7
- package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +11 -2
- package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +8 -0
- package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +11 -0
- package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -5
- package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +5 -3
- package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +7 -1
- package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +35 -0
- package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +53 -3
- package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1181 -55
- package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +50 -0
- package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +2 -0
- package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +10 -1
- package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +5 -5
- package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +6 -0
- package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +7 -0
- package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +6 -1
- package/dist/src/views/scheduling/composables/useScheduleViewportFit.d.ts +9 -0
- package/dist/src/views/scheduling/data.d.ts +6 -1
- package/dist/src/views/scheduling/schedule-store.d.ts +11 -1
- package/dist/src/views/scheduling/types.d.ts +9 -1
- package/dist/style.css +1 -1
- package/dist/tsconfig.app.tsbuildinfo +1 -1
- package/dist/{useReportPermissions-C3fuFTUC.js → useReportPermissions-5EhPvVT9.js} +3 -3
- package/package.json +1 -1
- package/dist/ScheduleGeneralPage-DD9n2TUe.js +0 -242
- package/dist/SchedulePage-B0X97zVC.js +0 -10761
- package/dist/SchedulePositionPage-BXz1USn3.js +0 -220
- package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DAHke2rH.js +0 -201
- package/dist/useScheduleOutlet-TPZJHgSY.js +0 -546
- package/dist/useSchedulePositions-DCkaKHQm.js +0 -103
|
@@ -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 "./index-
|
|
4
|
+
import "./index-BxkisKEs.js";
|
|
5
5
|
import { g as f, b as p, u as I } from "./restaurant-BTpBmfBV.js";
|
|
6
6
|
import { s as v } from "./iteration-CcXrOMQe.js";
|
|
7
7
|
const R = {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { e as y } from "./index-
|
|
2
|
-
import { e as O, b as W, c as _, v as F, n as h, O as q, D as M } from "./app-
|
|
1
|
+
import { e as y } from "./index-BxkisKEs.js";
|
|
2
|
+
import { e as O, b as W, c as _, v as F, n as h, O as q, D as M } from "./app-Dmmpy4k-.js";
|
|
3
3
|
import { s as V, c as ee } from "./iteration-CcXrOMQe.js";
|
|
4
4
|
import { s as se } from "./utils-BZkjJbju.js";
|
|
5
5
|
import { g, b as v, q as x, u as te } from "./restaurant-BTpBmfBV.js";
|
|
@@ -37,8 +37,5 @@ declare const ScheduleAPI: {
|
|
|
37
37
|
/** Flips a batch of assignments to one status in a single request — e.g. Publish sending
|
|
38
38
|
* every DRAFT shift on the board to PUBLISHED at once. */
|
|
39
39
|
bulkUpdateAssignmentStatus(restaurantId: string, req: FdtoScheduleBulkUpdateAssignmentStatusReq): Promise<FdtoScheduleAssignment[]>;
|
|
40
|
-
devResetOutlet(restaurantId: string): Promise<{
|
|
41
|
-
removed: number;
|
|
42
|
-
}>;
|
|
43
40
|
};
|
|
44
41
|
export default ScheduleAPI;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import './scheduling.css';
|
|
1
|
+
import './index.css';
|
|
3
2
|
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
4
3
|
export default _default;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import './scheduling.css';
|
|
1
|
+
import './index.css';
|
|
3
2
|
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
4
3
|
export default _default;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import './
|
|
2
|
-
import './scheduling.css';
|
|
1
|
+
import './index.css';
|
|
3
2
|
declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
4
3
|
export default _default;
|
|
@@ -2,5 +2,9 @@ import type { useScheduleAddEmployee } from '../composables/useScheduleAddEmploy
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
wizard: ReturnType<typeof useScheduleAddEmployee>;
|
|
4
4
|
};
|
|
5
|
-
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
newPosition: (target: "primary" | "secondary") => any;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onNewPosition?: ((target: "primary" | "secondary") => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
10
|
export default _default;
|
|
@@ -2,5 +2,9 @@ import type { useScheduleAddEmployee } from '../composables/useScheduleAddEmploy
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
wizard: ReturnType<typeof useScheduleAddEmployee>;
|
|
4
4
|
};
|
|
5
|
-
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
newPosition: (target: "primary" | "secondary") => any;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onNewPosition?: ((target: "primary" | "secondary") => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
10
|
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SchedulePositionModalApi } from '../composables/useSchedulePositionModal';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
modal: SchedulePositionModalApi;
|
|
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;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type ScheduleButtonHierarchy = 'primary' | 'secondary' | 'ghost' | 'danger' | 'danger-secondary' | 'danger-ghost';
|
|
2
|
+
export type ScheduleButtonSize = 'xs' | 'sm' | 'md' | 'lg';
|
|
3
|
+
type __VLS_Props = {
|
|
4
|
+
hierarchy?: ScheduleButtonHierarchy;
|
|
5
|
+
size?: ScheduleButtonSize;
|
|
6
|
+
iconOnly?: boolean;
|
|
7
|
+
};
|
|
8
|
+
declare var __VLS_1: {};
|
|
9
|
+
type __VLS_Slots = {} & {
|
|
10
|
+
default?: (props: typeof __VLS_1) => any;
|
|
11
|
+
};
|
|
12
|
+
declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
|
|
13
|
+
size: ScheduleButtonSize;
|
|
14
|
+
hierarchy: ScheduleButtonHierarchy;
|
|
15
|
+
iconOnly: boolean;
|
|
16
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
17
|
+
declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
|
|
18
|
+
export default _default;
|
|
19
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
20
|
+
new (): {
|
|
21
|
+
$slots: S;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -16,9 +16,9 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
16
16
|
onClose?: (() => any) | undefined;
|
|
17
17
|
onConfirm?: (() => any) | undefined;
|
|
18
18
|
}>, {
|
|
19
|
+
tone: "primary" | "danger";
|
|
19
20
|
messageClass: string;
|
|
20
21
|
confirmLabel: string;
|
|
21
22
|
cancelLabel: string;
|
|
22
|
-
tone: "primary" | "danger";
|
|
23
23
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
24
24
|
export default _default;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ScheduleEmployeeMenuApi } from '../composables/useScheduleEmployeeMenu';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
menu: ScheduleEmployeeMenuApi;
|
|
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,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ScheduleLeaveApi } from '../composables/useScheduleLeave';
|
|
2
|
+
import { type ScheduleTimePickerApi } from '../composables/useScheduleTimePicker';
|
|
2
3
|
type __VLS_Props = {
|
|
3
|
-
leave:
|
|
4
|
+
leave: ScheduleLeaveApi;
|
|
5
|
+
timePicker: ScheduleTimePickerApi;
|
|
4
6
|
};
|
|
5
7
|
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
8
|
export default _default;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import type { ScheduleOnboardingWizardApi } from '../composables/useScheduleOnboardingWizard';
|
|
2
|
+
import { type ScheduleTimePickerApi } from '../composables/useScheduleTimePicker';
|
|
2
3
|
type __VLS_Props = {
|
|
3
4
|
wizard: ScheduleOnboardingWizardApi;
|
|
5
|
+
outletName: string;
|
|
6
|
+
timePicker: ScheduleTimePickerApi;
|
|
4
7
|
};
|
|
5
8
|
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
9
|
export default _default;
|
|
@@ -7,17 +7,31 @@ export interface ScheduleSelectOption {
|
|
|
7
7
|
label: string;
|
|
8
8
|
disabled?: boolean;
|
|
9
9
|
group?: string;
|
|
10
|
+
/** Second line under the label. Any option carrying one switches the menu to the rich
|
|
11
|
+
* layout (bold name, muted hint, tick on the right), as V6.2's outlet menu does. */
|
|
12
|
+
hint?: string;
|
|
13
|
+
/** A command rather than a choice ("+ Add a new position…"): drawn in the brand colour, as
|
|
14
|
+
* V6.2 draws it, so it stops reading as one more thing the field could be set to. */
|
|
15
|
+
command?: boolean;
|
|
10
16
|
}
|
|
11
17
|
declare const _default: import("vue").DefineComponent<{
|
|
12
18
|
modelValue: string;
|
|
13
19
|
options: ScheduleSelectOption[];
|
|
14
20
|
disabled?: boolean;
|
|
21
|
+
/** Heading over the menu. Also switches to the rich layout. */
|
|
22
|
+
menuTitle?: string;
|
|
23
|
+
/** A filter box at the top of the menu, for lists long enough to hunt through (outlets). */
|
|
24
|
+
searchable?: boolean;
|
|
15
25
|
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
16
26
|
"update:modelValue": (value: string) => any;
|
|
17
27
|
}, string, import("vue").PublicProps, Readonly<{
|
|
18
28
|
modelValue: string;
|
|
19
29
|
options: ScheduleSelectOption[];
|
|
20
30
|
disabled?: boolean;
|
|
31
|
+
/** Heading over the menu. Also switches to the rich layout. */
|
|
32
|
+
menuTitle?: string;
|
|
33
|
+
/** A filter box at the top of the menu, for lists long enough to hunt through (outlets). */
|
|
34
|
+
searchable?: boolean;
|
|
21
35
|
}> & Readonly<{
|
|
22
36
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
23
37
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
@@ -2,5 +2,9 @@ import type { ScheduleShiftPopoverApi } from '../composables/useScheduleShiftPop
|
|
|
2
2
|
type __VLS_Props = {
|
|
3
3
|
popover: ScheduleShiftPopoverApi;
|
|
4
4
|
};
|
|
5
|
-
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
+
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
6
|
+
newPosition: (assign: (name: string) => void) => any;
|
|
7
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
8
|
+
onNewPosition?: ((assign: (name: string) => void) => any) | undefined;
|
|
9
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
6
10
|
export default _default;
|
|
@@ -7,8 +7,10 @@ type __VLS_Props = {
|
|
|
7
7
|
timePicker: ScheduleTimePickerApi;
|
|
8
8
|
};
|
|
9
9
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
10
|
+
newPosition: (assign: (name: string) => void) => any;
|
|
10
11
|
swap: (empId: number, dayIdx: number) => any;
|
|
11
12
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onNewPosition?: ((assign: (name: string) => void) => any) | undefined;
|
|
12
14
|
onSwap?: ((empId: number, dayIdx: number) => any) | undefined;
|
|
13
15
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
16
|
export default _default;
|
|
@@ -5,12 +5,14 @@ type __VLS_Props = {
|
|
|
5
5
|
dragDrop: ScheduleAreaDragDropApi;
|
|
6
6
|
};
|
|
7
7
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
8
|
+
openEmployee: (empId: number) => any;
|
|
9
|
+
openEmployeeMenu: (empId: number, anchor: HTMLElement) => any;
|
|
8
10
|
addEmployee: () => any;
|
|
9
11
|
jumpToOpen: () => any;
|
|
10
|
-
openEmployee: (empId: number) => any;
|
|
11
12
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
13
|
+
onOpenEmployee?: ((empId: number) => any) | undefined;
|
|
14
|
+
onOpenEmployeeMenu?: ((empId: number, anchor: HTMLElement) => any) | undefined;
|
|
12
15
|
onAddEmployee?: (() => any) | undefined;
|
|
13
16
|
onJumpToOpen?: (() => any) | undefined;
|
|
14
|
-
onOpenEmployee?: ((empId: number) => any) | undefined;
|
|
15
17
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
16
18
|
export default _default;
|
|
@@ -25,7 +25,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
25
25
|
segLeave: () => any;
|
|
26
26
|
segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
|
|
27
27
|
segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => any;
|
|
28
|
-
|
|
28
|
+
openEmployee: (empId: number) => any;
|
|
29
|
+
openEmployeeMenu: (empId: number, anchor: HTMLElement) => any;
|
|
29
30
|
dragShiftStart: (empId: number, dayIdx: number, ev: DragEvent) => any;
|
|
30
31
|
dropOnCell: (empId: number, dayIdx: number, ev: DragEvent) => any;
|
|
31
32
|
openCardMenu: (empId: number, dayIdx: number, anchor: HTMLElement) => any;
|
|
@@ -44,7 +45,8 @@ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {
|
|
|
44
45
|
onSegLeave?: (() => any) | undefined;
|
|
45
46
|
onSegClick?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
|
|
46
47
|
onSegFocus?: ((dayIdx: number, from: number, to: number, anchor: HTMLElement) => any) | undefined;
|
|
47
|
-
|
|
48
|
+
onOpenEmployee?: ((empId: number) => any) | undefined;
|
|
49
|
+
onOpenEmployeeMenu?: ((empId: number, anchor: HTMLElement) => any) | undefined;
|
|
48
50
|
onDragShiftStart?: ((empId: number, dayIdx: number, ev: DragEvent) => any) | undefined;
|
|
49
51
|
onDropOnCell?: ((empId: number, dayIdx: number, ev: DragEvent) => any) | undefined;
|
|
50
52
|
onOpenCardMenu?: ((empId: number, dayIdx: number, anchor: HTMLElement) => any) | undefined;
|
|
@@ -11,12 +11,10 @@ type __VLS_Props = {
|
|
|
11
11
|
exportApi: ScheduleExportApi;
|
|
12
12
|
};
|
|
13
13
|
declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
14
|
-
"
|
|
15
|
-
"sched-status-click": () => any;
|
|
14
|
+
"sch-status-click": () => any;
|
|
16
15
|
"clear-shifts": () => any;
|
|
17
16
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
18
|
-
"
|
|
19
|
-
"onSched-status-click"?: (() => any) | undefined;
|
|
17
|
+
"onSch-status-click"?: (() => any) | undefined;
|
|
20
18
|
"onClear-shifts"?: (() => any) | undefined;
|
|
21
19
|
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
22
20
|
export default _default;
|
|
@@ -11,6 +11,7 @@ export interface ScheduleAddEmployeeForm {
|
|
|
11
11
|
payBasis: 'hourly' | 'monthly';
|
|
12
12
|
payAmount: string;
|
|
13
13
|
maxHours: string;
|
|
14
|
+
minHours: string;
|
|
14
15
|
otAfterDaily: string;
|
|
15
16
|
maxOtHours: string;
|
|
16
17
|
/** For a part-timer: days they CAN work. For a full-timer: days they're OFF — the
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ScheduleAnchorRect {
|
|
2
|
+
left: number;
|
|
3
|
+
right: number;
|
|
4
|
+
top: number;
|
|
5
|
+
bottom: number;
|
|
6
|
+
}
|
|
7
|
+
/** Measures the element a popover was opened from. Takes the rect while the anchor is still on
|
|
8
|
+
* screen; a hidden or detached element measures 0×0 and counts as "no anchor". */
|
|
9
|
+
export declare function anchorRectOf(el: Element | null | undefined): ScheduleAnchorRect | null;
|
|
10
|
+
/** Port of HRM V6.2 placePopover(): below the anchor by preference (6px gap), flipped above when
|
|
11
|
+
* there is no room, clamped to the viewport on both edges. Uses the popover's rendered size, so
|
|
12
|
+
* call it once the element is in the DOM. */
|
|
13
|
+
export declare function placePopover(el: HTMLElement, anchor: ScheduleAnchorRect | null): {
|
|
14
|
+
left: number;
|
|
15
|
+
top: number;
|
|
16
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A long list shown as its first few entries plus "+N more", expandable in place. For chip rows
|
|
2
|
+
* that can run to a hundred items (a person rostered at every outlet), which would otherwise
|
|
3
|
+
* push the rest of the form off screen. */
|
|
4
|
+
export declare function useCollapsedList<T>(items: () => T[], limit?: number): {
|
|
5
|
+
expanded: import("vue").Ref<boolean, boolean>;
|
|
6
|
+
shown: import("vue").ComputedRef<T[]>;
|
|
7
|
+
hiddenCount: import("vue").ComputedRef<number>;
|
|
8
|
+
toggle: () => void;
|
|
9
|
+
};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
2
|
import type { ScheduleDemandApi } from './useScheduleDemand';
|
|
3
|
+
import { type ScheduleAnchorRect } from './schedule-popover-position';
|
|
3
4
|
export interface ScheduleAddPickState {
|
|
4
5
|
open: boolean;
|
|
5
6
|
empId: number | null;
|
|
6
7
|
dayIdx: number | null;
|
|
8
|
+
/** Measured rect of the cell the popup opened from; the popup component places itself from it
|
|
9
|
+
* once rendered (V6.2 placePopover), writing the result to `left`/`top`. */
|
|
10
|
+
anchor: ScheduleAnchorRect | null;
|
|
7
11
|
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
12
|
top: number;
|
|
12
|
-
bottom: number;
|
|
13
|
-
openAbove: boolean;
|
|
14
13
|
}
|
|
15
14
|
export interface ScheduleAddPickLeaveOption {
|
|
16
15
|
reason: string;
|
|
@@ -21,6 +20,8 @@ export interface ScheduleAddPickSuggestion {
|
|
|
21
20
|
end: string;
|
|
22
21
|
short: number;
|
|
23
22
|
label: string;
|
|
23
|
+
/** "Covers 16:00–22:00 demand" — the demand this offer answers, shown under the label. */
|
|
24
|
+
covers: string;
|
|
24
25
|
title: string;
|
|
25
26
|
}
|
|
26
27
|
/** The "+ Add" quick-pick popover on an employee's empty cell — ported from the mockup's
|
|
@@ -35,15 +36,21 @@ export interface ScheduleAddPickSuggestion {
|
|
|
35
36
|
export declare function useScheduleAddPick(board: ScheduleBoardApi, demand: ScheduleDemandApi, handlers: {
|
|
36
37
|
onCommitted: (message: string) => void;
|
|
37
38
|
onOpenFullEditor: (empId: number, dayIdx: number) => void;
|
|
39
|
+
/** The leave editor, on this cell. `reason` is the row's own type, or null for the plain "Leave" row. */
|
|
40
|
+
onOpenLeave: (empId: number, dayIdx: number, reason: string | null) => void;
|
|
38
41
|
}): {
|
|
39
42
|
state: {
|
|
40
43
|
open: boolean;
|
|
41
44
|
empId: number | null;
|
|
42
45
|
dayIdx: number | null;
|
|
46
|
+
anchor: {
|
|
47
|
+
left: number;
|
|
48
|
+
right: number;
|
|
49
|
+
top: number;
|
|
50
|
+
bottom: number;
|
|
51
|
+
} | null;
|
|
43
52
|
left: number;
|
|
44
53
|
top: number;
|
|
45
|
-
bottom: number;
|
|
46
|
-
openAbove: boolean;
|
|
47
54
|
};
|
|
48
55
|
query: import("vue").Ref<string, string>;
|
|
49
56
|
parsedRange: import("vue").ComputedRef<{
|
|
@@ -51,6 +51,11 @@ export interface ScheduleAssignGroup {
|
|
|
51
51
|
export interface ScheduleAssignSlot {
|
|
52
52
|
key: string;
|
|
53
53
|
position: string;
|
|
54
|
+
/** One requirement of a demand gap: shows whether the people scheduled fulfil it (progress bar),
|
|
55
|
+
* and can be picked to assign people as that position. */
|
|
56
|
+
tracker?: boolean;
|
|
57
|
+
/** 0–100, for a tracker's progress bar. */
|
|
58
|
+
pct?: number;
|
|
54
59
|
start: string;
|
|
55
60
|
end: string;
|
|
56
61
|
chip: string;
|
|
@@ -98,14 +103,18 @@ export declare function useScheduleAssign(board: ScheduleBoardApi, demand: Sched
|
|
|
98
103
|
breakMins?: number | undefined;
|
|
99
104
|
} | null>;
|
|
100
105
|
title: import("vue").ComputedRef<string>;
|
|
101
|
-
|
|
106
|
+
subParts: import("vue").ComputedRef<{
|
|
107
|
+
position: string;
|
|
108
|
+
range: string;
|
|
109
|
+
duration: string;
|
|
110
|
+
} | null>;
|
|
102
111
|
footLead: import("vue").ComputedRef<string>;
|
|
103
112
|
footRest: import("vue").ComputedRef<string>;
|
|
104
113
|
groups: import("vue").ComputedRef<ScheduleAssignGroup[]>;
|
|
105
114
|
shiftSlots: import("vue").ComputedRef<ScheduleAssignSlot[]>;
|
|
106
115
|
switchTo: (slot: ScheduleAssignSlot) => void;
|
|
107
116
|
openFor: (openShiftId: number) => void;
|
|
108
|
-
openForGap: (dayIdx: number,
|
|
117
|
+
openForGap: (dayIdx: number, _position: string, start: string, end: string, required: number, scheduled: number, gapFrom: number, gapTo: number) => void;
|
|
109
118
|
close: () => void;
|
|
110
119
|
fillOpenShift: (openShiftId: number, empId: number) => void;
|
|
111
120
|
armAssign: (empId: number) => void;
|
|
@@ -7,6 +7,11 @@ export interface ScheduleAutoScheduleOptions {
|
|
|
7
7
|
fillGaps: boolean;
|
|
8
8
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
9
9
|
allowOvertime: boolean;
|
|
10
|
+
/** Shown as preferences in the dialog but not sent: the generator takes no input for them yet
|
|
11
|
+
* (availability and time off are always respected; patterns and cost ride on the objective). */
|
|
12
|
+
respectAvailability: boolean;
|
|
13
|
+
followPatterns: boolean;
|
|
14
|
+
costEfficient: boolean;
|
|
10
15
|
}
|
|
11
16
|
/** Backend-powered draft generation and local proposal review. Generation never writes;
|
|
12
17
|
* accepted proposals use the board's existing assignment persistence path. */
|
|
@@ -17,6 +22,9 @@ export declare function useScheduleAutoSchedule(board: ScheduleBoardApi, demand:
|
|
|
17
22
|
fillGaps: boolean;
|
|
18
23
|
objective: FdtoScheduleAutoScheduleObjective;
|
|
19
24
|
allowOvertime: boolean;
|
|
25
|
+
respectAvailability: boolean;
|
|
26
|
+
followPatterns: boolean;
|
|
27
|
+
costEfficient: boolean;
|
|
20
28
|
};
|
|
21
29
|
generating: import("vue").Ref<boolean, boolean>;
|
|
22
30
|
generateError: import("vue").Ref<string | null, string | null>;
|
|
@@ -56,6 +56,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
56
56
|
reason: string;
|
|
57
57
|
half?: boolean | undefined;
|
|
58
58
|
halfPart?: "AM" | "PM" | undefined;
|
|
59
|
+
from?: string | undefined;
|
|
60
|
+
to?: string | undefined;
|
|
59
61
|
appliedOn?: string | undefined;
|
|
60
62
|
note?: string | undefined;
|
|
61
63
|
cert?: {
|
|
@@ -98,6 +100,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
98
100
|
payAmount?: number | undefined;
|
|
99
101
|
maxHours?: number | undefined;
|
|
100
102
|
maxOtHours?: number | undefined;
|
|
103
|
+
minHours?: number | undefined;
|
|
101
104
|
otAfterDaily?: number | undefined;
|
|
102
105
|
preferences?: string[] | undefined;
|
|
103
106
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
@@ -139,6 +142,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
139
142
|
reason: string;
|
|
140
143
|
half?: boolean | undefined;
|
|
141
144
|
halfPart?: "AM" | "PM" | undefined;
|
|
145
|
+
from?: string | undefined;
|
|
146
|
+
to?: string | undefined;
|
|
142
147
|
appliedOn?: string | undefined;
|
|
143
148
|
note?: string | undefined;
|
|
144
149
|
cert?: {
|
|
@@ -181,6 +186,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
181
186
|
payAmount?: number | undefined;
|
|
182
187
|
maxHours?: number | undefined;
|
|
183
188
|
maxOtHours?: number | undefined;
|
|
189
|
+
minHours?: number | undefined;
|
|
184
190
|
otAfterDaily?: number | undefined;
|
|
185
191
|
preferences?: string[] | undefined;
|
|
186
192
|
seniority?: "senior" | "junior" | "" | undefined;
|
|
@@ -228,6 +234,7 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
228
234
|
end: string;
|
|
229
235
|
breakMins?: number | undefined;
|
|
230
236
|
}[]>;
|
|
237
|
+
highlightEmpId: import("vue").Ref<number | null, number | null>;
|
|
231
238
|
rangeStart: import("vue").Ref<Date, Date>;
|
|
232
239
|
weekOffset: import("vue").ComputedRef<number>;
|
|
233
240
|
peekWeek: (offset: number) => import("./schedule-week-cache").WeekBucket;
|
|
@@ -283,6 +290,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
283
290
|
reason: string;
|
|
284
291
|
half?: boolean | undefined;
|
|
285
292
|
halfPart?: "AM" | "PM" | undefined;
|
|
293
|
+
from?: string | undefined;
|
|
294
|
+
to?: string | undefined;
|
|
286
295
|
appliedOn?: string | undefined;
|
|
287
296
|
note?: string | undefined;
|
|
288
297
|
cert?: {
|
|
@@ -342,6 +351,8 @@ export declare function useScheduleBoard(handlers?: {
|
|
|
342
351
|
reason: string;
|
|
343
352
|
half?: boolean | undefined;
|
|
344
353
|
halfPart?: "AM" | "PM" | undefined;
|
|
354
|
+
from?: string | undefined;
|
|
355
|
+
to?: string | undefined;
|
|
345
356
|
appliedOn?: string | undefined;
|
|
346
357
|
note?: string | undefined;
|
|
347
358
|
cert?: {
|
|
@@ -41,11 +41,6 @@ export interface ScheduleHourCell {
|
|
|
41
41
|
title: string;
|
|
42
42
|
n: number;
|
|
43
43
|
}
|
|
44
|
-
/** The day's hourly timeline (rows with shift bars placed by time), replacing the multi-day
|
|
45
|
-
* grid for the one day Daily view is looking at. Ported from the mockup's
|
|
46
|
-
* renderDayTimeline() + renderHourFooter() — the `else` (area) branch groups rows by position
|
|
47
|
-
* instead of by employee, reusing the same axis/bar/lane geometry. Auto-Schedule proposal
|
|
48
|
-
* review isn't carried over here; it stays week-view-only for now. */
|
|
49
44
|
export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
|
|
50
45
|
onAddShift: (empId: number, dayIdx: number) => void;
|
|
51
46
|
onEditShift: (empId: number, dayIdx: number) => void;
|
|
@@ -8,8 +8,7 @@ export declare function spanOf(start: string, end: string): [number, number];
|
|
|
8
8
|
/** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
|
|
9
9
|
* middle of one does not. */
|
|
10
10
|
export declare function t12(hhmm: string): string;
|
|
11
|
-
/** The
|
|
12
|
-
* for the hour and not for the meridiem spelled out. */
|
|
11
|
+
/** The timeline's two end labels — "8am", "10:30pm", meridiem spelled out. */
|
|
13
12
|
export declare function minToShort(m: number): string;
|
|
14
13
|
export declare function rangeText(from: number, to: number): string;
|
|
15
14
|
export declare function roleTotalOf(p: DemandPeriod): number;
|
|
@@ -41,8 +40,11 @@ export declare function useScheduleDemand(board: ScheduleBoardApi): {
|
|
|
41
40
|
setWeekdayDemand: (weekday: number, periods: DemandPeriod[]) => void;
|
|
42
41
|
coverageAxis: (dayIdx: number) => ScheduleCoverageAxis;
|
|
43
42
|
coverageSegments: (dayIdx: number) => CoverageSegment[];
|
|
44
|
-
coverageImpact: (dayIdx: number, empId: number, slot: DaySlot) => {
|
|
43
|
+
coverageImpact: (dayIdx: number, empId: number | null, slot: DaySlot) => {
|
|
45
44
|
when: string;
|
|
45
|
+
pctBefore: number;
|
|
46
|
+
pctAfter: number;
|
|
47
|
+
stillShort: number;
|
|
46
48
|
before: {
|
|
47
49
|
required: number;
|
|
48
50
|
scheduled: number;
|
|
@@ -9,6 +9,9 @@ export interface ScheduleDemandSheetOptions {
|
|
|
9
9
|
onToast?: (message: string) => void;
|
|
10
10
|
/** Positions the breakdown can name — the same list the shift editor offers. */
|
|
11
11
|
positionOptions: () => string[];
|
|
12
|
+
/** Called instead of a toast when "+ Position breakdown" is pressed and there is no position
|
|
13
|
+
* to name yet — the page opens its Add Position popup for that period. */
|
|
14
|
+
onNeedPosition?: (periodIdx: number, roleIdx: number) => void;
|
|
12
15
|
}
|
|
13
16
|
/** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
|
|
14
17
|
* real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
|
|
@@ -41,7 +44,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
41
44
|
sub: string;
|
|
42
45
|
} | {
|
|
43
46
|
on: boolean;
|
|
44
|
-
key: "
|
|
47
|
+
key: "every";
|
|
45
48
|
label: string;
|
|
46
49
|
sub: string;
|
|
47
50
|
} | {
|
|
@@ -70,6 +73,8 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
70
73
|
removePeriod: (i: number) => void;
|
|
71
74
|
setHeads: (i: number, value: number | string) => void;
|
|
72
75
|
addRole: (i: number) => void;
|
|
76
|
+
addRoleNamed: (i: number, position: string) => void;
|
|
77
|
+
requestNewPosition: (i: number, k: number) => void;
|
|
73
78
|
removeRole: (i: number, k: number) => void;
|
|
74
79
|
setRoleCount: (i: number, k: number, value: number | string) => void;
|
|
75
80
|
setRolePosition: (i: number, k: number, position: string) => void;
|
|
@@ -78,6 +83,7 @@ export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand:
|
|
|
78
83
|
when: string;
|
|
79
84
|
required: number;
|
|
80
85
|
scheduled: number;
|
|
86
|
+
varies: boolean;
|
|
81
87
|
pct: number;
|
|
82
88
|
tone: "short" | "part" | "met" | "over";
|
|
83
89
|
note: string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ScheduleBoardApi } from './useScheduleBoard';
|
|
2
|
+
import type { ScheduleAnchorRect } from './schedule-popover-position';
|
|
3
|
+
export type ScheduleEmployeeMenuAction = 'profile' | 'edit' | 'hl' | 'remove';
|
|
4
|
+
export interface ScheduleEmployeeMenuState {
|
|
5
|
+
open: boolean;
|
|
6
|
+
empId: number | null;
|
|
7
|
+
anchor: ScheduleAnchorRect | null;
|
|
8
|
+
left: number;
|
|
9
|
+
top: number;
|
|
10
|
+
}
|
|
11
|
+
/** The ⋯ menu on a team member's row — V6.2's #empMenu: profile, update, highlight, remove. The actions that need a page-level surface (profile panel,
|
|
12
|
+
* edit wizard, confirm dialog) come in as handlers; highlight lives here. */
|
|
13
|
+
export declare function useScheduleEmployeeMenu(board: ScheduleBoardApi, handlers: {
|
|
14
|
+
onProfile: (empId: number) => void;
|
|
15
|
+
onEdit: (empId: number) => void;
|
|
16
|
+
onRemove: (empId: number) => void;
|
|
17
|
+
}): {
|
|
18
|
+
state: {
|
|
19
|
+
open: boolean;
|
|
20
|
+
empId: number | null;
|
|
21
|
+
anchor: {
|
|
22
|
+
left: number;
|
|
23
|
+
right: number;
|
|
24
|
+
top: number;
|
|
25
|
+
bottom: number;
|
|
26
|
+
} | null;
|
|
27
|
+
left: number;
|
|
28
|
+
top: number;
|
|
29
|
+
};
|
|
30
|
+
employee: import("vue").ComputedRef<import("../types").Employee | undefined>;
|
|
31
|
+
openFor: (empId: number, anchor: HTMLElement) => void;
|
|
32
|
+
close: () => void;
|
|
33
|
+
go: (action: ScheduleEmployeeMenuAction) => void;
|
|
34
|
+
};
|
|
35
|
+
export type ScheduleEmployeeMenuApi = ReturnType<typeof useScheduleEmployeeMenu>;
|