@feedmepos/mf-hrm-portal 2.2.1-dev.2 → 2.2.1-dev.4

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 (47) hide show
  1. package/dist/{ApprovalCodeList-DZajn7xx.js → ApprovalCodeList-CJpbX8H_.js} +5 -5
  2. package/dist/AuditLogList-A1217xlw.js +1722 -0
  3. package/dist/ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BWNAtv1G.js +438 -0
  4. package/dist/{EmployeeList-DDuxDdlJ.js → EmployeeList-Gh8aU7BY.js} +6 -6
  5. package/dist/{GrantUserList-735upmIE.js → GrantUserList-vpaCAv1u.js} +6 -6
  6. package/dist/{Main-tQ6MrkkP.js → Main-38YNSkW6.js} +11 -11
  7. package/dist/{Main-DyZ6dJ2d.js → Main-CXjbH7aE.js} +8 -8
  8. package/dist/{Main-CHHR0r5b.js → Main-GwRBJ3al.js} +5 -5
  9. package/dist/{PermissionSetList-ZxLNYPEB.js → PermissionSetList-CuzFQm7J.js} +7 -7
  10. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-C9bkMb41.js +4169 -0
  11. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-DVVSBIx2.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js} +1 -1
  12. package/dist/RoleList-C5VZbU3f.js +725 -0
  13. package/dist/{TeamMemberList-B58boeR9.js → TeamMemberList-ChrUNLsA.js} +9 -9
  14. package/dist/{TimesheetList-DMnNVVlB.js → TimesheetList-Dqx3RZ4c.js} +7 -7
  15. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-Ch8Ng6wi.js → TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-rtbLyLSE.js} +3 -3
  16. package/dist/{app-CtuaUGnw.js → app-CPByRtdD.js} +10 -6
  17. package/dist/app.js +1 -1
  18. package/dist/{approval-code-Q4666xp5.js → approval-code-jIjkeVEb.js} +1 -1
  19. package/dist/{dayjs.min-9pRWRTS9.js → dayjs.min-DeAdykwc.js} +1 -1
  20. package/dist/{employee-JmfN-rQF.js → employee-dFHap_s3.js} +4 -4
  21. package/dist/{grant-user-CQZaTzVt.js → grant-user-SNiDV22U.js} +1 -1
  22. package/dist/{iteration-CkzTvtOv.js → iteration-B_EcCwqv.js} +1 -1
  23. package/dist/{lodash-BNBzabCH.js → lodash-C5UxxqU2.js} +1 -1
  24. package/dist/{restaurant-YOVMuuFY.js → restaurant-BTpBmfBV.js} +12 -14
  25. package/dist/role-8ZQb8Cap.js +92 -0
  26. package/dist/rule-DJZO_Kev.js +1094 -0
  27. package/dist/src/composables/useReportPermissions.d.ts +1 -0
  28. package/dist/src/helpers/rule.d.ts +10 -1
  29. package/dist/src/stores/role.d.ts +6 -6
  30. package/dist/src/views/audit-log/change-nodes.d.ts +14 -0
  31. package/dist/src/views/audit-log/locales/index.d.ts +4 -0
  32. package/dist/src/views/audit-log/operation-status.d.ts +2 -0
  33. package/dist/src/views/team/components/PortalConditionForm.vue.d.ts +44 -0
  34. package/dist/src/views/team/condition-builders/ConditionBuilderForm.vue.d.ts +39 -0
  35. package/dist/style.css +1 -1
  36. package/dist/tsconfig.app.tsbuildinfo +1 -1
  37. package/dist/{useAppStore-DNTlIeMv.js → useAppStore-DCwd8GWN.js} +1 -1
  38. package/dist/{useLoading-BH02lYns.js → useLoading-CXzTpIVv.js} +1 -1
  39. package/dist/useReportPermissions-Phq7vqLK.js +71 -0
  40. package/package.json +1 -1
  41. package/dist/AuditLogList-CpKIq8I0.js +0 -1611
  42. package/dist/ConditionFormHost.vue_vue_type_script_setup_true_lang-DCfvikJB.js +0 -387
  43. package/dist/PortalPermissionEditor.vue_vue_type_script_setup_true_lang-MoFevdmL.js +0 -4122
  44. package/dist/RoleList-BZbEGpCi.js +0 -685
  45. package/dist/role-R_9sO2QD.js +0 -82
  46. package/dist/rule-D1pKbnKR.js +0 -1066
  47. package/dist/useReportPermissions-ByxRc3kz.js +0 -70
@@ -11,4 +11,5 @@ export declare function useReportPermissions(): {
11
11
  }[]>;
12
12
  availableReportKeys: import("vue").ComputedRef<Set<string>>;
13
13
  isLoading: import("vue").ComputedRef<boolean>;
14
+ isLoaded: import("vue").ComputedRef<boolean>;
14
15
  };
@@ -26,7 +26,16 @@ export declare function fromValue(values: string[], maxDiscountPercentage: numbe
26
26
  actions: ("delete" | "create" | "update" | "read" | "manage")[];
27
27
  conditions: object;
28
28
  }[];
29
- export declare function toRule(v: string): Rule;
29
+ export declare function toRule(v: string): Rule | undefined;
30
+ export interface RoleFormPermissionSplit {
31
+ /** Checkbox value strings the role form can render and round-trip. */
32
+ values: string[];
33
+ /** Valid rules the form has no checkbox for — must be saved back verbatim. */
34
+ passthrough: FdoPermissionRule[];
35
+ /** Corrupted rules (no subject / empty actions) — omitted on save to repair the doc. */
36
+ dropped: FdoPermissionRule[];
37
+ }
38
+ export declare function splitRoleFormPermissions(permissions: FdoPermissionRule[], knownValues: Set<string>): RoleFormPermissionSplit;
30
39
  export declare function mapAndSortPermissions(permissions: Array<FdoPermissionRule | RawRule>, additionalPermissions?: ReadonlyArray<{
31
40
  subject: string | string[];
32
41
  label: string;
@@ -58,7 +58,7 @@ export declare const useRoleStore: () => {
58
58
  permissions: Record<string, any>[];
59
59
  }[]>;
60
60
  isLoading: import("vue").Ref<boolean, boolean>;
61
- readRoles: () => Promise<void>;
61
+ readRoles: (force?: boolean) => Promise<void>;
62
62
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
63
63
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
64
64
  deleteRole: (role: Role) => Promise<void>;
@@ -115,7 +115,7 @@ export declare const useRoleStore: () => {
115
115
  permissions: Record<string, any>[];
116
116
  }[]>;
117
117
  isLoading: import("vue").Ref<boolean, boolean>;
118
- readRoles: () => Promise<void>;
118
+ readRoles: (force?: boolean) => Promise<void>;
119
119
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
120
120
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
121
121
  deleteRole: (role: Role) => Promise<void>;
@@ -145,7 +145,7 @@ export declare const useRoleStore: () => {
145
145
  permissions: Record<string, any>[];
146
146
  }[]>;
147
147
  isLoading: import("vue").Ref<boolean, boolean>;
148
- readRoles: () => Promise<void>;
148
+ readRoles: (force?: boolean) => Promise<void>;
149
149
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
150
150
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
151
151
  deleteRole: (role: Role) => Promise<void>;
@@ -172,7 +172,7 @@ export declare const useRoleStore: () => {
172
172
  permissions: Record<string, any>[];
173
173
  }[]>;
174
174
  isLoading: import("vue").Ref<boolean, boolean>;
175
- readRoles: () => Promise<void>;
175
+ readRoles: (force?: boolean) => Promise<void>;
176
176
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
177
177
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
178
178
  deleteRole: (role: Role) => Promise<void>;
@@ -199,7 +199,7 @@ export declare const useRoleStore: () => {
199
199
  permissions: Record<string, any>[];
200
200
  }[]>;
201
201
  isLoading: import("vue").Ref<boolean, boolean>;
202
- readRoles: () => Promise<void>;
202
+ readRoles: (force?: boolean) => Promise<void>;
203
203
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
204
204
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
205
205
  deleteRole: (role: Role) => Promise<void>;
@@ -207,7 +207,7 @@ export declare const useRoleStore: () => {
207
207
  $dispose(): void;
208
208
  $id: "role";
209
209
  _customProperties: Set<string>;
210
- readRoles: () => Promise<void>;
210
+ readRoles: (force?: boolean) => Promise<void>;
211
211
  createRole: (dto: IFdtoUpdateRoleReq) => Promise<void>;
212
212
  updateRole: (roleId: string, dto: IFdtoUpdateRoleReq) => Promise<void>;
213
213
  deleteRole: (role: Role) => Promise<void>;
@@ -0,0 +1,14 @@
1
+ import type { ChangeNode } from '@feedmepos/hrm-permission';
2
+ export interface ChangeNodeDisplay {
3
+ label: string;
4
+ labelKey?: string;
5
+ type: 'add' | 'remove' | 'update';
6
+ beforeDisplay: string;
7
+ afterDisplay: string;
8
+ }
9
+ /** Render a single ChangeNode value (string | string[] | undefined) as display text. */
10
+ export declare function formatChangeValue(value: string | string[] | undefined): string;
11
+ /** Convert a ChangeNode into a flat display object for the UI. */
12
+ export declare function prepareChangeNodeDisplay(node: ChangeNode): ChangeNodeDisplay;
13
+ /** Decide whether to render changeNodes table (true) or fall back to raw diff (false). */
14
+ export declare function shouldRenderChangeNodes(changeNodes: ChangeNode[] | undefined): boolean;
@@ -142,6 +142,7 @@ export declare const i18nMessages: {
142
142
  rowHint: string;
143
143
  unlabeled: string;
144
144
  badge: string;
145
+ partialFailure: string;
145
146
  sheetHeader: string;
146
147
  entity: string;
147
148
  duration: string;
@@ -352,6 +353,7 @@ export declare const i18nMessages: {
352
353
  rowHint: string;
353
354
  unlabeled: string;
354
355
  badge: string;
356
+ partialFailure: string;
355
357
  sheetHeader: string;
356
358
  entity: string;
357
359
  duration: string;
@@ -562,6 +564,7 @@ export declare const i18nMessages: {
562
564
  rowHint: string;
563
565
  unlabeled: string;
564
566
  badge: string;
567
+ partialFailure: string;
565
568
  sheetHeader: string;
566
569
  entity: string;
567
570
  duration: string;
@@ -772,6 +775,7 @@ export declare const i18nMessages: {
772
775
  rowHint: string;
773
776
  unlabeled: string;
774
777
  badge: string;
778
+ partialFailure: string;
775
779
  sheetHeader: string;
776
780
  entity: string;
777
781
  duration: string;
@@ -0,0 +1,2 @@
1
+ import type { AuditLogEntry } from '@/types/audit-log';
2
+ export declare function hasFailedOperation(entry: Pick<AuditLogEntry, 'operations'>): boolean;
@@ -0,0 +1,44 @@
1
+ import type { ConditionBuilder } from '@feedmepos/hrm-permission/condition-builder';
2
+ import type { CoverConditionEntry, useCoverConditionOverride } from '@/composables/useCoverConditionOverride';
3
+ type __VLS_Props = {
4
+ entry: CoverConditionEntry;
5
+ builders: ConditionBuilder[];
6
+ subject: string;
7
+ timeZone: string;
8
+ coverOverride: ReturnType<typeof useCoverConditionOverride>;
9
+ inheritModeFor: (builder: ConditionBuilder) => 'inherit' | 'custom';
10
+ formValueFor: (builder: ConditionBuilder) => unknown;
11
+ hasChanges: boolean;
12
+ disable?: boolean;
13
+ fullWidth?: boolean;
14
+ /** Forwarded to ConditionBuilderForm's own title. Leave unset when the
15
+ * caller already renders this same string as its own header (e.g. a
16
+ * bottom sheet), so it isn't shown twice. */
17
+ title?: string;
18
+ };
19
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
20
+ apply: () => any;
21
+ "update-form": (payload: {
22
+ builder: ConditionBuilder;
23
+ form: unknown;
24
+ }) => any;
25
+ "update-inherit-mode": (payload: {
26
+ builder: ConditionBuilder;
27
+ mode: "inherit" | "custom";
28
+ }) => any;
29
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
30
+ onApply?: (() => any) | undefined;
31
+ "onUpdate-form"?: ((payload: {
32
+ builder: ConditionBuilder;
33
+ form: unknown;
34
+ }) => any) | undefined;
35
+ "onUpdate-inherit-mode"?: ((payload: {
36
+ builder: ConditionBuilder;
37
+ mode: "inherit" | "custom";
38
+ }) => any) | undefined;
39
+ }>, {
40
+ title: string;
41
+ disable: boolean;
42
+ fullWidth: boolean;
43
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
+ export default _default;
@@ -0,0 +1,39 @@
1
+ import type { ConditionBuilder } from '@feedmepos/hrm-permission/condition-builder';
2
+ type __VLS_Props = {
3
+ builders: ConditionBuilder[];
4
+ formValueFor: (builder: ConditionBuilder) => unknown;
5
+ hasChanges: boolean;
6
+ title?: string;
7
+ disable?: boolean;
8
+ fullWidth?: boolean;
9
+ };
10
+ declare var __VLS_1: {
11
+ builder: ConditionBuilder<unknown, unknown, Record<string, unknown>>;
12
+ };
13
+ type __VLS_Slots = {} & {
14
+ section?: (props: typeof __VLS_1) => any;
15
+ };
16
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
17
+ apply: () => any;
18
+ "update-form": (payload: {
19
+ builder: ConditionBuilder;
20
+ form: unknown;
21
+ }) => any;
22
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
23
+ onApply?: (() => any) | undefined;
24
+ "onUpdate-form"?: ((payload: {
25
+ builder: ConditionBuilder;
26
+ form: unknown;
27
+ }) => any) | undefined;
28
+ }>, {
29
+ title: string;
30
+ disable: boolean;
31
+ fullWidth: boolean;
32
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
33
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
34
+ export default _default;
35
+ type __VLS_WithSlots<T, S> = T & {
36
+ new (): {
37
+ $slots: S;
38
+ };
39
+ };
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .employee-list-table[data-v-9cf34375] [class~=gap-24]>div:first-child{display:none}.timesheet-user-view[data-v-2c7a177a] .basis-72{display:none}.user-info-icon[data-v-827dfd60]{flex-shrink:0;cursor:pointer;font-size:.75rem;font-weight:600;line-height:1rem;letter-spacing:.02em;text-decoration-line:none;color:var(--fm-color-neutral-white);display:flex;align-items:center;justify-content:center;background:linear-gradient(201deg,#fc9b40 10.3%,#ff6052 98.36%)}.user-info-icon--md[data-v-827dfd60]{height:2.25rem;width:2.25rem;border-radius:8px}.user-info-icon--lg[data-v-827dfd60]{height:48px;width:48px;border-radius:16px}.profile-menu[data-v-827dfd60]{width:280px;padding-top:12px;padding-bottom:12px}.profile-menu--profile[data-v-827dfd60]>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.profile-menu--profile[data-v-827dfd60]{padding:16px 16px 12px;border-radius:8px;display:flex;align-items:center;border-width:1px;border-color:var(--fm-color-neutral-gray-200)}.profile-menu--profile .profile-displayName[data-v-827dfd60]{font-size:1rem;font-weight:400;line-height:1.25rem;letter-spacing:.005em;text-decoration-line:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-menu--profile .profile-email[data-v-827dfd60],.profile-menu--profile .profile-phone[data-v-827dfd60]{font-size:.875rem;font-weight:400;line-height:1.125rem;letter-spacing:.0125em;text-decoration-line:none;color:var(--fm-color-neutral-gray-300);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-log-list-table[data-v-5b055e3b] [class~=gap-24]>div:first-child{display:none}.audit-log-list-table[data-v-5b055e3b] tr:has(.audit-op-marker){background-color:var(--fm-color-neutral-gray-100);border-top:1px solid var(--fm-color-neutral-gray-200)}.audit-log-list-table[data-v-5b055e3b] tr:has(.audit-op-marker):hover{background-color:#e8e8ed}.audit-log-action-label[data-v-5b055e3b]{display:block;width:100%;max-width:100%;max-height:6.25rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.25rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-action-label[data-v-5b055e3b]::-webkit-scrollbar{display:none}.audit-log-operation-label-detail[data-v-5b055e3b]{max-height:6.875rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.375rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-operation-label-detail[data-v-5b055e3b]::-webkit-scrollbar{display:none}
1
+ .employee-list-table[data-v-9cf34375] [class~=gap-24]>div:first-child{display:none}.timesheet-user-view[data-v-2c7a177a] .basis-72{display:none}.user-info-icon[data-v-827dfd60]{flex-shrink:0;cursor:pointer;font-size:.75rem;font-weight:600;line-height:1rem;letter-spacing:.02em;text-decoration-line:none;color:var(--fm-color-neutral-white);display:flex;align-items:center;justify-content:center;background:linear-gradient(201deg,#fc9b40 10.3%,#ff6052 98.36%)}.user-info-icon--md[data-v-827dfd60]{height:2.25rem;width:2.25rem;border-radius:8px}.user-info-icon--lg[data-v-827dfd60]{height:48px;width:48px;border-radius:16px}.profile-menu[data-v-827dfd60]{width:280px;padding-top:12px;padding-bottom:12px}.profile-menu--profile[data-v-827dfd60]>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(8px * var(--tw-space-x-reverse));margin-left:calc(8px * calc(1 - var(--tw-space-x-reverse)))}.profile-menu--profile[data-v-827dfd60]{padding:16px 16px 12px;border-radius:8px;display:flex;align-items:center;border-width:1px;border-color:var(--fm-color-neutral-gray-200)}.profile-menu--profile .profile-displayName[data-v-827dfd60]{font-size:1rem;font-weight:400;line-height:1.25rem;letter-spacing:.005em;text-decoration-line:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-menu--profile .profile-email[data-v-827dfd60],.profile-menu--profile .profile-phone[data-v-827dfd60]{font-size:.875rem;font-weight:400;line-height:1.125rem;letter-spacing:.0125em;text-decoration-line:none;color:var(--fm-color-neutral-gray-300);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.audit-log-list-table[data-v-9d69ce94] [class~=gap-24]>div:first-child{display:none}.audit-log-list-table[data-v-9d69ce94] tr:has(.audit-op-marker){background-color:var(--fm-color-neutral-gray-100);border-top:1px solid var(--fm-color-neutral-gray-200)}.audit-log-list-table[data-v-9d69ce94] tr:has(.audit-op-marker):hover{background-color:#e8e8ed}.audit-log-action-label[data-v-9d69ce94]{display:block;width:100%;max-width:100%;max-height:6.25rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.25rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-action-label[data-v-9d69ce94]::-webkit-scrollbar{display:none}.audit-log-operation-label-detail[data-v-9d69ce94]{max-height:6.875rem;overflow-y:auto;white-space:pre-line;word-break:break-word;line-height:1.375rem;scrollbar-width:none;-ms-overflow-style:none}.audit-log-operation-label-detail[data-v-9d69ce94]::-webkit-scrollbar{display:none}