@feedmepos/mf-hrm-portal 2.3.2-dev.2 → 2.3.2-dev.3

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 (99) hide show
  1. package/dist/{ApprovalCodeList-sHnINTik.js → ApprovalCodeList-D3U4nvlF.js} +15 -14
  2. package/dist/{AuditLogList-C9C2emU9.js → AuditLogList-qGCW7tf0.js} +13 -13
  3. package/dist/ConditionBuilderForm.vue_vue_type_script_setup_true_lang-B0VcRYUg.js +438 -0
  4. package/dist/EmployeeList-Bd73xDCX.js +776 -0
  5. package/dist/FormItem.vue_vue_type_script_setup_true_lang-cLEnrtC6.js +45 -0
  6. package/dist/FormSection.vue_vue_type_script_setup_true_lang-DknXTYiK.js +49 -0
  7. package/dist/{GrantUserList-LWpqhl-5.js → GrantUserList-C71pal0N.js} +16 -15
  8. package/dist/{Main-PBJjfzBg.js → Main-BWJPyEU1.js} +5 -5
  9. package/dist/{Main-BWKb-QIE.js → Main-CCdTWngg.js} +11 -11
  10. package/dist/Main-DGf0bQvy.js +96 -0
  11. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +243 -0
  12. package/dist/{PermissionSetList-D2qZVlF4.js → PermissionSetList-BS-oBunI.js} +46 -45
  13. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CkOAT-oX.js +4167 -0
  14. package/dist/PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js +35 -0
  15. package/dist/RoleList-B_7UnVNb.js +740 -0
  16. package/dist/{ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-Cs0rhCa3.js → ScheduleAddPositionModal.vue_vue_type_script_setup_true_lang-BXihM4sl.js} +1 -1
  17. package/dist/{ScheduleGeneralPage-C4J6jYtG.js → ScheduleGeneralPage-DpNvWNGs.js} +2 -2
  18. package/dist/{ScheduleModal.vue_vue_type_script_setup_true_lang-3UqO6uPu.js → ScheduleModal.vue_vue_type_script_setup_true_lang-DIYLOF9N.js} +186 -187
  19. package/dist/{SchedulePage-ICzggri0.js → SchedulePage-QW-cYvu2.js} +13 -13
  20. package/dist/{SchedulePositionPage-BshUCd_C.js → SchedulePositionPage-BtFfVo2N.js} +3 -3
  21. package/dist/{SelectFilter-D9T0nFvG.js → SelectFilter-BXeVKgHN.js} +1 -1
  22. package/dist/TeamMemberList-DoisBYnk.js +1154 -0
  23. package/dist/{TimesheetList-nxhr0EWj.js → TimesheetList-D-bESKe5.js} +9 -9
  24. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BLqgALLe.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-D0zAVqCa.js} +3 -3
  25. package/dist/{app-n6d4AmtP.js → app-D-MUq9Ab.js} +3429 -6368
  26. package/dist/app.js +3 -3
  27. package/dist/{approval-code-1j1OoXt1.js → approval-code-BXUiojPH.js} +1 -1
  28. package/dist/{dayjs.min-DdNivv4b.js → dayjs.min-BZ1pM-6M.js} +34 -34
  29. package/dist/{employee-BlfleiCU.js → employee-HQEU8fjb.js} +47 -48
  30. package/dist/{grant-user-BmTyexk3.js → grant-user-CBJ3gEgW.js} +1 -1
  31. package/dist/{iteration-y_jodvfN.js → iteration-ogxW2-Tv.js} +1 -1
  32. package/dist/{lodash-B2eWEGH4.js → lodash-Def4gaas.js} +1 -1
  33. package/dist/restaurant-D2mfKHaH.js +1880 -0
  34. package/dist/{role-DfZi7Ssk.js → role-JDoDFVd9.js} +4 -5
  35. package/dist/{rule-ChmhcGgA.js → rule-DPtqlnz-.js} +100 -105
  36. package/dist/src/components/CollapsibleWrapper.vue.d.ts +3 -11
  37. package/dist/src/helpers/string.d.ts +1 -10
  38. package/dist/src/router/shared.d.ts +1 -3
  39. package/dist/src/stores/restaurant.d.ts +7 -7
  40. package/dist/src/stores/team.d.ts +0 -30
  41. package/dist/src/types/team.d.ts +1 -17
  42. package/dist/src/views/hr/locales/index.d.ts +4 -24
  43. package/dist/src/views/hr/role/RoleForm.vue.d.ts +2 -29
  44. package/dist/src/views/scheduling/composables/useScheduleOnboardingAvailability.d.ts +1 -1
  45. package/dist/src/views/scheduling/composables/useScheduleOnboardingWizard.d.ts +1 -1
  46. package/dist/src/views/scheduling/composables/useScheduleShiftDraft.d.ts +1 -1
  47. package/dist/src/views/scheduling/composables/useScheduleShiftPopover.d.ts +1 -1
  48. package/dist/src/views/team/components/BasePermission.vue.d.ts +0 -11
  49. package/dist/src/views/team/components/ConditionPermission.vue.d.ts +0 -11
  50. package/dist/src/views/team/components/PortalPermissionEditor.vue.d.ts +0 -21
  51. package/dist/src/views/team/components/PosRolePermission.vue.d.ts +0 -11
  52. package/dist/src/views/team/locales/index.d.ts +0 -716
  53. package/dist/src/views/team/member/AddMemberForm.vue.d.ts +3 -48
  54. package/dist/src/views/team/{components/MemberStatusBadge.vue.d.ts → member/MemberInfo.vue.d.ts} +2 -2
  55. package/dist/src/views/team/member/TeamMemberList.vue.d.ts +0 -1
  56. package/dist/string-VNuQNweN.js +15 -0
  57. package/dist/style.css +1 -1
  58. package/dist/tsconfig.app.tsbuildinfo +1 -1
  59. package/dist/{useAppStore-BPARQyvJ.js → useAppStore-DZCdxlCd.js} +1 -1
  60. package/dist/{useLoading-iPESFb6R.js → useLoading-Nygx2zn8.js} +1 -1
  61. package/dist/{useReportPermissions-By-BoJZb.js → useReportPermissions-CxV7Dz1B.js} +5 -5
  62. package/package.json +2 -2
  63. package/dist/ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BbsPesWY.js +0 -459
  64. package/dist/EmployeeList-D4oy5hXz.js +0 -896
  65. package/dist/FormSection.vue_vue_type_script_setup_true_lang-Cl053Tg1.js +0 -90
  66. package/dist/Main-CVGiOYpC.js +0 -101
  67. package/dist/MyPosProfile-BQCBFMFw.js +0 -301
  68. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-TXPEqa46.js +0 -126
  69. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-ZSREAS1r.js +0 -4243
  70. package/dist/PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DRGTxOMW.js +0 -1831
  71. package/dist/RoleForm.vue_vue_type_script_setup_true_lang-DFDTw0lj.js +0 -547
  72. package/dist/RoleList-DG0crFzW.js +0 -274
  73. package/dist/TeamMemberList-C970Iqlj.js +0 -2086
  74. package/dist/member-grant-CzZUdO_s.js +0 -55
  75. package/dist/restaurant-Dl6yx37M.js +0 -51
  76. package/dist/src/api/my-pos-profile/index.d.ts +0 -5
  77. package/dist/src/api/sso-provider/index.d.ts +0 -5
  78. package/dist/src/api/staff-invite/index.d.ts +0 -16
  79. package/dist/src/components/form/SegmentedTabs.vue.d.ts +0 -23
  80. package/dist/src/composables/useMenuAccess.d.ts +0 -56
  81. package/dist/src/composables/useSsoProviders.d.ts +0 -19
  82. package/dist/src/composables/useStaffInviteProviders.d.ts +0 -8
  83. package/dist/src/helpers/member-grant.d.ts +0 -36
  84. package/dist/src/helpers/my-pos-profile.d.ts +0 -37
  85. package/dist/src/helpers/pos-assignment-rows.d.ts +0 -28
  86. package/dist/src/helpers/staff-invite.d.ts +0 -54
  87. package/dist/src/router/menu-access-guard.d.ts +0 -17
  88. package/dist/src/types/my-pos-profile.d.ts +0 -25
  89. package/dist/src/types/sso-provider.d.ts +0 -10
  90. package/dist/src/types/staff-invite.d.ts +0 -100
  91. package/dist/src/views/my-pos-profile/MyPosProfile.vue.d.ts +0 -2
  92. package/dist/src/views/my-pos-profile/components/PasscodeChangedDialog.vue.d.ts +0 -4
  93. package/dist/src/views/my-pos-profile/locales/index.d.ts +0 -200
  94. package/dist/src/views/team/components/MemberGrantFields.vue.d.ts +0 -51
  95. package/dist/src/views/team/components/PosAssignmentRows.vue.d.ts +0 -44
  96. package/dist/src/views/team/member/ExistingMemberNotice.vue.d.ts +0 -11
  97. package/dist/src/views/team/member/MemberDetailsCard.vue.d.ts +0 -35
  98. package/dist/src/views/team/member/MemberHeaderCard.vue.d.ts +0 -19
  99. package/dist/string-DZQ1uNjn.js +0 -22
@@ -0,0 +1,45 @@
1
+ import { createElementBlock as r, openBlock as c, createElementVNode as o, ref as m, computed as f, defineComponent as p, renderSlot as l, createCommentVNode as _, toDisplayString as i } from "vue";
2
+ import { a as y } from "./app-D-MUq9Ab.js";
3
+ const h = {};
4
+ function v(t, e) {
5
+ return c(), r("div", null, [...e[0] || (e[0] = [
6
+ o("div", { class: "h-px w-full bg-fm-color-neutral-gray-100" }, null, -1)
7
+ ])]);
8
+ }
9
+ const C = /* @__PURE__ */ y(h, [["render", v]]), V = (t) => {
10
+ const e = m("");
11
+ function s(n) {
12
+ return `${n}`.trim().toLowerCase();
13
+ }
14
+ const a = f(() => s(e.value));
15
+ function d(n) {
16
+ return a.value ? n.some((u) => s(u).includes(a.value)) : !0;
17
+ }
18
+ return { searchKey: e, filter: d };
19
+ }, b = { class: "space-y-8" }, x = { class: "flex items-center justify-between" }, S = { class: "space-y-8" }, g = { class: "fm-typo-en-body-lg-600" }, $ = {
20
+ key: 0,
21
+ class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary"
22
+ }, B = /* @__PURE__ */ p({
23
+ __name: "FormItem",
24
+ props: {
25
+ label: {},
26
+ description: {}
27
+ },
28
+ setup(t) {
29
+ return (e, s) => (c(), r("div", b, [
30
+ o("div", x, [
31
+ o("div", S, [
32
+ o("p", g, i(t.label), 1),
33
+ t.description ? (c(), r("p", $, i(t.description), 1)) : _("", !0)
34
+ ]),
35
+ l(e.$slots, "append")
36
+ ]),
37
+ l(e.$slots, "default")
38
+ ]));
39
+ }
40
+ });
41
+ export {
42
+ C as H,
43
+ B as _,
44
+ V as u
45
+ };
@@ -0,0 +1,49 @@
1
+ import { defineComponent as c, createElementBlock as s, openBlock as l, normalizeClass as r, renderSlot as n, createCommentVNode as o, createVNode as d, createElementVNode as a, toDisplayString as i, withCtx as f } from "vue";
2
+ const h = /* @__PURE__ */ c({
3
+ __name: "FormColumn",
4
+ props: {
5
+ shrinkable: { type: Boolean }
6
+ },
7
+ setup(e) {
8
+ return (t, m) => (l(), s("div", {
9
+ class: r(["flex-1 flex flex-col space-y-24", { "min-h-0": e.shrinkable }])
10
+ }, [
11
+ n(t.$slots, "default")
12
+ ], 2));
13
+ }
14
+ }), u = {
15
+ key: 0,
16
+ class: "flex flex-row justify-between items-center"
17
+ }, y = { class: "space-y-4" }, p = { class: "fm-typo-en-title-sm-600" }, b = {
18
+ key: 0,
19
+ class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary"
20
+ }, x = /* @__PURE__ */ c({
21
+ __name: "FormSection",
22
+ props: {
23
+ title: {},
24
+ subTitle: {},
25
+ shrinkable: { type: Boolean }
26
+ },
27
+ setup(e) {
28
+ return (t, m) => (l(), s("div", {
29
+ class: r(["flex flex-col space-y-16", { "min-h-0": e.shrinkable }])
30
+ }, [
31
+ e.title ? (l(), s("div", u, [
32
+ a("div", y, [
33
+ a("p", p, i(e.title), 1),
34
+ e.subTitle ? (l(), s("p", b, i(e.subTitle), 1)) : o("", !0)
35
+ ]),
36
+ n(t.$slots, "append-title")
37
+ ])) : o("", !0),
38
+ d(h, { shrinkable: e.shrinkable }, {
39
+ default: f(() => [
40
+ n(t.$slots, "default")
41
+ ]),
42
+ _: 3
43
+ }, 8, ["shrinkable"])
44
+ ], 2));
45
+ }
46
+ });
47
+ export {
48
+ x as _
49
+ };
@@ -1,15 +1,16 @@
1
1
  import { defineComponent as X, ref as S, computed as f, watch as ue, resolveComponent as v, createElementBlock as D, openBlock as w, Fragment as E, renderSlot as de, createVNode as l, unref as s, withCtx as g, createElementVNode as o, toDisplayString as _, isRef as H, renderList as me, createBlock as pe, createCommentVNode as fe, withModifiers as W, createTextVNode as J, normalizeClass as ve, h as p } from "vue";
2
- import { d as ge } from "./dayjs.min-DdNivv4b.js";
2
+ import { d as ge } from "./dayjs.min-BZ1pM-6M.js";
3
3
  import { useI18n as Z } from "@feedmepos/mf-common";
4
4
  import { useSnackbar as ee, components as K, useDialog as _e, useBreakpoints as ye, FmButtonVariant as O } from "@feedmepos/ui-library";
5
- import { S as A } from "./SelectFilter-D9T0nFvG.js";
6
- import { _ as he } from "./app-n6d4AmtP.js";
7
- import { _ as Ue, a as Q, u as xe, H as be } from "./FormSection.vue_vue_type_script_setup_true_lang-Cl053Tg1.js";
8
- import { _ as Ve } from "./TableEmptyState.vue_vue_type_script_setup_true_lang-IfAZmWr0.js";
9
- import { u as te } from "./useLoading-iPESFb6R.js";
10
- import { u as ae } from "./grant-user-BmTyexk3.js";
11
- import { u as se } from "./restaurant-Dl6yx37M.js";
12
- import { u as re } from "./role-DfZi7Ssk.js";
5
+ import { S as A } from "./SelectFilter-BXeVKgHN.js";
6
+ import { _ as he } from "./app-D-MUq9Ab.js";
7
+ import { _ as Q, u as Ue, H as xe } from "./FormItem.vue_vue_type_script_setup_true_lang-cLEnrtC6.js";
8
+ import { _ as be } from "./TableEmptyState.vue_vue_type_script_setup_true_lang-IfAZmWr0.js";
9
+ import { u as te } from "./useLoading-Nygx2zn8.js";
10
+ import { u as ae } from "./grant-user-CBJ3gEgW.js";
11
+ import { u as se } from "./restaurant-D2mfKHaH.js";
12
+ import { u as re } from "./role-JDoDFVd9.js";
13
+ import { _ as Ve } from "./FormSection.vue_vue_type_script_setup_true_lang-DknXTYiK.js";
13
14
  const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, we = { class: "flex gap-8 items-center justify-start" }, Se = /* @__PURE__ */ X({
14
15
  __name: "GrantUserForm",
15
16
  setup(le, { expose: M }) {
@@ -87,7 +88,7 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
87
88
  ]),
88
89
  default: g(() => [
89
90
  o("div", Fe, [
90
- l(Ue, {
91
+ l(Ve, {
91
92
  title: s(d)("grantUser.form.section")
92
93
  }, {
93
94
  default: g(() => [
@@ -171,7 +172,7 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
171
172
  }, Ee = {
172
173
  key: 0,
173
174
  class: "flex flex-col gap-4"
174
- }, st = /* @__PURE__ */ X({
175
+ }, rt = /* @__PURE__ */ X({
175
176
  __name: "GrantUserList",
176
177
  setup(le, {
177
178
  expose: M
@@ -185,7 +186,7 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
185
186
  } = re(), h = f(() => x.grantUsers), {
186
187
  searchKey: n,
187
188
  filter: B
188
- } = xe(), U = f(() => {
189
+ } = Ue(), U = f(() => {
189
190
  var e;
190
191
  return (e = h.value) == null ? void 0 : e.filter((t) => {
191
192
  const m = !y.value || y.value.includes(t.restaurantId), G = !k.value || k.value.includes(t.status), L = b.value[t.restaurantId] || "", j = V.value[t.roleId] || "";
@@ -394,7 +395,7 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
394
395
  "onUpdate:modelValue": t[3] || (t[3] = (r) => H(n) ? n.value = r : null),
395
396
  autofocus: "",
396
397
  placeholder: s(a)("grantUser.search.placeholder")
397
- }, null, 8, ["modelValue", "placeholder"])]), l(be), o("div", Re, [l(A, {
398
+ }, null, 8, ["modelValue", "placeholder"])]), l(xe), o("div", Re, [l(A, {
398
399
  modelValue: y.value,
399
400
  "onUpdate:modelValue": t[4] || (t[4] = (r) => y.value = r),
400
401
  multiple: "",
@@ -412,7 +413,7 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
412
413
  "selected-prefix": s(a)("grantUser.filter.selected_status_prefix"),
413
414
  placeholder: s(a)("grantUser.filter.status_placeholder")
414
415
  }, null, 8, ["modelValue", "items", "selected-prefix", "placeholder"])])]), l(he, null, {
415
- default: g(() => [o("div", ze, [l(Ve, {
416
+ default: g(() => [o("div", ze, [l(be, {
416
417
  "is-loading": s(x).isLoading,
417
418
  "is-empty": U.value.length === 0,
418
419
  title: s(a)("grantUser.noData.title"),
@@ -459,5 +460,5 @@ const ke = { class: "fm-typo-en-title-md-600" }, Fe = { class: "space-y-40" }, w
459
460
  }
460
461
  });
461
462
  export {
462
- st as default
463
+ rt as default
463
464
  };
@@ -4,11 +4,11 @@ import { useI18n as E, useCoreStore as $ } from "@feedmepos/mf-common";
4
4
  import { useSnackbar as I } from "@feedmepos/ui-library";
5
5
  import { _ as z } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-QrqYEy8i.js";
6
6
  import { _ as M } from "./PageLayout.vue_vue_type_script_setup_true_lang-HKK4cbW8.js";
7
- import { u as j } from "./restaurant-Dl6yx37M.js";
8
- import { u as H } from "./role-DfZi7Ssk.js";
9
- import { u as J } from "./grant-user-BmTyexk3.js";
10
- import { u as K } from "./approval-code-1j1OoXt1.js";
11
- import { R as n } from "./app-n6d4AmtP.js";
7
+ import { u as j } from "./restaurant-D2mfKHaH.js";
8
+ import { u as H } from "./role-JDoDFVd9.js";
9
+ import { u as J } from "./grant-user-CBJ3gEgW.js";
10
+ import { u as K } from "./approval-code-BXUiojPH.js";
11
+ import { R as n } from "./app-D-MUq9Ab.js";
12
12
  const Q = { class: "space-y-24" }, ue = /* @__PURE__ */ D({
13
13
  __name: "Main",
14
14
  setup(W) {
@@ -4,19 +4,19 @@ import { useCoreStore as uf, useI18n as vf } from "@feedmepos/mf-common";
4
4
  import { useSnackbar as pf } from "@feedmepos/ui-library";
5
5
  import { _ as df } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-QrqYEy8i.js";
6
6
  import { _ as mf } from "./PageLayout.vue_vue_type_script_setup_true_lang-HKK4cbW8.js";
7
- import { u as gf } from "./restaurant-Dl6yx37M.js";
8
- import { u as _f } from "./role-DfZi7Ssk.js";
7
+ import { u as gf } from "./restaurant-D2mfKHaH.js";
8
+ import { u as _f } from "./role-JDoDFVd9.js";
9
9
  /* empty css */
10
- import "./employee-BlfleiCU.js";
11
- import "./lodash-B2eWEGH4.js";
12
- import "./useAppStore-BPARQyvJ.js";
13
- import "./iteration-y_jodvfN.js";
10
+ import "./employee-HQEU8fjb.js";
11
+ import "./lodash-Def4gaas.js";
12
+ import "./useAppStore-DZCdxlCd.js";
13
+ import "./iteration-ogxW2-Tv.js";
14
14
  /* empty css */
15
- import { R as pt } from "./app-n6d4AmtP.js";
16
- import "./rule-ChmhcGgA.js";
17
- import "./useReportPermissions-By-BoJZb.js";
18
- import "./dayjs.min-DdNivv4b.js";
19
- import "./TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-BLqgALLe.js";
15
+ import { R as pt } from "./app-D-MUq9Ab.js";
16
+ import "./rule-DPtqlnz-.js";
17
+ import "./useReportPermissions-CxV7Dz1B.js";
18
+ import "./dayjs.min-BZ1pM-6M.js";
19
+ import "./TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-D0zAVqCa.js";
20
20
  var Nn = {};
21
21
  /*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */
22
22
  var qt = {};
@@ -0,0 +1,96 @@
1
+ import { defineComponent as M, ref as R, computed as s, resolveComponent as i, createBlock as c, openBlock as p, withCtx as l, createElementVNode as S, createVNode as d, resolveDynamicComponent as g, createCommentVNode as y, createTextVNode as A, toDisplayString as C } from "vue";
2
+ import { useRouter as N, useRoute as h } from "vue-router";
3
+ import { useI18n as k } from "@feedmepos/mf-common";
4
+ import { _ as x } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-QrqYEy8i.js";
5
+ import { _ as F } from "./PageLayout.vue_vue_type_script_setup_true_lang-HKK4cbW8.js";
6
+ import { u as w } from "./restaurant-D2mfKHaH.js";
7
+ import "@feedmepos/ui-library";
8
+ import "./rule-DPtqlnz-.js";
9
+ import "./lodash-Def4gaas.js";
10
+ import "./iteration-ogxW2-Tv.js";
11
+ import "./useAppStore-DZCdxlCd.js";
12
+ import { R as v } from "./app-D-MUq9Ab.js";
13
+ import "./role-JDoDFVd9.js";
14
+ /* empty css */
15
+ import "./PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DQcgZ0nF.js";
16
+ const $ = { class: "space-y-24" }, Z = /* @__PURE__ */ M({
17
+ __name: "Main",
18
+ setup(q) {
19
+ const { t: o } = k(), b = N(), B = h(), { readRestaurants: T } = w(), _ = R(), f = R(), a = s({
20
+ get: () => B.name === v.TEAM_ROLE ? "role" : "member",
21
+ set: (e) => {
22
+ b.push({
23
+ name: e === "role" ? v.TEAM_ROLE : v.TEAM_MEMBER,
24
+ query: b.currentRoute.value.query
25
+ });
26
+ }
27
+ });
28
+ T();
29
+ const r = s(() => u.value.find((e) => e.value === a.value) || u.value[0]), u = s(() => [
30
+ {
31
+ label: o("team.title"),
32
+ subTitle: o("team.subtitle"),
33
+ value: "member",
34
+ createButtonLabel: o("team.actions.addMember"),
35
+ createButtonAction: () => {
36
+ var e;
37
+ (e = _.value) == null || e.create();
38
+ }
39
+ },
40
+ {
41
+ label: o("permissionSet.title"),
42
+ value: "role",
43
+ createButtonLabel: o("permissionSet.createButtonLabel"),
44
+ createButtonAction: () => {
45
+ var e;
46
+ (e = f.value) == null || e.create();
47
+ }
48
+ }
49
+ ]);
50
+ return (e, n) => {
51
+ const L = i("FmSpacer"), V = i("FmTabs"), E = i("RouterView");
52
+ return p(), c(F, {
53
+ heading: r.value.label
54
+ }, {
55
+ "sub-heading": l(() => [
56
+ A(C(r.value.subTitle), 1)
57
+ ]),
58
+ "append-heading": l(() => {
59
+ var t;
60
+ return [
61
+ d(L),
62
+ (t = r.value) != null && t.createButtonLabel ? (p(), c(x, {
63
+ key: 0,
64
+ icon: "add",
65
+ label: r.value.createButtonLabel,
66
+ onClick: n[0] || (n[0] = (m) => r.value.createButtonAction())
67
+ }, null, 8, ["label"])) : y("", !0)
68
+ ];
69
+ }),
70
+ default: l(() => [
71
+ S("div", $, [
72
+ d(V, {
73
+ modelValue: a.value,
74
+ "onUpdate:modelValue": n[1] || (n[1] = (t) => a.value = t),
75
+ items: u.value
76
+ }, null, 8, ["modelValue", "items"]),
77
+ d(E, null, {
78
+ default: l(({ Component: t }) => [
79
+ (p(), c(g(t), {
80
+ ref: (m) => {
81
+ a.value === "member" && (_.value = m), a.value === "role" && (f.value = m);
82
+ }
83
+ }, null, 512))
84
+ ]),
85
+ _: 1
86
+ })
87
+ ])
88
+ ]),
89
+ _: 1
90
+ }, 8, ["heading"]);
91
+ };
92
+ }
93
+ });
94
+ export {
95
+ Z as default
96
+ };
@@ -0,0 +1,243 @@
1
+ import { defineComponent as I, createElementBlock as u, openBlock as m, normalizeStyle as P, computed as x, resolveComponent as k, createElementVNode as r, createVNode as p, toDisplayString as _, Fragment as L, renderList as S, createCommentVNode as $, withKeys as F, withModifiers as V, normalizeClass as j } from "vue";
2
+ const ee = /* @__PURE__ */ I({
3
+ __name: "Skeleton",
4
+ props: {
5
+ width: { default: "160px" }
6
+ },
7
+ setup(e) {
8
+ return (a, t) => (m(), u("div", {
9
+ class: "h-16 animate-pulse rounded bg-fm-color-neutral-gray-200",
10
+ style: P({ width: e.width })
11
+ }, null, 4));
12
+ }
13
+ });
14
+ function B(e) {
15
+ return e.map((a) => a.restaurantId).filter(Boolean);
16
+ }
17
+ function w(e, a, t) {
18
+ const o = B(a);
19
+ return e.filter((l) => l.managable || l._id === t).map((l) => ({
20
+ label: `${l.profile.code ? `${l.profile.code} - ` : ""}${l.profile.name}`,
21
+ value: l._id,
22
+ disabled: o.includes(l._id) && l._id !== t
23
+ }));
24
+ }
25
+ function C(e, a, t, o) {
26
+ return a ? e.filter((l) => l.restaurants.some((s) => s.id == a)).map((l) => ({
27
+ label: l.name,
28
+ value: l._id,
29
+ disabled: !o.isRoleUsable(l, a) && l._id !== t
30
+ })) : [];
31
+ }
32
+ function K(e, a, t, o) {
33
+ var s, c;
34
+ const l = C(e, a, t, o);
35
+ return ((s = l.find((n) => n.value === t && !n.disabled)) == null ? void 0 : s.value) ?? ((c = l.find((n) => !n.disabled)) == null ? void 0 : c.value) ?? "";
36
+ }
37
+ function N(e, a) {
38
+ const t = B(a), o = e.some(
39
+ (s) => s.managable && !t.includes(s._id)
40
+ ), l = a.every((s) => s.restaurantId && s.roleId);
41
+ return o && l;
42
+ }
43
+ function E(e, a, t, o) {
44
+ var s;
45
+ const l = ((s = e[a]) == null ? void 0 : s.restaurantId) ?? "";
46
+ return o.isRestaurantLocked(l) ? e : e.length === 1 ? [t()] : e.filter((c, n) => n !== a);
47
+ }
48
+ const M = { class: "rounded-lg border border-fm-color-neutral-gray-200 p-16 space-y-16" }, D = { class: "fm-typo-en-title-sm-600" }, G = { class: "space-y-16" }, q = { class: "grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto] gap-16" }, H = { class: "text-sm font-semibold text-fm-color-typo-primary" }, J = { class: "text-sm font-semibold text-fm-color-typo-primary" }, Q = { class: "flex justify-self-end" }, T = ["tabindex", "aria-disabled", "aria-label", "onClick", "onKeydown"], te = /* @__PURE__ */ I({
49
+ __name: "OutletRoleAssignment",
50
+ props: {
51
+ modelValue: {},
52
+ restaurants: {},
53
+ roles: {},
54
+ isRoleUsable: {},
55
+ isRestaurantLocked: { type: Function, default: () => !1 },
56
+ createRow: {},
57
+ title: {},
58
+ restaurantLabel: {},
59
+ roleLabel: {},
60
+ addLabel: {},
61
+ removeLabel: {}
62
+ },
63
+ emits: ["update:modelValue"],
64
+ setup(e, { emit: a }) {
65
+ const t = e, o = a, l = x(() => ({
66
+ isRoleUsable: t.isRoleUsable,
67
+ isRestaurantLocked: t.isRestaurantLocked
68
+ }));
69
+ function s(d) {
70
+ return w(t.restaurants, t.modelValue, d);
71
+ }
72
+ function c(d) {
73
+ return C(t.roles, d.restaurantId, d.roleId, l.value);
74
+ }
75
+ function n(d) {
76
+ return t.isRestaurantLocked(d);
77
+ }
78
+ function U(d, f) {
79
+ const b = t.modelValue[d], v = K(t.roles, f, b.roleId, l.value), h = [...t.modelValue];
80
+ h[d] = { ...b, restaurantId: f, roleId: v }, o("update:modelValue", h);
81
+ }
82
+ function z(d, f) {
83
+ const b = t.modelValue[d], v = [...t.modelValue];
84
+ v[d] = { ...b, roleId: f }, o("update:modelValue", v);
85
+ }
86
+ function O() {
87
+ o("update:modelValue", [...t.modelValue, t.createRow()]);
88
+ }
89
+ function R(d) {
90
+ o(
91
+ "update:modelValue",
92
+ E(t.modelValue, d, t.createRow, l.value)
93
+ );
94
+ }
95
+ const A = x(() => N(t.restaurants, t.modelValue));
96
+ return (d, f) => {
97
+ const b = k("FmSelect"), v = k("FmIcon"), h = k("FmButton");
98
+ return m(), u("div", M, [
99
+ r("div", D, _(e.title), 1),
100
+ r("div", G, [
101
+ r("div", q, [
102
+ r("div", H, _(e.restaurantLabel), 1),
103
+ r("div", J, _(e.roleLabel), 1),
104
+ f[0] || (f[0] = r("div", null, null, -1))
105
+ ]),
106
+ (m(!0), u(L, null, S(e.modelValue, (i, y) => (m(), u("div", {
107
+ key: `${i.restaurantId || "new"}-${y}`,
108
+ class: "grid grid-cols-[minmax(0,1fr)_minmax(0,1fr)_auto] items-center gap-16"
109
+ }, [
110
+ p(b, {
111
+ class: "min-w-0",
112
+ "model-value": i.restaurantId,
113
+ items: s(i.restaurantId),
114
+ multiselect: !1,
115
+ searchable: "",
116
+ "search-debounce": 300,
117
+ placeholder: e.restaurantLabel,
118
+ disabled: n(i.restaurantId),
119
+ "onUpdate:modelValue": (g) => U(y, g)
120
+ }, null, 8, ["model-value", "items", "placeholder", "disabled", "onUpdate:modelValue"]),
121
+ p(b, {
122
+ class: "min-w-0",
123
+ "model-value": i.roleId,
124
+ items: c(i),
125
+ multiselect: !1,
126
+ placeholder: e.roleLabel,
127
+ disabled: !i.restaurantId || n(i.restaurantId),
128
+ "onUpdate:modelValue": (g) => z(y, g)
129
+ }, null, 8, ["model-value", "items", "placeholder", "disabled", "onUpdate:modelValue"]),
130
+ r("div", Q, [
131
+ e.modelValue.length > 1 ? (m(), u("div", {
132
+ key: 0,
133
+ role: "button",
134
+ tabindex: n(i.restaurantId) ? -1 : 0,
135
+ "aria-disabled": n(i.restaurantId),
136
+ class: j(["inline-flex h-40 w-40 shrink-0 items-center justify-center rounded-lg text-fm-color-neutral-gray-400 transition-colors hover:bg-fm-color-neutral-gray-100 focus:outline-none focus:ring-2 focus:ring-fm-color-primary disabled:cursor-not-allowed disabled:text-fm-color-neutral-gray-200 disabled:hover:bg-transparent", {
137
+ "cursor-pointer": !n(i.restaurantId),
138
+ "pointer-events-none": n(i.restaurantId)
139
+ }]),
140
+ "aria-label": e.removeLabel,
141
+ onClick: V((g) => R(y), ["stop"]),
142
+ onKeydown: [
143
+ F(V((g) => R(y), ["prevent", "stop"]), ["enter"]),
144
+ F(V((g) => R(y), ["prevent", "stop"]), ["space"])
145
+ ]
146
+ }, [
147
+ p(v, {
148
+ name: "delete",
149
+ size: "md"
150
+ })
151
+ ], 42, T)) : $("", !0)
152
+ ])
153
+ ]))), 128))
154
+ ]),
155
+ p(h, {
156
+ type: "button",
157
+ variant: "secondary",
158
+ "text-color": "primary",
159
+ "border-color": "primary",
160
+ "prepend-icon": "add",
161
+ label: e.addLabel,
162
+ size: "md",
163
+ disabled: !A.value,
164
+ onClick: V(O, ["stop"])
165
+ }, null, 8, ["label", "disabled"])
166
+ ]);
167
+ };
168
+ }
169
+ }), W = {
170
+ key: 0,
171
+ class: "fm-typo-body-sm-400 text-fm-color-typo-secondary"
172
+ }, le = /* @__PURE__ */ I({
173
+ __name: "PasscodeGenerateButton",
174
+ props: {
175
+ label: {},
176
+ hint: {},
177
+ disabled: { type: Boolean, default: !1 },
178
+ loading: { type: Boolean, default: !1 }
179
+ },
180
+ emits: ["click"],
181
+ setup(e) {
182
+ return (a, t) => {
183
+ const o = k("FmButton");
184
+ return m(), u(L, null, [
185
+ p(o, {
186
+ variant: "secondary",
187
+ "text-color": "primary",
188
+ "border-color": "primary",
189
+ label: e.label,
190
+ size: "md",
191
+ loading: e.loading,
192
+ disabled: e.disabled,
193
+ onClick: t[0] || (t[0] = (l) => a.$emit("click"))
194
+ }, null, 8, ["label", "loading", "disabled"]),
195
+ e.disabled ? (m(), u("div", W, _(e.hint), 1)) : $("", !0)
196
+ ], 64);
197
+ };
198
+ }
199
+ }), X = { class: "flex items-center gap-8" }, Y = ["aria-label"], ae = /* @__PURE__ */ I({
200
+ __name: "PasscodePinField",
201
+ props: {
202
+ modelValue: {},
203
+ masked: { type: Boolean },
204
+ length: { default: 4 },
205
+ toggleLabel: {}
206
+ },
207
+ emits: ["update:modelValue", "update:masked", "complete"],
208
+ setup(e, { emit: a }) {
209
+ const t = a;
210
+ return (o, l) => {
211
+ const s = k("FmPinField"), c = k("FmIcon");
212
+ return m(), u("div", X, [
213
+ p(s, {
214
+ "model-value": e.modelValue,
215
+ length: e.length,
216
+ masked: e.masked,
217
+ "onUpdate:modelValue": l[0] || (l[0] = (n) => t("update:modelValue", n)),
218
+ onComplete: l[1] || (l[1] = (n) => t("complete", n)),
219
+ onFocus: l[2] || (l[2] = (n) => t("update:masked", !1))
220
+ }, null, 8, ["model-value", "length", "masked"]),
221
+ r("button", {
222
+ type: "button",
223
+ class: "flex items-center justify-center rounded-full p-4 hover:bg-fm-color-neutral-gray-100",
224
+ "aria-label": e.toggleLabel,
225
+ onClick: l[3] || (l[3] = (n) => t("update:masked", !e.masked))
226
+ }, [
227
+ p(c, {
228
+ name: e.masked ? "visibility" : "visibility_off",
229
+ size: "md",
230
+ class: "text-fm-color-neutral-gray-300"
231
+ }, null, 8, ["name"])
232
+ ], 8, Y)
233
+ ]);
234
+ };
235
+ }
236
+ });
237
+ export {
238
+ ae as _,
239
+ le as a,
240
+ te as b,
241
+ ee as c,
242
+ B as s
243
+ };