@feedmepos/mf-hrm-portal 2.1.1-dev.3 → 2.1.1-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 (32) hide show
  1. package/dist/ApprovalCodeList-CXJyMKEg.js +757 -0
  2. package/dist/{AuditLogList-Q4L5Te8O.js → AuditLogList-CXUkbDyT.js} +3 -3
  3. package/dist/{EmployeeList-GtKmJZbf.js → EmployeeList-BSfUFTcN.js} +4 -4
  4. package/dist/{GrantUserList-CnLjOi5_.js → GrantUserList-DKP4MBQM.js} +175 -182
  5. package/dist/Main-CblWfQk_.js +122 -0
  6. package/dist/{Main-cskEZ3k_.js → Main-CyCfz4ka.js} +9 -9
  7. package/dist/{Main-DLlpEU3j.js → Main-Cz1pfe2k.js} +5 -5
  8. package/dist/{PermissionSetList-C2fK2pTz.js → PermissionSetList-BwyblSeE.js} +5 -5
  9. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CMh0DL1_.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-BJ-PZ2Nv.js} +599 -599
  10. package/dist/{RoleList-CcuT1ERb.js → RoleList-CXYgCmHp.js} +6 -6
  11. package/dist/{TeamMemberList-Dfs2iNdC.js → TeamMemberList-CnLbqaPS.js} +6 -6
  12. package/dist/{TimesheetList-B1H_6zfP.js → TimesheetList-s_bP5OGA.js} +5 -5
  13. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_91afda4e_lang-DeTpbaRk.js → TimesheetList.vue_vue_type_style_index_0_scoped_91afda4e_lang-BCLv-2Re.js} +2 -2
  14. package/dist/{app-DX-PG6wx.js → app-BP0oihBR.js} +783 -752
  15. package/dist/app.js +1 -1
  16. package/dist/{dayjs.min-BJrHE7oz.js → dayjs.min-BTSZLci9.js} +1 -1
  17. package/dist/{employee-BJcqtqLM.js → employee-BPv1j6T4.js} +3 -3
  18. package/dist/{iteration-Cfaqt-0s.js → iteration-BNA1cEos.js} +1 -1
  19. package/dist/{lodash-ClKqCmlZ.js → lodash-DKG9IyB-.js} +1 -1
  20. package/dist/{role-CR_-nBDY.js → role-BS3LFO8u.js} +1 -1
  21. package/dist/{rule-BB-3S-2R.js → rule-DaSLVZWm.js} +2 -2
  22. package/dist/src/stores/approval-code.d.ts +6 -6
  23. package/dist/src/types/approval-code.d.ts +60 -20
  24. package/dist/src/views/approval-code/ApprovalCodeList.vue.d.ts +1 -1
  25. package/dist/src/views/approval-code/components/ApprovalCodeCreatedDialog.vue.d.ts +9 -0
  26. package/dist/src/views/approval-code/components/ApprovalCodeForm.vue.d.ts +6 -1
  27. package/dist/src/views/approval-code/locales/index.d.ts +44 -12
  28. package/dist/tsconfig.app.tsbuildinfo +1 -1
  29. package/dist/{useReportPermissions-ybHA26cJ.js → useReportPermissions-J3-DjopO.js} +3 -3
  30. package/package.json +1 -1
  31. package/dist/ApprovalCodeList-BH5sgVMU.js +0 -638
  32. package/dist/Main-Cn7Dawg4.js +0 -120
package/dist/app.js CHANGED
@@ -1,4 +1,4 @@
1
- import { f as e, i as r, r as o } from "./app-DX-PG6wx.js";
1
+ import { f as e, i as r, r as o } from "./app-BP0oihBR.js";
2
2
  export {
3
3
  e as FmApp,
4
4
  r as i18nMessages,
@@ -1,4 +1,4 @@
1
- import { g as Q, c as K } from "./app-DX-PG6wx.js";
1
+ import { g as Q, c as K } from "./app-BP0oihBR.js";
2
2
  var E = { exports: {} };
3
3
  (function(V, X) {
4
4
  (function(W, k) {
@@ -1,10 +1,10 @@
1
- import { d as g } from "./dayjs.min-BJrHE7oz.js";
1
+ import { d as g } from "./dayjs.min-BTSZLci9.js";
2
2
  import { defineStore as $, storeToRefs as T } from "pinia";
3
3
  import { ref as m } from "vue";
4
- import { s as E } from "./iteration-Cfaqt-0s.js";
4
+ import { s as E } from "./iteration-BNA1cEos.js";
5
5
  import { b as i, g as f, u as w } from "./restaurant-YOVMuuFY.js";
6
6
  import { i as v } from "./utils-BZkjJbju.js";
7
- import { u as _ } from "./role-CR_-nBDY.js";
7
+ import { u as _ } from "./role-BS3LFO8u.js";
8
8
  const o = {
9
9
  async readEmployees() {
10
10
  return f(await i().get("/pos-users"));
@@ -1,4 +1,4 @@
1
- import { c as B } from "./app-DX-PG6wx.js";
1
+ import { c as B } from "./app-BP0oihBR.js";
2
2
  var ma = {}, Zt = {}, l = {}, ji = {}, Ei = {}, Ii = {}, Dn = {};
3
3
  (function(e) {
4
4
  Object.defineProperty(e, "__esModule", { value: !0 }), e.getParsedType = e.ZodParsedType = e.util = void 0;
@@ -1,4 +1,4 @@
1
- import { c as jt } from "./app-DX-PG6wx.js";
1
+ import { c as jt } from "./app-BP0oihBR.js";
2
2
  var Jr = { exports: {} };
3
3
  /**
4
4
  * @license
@@ -1,7 +1,7 @@
1
1
  import { defineStore as S, storeToRefs as _ } from "pinia";
2
2
  import { ref as w } from "vue";
3
3
  import { useCoreStore as g } from "@feedmepos/mf-common";
4
- import { s as y } from "./iteration-Cfaqt-0s.js";
4
+ import { s as y } from "./iteration-BNA1cEos.js";
5
5
  import { g as d, b as f, u as I } from "./restaurant-YOVMuuFY.js";
6
6
  const R = {
7
7
  async readRoles() {
@@ -1,5 +1,5 @@
1
- import { s as k, c as H, e as h } from "./iteration-Cfaqt-0s.js";
2
- import { d as R, P as x, e as L, l as j, k as Y, b as J } from "./app-DX-PG6wx.js";
1
+ import { s as k, c as H, e as h } from "./iteration-BNA1cEos.js";
2
+ import { d as R, P as x, e as L, l as j, k as Y, b as J } from "./app-BP0oihBR.js";
3
3
  import { s as Z } from "./utils-BZkjJbju.js";
4
4
  import { g as b, b as v, q as F, u as q } from "./restaurant-YOVMuuFY.js";
5
5
  import { defineStore as W, storeToRefs as V } from "pinia";
@@ -11,7 +11,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
11
11
  key: import("@/types/approval-code").ApprovalCodePermission;
12
12
  subject: string;
13
13
  actions: string[];
14
- conditions?: Record<string, unknown> | undefined;
14
+ conditions?: (Record<string, unknown> | null) | undefined;
15
15
  }[];
16
16
  status: "active" | "used" | "revoked";
17
17
  usedAt?: string | undefined;
@@ -31,7 +31,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
31
31
  key: import("@/types/approval-code").ApprovalCodePermission;
32
32
  subject: string;
33
33
  actions: string[];
34
- conditions?: Record<string, unknown> | undefined;
34
+ conditions?: (Record<string, unknown> | null) | undefined;
35
35
  }[];
36
36
  status: "active" | "used" | "revoked";
37
37
  usedAt?: string | undefined;
@@ -57,7 +57,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
57
57
  key: import("@/types/approval-code").ApprovalCodePermission;
58
58
  subject: string;
59
59
  actions: string[];
60
- conditions?: Record<string, unknown> | undefined;
60
+ conditions?: (Record<string, unknown> | null) | undefined;
61
61
  }[];
62
62
  status: "active" | "used" | "revoked";
63
63
  usedAt?: string | undefined;
@@ -77,7 +77,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
77
77
  key: import("@/types/approval-code").ApprovalCodePermission;
78
78
  subject: string;
79
79
  actions: string[];
80
- conditions?: Record<string, unknown> | undefined;
80
+ conditions?: (Record<string, unknown> | null) | undefined;
81
81
  }[];
82
82
  status: "active" | "used" | "revoked";
83
83
  usedAt?: string | undefined;
@@ -103,7 +103,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
103
103
  key: import("@/types/approval-code").ApprovalCodePermission;
104
104
  subject: string;
105
105
  actions: string[];
106
- conditions?: Record<string, unknown> | undefined;
106
+ conditions?: (Record<string, unknown> | null) | undefined;
107
107
  }[];
108
108
  status: "active" | "used" | "revoked";
109
109
  usedAt?: string | undefined;
@@ -123,7 +123,7 @@ export declare const useApprovalCodeStore: import("pinia").StoreDefinition<"appr
123
123
  key: import("@/types/approval-code").ApprovalCodePermission;
124
124
  subject: string;
125
125
  actions: string[];
126
- conditions?: Record<string, unknown> | undefined;
126
+ conditions?: (Record<string, unknown> | null) | undefined;
127
127
  }[];
128
128
  status: "active" | "used" | "revoked";
129
129
  usedAt?: string | undefined;
@@ -1,37 +1,49 @@
1
- export declare const APPROVAL_CODE_PERMISSIONS: readonly ["void", "refund", "discount", "changePrice", "claimDeposit", "payment", "resend", "changePaymentType", "openDrawer", "openCounter", "closeCounter", "printReceipt"];
1
+ export declare const APPROVAL_CODE_PERMISSIONS: readonly ["void", "refund", "discount", "changePrice", "claimDeposit", "payment", "resend", "changePaymentType", "openDrawer", "counter"];
2
2
  export type ApprovalCodePermission = (typeof APPROVAL_CODE_PERMISSIONS)[number];
3
3
  /**
4
4
  * A single CASL-shaped rule keyed by the approval-code action it grants, as
5
5
  * stored/returned by the backend. Mirrors `FdoApprovalCodeRule` from
6
- * `apps/hrm-backend/src/grant-user/grant-user.entity.ts`.
6
+ * `apps/hrm-backend/src/grant-user/grant-user.entity.ts`. `conditions` is
7
+ * `null` (not just absent) for keys whose full-POS counterpart carries no
8
+ * conditions at all (see `APPROVAL_CODE_RULE_TEMPLATES`).
7
9
  */
8
10
  export interface IFdtoApprovalCodeRule {
9
11
  key: ApprovalCodePermission;
10
12
  subject: string;
11
13
  actions: string[];
12
- conditions?: Record<string, unknown>;
14
+ conditions?: Record<string, unknown> | null;
13
15
  }
14
16
  /**
15
17
  * The rule template (subject/actions/conditions, minus `key`) for every
16
18
  * approval-code permission the portal can grant. The portal is now the
17
19
  * owner of these shapes (KDI-4982 Task A2) — the backend only validates the
18
20
  * shape of whatever rule it receives, it no longer composes rules itself.
19
- * These values were copied verbatim from the backend's server-side
20
- * key-to-rule manifest before it was deleted; they must keep matching
21
- * `FdoApprovalCodeRule`'s shape validation in
22
- * `apps/hrm-backend/src/grant-user/grant-user.entity.ts`.
21
+ * These shapes are not arbitrary: they mirror `FullPosPermissions`
22
+ * (`packages/permission/src/common/full-pos-permissions.ts`) exactly, entry
23
+ * for entry, so a code granting one of these keys evaluates identically to
24
+ * the corresponding rule a full-POS-permission staff member already has.
25
+ * That's why `refund`/`openDrawer`/`counter` carry `conditions: null` — full
26
+ * POS has no `operation` condition on those subjects — and why `discount`
27
+ * always carries an `adjustment` condition (full POS's unbounded discount
28
+ * rule is `adjustment: { $lte: 1 }`, i.e. "up to 100%", not "no adjustment
29
+ * condition at all"). `counter` is a single key (not separate open/close
30
+ * keys) because POS guards both opening and closing a counter with the same
31
+ * `counterRecord`/`manage` permission — two identical rules would just be
32
+ * redundant.
23
33
  */
24
34
  export declare const APPROVAL_CODE_RULE_TEMPLATES: Record<ApprovalCodePermission, {
25
35
  subject: string;
26
36
  actions: string[];
27
- conditions: Record<string, unknown>;
37
+ conditions: Record<string, unknown> | null;
28
38
  }>;
29
39
  /**
30
40
  * Compose the full CASL-shaped rule for `key`, ready to send to the backend
31
- * as-is. Only `discount` honors `params.maxPercentage`, appending it as an
32
- * `adjustment: { $lte: maxPercentage / 100 } }` condition every other key
33
- * ignores `params` if passed, matching the deleted backend manifest's
34
- * `buildRule` behavior.
41
+ * as-is, saved shape-identical to the corresponding `FullPosPermissions`
42
+ * entry. Keys whose template has `conditions: null` always return `null`
43
+ * there's nothing to clone. Only `discount` honors `params.maxPercentage`,
44
+ * setting the `adjustment.$lte` fraction (defaulting to `1`, i.e. no
45
+ * effective ceiling, matching full POS's unbounded discount rule) — every
46
+ * other object-conditions key ignores `params` if passed.
35
47
  */
36
48
  export declare function buildApprovalCodeRule(key: ApprovalCodePermission, params?: {
37
49
  maxPercentage?: number;
@@ -61,9 +73,31 @@ export interface IFdtoCreateApprovalCodeReq {
61
73
  /**
62
74
  * Read the discount ceiling back out of a rule's `conditions.adjustment.$lte`
63
75
  * fraction (0-1) as a whole percentage (1-100). Returns `undefined` when the
64
- * rule has no adjustment ceiling.
76
+ * rule has no adjustment ceiling, when `conditions` is `null` (full-POS-style
77
+ * null-condition rules never carry an adjustment), or when the ceiling is
78
+ * 100% — `$lte: 1` is the unbounded/default form (see
79
+ * `APPROVAL_CODE_RULE_TEMPLATES.discount`), so showing "≤100%" would be
80
+ * meaningless noise on every plain discount grant.
65
81
  */
66
82
  export declare function getRuleAdjustmentCeilingPercentage(rule: IFdtoApprovalCodeRule): number | undefined;
83
+ /**
84
+ * Human-readable labels for a code's permission rules, e.g. `["Refund",
85
+ * "Apply discount ≤20%"]`. `translate` is the caller's i18n `t` — labels
86
+ * live under `approvalCode.permissions.<key>`.
87
+ */
88
+ export declare function formatPermissionLabels(permissions: IFdtoApprovalCodeRule[], translate: (key: string) => string): string[];
89
+ /**
90
+ * The shared context of a code (or batch of codes): who it's named for, what
91
+ * it unlocks, and where — e.g. "Cashier 1 · Refund · Gulu-gulu Main".
92
+ * Missing parts are skipped rather than leaving dangling separators.
93
+ */
94
+ export declare function buildCodeContextLine(code: Pick<IFdtoApprovalCode, 'name' | 'permissions'>, restaurantName: string | undefined, translate: (key: string) => string): string;
95
+ /**
96
+ * Clipboard text for sharing a single code — the context line with the
97
+ * passcode appended (e.g. "Cashier 1 · Refund · Gulu-gulu Main · Code 3843"),
98
+ * matching the batch format's context-first ordering.
99
+ */
100
+ export declare function buildCodeClipboardText(code: Pick<IFdtoApprovalCode, 'name' | 'passcode' | 'permissions'>, restaurantName: string | undefined, translate: (key: string) => string): string;
67
101
  /**
68
102
  * Validate the optional discount max-percentage input. Undefined, empty, or
69
103
  * whitespace-only means "no ceiling" and is valid; otherwise the value must
@@ -79,15 +113,21 @@ export declare function resolveMaxPercentage(value: number | string | undefined)
79
113
  /**
80
114
  * A selectable action option in the create form / list filter (KDI-4982 UI
81
115
  * redesign). The 8 options mirror the POS v7 passcode prompts exactly:
82
- * `changePrice`, `claimDeposit`, `payment` are not offered (the latter two
83
- * have no passcode prompt on POS v7 at all), and open/close counter share one
84
- * option because POS guards both with the same `counterRecord` permission.
85
- * The 12-key `APPROVAL_CODE_PERMISSIONS` enum is untouched stored rules and
86
- * the wire format still use the full key set, so legacy codes keep rendering.
116
+ * `claimDeposit` and `payment` are not offered (neither has a passcode prompt
117
+ * on POS v7) even though both have `APPROVAL_CODE_RULE_TEMPLATES` entries
118
+ * matching full POS. `changePrice` is offered as "Input Custom Price" — POS
119
+ * prompts for a passcode when a custom price is keyed in. `counter` covers
120
+ * both opening and closing a counter (one `counterRecord`/`manage` rule, see
121
+ * `APPROVAL_CODE_RULE_TEMPLATES.counter`). `printReceipt` was dropped
122
+ * entirely (no full-POS counterpart, and this feature has no pre-existing
123
+ * stored data to keep rendering) — there is a 1:1 mapping between every
124
+ * option and its single `ApprovalCodePermission` rule key, so each option
125
+ * carries `ruleKey` directly rather than an array (there is no longer any
126
+ * option backed by more than one rule).
87
127
  */
88
128
  export interface AccessCodeActionOption {
89
- key: 'printReceipt' | 'resend' | 'openDrawer' | 'counter' | 'discount' | 'void' | 'changePaymentType' | 'refund';
90
- ruleKeys: ApprovalCodePermission[];
129
+ key: 'resend' | 'openDrawer' | 'counter' | 'discount' | 'changePrice' | 'void' | 'changePaymentType' | 'refund';
130
+ ruleKey: ApprovalCodePermission;
91
131
  }
92
132
  export type AccessCodeActionOptionKey = AccessCodeActionOption['key'];
93
133
  export declare const ACCESS_CODE_ACTION_OPTIONS: AccessCodeActionOption[];
@@ -12,7 +12,7 @@ declare const _default: import("vue").DefineComponent<{}, {
12
12
  key: import("@/types/approval-code").ApprovalCodePermission;
13
13
  subject: string;
14
14
  actions: string[];
15
- conditions?: Record<string, unknown> | undefined;
15
+ conditions?: (Record<string, unknown> | null) | undefined;
16
16
  }[];
17
17
  status: "active" | "used" | "revoked";
18
18
  usedAt?: string | undefined;
@@ -0,0 +1,9 @@
1
+ import { type IFdtoApprovalCode } from '@/types/approval-code';
2
+ declare const _default: import("vue").DefineComponent<{}, {
3
+ open: (created: IFdtoApprovalCode[]) => void;
4
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
5
+ createAnother: () => any;
6
+ }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
7
+ onCreateAnother?: (() => any) | undefined;
8
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
9
+ export default _default;
@@ -1,3 +1,4 @@
1
+ import { type IFdtoApprovalCode } from '@/types/approval-code';
1
2
  declare var __VLS_1: {
2
3
  trigger: () => void;
3
4
  };
@@ -7,7 +8,11 @@ type __VLS_Slots = {} & {
7
8
  declare const __VLS_component: import("vue").DefineComponent<{}, {
8
9
  show: import("vue").Ref<boolean, boolean>;
9
10
  trigger: () => void;
10
- }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
11
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
12
+ created: (codes: IFdtoApprovalCode[]) => any;
13
+ }, string, import("vue").PublicProps, Readonly<{}> & Readonly<{
14
+ onCreated?: ((codes: IFdtoApprovalCode[]) => any) | undefined;
15
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
11
16
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
12
17
  export default _default;
13
18
  type __VLS_WithSlots<T, S> = T & {
@@ -12,6 +12,7 @@ export declare const i18nMessages: {
12
12
  title: string;
13
13
  section: string;
14
14
  name: string;
15
+ namePlaceholder: string;
15
16
  nameRequired: string;
16
17
  restaurant: string;
17
18
  selectRestaurant: string;
@@ -48,15 +49,22 @@ export declare const i18nMessages: {
48
49
  resend: string;
49
50
  changePaymentType: string;
50
51
  openDrawer: string;
51
- openCounter: string;
52
- closeCounter: string;
53
- printReceipt: string;
54
52
  counter: string;
55
53
  };
56
54
  create: {
57
55
  successMessage: string;
58
56
  successMessageBulk: string;
59
57
  };
58
+ created: {
59
+ title: string;
60
+ titleBulk: string;
61
+ subtitle: string;
62
+ subtitleBulk: string;
63
+ copy: string;
64
+ copyAll: string;
65
+ createAnother: string;
66
+ done: string;
67
+ };
60
68
  revoke: {
61
69
  title: string;
62
70
  message: string;
@@ -91,6 +99,7 @@ export declare const i18nMessages: {
91
99
  title: string;
92
100
  section: string;
93
101
  name: string;
102
+ namePlaceholder: string;
94
103
  nameRequired: string;
95
104
  restaurant: string;
96
105
  selectRestaurant: string;
@@ -127,15 +136,22 @@ export declare const i18nMessages: {
127
136
  resend: string;
128
137
  changePaymentType: string;
129
138
  openDrawer: string;
130
- openCounter: string;
131
- closeCounter: string;
132
- printReceipt: string;
133
139
  counter: string;
134
140
  };
135
141
  create: {
136
142
  successMessage: string;
137
143
  successMessageBulk: string;
138
144
  };
145
+ created: {
146
+ title: string;
147
+ titleBulk: string;
148
+ subtitle: string;
149
+ subtitleBulk: string;
150
+ copy: string;
151
+ copyAll: string;
152
+ createAnother: string;
153
+ done: string;
154
+ };
139
155
  revoke: {
140
156
  title: string;
141
157
  message: string;
@@ -170,6 +186,7 @@ export declare const i18nMessages: {
170
186
  title: string;
171
187
  section: string;
172
188
  name: string;
189
+ namePlaceholder: string;
173
190
  nameRequired: string;
174
191
  restaurant: string;
175
192
  selectRestaurant: string;
@@ -206,15 +223,22 @@ export declare const i18nMessages: {
206
223
  resend: string;
207
224
  changePaymentType: string;
208
225
  openDrawer: string;
209
- openCounter: string;
210
- closeCounter: string;
211
- printReceipt: string;
212
226
  counter: string;
213
227
  };
214
228
  create: {
215
229
  successMessage: string;
216
230
  successMessageBulk: string;
217
231
  };
232
+ created: {
233
+ title: string;
234
+ titleBulk: string;
235
+ subtitle: string;
236
+ subtitleBulk: string;
237
+ copy: string;
238
+ copyAll: string;
239
+ createAnother: string;
240
+ done: string;
241
+ };
218
242
  revoke: {
219
243
  title: string;
220
244
  message: string;
@@ -249,6 +273,7 @@ export declare const i18nMessages: {
249
273
  title: string;
250
274
  section: string;
251
275
  name: string;
276
+ namePlaceholder: string;
252
277
  nameRequired: string;
253
278
  restaurant: string;
254
279
  selectRestaurant: string;
@@ -285,15 +310,22 @@ export declare const i18nMessages: {
285
310
  resend: string;
286
311
  changePaymentType: string;
287
312
  openDrawer: string;
288
- openCounter: string;
289
- closeCounter: string;
290
- printReceipt: string;
291
313
  counter: string;
292
314
  };
293
315
  create: {
294
316
  successMessage: string;
295
317
  successMessageBulk: string;
296
318
  };
319
+ created: {
320
+ title: string;
321
+ titleBulk: string;
322
+ subtitle: string;
323
+ subtitleBulk: string;
324
+ copy: string;
325
+ copyAll: string;
326
+ createAnother: string;
327
+ done: string;
328
+ };
297
329
  revoke: {
298
330
  title: string;
299
331
  message: string;