@feedmepos/mf-hrm-portal 2.3.0-dev → 2.3.0-dev.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/{ApprovalCodeList-cG0zmQVJ.js → ApprovalCodeList-Ce9BWzt9.js} +5 -5
  2. package/dist/{AuditLogList-BTifJhO1.js → AuditLogList-Cw7WN8K4.js} +4 -4
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-qr5TwLTK.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BuofBFPC.js} +2 -2
  4. package/dist/{EmployeeList-DzcMtxJ3.js → EmployeeList-B8qWPNvj.js} +25 -24
  5. package/dist/{GrantUserList-D5b7tJ8Y.js → GrantUserList-CgigJIPF.js} +6 -6
  6. package/dist/{Main-DFwdAWqn.js → Main-BfoVdxlY.js} +8 -8
  7. package/dist/{Main-B2r59IOW.js → Main-Cg2vC_cj.js} +5 -5
  8. package/dist/{Main-DkLBemi7.js → Main-D26pgKy1.js} +11 -11
  9. package/dist/{PermissionSetList-B80hrfMW.js → PermissionSetList-CbtDiF4k.js} +19 -18
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DW1oBTbb.js +4167 -0
  11. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-fe-Rdwn4.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-BVz6q3HE.js} +1 -1
  12. package/dist/ResponsiveContextMenu.vue_vue_type_script_setup_true_lang-mSJFKo7r.js +132 -0
  13. package/dist/{RoleList-DHO4JRKF.js → RoleList-D0I8mbyI.js} +21 -20
  14. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Ctwukt6o.js +492 -0
  15. package/dist/ScheduleGeneralPage-Kv4pnxCL.js +778 -0
  16. package/dist/ScheduleModal.vue_vue_type_script_setup_true_lang-CSA0aaqJ.js +2285 -0
  17. package/dist/SchedulePage-BMWd0bod.js +17942 -0
  18. package/dist/{SchedulePositionPage-C0hrO11d.js → SchedulePositionPage-5Xvx6Dk5.js} +66 -65
  19. package/dist/{TeamMemberList-CgFWLRBM.js → TeamMemberList-Bh7i5l16.js} +24 -23
  20. package/dist/{TimesheetList-Dp40G-0I.js → TimesheetList-BJKU-hnk.js} +7 -7
  21. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BFjrMhUG.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-MMWnb9bj.js} +3 -3
  22. package/dist/{app-CmBSTvaI.js → app-BDJ5qxhF.js} +678 -594
  23. package/dist/app.js +1 -1
  24. package/dist/{approval-code-C9DmR4Md.js → approval-code-DHsUgc4K.js} +1 -1
  25. package/dist/{dayjs.min-CfL2DQ3d.js → dayjs.min-BWM0vY4w.js} +1 -1
  26. package/dist/{employee-DQcHjoij.js → employee-bBSuAJUr.js} +29 -28
  27. package/dist/{grant-user-Bv-pJ9Wt.js → grant-user-qzKHFTro.js} +1 -1
  28. package/dist/{iteration-BlavheWG.js → iteration-Dg7VAkAn.js} +1 -1
  29. package/dist/{lodash-QerqayrJ.js → lodash-BknY3p4o.js} +1 -1
  30. package/dist/{restaurant-D7PEQjPY.js → restaurant-BbYRA_IT.js} +4 -3
  31. package/dist/{role-RM2YLO7n.js → role-BJnJnNd_.js} +2 -2
  32. package/dist/{rule-DjlvYIuP.js → rule-BEuOY7Wf.js} +3 -3
  33. package/dist/src/api/schedule/index.d.ts +8 -1
  34. package/dist/src/components/layout/withScheduleShell.d.ts +10 -0
  35. package/dist/src/composables/useDiscardConfirm.d.ts +3 -1
  36. package/dist/src/types/employee.d.ts +1 -0
  37. package/dist/src/types/schedule.d.ts +3 -4
  38. package/dist/src/views/scheduling/components/ScheduleAreaRows.vue.d.ts +0 -8
  39. package/dist/src/views/scheduling/components/ScheduleBoardAreaRows.vue.d.ts +23 -0
  40. package/dist/src/views/scheduling/components/ScheduleBoardEditOverlays.vue.d.ts +17 -0
  41. package/dist/src/views/scheduling/components/ScheduleBoardEmployeeRows.vue.d.ts +31 -0
  42. package/dist/src/views/scheduling/components/ScheduleBoardGridHeader.vue.d.ts +24 -0
  43. package/dist/src/views/scheduling/components/ScheduleBoardInteractionOverlays.vue.d.ts +32 -0
  44. package/dist/src/views/scheduling/components/ScheduleBoardOnboardingOverlays.vue.d.ts +25 -0
  45. package/dist/src/views/scheduling/components/ScheduleBoardRails.vue.d.ts +17 -0
  46. package/dist/src/views/scheduling/components/ScheduleBoardToolbar.vue.d.ts +38 -0
  47. package/dist/src/views/scheduling/components/ScheduleBoardUtilityOverlays.vue.d.ts +22 -0
  48. package/dist/src/views/scheduling/components/{ScheduleOnboardingComplete.vue.d.ts → ScheduleCompletionDialog.vue.d.ts} +8 -3
  49. package/dist/src/views/scheduling/components/ScheduleConfirmModal.vue.d.ts +2 -1
  50. package/dist/src/views/scheduling/components/{ScheduleShiftCardMenu.vue.d.ts → ScheduleContextMenu.vue.d.ts} +7 -2
  51. package/dist/src/views/scheduling/components/{SchedulePdfPreview.vue.d.ts → ScheduleExportPreview.vue.d.ts} +1 -0
  52. package/dist/src/views/scheduling/components/ScheduleLoadState.vue.d.ts +9 -0
  53. package/dist/src/views/scheduling/components/ScheduleModal.vue.d.ts +26 -0
  54. package/dist/src/views/scheduling/components/{ScheduleExportDoneDialog.vue.d.ts → ScheduleOnboardingAssignPositionModal.vue.d.ts} +2 -2
  55. package/dist/src/views/scheduling/components/{ScheduleAssignEmployeePopover.vue.d.ts → ScheduleOnboardingClosedDayConfirm.vue.d.ts} +2 -2
  56. package/dist/src/views/scheduling/components/{ScheduleEmployeeMenu.vue.d.ts → ScheduleOnboardingDemandDays.vue.d.ts} +2 -2
  57. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandFooter.vue.d.ts +6 -0
  58. package/dist/src/views/scheduling/components/ScheduleOnboardingDemandHeader.vue.d.ts +6 -0
  59. package/dist/src/views/scheduling/components/ScheduleOnboardingHoursProfileNotice.vue.d.ts +10 -0
  60. package/dist/src/views/scheduling/components/ScheduleOnboardingPositions.vue.d.ts +6 -0
  61. package/dist/src/views/scheduling/components/ScheduleOnboardingReview.vue.d.ts +6 -0
  62. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardFooter.vue.d.ts +6 -0
  63. package/dist/src/views/scheduling/components/ScheduleOnboardingWizardHeader.vue.d.ts +11 -0
  64. package/dist/src/views/scheduling/components/ScheduleSelect.vue.d.ts +17 -1
  65. package/dist/src/views/scheduling/components/ScheduleSetupBanner.vue.d.ts +12 -0
  66. package/dist/src/views/scheduling/components/ScheduleShiftPopover.vue.d.ts +2 -2
  67. package/dist/src/views/scheduling/components/ScheduleStaffRail.vue.d.ts +4 -4
  68. package/dist/src/views/scheduling/components/ScheduleStaffRows.vue.d.ts +2 -12
  69. package/dist/src/views/scheduling/components/ScheduleTopbar.vue.d.ts +3 -3
  70. package/dist/src/views/scheduling/composables/onboarding-types.d.ts +1 -1
  71. package/dist/src/views/scheduling/composables/remyPrompt.d.ts +13 -0
  72. package/dist/src/views/scheduling/composables/schedule-add-employee-form.d.ts +12 -8
  73. package/dist/src/views/scheduling/composables/schedule-board-helpers.d.ts +5 -1
  74. package/dist/src/views/scheduling/composables/schedule-breaks.d.ts +7 -1
  75. package/dist/src/views/scheduling/composables/schedule-calendar.d.ts +7 -0
  76. package/dist/src/views/scheduling/composables/schedule-cost.d.ts +19 -0
  77. package/dist/src/views/scheduling/composables/schedule-day-meta.d.ts +1 -3
  78. package/dist/src/views/scheduling/composables/schedule-demand-domain.d.ts +11 -0
  79. package/dist/src/views/scheduling/composables/schedule-export-matrix.d.ts +14 -0
  80. package/dist/src/views/scheduling/composables/schedule-time.d.ts +8 -0
  81. package/dist/src/views/scheduling/composables/schedule-week-cache.d.ts +1 -4
  82. package/dist/src/views/scheduling/composables/useRemyAppStore.d.ts +15 -0
  83. package/dist/src/views/scheduling/composables/useScheduleAddEmployee.d.ts +35 -21
  84. package/dist/src/views/scheduling/composables/useScheduleAreaBoard.d.ts +0 -13
  85. package/dist/src/views/scheduling/composables/useScheduleAreaDragDrop.d.ts +2 -8
  86. package/dist/src/views/scheduling/composables/useScheduleAssignmentMutations.d.ts +13 -0
  87. package/dist/src/views/scheduling/composables/useScheduleAutoSchedule.d.ts +3 -3
  88. package/dist/src/views/scheduling/composables/useScheduleBoard.d.ts +52 -11
  89. package/dist/src/views/scheduling/composables/useScheduleCloneOutletModal.d.ts +3 -1
  90. package/dist/src/views/scheduling/composables/useScheduleCostRail.d.ts +6 -1
  91. package/dist/src/views/scheduling/composables/useScheduleDayNote.d.ts +1 -2
  92. package/dist/src/views/scheduling/composables/useScheduleDayTimeline.d.ts +0 -3
  93. package/dist/src/views/scheduling/composables/useScheduleDemand.d.ts +7 -24
  94. package/dist/src/views/scheduling/composables/useScheduleDemandSheet.d.ts +26 -5
  95. package/dist/src/views/scheduling/composables/useScheduleEmployeeAccess.d.ts +16 -0
  96. package/dist/src/views/scheduling/composables/useScheduleEmployeeAvailability.d.ts +13 -0
  97. package/dist/src/views/scheduling/composables/useScheduleEmployeeCandidates.d.ts +27 -0
  98. package/dist/src/views/scheduling/composables/useScheduleEmployeeCompensation.d.ts +7 -0
  99. package/dist/src/views/scheduling/composables/useScheduleEmployeeForm.d.ts +22 -0
  100. package/dist/src/views/scheduling/composables/useScheduleEmployeeIdentity.d.ts +9 -0
  101. package/dist/src/views/scheduling/composables/useScheduleEmployeeMenu.d.ts +6 -3
  102. package/dist/src/views/scheduling/composables/useScheduleEmployeePersistence.d.ts +29 -0
  103. package/dist/src/views/scheduling/composables/useScheduleEmployeeValidation.d.ts +20 -0
  104. package/dist/src/views/scheduling/composables/useScheduleExport.d.ts +19 -11
  105. package/dist/src/views/scheduling/composables/useScheduleGapPopover.d.ts +5 -6
  106. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +58 -0
  107. package/dist/src/views/scheduling/composables/useScheduleOnboardingDemand.d.ts +45 -0
  108. package/dist/src/views/scheduling/composables/useScheduleOnboardingEmployees.d.ts +206 -0
  109. package/dist/src/views/scheduling/composables/useScheduleOnboardingHours.d.ts +15 -0
  110. package/dist/src/views/scheduling/composables/useScheduleOnboardingNavigation.d.ts +11 -0
  111. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +313 -529
  112. package/dist/src/views/scheduling/composables/useSchedulePageActions.d.ts +18 -0
  113. package/dist/src/views/scheduling/composables/useSchedulePageCellActions.d.ts +21 -0
  114. package/dist/src/views/scheduling/composables/useSchedulePageCellDrop.d.ts +18 -0
  115. package/dist/src/views/scheduling/composables/useSchedulePageEmployeeActions.d.ts +22 -0
  116. package/dist/src/views/scheduling/composables/useSchedulePageOverlays.d.ts +10 -7
  117. package/dist/src/views/scheduling/composables/useSchedulePdfExport.d.ts +19 -0
  118. package/dist/src/views/scheduling/composables/useSchedulePositionModal.d.ts +4 -1
  119. package/dist/src/views/scheduling/composables/useSchedulePositions.d.ts +4 -2
  120. package/dist/src/views/scheduling/composables/useSchedulePublish.d.ts +9 -1
  121. package/dist/src/views/scheduling/composables/useSchedulePublishPersistence.d.ts +11 -0
  122. package/dist/src/views/scheduling/composables/useScheduleRoster.d.ts +32 -4
  123. package/dist/src/views/scheduling/composables/useScheduleSettings.d.ts +8 -25
  124. package/dist/src/views/scheduling/composables/useScheduleShiftActions.d.ts +19 -3
  125. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +63 -0
  126. package/dist/src/views/scheduling/composables/useScheduleShiftPersistence.d.ts +17 -0
  127. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +31 -9
  128. package/dist/src/views/scheduling/composables/useScheduleStatsRow.d.ts +4 -1
  129. package/dist/src/views/scheduling/composables/useScheduleTour.d.ts +6 -4
  130. package/dist/src/views/scheduling/country-rules/index.d.ts +24 -0
  131. package/dist/src/views/scheduling/data.d.ts +16 -7
  132. package/dist/src/views/scheduling/locales/index.d.ts +80 -0
  133. package/dist/src/views/scheduling/schedule-constants.d.ts +7 -0
  134. package/dist/src/views/scheduling/schedule-state.d.ts +104 -16
  135. package/dist/src/views/scheduling/schedule-store.d.ts +30 -6
  136. package/dist/src/views/scheduling/types.d.ts +29 -5
  137. package/dist/style.css +1 -1
  138. package/dist/tsconfig.app.tsbuildinfo +1 -1
  139. package/dist/{useAppStore-d_nHyK5u.js → useAppStore-BoLkvkE2.js} +1 -1
  140. package/dist/useDiscardConfirm-CzZSPyvh.js +28 -0
  141. package/dist/{useLoading-JFoghhRz.js → useLoading-Ch1AUYT1.js} +1 -1
  142. package/dist/{useReportPermissions-Bl6Br79r.js → useReportPermissions-D8hJ5W0t.js} +3 -3
  143. package/package.json +2 -1
  144. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DjNcJQM9.js +0 -4167
  145. package/dist/ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-B-XtB64L.js +0 -452
  146. package/dist/ScheduleGeneralPage-WlBM8bxV.js +0 -629
  147. package/dist/SchedulePage-Nm0krGVU.js +0 -17056
  148. package/dist/ScheduleSelect.vue_vue_type_script_setup_true_lang-DTDXir_7.js +0 -1150
  149. package/dist/src/components/layout/withShell.d.ts +0 -14
  150. package/dist/src/views/scheduling/components/ScheduleAllShiftsRow.vue.d.ts +0 -22
  151. package/dist/src/views/scheduling/components/ScheduleOpenShiftCardMenu.vue.d.ts +0 -14
  152. package/dist/src/views/scheduling/components/ScheduleStackPopover.vue.d.ts +0 -14
  153. package/dist/src/views/scheduling/components/ScheduleTourAllSet.vue.d.ts +0 -6
  154. package/dist/src/views/scheduling/composables/useScheduleAllShiftsRow.d.ts +0 -77
  155. package/dist/src/views/scheduling/composables/useScheduleAssign.d.ts +0 -122
  156. package/dist/src/views/scheduling/composables/useScheduleOpenShiftCard.d.ts +0 -23
  157. package/dist/src/views/scheduling/composables/useScheduleStaffRail.d.ts +0 -17
  158. package/dist/src/views/scheduling/composables/useScheduleTopbar.d.ts +0 -10
  159. package/dist/useDiscardConfirm-DPhEV6v0.js +0 -157
  160. /package/dist/src/{components/layout/AppSidebar.vue.d.ts → views/scheduling/components/SchedulePublishShareArt.vue.d.ts} +0 -0
@@ -0,0 +1,778 @@
1
+ import { ref as w, reactive as W, computed as E, defineComponent as T, createBlock as I, openBlock as p, withCtx as b, createElementVNode as e, createVNode as k, createElementBlock as m, Fragment as L, createTextVNode as H, toDisplayString as h, withDirectives as f, vModelText as g, createCommentVNode as N, renderList as V, onMounted as B, unref as l, normalizeClass as U } from "vue";
2
+ import { useRouter as z } from "vue-router";
3
+ import { useSnackbar as Y } from "@feedmepos/ui-library";
4
+ import { R as q } from "./app-BDJ5qxhF.js";
5
+ import { b as v, o as M, M as A, g as G, aq as F, ao as x, as as j, at as J, ab as K, ap as Q } from "./ScheduleModal.vue_vue_type_script_setup_true_lang-CSA0aaqJ.js";
6
+ import "./iteration-Dg7VAkAn.js";
7
+ import { useCoreStore as X } from "@feedmepos/mf-common";
8
+ import "./employee-bBSuAJUr.js";
9
+ const Z = [
10
+ { key: "payrates", label: "Pay rates" },
11
+ { key: "overtime", label: "Overtime" },
12
+ { key: "workingHours", label: "Working hours" }
13
+ ];
14
+ function $() {
15
+ return structuredClone({
16
+ // RULES is reactive, so spreading each rate tier first gives structuredClone plain
17
+ // objects instead of Vue Proxy instances, which structuredClone cannot clone.
18
+ payRate: {
19
+ NORMAL: { ...v.payRate.NORMAL },
20
+ REST_DAY: { ...v.payRate.REST_DAY },
21
+ PUBLIC_HOLIDAY: { ...v.payRate.PUBLIC_HOLIDAY }
22
+ },
23
+ otCapHours: v.otCapHours,
24
+ workingHours: { ...v.workingHours }
25
+ });
26
+ }
27
+ function _() {
28
+ const r = X(), d = w(!1), a = w("payrates"), n = W($()), t = w(!1);
29
+ let u = 0;
30
+ async function C() {
31
+ if (!M.value) return;
32
+ const c = ++u, o = M.value;
33
+ t.value = !0;
34
+ try {
35
+ const s = await A.getSettings(o);
36
+ if (c !== u || M.value !== o) return;
37
+ const i = G(r.currentCountry.value);
38
+ v.payRate = structuredClone(s.settingsConfigured ? s.payRate : i.payRate), v.otCapHours = s.settingsConfigured ? s.overtime.maxHoursPerMonth : i.overtime.maxHoursPerMonth, v.workingHours = s.settingsConfigured ? structuredClone(s.workingHours) : {
39
+ minHoursPerDay: null,
40
+ maxHoursPerDay: i.workingHours.maxHoursPerDay,
41
+ maxHoursPerWeek: i.workingHours.maxHoursPerWeek
42
+ };
43
+ } finally {
44
+ c === u && (t.value = !1);
45
+ }
46
+ }
47
+ function y(c) {
48
+ Object.assign(n, $()), a.value = c ?? "payrates", d.value = !0;
49
+ }
50
+ const S = E(() => JSON.stringify(n) !== JSON.stringify($()));
51
+ function P() {
52
+ return S.value ? !1 : (d.value = !1, !0);
53
+ }
54
+ function D() {
55
+ Object.assign(n, $()), d.value = !1;
56
+ }
57
+ async function R() {
58
+ if (!M.value) throw new Error("No outlet selected");
59
+ const c = n.otCapHours === 0 ? null : n.otCapHours;
60
+ if (c != null && c <= 0)
61
+ throw new Error("Maximum monthly overtime hours must be greater than zero");
62
+ const o = {
63
+ minHoursPerDay: n.workingHours.minHoursPerDay === 0 ? null : n.workingHours.minHoursPerDay,
64
+ maxHoursPerDay: n.workingHours.maxHoursPerDay === 0 ? null : n.workingHours.maxHoursPerDay,
65
+ maxHoursPerWeek: n.workingHours.maxHoursPerWeek === 0 ? null : n.workingHours.maxHoursPerWeek
66
+ };
67
+ if (o.minHoursPerDay != null && o.maxHoursPerDay != null && o.minHoursPerDay > o.maxHoursPerDay)
68
+ throw new Error("Working-hour limits must be in ascending order");
69
+ if (o.maxHoursPerDay != null && o.maxHoursPerWeek != null && o.maxHoursPerDay > o.maxHoursPerWeek)
70
+ throw new Error("Working-hour limits must be in ascending order");
71
+ const s = await A.saveSettings(M.value, {
72
+ payRate: n.payRate,
73
+ overtime: { maxHoursPerMonth: c },
74
+ workingHours: o
75
+ });
76
+ v.payRate = structuredClone(s.payRate), v.otCapHours = s.overtime.maxHoursPerMonth, v.workingHours = structuredClone(s.workingHours), d.value = !1;
77
+ }
78
+ return { isOpen: d, activeSection: a, draft: n, dirty: S, loading: t, load: C, open: y, close: P, discard: D, save: R };
79
+ }
80
+ function ee(r, d = {}) {
81
+ const a = w(!1), n = w(""), t = w(/* @__PURE__ */ new Set()), u = w(!1), C = w(null), y = E(
82
+ () => {
83
+ var o;
84
+ return ((o = r.options.value.find((s) => s.value === r.outletId.value)) == null ? void 0 : o.label) ?? "";
85
+ }
86
+ ), S = E(() => {
87
+ const o = n.value.trim().toLowerCase();
88
+ return r.options.value.filter(
89
+ (s) => s.value !== r.outletId.value && (!o || s.label.toLowerCase().includes(o))
90
+ );
91
+ });
92
+ function P() {
93
+ n.value = "", t.value = /* @__PURE__ */ new Set(), u.value = !1, C.value = null, a.value = !0;
94
+ }
95
+ function D() {
96
+ a.value = !1;
97
+ }
98
+ function R(o) {
99
+ const s = new Set(t.value);
100
+ s.has(o) ? s.delete(o) : s.add(o), t.value = s;
101
+ }
102
+ async function c() {
103
+ var s, i;
104
+ const o = [...t.value];
105
+ if (!(!o.length || u.value)) {
106
+ u.value = !0;
107
+ try {
108
+ await Promise.all(
109
+ o.map(
110
+ (O) => A.saveSettings(O, {
111
+ payRate: v.payRate,
112
+ overtime: { maxHoursPerMonth: v.otCapHours },
113
+ workingHours: v.workingHours
114
+ })
115
+ )
116
+ ), C.value = o.length, (s = d.notify) == null || s.call(
117
+ d,
118
+ `Setup copied to ${o.length} outlet${o.length === 1 ? "" : "s"}`,
119
+ "success"
120
+ );
121
+ } catch (O) {
122
+ (i = d.notify) == null || i.call(
123
+ d,
124
+ O instanceof Error ? O.message : "Could not clone outlet setup",
125
+ "error"
126
+ );
127
+ } finally {
128
+ u.value = !1;
129
+ }
130
+ }
131
+ }
132
+ return {
133
+ open: a,
134
+ query: n,
135
+ selected: t,
136
+ saving: u,
137
+ done: C,
138
+ sourceLabel: y,
139
+ targets: S,
140
+ openModal: P,
141
+ close: D,
142
+ toggle: R,
143
+ confirm: c
144
+ };
145
+ }
146
+ const se = { class: "am-head" }, te = { class: "ce-body" }, ae = {
147
+ class: "ce-hint",
148
+ style: { "margin-bottom": "var(--fm-spacing-10)" }
149
+ }, oe = { class: "sch-search" }, le = { class: "asg-list" }, re = ["checked", "onChange"], ne = { class: "asg-id" }, ie = { class: "asg-nm" }, ue = {
150
+ key: 0,
151
+ class: "asg-empty"
152
+ }, de = {
153
+ key: 1,
154
+ class: "cg-done"
155
+ }, pe = { class: "cg-st-main" }, ve = { class: "am-foot" }, me = { class: "am-cost-preview" }, ce = { class: "am-foot-btns" }, ye = /* @__PURE__ */ T({
156
+ __name: "ScheduleCloneOutletModal",
157
+ props: {
158
+ modal: {}
159
+ },
160
+ setup(r) {
161
+ return (d, a) => (p(), I(F, {
162
+ open: r.modal.open.value,
163
+ "panel-class": "ce-modal",
164
+ "panel-style": "width: min(460px, 95vw)",
165
+ "labelled-by": "schedule-clone-title",
166
+ onClose: a[5] || (a[5] = (n) => r.modal.close())
167
+ }, {
168
+ default: b(() => [
169
+ e("div", se, [
170
+ a[7] || (a[7] = e("div", {
171
+ id: "schedule-clone-title",
172
+ class: "am-title"
173
+ }, "Clone outlet setup", -1)),
174
+ k(x, {
175
+ hierarchy: "ghost",
176
+ size: "xs",
177
+ "icon-only": "",
178
+ class: "ce-close-x",
179
+ type: "button",
180
+ "aria-label": "Close",
181
+ onClick: a[0] || (a[0] = (n) => r.modal.close())
182
+ }, {
183
+ default: b(() => [...a[6] || (a[6] = [
184
+ e("svg", {
185
+ width: "20",
186
+ height: "20",
187
+ viewBox: "0 0 20 20",
188
+ fill: "none",
189
+ stroke: "currentColor",
190
+ "stroke-width": "1.8",
191
+ "stroke-linecap": "round",
192
+ "aria-hidden": "true"
193
+ }, [
194
+ e("path", { d: "M5.5 5.5l9 9M14.5 5.5l-9 9" })
195
+ ], -1)
196
+ ])]),
197
+ _: 1
198
+ })
199
+ ]),
200
+ e("div", te, [
201
+ r.modal.done.value === null ? (p(), m(L, { key: 0 }, [
202
+ e("div", ae, [
203
+ a[8] || (a[8] = H(" Copy ", -1)),
204
+ e("b", null, h(r.modal.sourceLabel.value), 1),
205
+ a[9] || (a[9] = H("'s pay rates to: ", -1))
206
+ ]),
207
+ e("div", oe, [
208
+ a[10] || (a[10] = e("svg", {
209
+ width: "16",
210
+ height: "16",
211
+ viewBox: "0 0 16 16",
212
+ fill: "none",
213
+ "aria-hidden": "true"
214
+ }, [
215
+ e("circle", {
216
+ cx: "7",
217
+ cy: "7",
218
+ r: "4.5",
219
+ stroke: "currentColor",
220
+ "stroke-width": "1.5"
221
+ }),
222
+ e("path", {
223
+ d: "M10.5 10.5L14 14",
224
+ stroke: "currentColor",
225
+ "stroke-width": "1.5",
226
+ "stroke-linecap": "round"
227
+ })
228
+ ], -1)),
229
+ f(e("input", {
230
+ "onUpdate:modelValue": a[1] || (a[1] = (n) => r.modal.query.value = n),
231
+ type: "search",
232
+ placeholder: "Search outlets",
233
+ "aria-label": "Search outlets",
234
+ autocomplete: "off"
235
+ }, null, 512), [
236
+ [g, r.modal.query.value]
237
+ ])
238
+ ]),
239
+ e("div", le, [
240
+ (p(!0), m(L, null, V(r.modal.targets.value, (n) => (p(), m("label", {
241
+ key: n.value,
242
+ class: "asg-row"
243
+ }, [
244
+ e("input", {
245
+ type: "checkbox",
246
+ class: "sch-checkbox",
247
+ "data-platform": "desktop",
248
+ checked: r.modal.selected.value.has(n.value),
249
+ onChange: (t) => r.modal.toggle(n.value)
250
+ }, null, 40, re),
251
+ e("span", ne, [
252
+ e("span", ie, h(n.label), 1)
253
+ ])
254
+ ]))), 128)),
255
+ r.modal.targets.value.length ? N("", !0) : (p(), m("div", ue, h(r.modal.query.value ? "No outlet matches that search." : "No other outlets."), 1))
256
+ ]),
257
+ a[11] || (a[11] = e("div", {
258
+ class: "ce-hint",
259
+ style: { "margin-top": "var(--fm-spacing-10)" }
260
+ }, " Copies this outlet's pay rates to the outlets you tick. Their current pay rates are replaced. ", -1))
261
+ ], 64)) : (p(), m("div", de, [
262
+ a[13] || (a[13] = e("span", {
263
+ class: "cg-done-tick",
264
+ "aria-hidden": "true"
265
+ }, "✓", -1)),
266
+ e("div", pe, [
267
+ a[12] || (a[12] = e("b", null, "Pay rates copied", -1)),
268
+ e("small", null, "Sent to " + h(r.modal.done.value) + " outlet" + h(r.modal.done.value === 1 ? "" : "s"), 1)
269
+ ])
270
+ ]))
271
+ ]),
272
+ e("div", ve, [
273
+ e("div", me, h(r.modal.done.value === null && r.modal.selected.value.size ? `${r.modal.selected.value.size} outlet${r.modal.selected.value.size === 1 ? "" : "s"} selected` : ""), 1),
274
+ e("div", ce, [
275
+ r.modal.done.value === null ? (p(), m(L, { key: 0 }, [
276
+ k(x, {
277
+ hierarchy: "secondary",
278
+ size: "sm",
279
+ class: "am-btn am-btn-sec",
280
+ type: "button",
281
+ onClick: a[2] || (a[2] = (n) => r.modal.close())
282
+ }, {
283
+ default: b(() => [...a[14] || (a[14] = [
284
+ H(" Cancel ", -1)
285
+ ])]),
286
+ _: 1
287
+ }),
288
+ k(x, {
289
+ hierarchy: "primary",
290
+ size: "sm",
291
+ class: "am-btn am-btn-primary",
292
+ type: "button",
293
+ disabled: !r.modal.selected.value.size || r.modal.saving.value,
294
+ onClick: a[3] || (a[3] = (n) => r.modal.confirm())
295
+ }, {
296
+ default: b(() => [
297
+ H(h(r.modal.saving.value ? "Copying…" : "Copy setup"), 1)
298
+ ]),
299
+ _: 1
300
+ }, 8, ["disabled"])
301
+ ], 64)) : (p(), I(x, {
302
+ key: 1,
303
+ hierarchy: "primary",
304
+ size: "sm",
305
+ class: "am-btn am-btn-primary",
306
+ type: "button",
307
+ onClick: a[4] || (a[4] = (n) => r.modal.close())
308
+ }, {
309
+ default: b(() => [...a[15] || (a[15] = [
310
+ H(" Done ", -1)
311
+ ])]),
312
+ _: 1
313
+ }))
314
+ ])
315
+ ])
316
+ ]),
317
+ _: 1
318
+ }, 8, ["open"]));
319
+ }
320
+ }), fe = { class: "main" }, ge = {
321
+ id: "viewSettings",
322
+ class: "view"
323
+ }, he = { class: "sp-head" }, we = { class: "outlet-bar" }, ke = { class: "sp-body" }, be = { class: "sp-tabs" }, He = ["onClick"], Ce = { class: "sp-content" }, xe = { class: "sp-panel" }, Se = {
324
+ key: 0,
325
+ id: "sp-payrates",
326
+ class: "sp-sec"
327
+ }, Pe = { class: "sp-card" }, De = { class: "sp-row" }, Re = { class: "sp-field" }, Oe = { class: "sp-row" }, Me = { class: "sp-field" }, $e = { class: "sp-row" }, Le = { class: "sp-field" }, Ee = { class: "sp-card" }, Ne = { class: "sp-row" }, Ae = { class: "sp-field" }, Ie = { class: "sp-row" }, Ue = { class: "sp-field" }, Te = {
328
+ key: 1,
329
+ id: "sp-working-hours",
330
+ class: "sp-sec"
331
+ }, Ve = { class: "sp-card" }, We = { class: "sp-row" }, Be = { class: "sp-field" }, ze = { class: "sp-row" }, Ye = { class: "sp-field" }, qe = { class: "sp-row" }, Ge = { class: "sp-field" }, Fe = {
332
+ key: 2,
333
+ id: "sp-overtime",
334
+ class: "sp-sec"
335
+ }, je = { class: "sp-card" }, Je = { class: "sp-row" }, Ke = { class: "sp-save-txt" }, Qe = { key: 0 }, ls = /* @__PURE__ */ T({
336
+ __name: "ScheduleGeneralPage",
337
+ setup(r) {
338
+ const d = w(null);
339
+ j(d);
340
+ const a = z(), n = Y(), t = _(), u = J(), C = ee(u, {
341
+ notify: (o, s) => n.open({ message: o, type: s })
342
+ }), y = w(!1);
343
+ B(async () => {
344
+ await u.resolve() && await K(/* @__PURE__ */ new Date()), await t.load(), t.open();
345
+ });
346
+ const S = E(
347
+ () => u.options.value.length ? u.options.value : [{ value: "", label: "No outlet selected", disabled: !0 }]
348
+ );
349
+ async function P(o) {
350
+ t.dirty.value || await u.switchTo(o, /* @__PURE__ */ new Date()) && (await t.load(), t.open());
351
+ }
352
+ function D() {
353
+ t.close() && a.push({ name: q.SCHEDULE });
354
+ }
355
+ function R() {
356
+ if (!y.value) {
357
+ y.value = !0;
358
+ return;
359
+ }
360
+ y.value = !1, t.discard();
361
+ }
362
+ async function c() {
363
+ try {
364
+ await t.save(), n.open({ message: "General settings saved", type: "success" });
365
+ } catch (o) {
366
+ n.open({
367
+ message: o instanceof Error ? o.message : "Could not save general settings",
368
+ type: "error"
369
+ });
370
+ }
371
+ }
372
+ return (o, s) => (p(), m("div", {
373
+ ref_key: "rootEl",
374
+ ref: d,
375
+ class: "sch"
376
+ }, [
377
+ e("div", fe, [
378
+ e("div", ge, [
379
+ e("div", he, [
380
+ k(x, {
381
+ hierarchy: "ghost",
382
+ size: "sm",
383
+ class: "sp-back",
384
+ type: "button",
385
+ onClick: D
386
+ }, {
387
+ default: b(() => [...s[12] || (s[12] = [
388
+ e("svg", {
389
+ width: "12",
390
+ height: "12",
391
+ viewBox: "0 0 16 16",
392
+ fill: "none",
393
+ "aria-hidden": "true"
394
+ }, [
395
+ e("path", {
396
+ d: "M10 3.5L5.5 8l4.5 4.5",
397
+ stroke: "currentColor",
398
+ "stroke-width": "1.7",
399
+ "stroke-linecap": "round",
400
+ "stroke-linejoin": "round"
401
+ })
402
+ ], -1),
403
+ e("span", null, "Back to schedule", -1)
404
+ ])]),
405
+ _: 1
406
+ }),
407
+ s[15] || (s[15] = e("div", { class: "sp-title" }, "General Settings", -1)),
408
+ s[16] || (s[16] = e("div", { class: "sp-sub" }, "Pay multipliers and overtime limit for this outlet.", -1)),
409
+ e("div", we, [
410
+ s[14] || (s[14] = e("span", { class: "outlet-bar-lbl" }, "Outlet", -1)),
411
+ k(Q, {
412
+ class: "outlet-sel",
413
+ "aria-label": "Outlet being configured",
414
+ searchable: "",
415
+ disabled: l(t).dirty.value || l(t).loading.value,
416
+ title: l(t).dirty.value ? "Save or discard changes before switching outlets" : "Which outlet these pay rates apply to",
417
+ "model-value": l(u).outletId.value,
418
+ options: S.value,
419
+ "onUpdate:modelValue": P
420
+ }, null, 8, ["disabled", "title", "model-value", "options"]),
421
+ k(x, {
422
+ hierarchy: "secondary",
423
+ size: "sm",
424
+ class: "outlet-clone",
425
+ type: "button",
426
+ disabled: l(t).dirty.value || l(t).loading.value || !l(u).outletId.value,
427
+ title: l(t).dirty.value ? "Save or discard changes before cloning" : "Copy this outlet's pay rates to other outlets",
428
+ onClick: s[0] || (s[0] = (i) => l(C).openModal())
429
+ }, {
430
+ default: b(() => [...s[13] || (s[13] = [
431
+ e("svg", {
432
+ width: "12",
433
+ height: "12",
434
+ viewBox: "0 0 16 16",
435
+ fill: "none",
436
+ "aria-hidden": "true"
437
+ }, [
438
+ e("rect", {
439
+ x: "5.5",
440
+ y: "5.5",
441
+ width: "8.5",
442
+ height: "8.5",
443
+ rx: "1.5",
444
+ stroke: "currentColor",
445
+ "stroke-width": "1.4"
446
+ }),
447
+ e("path", {
448
+ d: "M10.5 5.5V3.2A1.6 1.6 0 0 0 8.9 1.6H3.2A1.6 1.6 0 0 0 1.6 3.2v5.7a1.6 1.6 0 0 0 1.6 1.6h2.3",
449
+ stroke: "currentColor",
450
+ "stroke-width": "1.4",
451
+ "stroke-linecap": "round"
452
+ })
453
+ ], -1),
454
+ H(" Clone setup to… ", -1)
455
+ ])]),
456
+ _: 1
457
+ }, 8, ["disabled", "title"])
458
+ ])
459
+ ]),
460
+ e("div", ke, [
461
+ e("nav", be, [
462
+ (p(!0), m(L, null, V(l(Z), (i) => (p(), m("button", {
463
+ key: i.key,
464
+ type: "button",
465
+ class: U(["sch-tab sp-tab", { active: l(t).activeSection.value === i.key }]),
466
+ "data-active": "false",
467
+ onClick: (O) => l(t).activeSection.value = i.key
468
+ }, h(i.label), 11, He))), 128))
469
+ ]),
470
+ e("div", Ce, [
471
+ e("div", xe, [
472
+ l(t).activeSection.value === "payrates" ? (p(), m("section", Se, [
473
+ s[29] || (s[29] = e("div", { class: "sp-sec-head" }, [
474
+ e("div", { class: "sp-panel-title" }, "Pay rates")
475
+ ], -1)),
476
+ s[30] || (s[30] = e("div", { class: "sp-panel-desc" }, "Pay multipliers by kind of day.", -1)),
477
+ e("div", Pe, [
478
+ s[23] || (s[23] = e("div", { class: "sp-card-head" }, [
479
+ e("div", { class: "sp-card-title" }, "Overtime rate"),
480
+ e("div", { class: "sp-card-note" }, "Multiplier on every OT hour")
481
+ ], -1)),
482
+ e("div", De, [
483
+ s[18] || (s[18] = e("div", { class: "sp-row-main" }, [
484
+ e("div", { class: "sp-row-label" }, "Normal operations day"),
485
+ e("div", { class: "sp-row-hint" }, " Multiplier on their rate for hours past the weekly contract. ")
486
+ ], -1)),
487
+ e("div", Re, [
488
+ f(e("input", {
489
+ "onUpdate:modelValue": s[1] || (s[1] = (i) => l(t).draft.payRate.NORMAL.overtime = i),
490
+ class: "sch-input sp-num",
491
+ type: "number",
492
+ min: "1",
493
+ max: "4",
494
+ step: "0.1",
495
+ "aria-label": "Overtime rate on a normal day"
496
+ }, null, 512), [
497
+ [
498
+ g,
499
+ l(t).draft.payRate.NORMAL.overtime,
500
+ void 0,
501
+ { number: !0 }
502
+ ]
503
+ ]),
504
+ s[17] || (s[17] = e("span", { class: "sp-unit" }, "×", -1))
505
+ ])
506
+ ]),
507
+ e("div", Oe, [
508
+ s[20] || (s[20] = e("div", { class: "sp-row-main" }, [
509
+ e("div", { class: "sp-row-label" }, "Off day"),
510
+ e("div", { class: "sp-row-hint" }, " For a shift on the person's off day, weekly or booked. Check the rate with HR. ")
511
+ ], -1)),
512
+ e("div", Me, [
513
+ f(e("input", {
514
+ "onUpdate:modelValue": s[2] || (s[2] = (i) => l(t).draft.payRate.REST_DAY.overtime = i),
515
+ class: "sch-input sp-num",
516
+ type: "number",
517
+ min: "1",
518
+ max: "4",
519
+ step: "0.1",
520
+ "aria-label": "Overtime rate on an off day"
521
+ }, null, 512), [
522
+ [
523
+ g,
524
+ l(t).draft.payRate.REST_DAY.overtime,
525
+ void 0,
526
+ { number: !0 }
527
+ ]
528
+ ]),
529
+ s[19] || (s[19] = e("span", { class: "sp-unit" }, "×", -1))
530
+ ])
531
+ ]),
532
+ e("div", $e, [
533
+ s[22] || (s[22] = e("div", { class: "sp-row-main" }, [
534
+ e("div", { class: "sp-row-label" }, "Public holiday"),
535
+ e("div", { class: "sp-row-hint" }, " For dates on the holiday calendar. Wins over an off day on the same date. ")
536
+ ], -1)),
537
+ e("div", Le, [
538
+ f(e("input", {
539
+ "onUpdate:modelValue": s[3] || (s[3] = (i) => l(t).draft.payRate.PUBLIC_HOLIDAY.overtime = i),
540
+ class: "sch-input sp-num",
541
+ type: "number",
542
+ min: "1",
543
+ max: "4",
544
+ step: "0.1",
545
+ "aria-label": "Overtime rate on a public holiday"
546
+ }, null, 512), [
547
+ [
548
+ g,
549
+ l(t).draft.payRate.PUBLIC_HOLIDAY.overtime,
550
+ void 0,
551
+ { number: !0 }
552
+ ]
553
+ ]),
554
+ s[21] || (s[21] = e("span", { class: "sp-unit" }, "×", -1))
555
+ ])
556
+ ])
557
+ ]),
558
+ e("div", Ee, [
559
+ s[28] || (s[28] = e("div", { class: "sp-card-head" }, [
560
+ e("div", { class: "sp-card-title" }, "Regular rate"),
561
+ e("div", { class: "sp-card-note" }, "Multiplier on ordinary hours")
562
+ ], -1)),
563
+ e("div", Ne, [
564
+ s[25] || (s[25] = e("div", { class: "sp-row-main" }, [
565
+ e("div", { class: "sp-row-label" }, "Off day"),
566
+ e("div", { class: "sp-row-hint" }, "Ordinary hours worked on the person's off day.")
567
+ ], -1)),
568
+ e("div", Ae, [
569
+ f(e("input", {
570
+ "onUpdate:modelValue": s[4] || (s[4] = (i) => l(t).draft.payRate.REST_DAY.regular = i),
571
+ class: "sch-input sp-num",
572
+ type: "number",
573
+ min: "1",
574
+ max: "4",
575
+ step: "0.1",
576
+ "aria-label": "Regular rate on an off day"
577
+ }, null, 512), [
578
+ [
579
+ g,
580
+ l(t).draft.payRate.REST_DAY.regular,
581
+ void 0,
582
+ { number: !0 }
583
+ ]
584
+ ]),
585
+ s[24] || (s[24] = e("span", { class: "sp-unit" }, "×", -1))
586
+ ])
587
+ ]),
588
+ e("div", Ie, [
589
+ s[27] || (s[27] = e("div", { class: "sp-row-main" }, [
590
+ e("div", { class: "sp-row-label" }, "Public holiday"),
591
+ e("div", { class: "sp-row-hint" }, " Ordinary hours worked on a date on the holiday calendar. ")
592
+ ], -1)),
593
+ e("div", Ue, [
594
+ f(e("input", {
595
+ "onUpdate:modelValue": s[5] || (s[5] = (i) => l(t).draft.payRate.PUBLIC_HOLIDAY.regular = i),
596
+ class: "sch-input sp-num",
597
+ type: "number",
598
+ min: "1",
599
+ max: "4",
600
+ step: "0.1",
601
+ "aria-label": "Regular rate on a public holiday"
602
+ }, null, 512), [
603
+ [
604
+ g,
605
+ l(t).draft.payRate.PUBLIC_HOLIDAY.regular,
606
+ void 0,
607
+ { number: !0 }
608
+ ]
609
+ ]),
610
+ s[26] || (s[26] = e("span", { class: "sp-unit" }, "×", -1))
611
+ ])
612
+ ])
613
+ ])
614
+ ])) : l(t).activeSection.value === "workingHours" ? (p(), m("section", Te, [
615
+ s[38] || (s[38] = e("div", { class: "sp-sec-head" }, [
616
+ e("div", { class: "sp-panel-title" }, "Working hours")
617
+ ], -1)),
618
+ s[39] || (s[39] = e("div", { class: "sp-panel-desc" }, "Default employee working-hour limits when no individual setting is provided.", -1)),
619
+ e("div", Ve, [
620
+ s[37] || (s[37] = e("div", { class: "sp-card-head" }, [
621
+ e("div", { class: "sp-card-title" }, "Default working hours"),
622
+ e("div", { class: "sp-card-note" }, "Used as the employee default")
623
+ ], -1)),
624
+ e("div", We, [
625
+ s[32] || (s[32] = e("div", { class: "sp-row-main" }, [
626
+ e("div", { class: "sp-row-label" }, "Min hours per day")
627
+ ], -1)),
628
+ e("div", Be, [
629
+ f(e("input", {
630
+ "onUpdate:modelValue": s[6] || (s[6] = (i) => l(t).draft.workingHours.minHoursPerDay = i),
631
+ class: "sch-input sp-num",
632
+ type: "number",
633
+ min: "0",
634
+ max: "24",
635
+ step: "1",
636
+ placeholder: "None",
637
+ "aria-label": "Default minimum working hours per day"
638
+ }, null, 512), [
639
+ [
640
+ g,
641
+ l(t).draft.workingHours.minHoursPerDay,
642
+ void 0,
643
+ { number: !0 }
644
+ ]
645
+ ]),
646
+ s[31] || (s[31] = e("span", { class: "sp-unit" }, "hours / day", -1))
647
+ ])
648
+ ]),
649
+ e("div", ze, [
650
+ s[34] || (s[34] = e("div", { class: "sp-row-main" }, [
651
+ e("div", { class: "sp-row-label" }, "Max hours per day")
652
+ ], -1)),
653
+ e("div", Ye, [
654
+ f(e("input", {
655
+ "onUpdate:modelValue": s[7] || (s[7] = (i) => l(t).draft.workingHours.maxHoursPerDay = i),
656
+ class: "sch-input sp-num",
657
+ type: "number",
658
+ min: "0",
659
+ max: "24",
660
+ step: "1",
661
+ placeholder: "None",
662
+ "aria-label": "Default maximum working hours per day"
663
+ }, null, 512), [
664
+ [
665
+ g,
666
+ l(t).draft.workingHours.maxHoursPerDay,
667
+ void 0,
668
+ { number: !0 }
669
+ ]
670
+ ]),
671
+ s[33] || (s[33] = e("span", { class: "sp-unit" }, "hours / day", -1))
672
+ ])
673
+ ]),
674
+ e("div", qe, [
675
+ s[36] || (s[36] = e("div", { class: "sp-row-main" }, [
676
+ e("div", { class: "sp-row-label" }, "Max hours per week")
677
+ ], -1)),
678
+ e("div", Ge, [
679
+ f(e("input", {
680
+ "onUpdate:modelValue": s[8] || (s[8] = (i) => l(t).draft.workingHours.maxHoursPerWeek = i),
681
+ class: "sch-input sp-num",
682
+ type: "number",
683
+ min: "0",
684
+ max: "168",
685
+ step: "1",
686
+ placeholder: "None",
687
+ "aria-label": "Default maximum working hours per week"
688
+ }, null, 512), [
689
+ [
690
+ g,
691
+ l(t).draft.workingHours.maxHoursPerWeek,
692
+ void 0,
693
+ { number: !0 }
694
+ ]
695
+ ]),
696
+ s[35] || (s[35] = e("span", { class: "sp-unit" }, "hours / week", -1))
697
+ ])
698
+ ])
699
+ ])
700
+ ])) : l(t).activeSection.value === "overtime" ? (p(), m("section", Fe, [
701
+ s[42] || (s[42] = e("div", { class: "sp-sec-head" }, [
702
+ e("div", { class: "sp-panel-title" }, "Overtime")
703
+ ], -1)),
704
+ s[43] || (s[43] = e("div", { class: "sp-panel-desc" }, "The monthly statutory cap on overtime hours.", -1)),
705
+ e("div", je, [
706
+ s[41] || (s[41] = e("div", { class: "sp-card-head" }, [
707
+ e("div", { class: "sp-card-title" }, "Maximum OT Hours"),
708
+ e("div", { class: "sp-card-note" }, "Enforced")
709
+ ], -1)),
710
+ e("div", Je, [
711
+ s[40] || (s[40] = e("div", { class: "sp-row-main" }, [
712
+ e("div", { class: "sp-row-label" }, "Monthly OT cap"),
713
+ e("div", { class: "sp-row-hint" }, " Hours per person per month. Auto-Schedule never exceeds it. ")
714
+ ], -1)),
715
+ f(e("input", {
716
+ "onUpdate:modelValue": s[9] || (s[9] = (i) => l(t).draft.otCapHours = i),
717
+ class: "sch-input sp-num",
718
+ type: "number",
719
+ min: "0",
720
+ max: "300",
721
+ step: "1",
722
+ placeholder: "None",
723
+ "aria-label": "Monthly OT cap in hours"
724
+ }, null, 512), [
725
+ [
726
+ g,
727
+ l(t).draft.otCapHours,
728
+ void 0,
729
+ { number: !0 }
730
+ ]
731
+ ])
732
+ ])
733
+ ])
734
+ ])) : N("", !0)
735
+ ])
736
+ ]),
737
+ e("div", {
738
+ class: U(["sp-save", { dirty: l(t).dirty.value, arming: y.value }])
739
+ }, [
740
+ e("div", Ke, [
741
+ H(h(y.value ? "Discard unsaved changes?" : "Unsaved changes") + " ", 1),
742
+ y.value ? N("", !0) : (p(), m("span", Qe, "— save or discard before leaving."))
743
+ ]),
744
+ k(x, {
745
+ hierarchy: "secondary",
746
+ size: "sm",
747
+ class: "am-btn am-btn-sec",
748
+ type: "button",
749
+ onClick: s[10] || (s[10] = (i) => R())
750
+ }, {
751
+ default: b(() => [
752
+ H(h(y.value ? "Confirm discard" : "Discard"), 1)
753
+ ]),
754
+ _: 1
755
+ }),
756
+ k(x, {
757
+ hierarchy: "primary",
758
+ size: "sm",
759
+ class: "am-btn am-btn-primary",
760
+ type: "button",
761
+ onClick: s[11] || (s[11] = (i) => c())
762
+ }, {
763
+ default: b(() => [...s[44] || (s[44] = [
764
+ H(" Save changes ", -1)
765
+ ])]),
766
+ _: 1
767
+ })
768
+ ], 2)
769
+ ])
770
+ ])
771
+ ]),
772
+ k(ye, { modal: l(C) }, null, 8, ["modal"])
773
+ ], 512));
774
+ }
775
+ });
776
+ export {
777
+ ls as default
778
+ };