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

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 (152) hide show
  1. package/dist/{ApprovalCodeList-D0B_X3Sf.js → ApprovalCodeList-DqR6ouRS.js} +4 -4
  2. package/dist/{AuditLogList-D9anf4YQ.js → AuditLogList-CG2BiQX6.js} +17 -18
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-4oENMRO3.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-C7nMXx8R.js} +2 -2
  4. package/dist/{EmployeeList-DREDu3Ou.js → EmployeeList-CGZzol7v.js} +27 -29
  5. package/dist/{FormItem.vue_vue_type_script_setup_true_lang-CUnlKsxk.js → FormItem.vue_vue_type_script_setup_true_lang-DPT2FoIc.js} +1 -1
  6. package/dist/{GrantUserList-CLDshEN9.js → GrantUserList-D1fBv1KQ.js} +5 -5
  7. package/dist/{Main-lqlb8tPw.js → Main-BOt-Y1wv.js} +9 -9
  8. package/dist/{Main-QhQxU593.js → Main-CFoZot3K.js} +5 -5
  9. package/dist/{Main-DtMaG42L.js → Main-zg7fbEtx.js} +2 -2
  10. package/dist/{PermissionSetList-BK8yBpJJ.js → PermissionSetList-bJpwD62u.js} +10 -11
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-uSdvH81B.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C4C8Cvf4.js} +911 -912
  12. package/dist/{RoleList-D6AX6BqB.js → RoleList-DUVZ7dkO.js} +7 -7
  13. package/dist/SelectFilter-ATOm0hdn.js +269 -0
  14. package/dist/{TeamMemberList-BM5JoR6J.js → TeamMemberList-DAnM-DSd.js} +34 -36
  15. package/dist/{TimesheetList-Ch_f_PD5.js → TimesheetList-5sdcWjEf.js} +53 -54
  16. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-CxqxqwyD.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-GhPw_mCW.js} +2 -2
  17. package/dist/{app-tDHL6k4G.js → app-D-cQzgkr.js} +2299 -2884
  18. package/dist/app.js +1 -1
  19. package/dist/{dayjs.min-B_XWc0Hu.js → dayjs.min-DqFS0ebn.js} +1 -1
  20. package/dist/employee-DvvnCQMK.js +204 -0
  21. package/dist/{index-jxRluZiW.js → iteration-BjW8Cs9e.js} +726 -698
  22. package/dist/{lodash-D5vM3paU.js → lodash-wjhSWqez.js} +1 -1
  23. package/dist/{role-7ccipEEe.js → role-CEUcSmA6.js} +3 -4
  24. package/dist/{rule-7faruCdz.js → rule-Df8LOhxm.js} +70 -71
  25. package/dist/src/router/shared.d.ts +1 -4
  26. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +2 -2
  27. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +2 -2
  28. package/dist/style.css +1 -1
  29. package/dist/tsconfig.app.tsbuildinfo +1 -1
  30. package/dist/{useReportPermissions-FieO4EAD.js → useReportPermissions-4wm7pJcK.js} +3 -3
  31. package/package.json +1 -1
  32. package/dist/ScheduleGeneralPage-DAECTCDu.js +0 -242
  33. package/dist/SchedulePage-CdFR7JuO.js +0 -10751
  34. package/dist/SchedulePositionPage-DTtKg0sx.js +0 -220
  35. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-BiuUrr50.js +0 -199
  36. package/dist/SelectFilter-CG13h83-.js +0 -264
  37. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +0 -9
  38. package/dist/employee-Bs_2vqBY.js +0 -139
  39. package/dist/index-Cz2b95YF.js +0 -70
  40. package/dist/iteration-CcXrOMQe.js +0 -30
  41. package/dist/src/api/schedule/index.d.ts +0 -44
  42. package/dist/src/components/layout/AppSidebar.vue.d.ts +0 -2
  43. package/dist/src/components/layout/PortalShell.vue.d.ts +0 -12
  44. package/dist/src/components/layout/withShell.d.ts +0 -14
  45. package/dist/src/types/schedule.d.ts +0 -232
  46. package/dist/src/views/scheduling/ScheduleGeneralPage.vue.d.ts +0 -4
  47. package/dist/src/views/scheduling/SchedulePage.vue.d.ts +0 -4
  48. package/dist/src/views/scheduling/SchedulePositionPage.vue.d.ts +0 -4
  49. package/dist/src/views/scheduling/components/ScheduleAddEmployeeIdentitySection.vue.d.ts +0 -6
  50. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModal.vue.d.ts +0 -6
  51. package/dist/src/views/scheduling/components/ScheduleAddEmployeeModeStep.vue.d.ts +0 -6
  52. package/dist/src/views/scheduling/components/ScheduleAddEmployeePosAccessSection.vue.d.ts +0 -6
  53. package/dist/src/views/scheduling/components/ScheduleAddEmployeePositionsSection.vue.d.ts +0 -6
  54. package/dist/src/views/scheduling/components/ScheduleAddEmployeeSchedulingSection.vue.d.ts +0 -6
  55. package/dist/src/views/scheduling/components/ScheduleAddPickPopover.vue.d.ts +0 -6
  56. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  57. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -34
  58. package/dist/src/views/scheduling/components/ScheduleAssignEmployeePopover.vue.d.ts +0 -6
  59. package/dist/src/views/scheduling/components/ScheduleAutoScheduleModal.vue.d.ts +0 -6
  60. package/dist/src/views/scheduling/components/ScheduleChangeEmployeeModal.vue.d.ts +0 -8
  61. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +0 -24
  62. package/dist/src/views/scheduling/components/ScheduleCostRail.vue.d.ts +0 -8
  63. package/dist/src/views/scheduling/components/ScheduleDateRangePopover.vue.d.ts +0 -6
  64. package/dist/src/views/scheduling/components/ScheduleDayNotePopover.vue.d.ts +0 -6
  65. package/dist/src/views/scheduling/components/ScheduleDayTimeline.vue.d.ts +0 -12
  66. package/dist/src/views/scheduling/components/ScheduleDemandRow.vue.d.ts +0 -23
  67. package/dist/src/views/scheduling/components/ScheduleDemandSheet.vue.d.ts +0 -10
  68. package/dist/src/views/scheduling/components/ScheduleDotsIcon.vue.d.ts +0 -2
  69. package/dist/src/views/scheduling/components/ScheduleEmployeeDetailPanel.vue.d.ts +0 -12
  70. package/dist/src/views/scheduling/components/ScheduleEmployeeIdentity.vue.d.ts +0 -17
  71. package/dist/src/views/scheduling/components/ScheduleFilterBar.vue.d.ts +0 -18
  72. package/dist/src/views/scheduling/components/ScheduleGapPopover.vue.d.ts +0 -6
  73. package/dist/src/views/scheduling/components/ScheduleGridHeader.vue.d.ts +0 -18
  74. package/dist/src/views/scheduling/components/ScheduleLeaveEditModal.vue.d.ts +0 -6
  75. package/dist/src/views/scheduling/components/ScheduleLegendBar.vue.d.ts +0 -6
  76. package/dist/src/views/scheduling/components/ScheduleOnboardingWelcome.vue.d.ts +0 -12
  77. package/dist/src/views/scheduling/components/ScheduleOnboardingWizard.vue.d.ts +0 -6
  78. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  79. package/dist/src/views/scheduling/components/SchedulePdfPreview.vue.d.ts +0 -6
  80. package/dist/src/views/scheduling/components/SchedulePublishModal.vue.d.ts +0 -8
  81. package/dist/src/views/scheduling/components/ScheduleReviewBar.vue.d.ts +0 -12
  82. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +0 -24
  83. package/dist/src/views/scheduling/components/ScheduleSelectExistingEmployeeModal.vue.d.ts +0 -6
  84. package/dist/src/views/scheduling/components/ScheduleShiftCardMenu.vue.d.ts +0 -12
  85. package/dist/src/views/scheduling/components/ScheduleShiftCell.vue.d.ts +0 -31
  86. package/dist/src/views/scheduling/components/ScheduleShiftHeadcountEditor.vue.d.ts +0 -6
  87. package/dist/src/views/scheduling/components/ScheduleShiftImpact.vue.d.ts +0 -6
  88. package/dist/src/views/scheduling/components/ScheduleShiftMoreOptions.vue.d.ts +0 -6
  89. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +0 -14
  90. package/dist/src/views/scheduling/components/ScheduleShiftRepeatDaysRow.vue.d.ts +0 -8
  91. package/dist/src/views/scheduling/components/ScheduleShiftSegmentsEditor.vue.d.ts +0 -8
  92. package/dist/src/views/scheduling/components/ScheduleShiftWhoPicker.vue.d.ts +0 -25
  93. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  94. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +0 -16
  95. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +0 -54
  96. package/dist/src/views/scheduling/components/ScheduleStatsRow.vue.d.ts +0 -12
  97. package/dist/src/views/scheduling/components/ScheduleSwapShiftsModal.vue.d.ts +0 -8
  98. package/dist/src/views/scheduling/components/ScheduleTimePickerPopover.vue.d.ts +0 -6
  99. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +0 -22
  100. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +0 -67
  101. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +0 -38
  102. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +0 -29
  103. package/dist/src/views/scheduling/composables/schedule-employee-profile.d.ts +0 -7
  104. package/dist/src/views/scheduling/composables/schedule-shift-time.d.ts +0 -14
  105. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +0 -10
  106. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +0 -86
  107. package/dist/src/views/scheduling/composables/useScheduleAddPick.d.ts +0 -66
  108. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  109. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -50
  110. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +0 -18
  111. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -113
  112. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +0 -136
  113. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +0 -415
  114. package/dist/src/views/scheduling/composables/useScheduleCellState.d.ts +0 -27
  115. package/dist/src/views/scheduling/composables/useScheduleClashDetection.d.ts +0 -18
  116. package/dist/src/views/scheduling/composables/useScheduleCopyWeek.d.ts +0 -17
  117. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +0 -43
  118. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +0 -48
  119. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -82
  120. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +0 -68
  121. package/dist/src/views/scheduling/composables/useScheduleDemandRow.d.ts +0 -45
  122. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +0 -139
  123. package/dist/src/views/scheduling/composables/useScheduleDragDrop.d.ts +0 -22
  124. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +0 -32
  125. package/dist/src/views/scheduling/composables/useScheduleEmployeeProfile.d.ts +0 -16
  126. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +0 -26
  127. package/dist/src/views/scheduling/composables/useScheduleFilterBar.d.ts +0 -14
  128. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +0 -80
  129. package/dist/src/views/scheduling/composables/useScheduleLeave.d.ts +0 -20
  130. package/dist/src/views/scheduling/composables/useScheduleLegend.d.ts +0 -15
  131. package/dist/src/views/scheduling/composables/useScheduleLegendBar.d.ts +0 -35
  132. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +0 -179
  133. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  134. package/dist/src/views/scheduling/composables/useScheduleOutlet.d.ts +0 -19
  135. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +0 -32
  136. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +0 -91
  137. package/dist/src/views/scheduling/composables/useScheduleRangeCalendar.d.ts +0 -18
  138. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +0 -183
  139. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +0 -54
  140. package/dist/src/views/scheduling/composables/useScheduleSetupBanner.d.ts +0 -18
  141. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +0 -225
  142. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +0 -174
  143. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -20
  144. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +0 -25
  145. package/dist/src/views/scheduling/composables/useScheduleTimePicker.d.ts +0 -44
  146. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  147. package/dist/src/views/scheduling/data.d.ts +0 -105
  148. package/dist/src/views/scheduling/locales/index.d.ts +0 -496
  149. package/dist/src/views/scheduling/schedule-store.d.ts +0 -116
  150. package/dist/src/views/scheduling/types.d.ts +0 -311
  151. package/dist/useScheduleOutlet-CmIG5dwQ.js +0 -557
  152. package/dist/useSchedulePositions-DPVAgdB2.js +0 -103
@@ -1,48 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleDayNoteState {
3
- open: boolean;
4
- dayIdx: number | null;
5
- left: number;
6
- top: number;
7
- }
8
- export interface ScheduleDayNoteOptions {
9
- /** Toasts for the writes that happen on the spot — closing a day, repricing it, saving. */
10
- onToast?: (message: string) => void;
11
- }
12
- /** One decimal, always: "2×" reads as a count, and 1.5 beside a bare 2 in one sentence looks
13
- * like two different kinds of number. Ported from the mockup's fmtRate(). */
14
- export declare function fmtRate(rate: number): string;
15
- /** The date card editor — opened by clicking a day card or its pencil. Everything on it is a
16
- * fact about the DATE, applying to the whole column: a titled note, whether the venue opens,
17
- * and whether the day bills at the holiday rate. Ported from the mockup's openDayNote() /
18
- * saveDayNote() / dnToggleClosed() / dnToggleHoliday().
19
- *
20
- * The mockup re-renders the grid on the two toggles and rebuilds the popover from a stashed
21
- * draft so half-typed text survives; Vue re-renders in place, so the draft just stays in the
22
- * refs and there is nothing to stash. */
23
- export declare function useScheduleDayNote(board: ScheduleBoardApi, opts?: ScheduleDayNoteOptions): {
24
- state: {
25
- open: boolean;
26
- dayIdx: number | null;
27
- left: number;
28
- top: number;
29
- };
30
- dayIdx: import("vue").ComputedRef<number | null>;
31
- title: import("vue").Ref<string, string>;
32
- desc: import("vue").Ref<string, string>;
33
- savedNote: import("vue").ComputedRef<import("../types").ScheduleDayNote | null>;
34
- hasSaved: import("vue").ComputedRef<boolean>;
35
- whenLabel: import("vue").ComputedRef<string>;
36
- isClosed: import("vue").ComputedRef<boolean>;
37
- isAuto: import("vue").ComputedRef<boolean>;
38
- rateApplies: import("vue").ComputedRef<boolean>;
39
- closedHint: import("vue").ComputedRef<"Nothing is required or rostered on this date." | "The venue does not open — this date only.">;
40
- holidayHint: import("vue").ComputedRef<string>;
41
- openFor: (dayIdx: number, anchor: HTMLElement) => void;
42
- close: () => void;
43
- toggleClosed: () => void;
44
- toggleHoliday: () => void;
45
- save: () => void;
46
- remove: () => void;
47
- };
48
- export type ScheduleDayNoteApi = ReturnType<typeof useScheduleDayNote>;
@@ -1,82 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- import type { ScheduleRosterApi } from './useScheduleRoster';
3
- import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
4
- declare function minToHHMM(m: number): string;
5
- export interface ScheduleTimelineBar {
6
- key: string;
7
- left: number;
8
- width: number;
9
- cls: string;
10
- label: string;
11
- sub?: string;
12
- title: string;
13
- brk?: {
14
- left: number;
15
- width: number;
16
- };
17
- laneTop?: number;
18
- laneHeight?: number;
19
- onClick?: () => void;
20
- }
21
- export interface ScheduleTimelineRow {
22
- key: string;
23
- kind: 'open' | 'employee' | 'position';
24
- swatchColor?: string;
25
- swatchClass?: string;
26
- avatarInitials?: string;
27
- avatarColor?: string;
28
- name: string;
29
- sub: string;
30
- bars: ScheduleTimelineBar[];
31
- minHeight?: number;
32
- emptyText?: string;
33
- onTrackClick?: () => void;
34
- }
35
- export interface ScheduleHourCell {
36
- m: number;
37
- clock: string;
38
- open: boolean;
39
- state: '' | 'short' | 'met' | 'over';
40
- barHeightPct: number;
41
- title: string;
42
- n: number;
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
- export declare function useScheduleDayTimeline(board: ScheduleBoardApi, roster: ScheduleRosterApi, areaBoard: ScheduleAreaBoardApi, handlers: {
50
- onAddShift: (empId: number, dayIdx: number) => void;
51
- onEditShift: (empId: number, dayIdx: number) => void;
52
- onEditLeave: (empId: number, dayIdx: number) => void;
53
- onOpenAssign: (openId: number) => void;
54
- onAddAreaShift: (dayIdx: number, position: string) => void;
55
- }): {
56
- dayIdx: import("vue").ComputedRef<number>;
57
- axis: import("vue").ComputedRef<{
58
- from: number;
59
- to: number;
60
- span: number;
61
- }>;
62
- hours: import("vue").ComputedRef<{
63
- m: number;
64
- clock: string;
65
- }[]>;
66
- isOpenHour: (m: number) => boolean;
67
- openShiftsRow: import("vue").ComputedRef<ScheduleTimelineRow | null>;
68
- employeeRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
69
- positionTimelineRows: import("vue").ComputedRef<ScheduleTimelineRow[]>;
70
- footer: import("vue").ComputedRef<{
71
- cells: ScheduleHourCell[];
72
- staffCount: number;
73
- totalHours: number;
74
- totalWages: number;
75
- peakN: number;
76
- lowN: number;
77
- peakAt: number | undefined;
78
- }>;
79
- minToHHMM: typeof minToHHMM;
80
- };
81
- export type ScheduleDayTimelineApi = ReturnType<typeof useScheduleDayTimeline>;
82
- export {};
@@ -1,68 +0,0 @@
1
- import type { CoverageSegment, DaySlot, DemandPeriod } from '../types';
2
- import type { ScheduleBoardApi } from './useScheduleBoard';
3
- export declare function toMin(t: string): number;
4
- export declare function minToHHMM(m: number): string;
5
- /** Minutes from midnight for a start/end pair, with the end pushed past 1440 when it wraps —
6
- * so an overnight stretch stays one interval rather than two that cross zero. */
7
- export declare function spanOf(start: string, end: string): [number, number];
8
- /** 12-hour clock for prose — the sheet and the popovers read as sentences, and "16:00" in the
9
- * middle of one does not. */
10
- export declare function t12(hhmm: string): string;
11
- /** The terse form the timeline's two end labels use — "8a", "10:30p". At 8.5px there is room
12
- * for the hour and not for the meridiem spelled out. */
13
- export declare function minToShort(m: number): string;
14
- export declare function rangeText(from: number, to: number): string;
15
- export declare function roleTotalOf(p: DemandPeriod): number;
16
- /** The unnamed part of a period's headcount. Derived, never typed — so it cannot disagree with
17
- * the total above it. Negative means the breakdown has overrun that total. */
18
- export declare function anyLeftOf(p: DemandPeriod): number;
19
- export interface ScheduleCoverageAxis {
20
- from: number;
21
- to: number;
22
- }
23
- /** Staffing demand, and coverage read against it.
24
- *
25
- * Storage follows this board's dayNotes rather than the mockup's flat `di` index: the mockup
26
- * renders one long horizon so a day index identifies a date, but this board pages through
27
- * weeks, and demand put on this Monday must not reappear on every other Monday. So a date's
28
- * own demand is keyed by ISO date, and a standing weekday rule is keyed by weekday index.
29
- *
30
- * A date's own demand wins over the weekday rule it would otherwise inherit — "every Tuesday
31
- * needs eight" is a standing statement, and "this Tuesday is different" has to be able to
32
- * override it without rewriting the rule. */
33
- export declare function useScheduleDemand(board: ScheduleBoardApi): {
34
- byDate: Record<string, DemandPeriod[]>;
35
- byWeekday: Record<number, DemandPeriod[]>;
36
- demandFor: (dayIdx: number) => DemandPeriod[];
37
- hasDemandOn: (dayIdx: number) => boolean;
38
- demandIsOwn: (dayIdx: number) => boolean;
39
- setDateDemand: (dayIdx: number, periods: DemandPeriod[]) => void;
40
- clearDateDemand: (dayIdx: number) => void;
41
- setWeekdayDemand: (weekday: number, periods: DemandPeriod[]) => void;
42
- coverageAxis: (dayIdx: number) => ScheduleCoverageAxis;
43
- coverageSegments: (dayIdx: number) => CoverageSegment[];
44
- coverageImpact: (dayIdx: number, empId: number, slot: DaySlot) => {
45
- when: string;
46
- before: {
47
- required: number;
48
- scheduled: number;
49
- };
50
- after: {
51
- required: number;
52
- scheduled: number;
53
- };
54
- beforeSegs: CoverageSegment[];
55
- afterSegs: CoverageSegment[];
56
- axis: ScheduleCoverageAxis;
57
- } | null;
58
- coveragePct: (dayIdx: number) => number | null;
59
- shortSegs: (dayIdx: number) => CoverageSegment[];
60
- shortInRange: (dayIdx: number, start: string, end: string) => number;
61
- biggestGap: (dayIdx: number) => CoverageSegment | null;
62
- rangeSummary: import("vue").ComputedRef<{
63
- live: number;
64
- set: number;
65
- shortDays: number;
66
- }>;
67
- };
68
- export type ScheduleDemandApi = ReturnType<typeof useScheduleDemand>;
@@ -1,45 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- import type { ScheduleDemandApi } from './useScheduleDemand';
3
- export type ScheduleSegState = 'met' | 'short' | 'over' | 'nodem';
4
- export interface ScheduleDemandSeg {
5
- key: string;
6
- from: number;
7
- to: number;
8
- state: ScheduleSegState;
9
- /** Percentage of the day's axis this segment occupies — width means duration. */
10
- width: string;
11
- label: string;
12
- }
13
- export interface ScheduleDemandCell {
14
- dayIdx: number;
15
- closed: boolean;
16
- /** No demand stated on this day — the cell carries its own "+ Set demand" instead. */
17
- blank: boolean;
18
- pct: number;
19
- tone: '' | 'part' | 'short';
20
- segs: ScheduleDemandSeg[];
21
- hoursFrom: string;
22
- hoursTo: string;
23
- pctTitle: string;
24
- title: string;
25
- }
26
- /** What the coverage band draws, one cell per visible day.
27
- *
28
- * The percentage is the headline and the strip is the reason — a day can be 81% covered with
29
- * the missing fifth spread thinly or concentrated at six o'clock, and only one of those is a
30
- * problem you act on tonight. */
31
- export declare function useScheduleDemandRow(board: ScheduleBoardApi, demand: ScheduleDemandApi): {
32
- cellFor: (dayIdx: number) => ScheduleDemandCell;
33
- cells: import("vue").ComputedRef<{
34
- dayIdx: number;
35
- colIndex: number;
36
- cell: ScheduleDemandCell;
37
- }[]>;
38
- lead: import("vue").ComputedRef<{
39
- blank: boolean;
40
- name: string;
41
- meta: string;
42
- }>;
43
- dayTitle: (dayIdx: number) => string;
44
- };
45
- export type ScheduleDemandRowApi = ReturnType<typeof useScheduleDemandRow>;
@@ -1,139 +0,0 @@
1
- import type { DemandApplyMode, DemandPeriod } from '../types';
2
- import type { ScheduleBoardApi } from './useScheduleBoard';
3
- import type { ScheduleDemandApi } from './useScheduleDemand';
4
- export interface ScheduleDemandSuggestion {
5
- why: string;
6
- periods: DemandPeriod[];
7
- }
8
- export interface ScheduleDemandSheetOptions {
9
- onToast?: (message: string) => void;
10
- /** Positions the breakdown can name — the same list the shift editor offers. */
11
- positionOptions: () => string[];
12
- }
13
- /** The demand sheet — editing happens on a DRAFT, so Save is a real commit and closing is a
14
- * real cancel. The sheet also carries the recurrence choice, because "every Tuesday" is a
15
- * property of the statement being made rather than a second screen. */
16
- export declare function useScheduleDemandSheet(board: ScheduleBoardApi, demand: ScheduleDemandApi, opts: ScheduleDemandSheetOptions): {
17
- open: import("vue").Ref<boolean, boolean>;
18
- dayIdx: import("vue").Ref<number | null, number | null>;
19
- periods: import("vue").Ref<{
20
- from: string;
21
- to: string;
22
- n: number;
23
- roles?: {
24
- position: string;
25
- n: number;
26
- }[] | undefined;
27
- }[], DemandPeriod[] | {
28
- from: string;
29
- to: string;
30
- n: number;
31
- roles?: {
32
- position: string;
33
- n: number;
34
- }[] | undefined;
35
- }[]>;
36
- apply: import("vue").Ref<DemandApplyMode, DemandApplyMode>;
37
- applyOptions: import("vue").ComputedRef<({
38
- on: boolean;
39
- key: "day";
40
- label: string;
41
- sub: string;
42
- } | {
43
- on: boolean;
44
- key: "weekday";
45
- label: string;
46
- sub: string;
47
- } | {
48
- on: boolean;
49
- key: "weekdays";
50
- label: string;
51
- sub: string;
52
- } | {
53
- on: boolean;
54
- key: "custom";
55
- label: string;
56
- sub: string;
57
- })[]>;
58
- weekdayButtons: import("vue").ComputedRef<{
59
- i: number;
60
- label: string;
61
- on: boolean;
62
- }[]>;
63
- toggleCustomDay: (i: number) => void;
64
- applyNote: import("vue").ComputedRef<string>;
65
- overlapWarning: import("vue").ComputedRef<string>;
66
- whenLabel: import("vue").ComputedRef<string>;
67
- openFor: (idx: number) => void;
68
- close: () => void;
69
- addPeriod: () => void;
70
- removePeriod: (i: number) => void;
71
- setHeads: (i: number, value: number | string) => void;
72
- addRole: (i: number) => void;
73
- removeRole: (i: number, k: number) => void;
74
- setRoleCount: (i: number, k: number, value: number | string) => void;
75
- setRolePosition: (i: number, k: number, position: string) => void;
76
- anyLeft: (p: DemandPeriod) => number;
77
- coverageRows: import("vue").ComputedRef<{
78
- when: string;
79
- required: number;
80
- scheduled: number;
81
- pct: number;
82
- tone: "short" | "part" | "met" | "over";
83
- note: string;
84
- }[]>;
85
- coverageTotal: import("vue").ComputedRef<{
86
- required: number;
87
- scheduled: number;
88
- pct: number;
89
- tone: "short" | "part" | "met" | "over";
90
- note: string;
91
- }>;
92
- saving: import("vue").Ref<boolean, boolean>;
93
- save: () => Promise<void>;
94
- suggestion: import("vue").Ref<{
95
- why: string;
96
- periods: {
97
- from: string;
98
- to: string;
99
- n: number;
100
- roles?: {
101
- position: string;
102
- n: number;
103
- }[] | undefined;
104
- }[];
105
- } | null, ScheduleDemandSuggestion | {
106
- why: string;
107
- periods: {
108
- from: string;
109
- to: string;
110
- n: number;
111
- roles?: {
112
- position: string;
113
- n: number;
114
- }[] | undefined;
115
- }[];
116
- } | null>;
117
- suggestionRows: import("vue").ComputedRef<{
118
- when: string;
119
- n: number;
120
- word: string;
121
- }[]>;
122
- suggest: () => void;
123
- acceptSuggestion: () => void;
124
- dismissSuggestion: () => void;
125
- canCopy: import("vue").ComputedRef<boolean>;
126
- copyOpen: import("vue").Ref<boolean, boolean>;
127
- copyPicks: Record<number, boolean>;
128
- copyRows: import("vue").ComputedRef<{
129
- dayIdx: number;
130
- label: string;
131
- sub: string;
132
- }[]>;
133
- copySub: import("vue").ComputedRef<string>;
134
- openCopy: () => void;
135
- closeCopy: () => void;
136
- confirmCopy: () => Promise<void>;
137
- setApply: (k: DemandApplyMode) => DemandApplyMode;
138
- };
139
- export type ScheduleDemandSheetApi = ReturnType<typeof useScheduleDemandSheet>;
@@ -1,22 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleDragPayload {
3
- empId: number;
4
- dayIdx: number;
5
- }
6
- /** Native HTML5 drag & drop for moving an existing shift card between employee/day cells.
7
- * The mockup's other drag source — a staff-rail row dragged onto an open shift — is an
8
- * area-view feature (`r.draggable = viewMode === 'area'` there); this board is employee-view
9
- * only, so that gesture doesn't exist here — filling an open shift goes through the Assign
10
- * popover (click) instead. */
11
- export declare function useScheduleDragDrop(board: ScheduleBoardApi): {
12
- dragging: import("vue").Ref<{
13
- empId: number;
14
- dayIdx: number;
15
- } | null, ScheduleDragPayload | {
16
- empId: number;
17
- dayIdx: number;
18
- } | null>;
19
- startShiftDrag: (empId: number, dayIdx: number, ev: DragEvent) => void;
20
- endDrag: () => void;
21
- dropOnCell: (targetEmpId: number, targetDayIdx: number) => void;
22
- };
@@ -1,32 +0,0 @@
1
- import type { Employee } from '../types';
2
- /** The one form every SMALL avatar wears — `.sc-av`, `.ch-av`, `.ap-av`, `.tl-av`, and the
3
- * shift editor's `.sp2-who-av`. A tint of the person's colour behind their own colour, never a
4
- * solid fill with white text: at 17–30px the initials are the only identifier, and knocking
5
- * them out to white on a saturated disc costs the contrast that makes them legible.
6
- *
7
- * None of those classes declare a background of their own, so they REQUIRE this — a bare
8
- * `<span class="sc-av">` renders as an invisible disc.
9
- *
10
- * The big identity avatars are the opposite case and take no inline style at all: `.emp-avatar`,
11
- * `.dp-emp-av` and `.pub-change-av` are neutral in CSS, because a name sits right beside them
12
- * and a filled disc would out-shout it. */
13
- export declare function avatarTint(color?: string | null): Record<string, string>;
14
- export interface ScheduleEmployeeLoad {
15
- emp: Employee;
16
- hours: number;
17
- cost: number;
18
- contract: number;
19
- partTime: boolean;
20
- /** Hours as a fraction of contract, capped at 1 — the load bar's width. */
21
- pct: number;
22
- barColor: string;
23
- otHours: number;
24
- }
25
- /** One person's load against their contract, derived from the shifts actually on the board
26
- * rather than from the stored `weekHours` field, so the bar can never disagree with the row
27
- * of cards beside it.
28
- *
29
- * The staff rail (area view) and the grid's name column (employee view) are the same list of
30
- * the same people; they used to be two pieces of markup reading two different numbers. This
31
- * is the single one — the mockup's own note on empIdentityHTML(). */
32
- export declare function employeeLoadOf(emp: Employee): ScheduleEmployeeLoad;
@@ -1,16 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleEmployeeProfileState {
3
- open: boolean;
4
- empId: number | null;
5
- }
6
- /** Employee profile side sheet — opened from the staff-rail row menu or by clicking
7
- * an employee's identity block. */
8
- export declare function useScheduleEmployeeProfile(board: ScheduleBoardApi): {
9
- state: {
10
- open: boolean;
11
- empId: number | null;
12
- };
13
- employee: import("vue").ComputedRef<import("../types").Employee | null>;
14
- openFor: (empId: number) => void;
15
- close: () => void;
16
- };
@@ -1,26 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ExportShiftCell {
3
- note: string;
4
- shifts: {
5
- when: string;
6
- pos: string;
7
- }[];
8
- }
9
- export interface ExportMatrix {
10
- head: string[];
11
- body: (string | ExportShiftCell)[][];
12
- foot: string[];
13
- }
14
- /** The mockup's Share/export feature (buildExportMatrix/exportPDF/exportJPG) — no external
15
- * PDF/canvas library anywhere in the mockup; PDF is an HTML preview handed to window.print(),
16
- * JPG is a hand-drawn Canvas 2D table converted with toBlob. */
17
- export declare function useScheduleExport(board: ScheduleBoardApi): {
18
- buildExportMatrix: () => ExportMatrix;
19
- pdfPreviewOpen: import("vue").Ref<boolean, boolean>;
20
- pdfHtml: import("vue").ComputedRef<string>;
21
- openPdfPreview: () => void;
22
- closePdfPreview: () => void;
23
- printNow: () => void;
24
- exportJpg: () => void;
25
- };
26
- export type ScheduleExportApi = ReturnType<typeof useScheduleExport>;
@@ -1,14 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export type ScheduleViewMode = 'area' | 'employee';
3
- export type ScheduleGranularity = 'day' | 'week';
4
- /** State for the filter-bar's mode/granularity selects. Granularity delegates straight to
5
- * the board, which owns the day/week grid state — both area and employee grouping combine
6
- * with either granularity. Outlet switching isn't modeled at all yet, so that control has
7
- * no state here; it's a static label in the component. */
8
- export declare function useScheduleFilterBar(board: ScheduleBoardApi): {
9
- mode: import("vue").Ref<ScheduleViewMode, ScheduleViewMode>;
10
- granularity: import("vue").Ref<import("./useScheduleBoard").ScheduleGranularity, import("./useScheduleBoard").ScheduleGranularity>;
11
- setMode: (value: ScheduleViewMode) => boolean;
12
- setGranularity: (value: ScheduleGranularity) => boolean;
13
- };
14
- export type ScheduleFilterBarApi = ReturnType<typeof useScheduleFilterBar>;
@@ -1,80 +0,0 @@
1
- import type { CoverageSegment } from '../types';
2
- import type { ScheduleBoardApi } from './useScheduleBoard';
3
- import type { ScheduleDemandApi } from './useScheduleDemand';
4
- import type { ScheduleAssignApi } from './useScheduleAssign';
5
- export interface ScheduleGapActions {
6
- /** Open the shift editor on a brand new shift for this day and these hours. */
7
- addShift: (dayIdx: number, position: string, start: string, end: string) => void;
8
- }
9
- export declare function useScheduleGapPopover(board: ScheduleBoardApi, demand: ScheduleDemandApi, assign: ScheduleAssignApi, actions: ScheduleGapActions): {
10
- state: {
11
- open: boolean;
12
- pinned: boolean;
13
- peek: boolean;
14
- wide: boolean;
15
- left: number;
16
- top: number;
17
- };
18
- ctx: import("vue").Ref<{
19
- from: number;
20
- to: number;
21
- required: number;
22
- scheduled: number;
23
- short: number;
24
- over: number;
25
- roles: {
26
- position: string;
27
- n: number;
28
- required: number;
29
- got: number;
30
- short: number;
31
- }[];
32
- anyReq: number;
33
- anyGot: number;
34
- none: boolean;
35
- dayIdx: number;
36
- } | null, (CoverageSegment & {
37
- dayIdx: number;
38
- }) | {
39
- from: number;
40
- to: number;
41
- required: number;
42
- scheduled: number;
43
- short: number;
44
- over: number;
45
- roles: {
46
- position: string;
47
- n: number;
48
- required: number;
49
- got: number;
50
- short: number;
51
- }[];
52
- anyReq: number;
53
- anyGot: number;
54
- none: boolean;
55
- dayIdx: number;
56
- } | null>;
57
- view: import("vue").ComputedRef<{
58
- when: string;
59
- day: string;
60
- none: boolean;
61
- required: number;
62
- scheduled: number;
63
- short: number;
64
- over: number;
65
- missing: {
66
- short: number;
67
- position: string;
68
- }[];
69
- missingNote: string;
70
- } | null>;
71
- segEnter: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
72
- segLeave: () => void;
73
- hold: () => void;
74
- segClick: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
75
- segFocus: (dayIdx: number, from: number, to: number, anchor: HTMLElement) => void;
76
- addShift: () => void;
77
- suggestStaffing: () => void;
78
- close: () => void;
79
- };
80
- export type ScheduleGapPopoverApi = ReturnType<typeof useScheduleGapPopover>;
@@ -1,20 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleLeaveState {
3
- open: boolean;
4
- empId: number | null;
5
- dayIdx: number | null;
6
- }
7
- /** Approve / reject / remove a leave record on a day — the mockup's leave editor modal. */
8
- export declare function useScheduleLeave(board: ScheduleBoardApi): {
9
- state: {
10
- open: boolean;
11
- empId: number | null;
12
- dayIdx: number | null;
13
- };
14
- activeSlot: import("vue").ComputedRef<import("../types").LeaveSlot | null>;
15
- openFor: (empId: number, dayIdx: number) => void;
16
- close: () => void;
17
- approve: () => void;
18
- reject: () => void;
19
- remove: () => void;
20
- };
@@ -1,15 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- export interface ScheduleCoverageBadge {
3
- position: string;
4
- required: number;
5
- scheduled: number;
6
- short: boolean;
7
- }
8
- /** Coverage badges for a day's header card — required vs. scheduled headcount per
9
- * position, from the single active shift template's coverage matrix. */
10
- export declare function useScheduleLegend(board: ScheduleBoardApi): {
11
- coveragePositions: import("vue").ComputedRef<string[]>;
12
- coverageForDay: (dayIdx: number) => ScheduleCoverageBadge[];
13
- dayIsShort: (dayIdx: number) => boolean;
14
- dayCardTitle: (dayIdx: number) => string;
15
- };
@@ -1,35 +0,0 @@
1
- import type { ScheduleBoardApi } from './useScheduleBoard';
2
- import type { ScheduleAreaBoardApi } from './useScheduleAreaBoard';
3
- export type ScheduleLegendKey = 'empty' | 'draft' | 'pub' | 'open' | 'warn' | 'ot' | 'leave';
4
- export interface ScheduleLegendItem {
5
- key: ScheduleLegendKey;
6
- count: number;
7
- label: string;
8
- /** The warnings figure is the one worth acting on, so it renders as a control that
9
- * cycles the grid through each conflict — see jumpToConflict(). */
10
- action: boolean;
11
- title?: string;
12
- }
13
- interface ScheduleConflictRef {
14
- empId: number;
15
- dayIdx: number;
16
- name: string;
17
- }
18
- export interface ScheduleLegendBarOptions {
19
- /** Toast for the conflict cycle — "Conflict 2 of 5 · Nadia, Wed". */
20
- onJump?: (message: string) => void;
21
- }
22
- /** The footer legend under the scheduler: every state a card can be in, counted off the
23
- * same records the grid renders. Ported from the mockup's renderLegend(). Every figure is
24
- * scoped to the days currently on screen, except warnings — which counts the whole week, so
25
- * the number stays stable while jumpToConflict() pages through days one at a time (the
26
- * mockup's conflictCount() is likewise whole-data rather than span-scoped).
27
- *
28
- * Distinct from useScheduleLegend, which is the day header's coverage badges. */
29
- export declare function useScheduleLegendBar(board: ScheduleBoardApi, areaBoard: ScheduleAreaBoardApi, opts?: ScheduleLegendBarOptions): {
30
- items: import("vue").ComputedRef<ScheduleLegendItem[]>;
31
- conflicts: import("vue").ComputedRef<ScheduleConflictRef[]>;
32
- jumpToConflict: () => void;
33
- };
34
- export type ScheduleLegendBarApi = ReturnType<typeof useScheduleLegendBar>;
35
- export {};