@feedmepos/mf-menu 0.31.30-beta.1 → 0.31.31-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/{App-CrQBq4gc.js → App-1TX8v7ZA.js} +10 -8
  2. package/dist/{ApplyProduct.vue_vue_type_script_setup_true_lang-D00UOSsK.js → ApplyProduct.vue_vue_type_script_setup_true_lang-CR7QrFUG.js} +12 -12
  3. package/dist/{Catalog-D4m8x_f2.js → Catalog-DWClc58s.js} +75 -74
  4. package/dist/{Category-sQll5ITQ.js → Category-BqKFvFam.js} +60 -60
  5. package/dist/{Category-Ql1kDDH-.js → Category-IYMtMoT-.js} +28 -28
  6. package/dist/{CookingGuide-CSutufcu.js → CookingGuide-BayJ6zj4.js} +103 -101
  7. package/dist/{CustomAttributeChip.vue_vue_type_script_setup_true_lang-BqhYFXNG.js → CustomAttributeChip.vue_vue_type_script_setup_true_lang-Ceq86b3d.js} +1 -1
  8. package/dist/{Group-CnBE6CiB.js → Group-LqSX7ue6.js} +1 -1
  9. package/dist/{Group-YqVh5hC0.js → Group-RujTPTns.js} +3 -3
  10. package/dist/{Group.vue_vue_type_script_setup_true_lang-D9TSH4sS.js → Group.vue_vue_type_script_setup_true_lang-Dj9ZmkYe.js} +138 -137
  11. package/dist/{GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-CqriuXVC.js → GroupMarkupPriceDialog.vue_vue_type_script_setup_true_lang-D5GWkh3G.js} +16 -16
  12. package/dist/{ImportProductDialog.vue_vue_type_script_setup_true_lang-CaIU0RsG.js → ImportProductDialog.vue_vue_type_script_setup_true_lang-C4IrA3es.js} +4616 -4610
  13. package/dist/{Ingredient-MhLxJzAU.js → Ingredient-_tc8llr1.js} +65 -64
  14. package/dist/{InventoryBinding.vue_vue_type_script_setup_true_lang-CIbExsMI.js → InventoryBinding.vue_vue_type_script_setup_true_lang-DLFDf-VZ.js} +14 -12
  15. package/dist/{LinkProductSideSheet-D7vYZbFy.js → LinkProductSideSheet-C6rF-G1v.js} +14 -12
  16. package/dist/{MenuSetting-n0me5wY8.js → MenuSetting-xDHeeROY.js} +27 -26
  17. package/dist/{PrintRoute-CudZZYbe.js → PrintRoute-B_TFMn5e.js} +17 -15
  18. package/dist/{Product-DPZQgWET.js → Product-DdEEqrtc.js} +1 -1
  19. package/dist/{Product.vue_vue_type_script_setup_true_lang-CdaeZy_o.js → Product.vue_vue_type_script_setup_true_lang-zcistmwh.js} +257 -256
  20. package/dist/{ProductInternalTools-DgANHliV.js → ProductInternalTools-BcC7BF6W.js} +45 -45
  21. package/dist/{Products-Ez4R3jKW.js → Products-Cu0cJshV.js} +74 -72
  22. package/dist/{Publish-B4DEPe1I.js → Publish-Bm3Xiks1.js} +34 -32
  23. package/dist/{Recipe-Cripr-gY.js → Recipe-DWK-luIZ.js} +65 -63
  24. package/dist/{Scheduler-C-OV9d7d.js → Scheduler-Cb1TeBhW.js} +19 -19
  25. package/dist/{ServingSequence-DAumDXP1.js → ServingSequence-evSIET_8.js} +34 -34
  26. package/dist/{Setting-ByaHpIAN.js → Setting-Cn3kwC9F.js} +54 -53
  27. package/dist/{Subcategory-ro2aGt2H.js → Subcategory-q4m4qHsU.js} +34 -34
  28. package/dist/{Takeaway-CJb0ayDC.js → Takeaway-ClepHYGu.js} +14 -14
  29. package/dist/{Takeaway-AEg_0gKg.js → Takeaway-D-rdUZuh.js} +1 -1
  30. package/dist/{Takeaway.vue_vue_type_script_setup_true_lang-Cjj4bxoL.js → Takeaway.vue_vue_type_script_setup_true_lang-y9Yxstu2.js} +41 -40
  31. package/dist/{TreeEditorOpenner.vue_vue_type_script_setup_true_lang-Drf4n4rj.js → TreeEditorOpenner.vue_vue_type_script_setup_true_lang-BSeLfoOA.js} +1108 -1106
  32. package/dist/{Unit-1wzUBplb.js → Unit-IM8Naj82.js} +12 -12
  33. package/dist/{Variant-Dnz2v5u0.js → Variant-fzGvwaMo.js} +16 -16
  34. package/dist/{_id_-C3rBZ6zL.js → _id_-BsKNG9Qv.js} +22 -22
  35. package/dist/{app-sDPxNF11.js → app-BzQRUMTK.js} +3 -3
  36. package/dist/{app-CLY6CoaV.js → app-CoVUUCa_.js} +24 -24
  37. package/dist/app.js +1 -1
  38. package/dist/apps/mf-menu/tsconfig.app.tsbuildinfo +1 -1
  39. package/dist/assets/{linked-status-BZ4FSJ_Z.js → linked-status-eQqjvOq_.js} +2 -2
  40. package/dist/assets/{override-menu-C-fWJdVd.js → override-menu-C8NTBJgN.js} +2 -2
  41. package/dist/assets/{validate-menu-BDEM_Odz.js → validate-menu-Dn-OO7Ed.js} +2 -2
  42. package/dist/{catalog-bkFntZNz.js → catalog-CaXceaA2.js} +1 -1
  43. package/dist/{catalogSetting-zrKwGJ_C.js → catalogSetting-BGvckFdh.js} +1 -1
  44. package/dist/{category-BuPYaEsy.js → category-u5eo_Vjd.js} +5 -3
  45. package/dist/currency-BPHwez-E.js +7 -0
  46. package/dist/{dayjs.min-CR2NIyKn.js → dayjs.min-Bsr3tJCn.js} +1 -1
  47. package/dist/{index-BNORpjos.js → index-Bbx4iZ6n.js} +27 -27
  48. package/dist/{index-Dp_vLFQp.js → index-DSAG0yWh.js} +22 -20
  49. package/dist/{index-D20u0bCl.js → index-tRQb7RN_.js} +1 -1
  50. package/dist/{item-D4DcBt7N.js → item-BAqzKh4O.js} +801 -799
  51. package/dist/{jszip.min-CRJ61J9H.js → jszip.min-BKJtvCjM.js} +353 -353
  52. package/dist/{menu-Dw-Hpy07.js → menu-CDrsBjmr.js} +11 -9
  53. package/dist/menu-CsIzrBEr.js +74044 -0
  54. package/dist/packages/shared/src/permission/posPermission.d.ts +6 -0
  55. package/dist/{priceTier-EDLTGEjz.js → priceTier-DfbHonGe.js} +4 -4
  56. package/dist/{scheduler-CpPn2BlK.js → scheduler-DTWaBudB.js} +13 -11
  57. package/dist/{subcategory-B_W6vbM8.js → subcategory-D-R5r1Tr.js} +86 -84
  58. package/dist/{toExcel-D02OlDJu.js → toExcel-84VTtSA7.js} +2 -2
  59. package/dist/{unit-fro9wz1K.js → unit-B4zscxzo.js} +24 -23
  60. package/package.json +1 -1
  61. package/dist/currency-BISImIgX.js +0 -7
  62. package/dist/menu-ibc-yXVt.js +0 -107745
@@ -1,12 +1,13 @@
1
- import { defineComponent as G, computed as T, ref as F, watch as H, createVNode as n, resolveComponent as c, createBlock as V, openBlock as d, unref as e, withCtx as p, createElementVNode as _, createElementBlock as k, createCommentVNode as y, Fragment as K, renderList as q, toDisplayString as U } from "vue";
2
- import { u as J, D as Q, A as R, H as A } from "./menu-ibc-yXVt.js";
3
- import { useI18n as W, useCoreStore as X } from "@feedmepos/mf-common";
4
- import { useSnackbar as Y, components as Z, FmButtonVariant as ee, FmButtonColorThemeVariant as te } from "@feedmepos/ui-library";
5
- import { _ as M } from "./FormSection.vue_vue_type_script_setup_true_lang-CO4YGYLB.js";
6
- import { _ as le } from "./app-CLY6CoaV.js";
1
+ import { defineComponent as G, computed as T, ref as F, watch as K, createVNode as n, resolveComponent as c, createBlock as V, openBlock as d, unref as e, withCtx as p, createElementVNode as _, createElementBlock as k, createCommentVNode as y, Fragment as q, renderList as H, toDisplayString as U } from "vue";
2
+ import { Country as J } from "@feedmepos/core";
3
+ import { useI18n as Q, useCoreStore as R } from "@feedmepos/mf-common";
4
+ import { useSnackbar as W, components as X, FmButtonVariant as Y, FmButtonColorThemeVariant as Z } from "@feedmepos/ui-library";
5
+ import { _ as A } from "./FormSection.vue_vue_type_script_setup_true_lang-CO4YGYLB.js";
6
+ import { _ as ee } from "./app-CoVUUCa_.js";
7
+ import { u as te, A as le, D as M } from "./menu-CsIzrBEr.js";
7
8
  import { _ as ne } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
8
- import { C as b, a as m } from "./catalogSetting-zrKwGJ_C.js";
9
- import { u as oe } from "./priceTier-EDLTGEjz.js";
9
+ import { C as b, a as m } from "./catalogSetting-BGvckFdh.js";
10
+ import { u as oe } from "./priceTier-DfbHonGe.js";
10
11
  const ae = {
11
12
  class: "py-16"
12
13
  }, se = {
@@ -25,13 +26,13 @@ const ae = {
25
26
  class: "fm-typo-en-title-md-600"
26
27
  }, de = {
27
28
  class: "text-fm-color-typo-secondary"
28
- }, ye = /* @__PURE__ */ G({
29
+ }, we = /* @__PURE__ */ G({
29
30
  __name: "MenuSetting",
30
31
  setup(pe) {
31
32
  var h;
32
33
  const {
33
34
  t
34
- } = W(), v = J(), w = X(), N = Y(), B = Q(N), u = T(() => ({
35
+ } = Q(), v = te(), w = R(), N = W(), B = le(N), u = T(() => ({
35
36
  lowStock: v.state.menu.lowStockThreshold,
36
37
  taxSetting: v.state.menu.masterCatalogSetting,
37
38
  priceTierSettings: v.state.menu.priceTierSettings
@@ -42,14 +43,14 @@ const ae = {
42
43
  label: t("menu.menu_setting.tabs.price_group"),
43
44
  value: "price-group"
44
45
  }] : []]), i = F(b.transformTax((h = u.value.taxSetting) == null ? void 0 : h.inclusiveTaxes));
45
- H(() => u.value, (a) => {
46
+ K(() => u.value, (a) => {
46
47
  var l;
47
48
  i.value = b.transformTax((l = a.taxSetting) == null ? void 0 : l.inclusiveTaxes);
48
49
  });
49
50
  const S = T(() => {
50
51
  if (!w.currentCountry.value) return [];
51
52
  const a = i.value.mode === m.MANUAL ? i.value.inclusive ?? [] : [];
52
- return R.Country.getCountry(w.currentCountry.value).taxSystems.map((s) => {
53
+ return J.getCountry(w.currentCountry.value).taxSystems.map((s) => {
53
54
  const r = a.find((g) => g.systemCode === s.code);
54
55
  return {
55
56
  inclusive: (r == null ? void 0 : r.inclusive) || !1,
@@ -58,7 +59,7 @@ const ae = {
58
59
  });
59
60
  });
60
61
  function L(a) {
61
- const l = i.value, s = l.mode === m.AUTO ? b.manualTax(S.value) : A(l);
62
+ const l = i.value, s = l.mode === m.AUTO ? b.manualTax(S.value) : M(l);
62
63
  s.inclusive ?? (s.inclusive = []);
63
64
  const r = s.inclusive.findIndex((g) => g.systemCode === a.systemCode);
64
65
  r < 0 ? s.inclusive.push(a) : s.inclusive.splice(r, 1, a), i.value = s;
@@ -66,7 +67,7 @@ const ae = {
66
67
  async function O() {
67
68
  if (u.value.lowStock !== null && u.value.lowStock !== void 0 && !Number.isInteger(u.value.lowStock))
68
69
  return;
69
- const a = i.value.mode === m.AUTO ? null : A(i.value.inclusive);
70
+ const a = i.value.mode === m.AUTO ? null : M(i.value.inclusive);
70
71
  await B.minor(async () => {
71
72
  const l = u.value.lowStock === null || u.value.lowStock === void 0 || u.value.lowStock === 0;
72
73
  await v.updateMenuSetting({
@@ -89,15 +90,15 @@ const ae = {
89
90
  size: 50,
90
91
  cell: (a) => n("div", {
91
92
  class: "px-4 flex justify-end"
92
- }, [n(Z.FmButton, {
93
+ }, [n(X.FmButton, {
93
94
  icon: "delete",
94
- "text-color": te.NeutralGray400,
95
- variant: ee.Tertiary,
95
+ "text-color": Z.NeutralGray400,
96
+ variant: Y.Tertiary,
96
97
  onClick: () => f.deletePriceTier(a.row.original.key)
97
98
  }, null)])
98
99
  }];
99
100
  return (a, l) => {
100
- const s = c("FmTabs"), r = c("fm-radio"), g = c("fm-radio-group"), D = c("fm-checkbox"), E = c("FormItem"), $ = c("FmStepperField"), C = c("FmButton"), j = c("FmTable");
101
+ const s = c("FmTabs"), r = c("fm-radio"), g = c("fm-radio-group"), D = c("fm-checkbox"), $ = c("FormItem"), j = c("FmStepperField"), C = c("FmButton"), E = c("FmTable");
101
102
  return d(), V(ne, {
102
103
  heading: e(t)("menu.menu_setting.title")
103
104
  }, {
@@ -105,10 +106,10 @@ const ae = {
105
106
  items: I.value,
106
107
  modelValue: x.value,
107
108
  "onUpdate:modelValue": l[0] || (l[0] = (o) => x.value = o)
108
- }, null, 8, ["items", "modelValue"]), _("div", ae, [x.value === "conf" ? (d(), k("div", se, [n(M, {
109
+ }, null, 8, ["items", "modelValue"]), _("div", ae, [x.value === "conf" ? (d(), k("div", se, [n(A, {
109
110
  title: "Tax setting"
110
111
  }, {
111
- default: p(() => [n(E, {
112
+ default: p(() => [n($, {
112
113
  label: e(t)("menu.setting.tax.title")
113
114
  }, {
114
115
  default: p(() => [n(g, {
@@ -127,7 +128,7 @@ const ae = {
127
128
  sublabel: e(t)("menu.setting.tax.modes.manual.sublabel")
128
129
  }, null, 8, ["value", "label", "sublabel"])]),
129
130
  _: 1
130
- }, 8, ["model-value"]), i.value.mode === e(m).MANUAL ? (d(), k("div", ue, [(d(!0), k(K, null, q(S.value, (o) => (d(), V(D, {
131
+ }, 8, ["model-value"]), i.value.mode === e(m).MANUAL ? (d(), k("div", ue, [(d(!0), k(q, null, H(S.value, (o) => (d(), V(D, {
131
132
  key: o.systemCode,
132
133
  "model-value": o.inclusive,
133
134
  value: !0,
@@ -142,11 +143,11 @@ const ae = {
142
143
  _: 1
143
144
  }, 8, ["label"])]),
144
145
  _: 1
145
- }), n(M, {
146
+ }), n(A, {
146
147
  title: e(t)("menu.menu_setting.fields.low_stock.title"),
147
148
  "sub-title": e(t)("menu.menu_setting.fields.low_stock.subtitle")
148
149
  }, {
149
- default: p(() => [n($, {
150
+ default: p(() => [n(j, {
150
151
  "model-value": u.value.lowStock || null,
151
152
  min: 0,
152
153
  max: 1e3,
@@ -166,8 +167,8 @@ const ae = {
166
167
  label: e(t)("menu.price_tier.add_price_group"),
167
168
  icon: "add",
168
169
  onClick: e(f).create
169
- }, null, 8, ["label", "onClick"])]), n(le, null, {
170
- default: p(() => [n(j, {
170
+ }, null, 8, ["label", "onClick"])]), n(ee, null, {
171
+ default: p(() => [n(E, {
171
172
  "column-defs": z,
172
173
  "row-data": e(f).priceTiers.value,
173
174
  "page-size": e(f).priceTiers.value.length,
@@ -181,5 +182,5 @@ const ae = {
181
182
  }
182
183
  });
183
184
  export {
184
- ye as default
185
+ we as default
185
186
  };
@@ -1,11 +1,13 @@
1
- import { defineComponent as H, ref as k, computed as f, resolveComponent as g, createBlock as P, openBlock as p, unref as l, withCtx as m, createElementVNode as i, createVNode as c, createCommentVNode as J, toDisplayString as S, createElementBlock as L, Fragment as A, renderList as R, h as _, withModifiers as q } from "vue";
1
+ import { defineComponent as H, ref as k, computed as f, resolveComponent as g, createBlock as P, openBlock as p, unref as l, withCtx as m, createElementVNode as i, createVNode as c, createCommentVNode as J, toDisplayString as S, createElementBlock as L, Fragment as A, renderList as K, h as _, withModifiers as q } from "vue";
2
2
  import { useI18n as Q } from "@feedmepos/mf-common";
3
3
  import { components as W, useSnackbar as ee, useDialog as te } from "@feedmepos/ui-library";
4
4
  import { _ as oe } from "./ResponsiveFabButton.vue_vue_type_script_setup_true_lang-Cn-3MRBO.js";
5
- import { _ as ne } from "./app-CLY6CoaV.js";
6
- import { H as j, I as ae, J as B, G as V, u as le, O as re, D as se } from "./menu-ibc-yXVt.js";
5
+ import { _ as ne } from "./app-CoVUUCa_.js";
6
+ import { D as j, G as ae, H as R, B as V, u as le, M as re, A as se } from "./menu-CsIzrBEr.js";
7
7
  import { u as ie } from "./discardConfirm-BHni0LNu.js";
8
- import { L as ue } from "./LinkProductSideSheet-D7vYZbFy.js";
8
+ import "@feedmepos/core";
9
+ import "@feedmepos/core/entity";
10
+ import { L as ue } from "./LinkProductSideSheet-C6rF-G1v.js";
9
11
  import { _ as G } from "./FormSection.vue_vue_type_script_setup_true_lang-CO4YGYLB.js";
10
12
  import { _ as de } from "./index.vue_vue_type_script_setup_true_lang-BgqsTzLI.js";
11
13
  import { _ as ce } from "./PageLayout.vue_vue_type_script_setup_true_lang-2f0QfweQ.js";
@@ -55,13 +57,13 @@ const me = { class: "fm-typo-en-title-md-600" }, pe = { class: "space-y-32" }, _
55
57
  applyToItems: n.value.applyToItems.filter((a) => a !== r)
56
58
  };
57
59
  }
58
- const { t: u } = Q(), O = f(() => n.value._id ? u("menu.print_route.department_dialog.update.title") : u("menu.print_route.department_dialog.add.title")), I = f(() => n.value._id ? u("menu.print_route.department_dialog.update.action") : u("menu.print_route.department_dialog.add.action")), D = f(() => n.value.applyToItems.length), K = f(
60
+ const { t: u } = Q(), O = f(() => n.value._id ? u("menu.print_route.department_dialog.update.title") : u("menu.print_route.department_dialog.add.title")), I = f(() => n.value._id ? u("menu.print_route.department_dialog.update.action") : u("menu.print_route.department_dialog.add.action")), D = f(() => n.value.applyToItems.length), B = f(
59
61
  () => n.value.applyToItems.reduce((r, a) => (r[a] = [], r), {})
60
62
  ), e = k(""), o = f(() => {
61
63
  const r = e.value.toLowerCase();
62
64
  return N.categorizedItems.reduce((a, d) => {
63
65
  const z = d.items.filter(
64
- (C) => (!r || C.name.toLowerCase().includes(r)) && !!K.value[C._id]
66
+ (C) => (!r || C.name.toLowerCase().includes(r)) && !!B.value[C._id]
65
67
  );
66
68
  return z.length && a.push({ ...d, items: z }), a;
67
69
  }, []);
@@ -172,9 +174,9 @@ const me = { class: "fm-typo-en-title-md-600" }, pe = { class: "space-y-32" }, _
172
174
  ])
173
175
  ]),
174
176
  i("div", ge, [
175
- (p(!0), L(A, null, R(o.value, (s) => (p(), L("div", null, [
177
+ (p(!0), L(A, null, K(o.value, (s) => (p(), L("div", null, [
176
178
  i("div", he, S(s.name), 1),
177
- (p(!0), L(A, null, R(s.items, (Y) => (p(), L("div", be, [
179
+ (p(!0), L(A, null, K(s.items, (Y) => (p(), L("div", be, [
178
180
  i("div", xe, S(Y.name), 1),
179
181
  i("div", ke, [
180
182
  c(C, {
@@ -201,7 +203,7 @@ const me = { class: "fm-typo-en-title-md-600" }, pe = { class: "space-y-32" }, _
201
203
  function Ce(v, t) {
202
204
  return {
203
205
  module: V.F_MENU_MODULE_V4_KEY.enum.printDepartment,
204
- operation: B.F_OPERATION_TYPE.create,
206
+ operation: R.F_OPERATION_TYPE.create,
205
207
  data: V.FdoMenuPrintDepartment.parse(v),
206
208
  link: t.map((h) => ({
207
209
  module: V.F_MENU_MODULE_V4_KEY.enum.item,
@@ -212,7 +214,7 @@ function Ce(v, t) {
212
214
  function Ve(v, t) {
213
215
  return {
214
216
  module: V.F_MENU_MODULE_V4_KEY.enum.printDepartment,
215
- operation: B.F_OPERATION_TYPE.update,
217
+ operation: R.F_OPERATION_TYPE.update,
216
218
  data: V.FdoMenuPrintDepartment.parse(v),
217
219
  link: t.map((h) => ({
218
220
  module: V.F_MENU_MODULE_V4_KEY.enum.item,
@@ -223,7 +225,7 @@ function Ve(v, t) {
223
225
  function we(v) {
224
226
  return {
225
227
  module: V.F_MENU_MODULE_V4_KEY.enum.printDepartment,
226
- operation: B.F_OPERATION_TYPE.delete,
228
+ operation: R.F_OPERATION_TYPE.delete,
227
229
  data: v._id
228
230
  };
229
231
  }
@@ -237,7 +239,7 @@ const Ee = {
237
239
  class: "fm-typo-en-body-lg-600"
238
240
  }, Le = {
239
241
  class: "fm-typo-en-body-md-400 text-fm-color-typo-secondary"
240
- }, Ye = /* @__PURE__ */ H({
242
+ }, je = /* @__PURE__ */ H({
241
243
  __name: "PrintRoute",
242
244
  setup(v) {
243
245
  const {
@@ -331,7 +333,7 @@ const Ee = {
331
333
  await n.updateMenu(we(e), e.name, !0);
332
334
  });
333
335
  }
334
- const I = k(""), D = k(), K = f(() => {
336
+ const I = k(""), D = k(), B = f(() => {
335
337
  if (!I.value) return b.value;
336
338
  const e = I.value.toLowerCase();
337
339
  return b.value.filter((o) => o.name.toLowerCase().includes(e));
@@ -376,7 +378,7 @@ const Ee = {
376
378
  class: "w-full px-16 xs:block hidden flex-1 min-h-0 overflow-scroll pb-64",
377
379
  separator: ""
378
380
  }, {
379
- default: m(() => [(p(!0), L(A, null, R(K.value, (d) => (p(), P(r, {
381
+ default: m(() => [(p(!0), L(A, null, K(B.value, (d) => (p(), P(r, {
380
382
  key: d._id,
381
383
  label: d.name,
382
384
  style: {
@@ -416,5 +418,5 @@ const Ee = {
416
418
  }
417
419
  });
418
420
  export {
419
- Ye as default
421
+ je as default
420
422
  };
@@ -1,4 +1,4 @@
1
- import { a as f } from "./Product.vue_vue_type_script_setup_true_lang-CdaeZy_o.js";
1
+ import { a as f } from "./Product.vue_vue_type_script_setup_true_lang-zcistmwh.js";
2
2
  export {
3
3
  f as default
4
4
  };