@feedmepos/mf-hrm-portal 2.2.4 → 2.2.5-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 (51) hide show
  1. package/dist/{ApprovalCodeList-ChGQwko6.js → ApprovalCodeList-BuIPVwsl.js} +5 -5
  2. package/dist/{AuditLogList-Cpj8O5qS.js → AuditLogList-l3fv_3jD.js} +235 -233
  3. package/dist/{ConditionBuilderForm.vue_vue_type_script_setup_true_lang-CNmbZlVZ.js → ConditionBuilderForm.vue_vue_type_script_setup_true_lang-BYY9dMSQ.js} +2 -2
  4. package/dist/EmployeeList-HjNxPBcN.js +786 -0
  5. package/dist/{GrantUserList-CAXJmQ4i.js → GrantUserList-B91EBl82.js} +6 -6
  6. package/dist/{Main-7yT_w5vt.js → Main-C_tQuQsU.js} +11 -11
  7. package/dist/{Main-T9-30vq8.js → Main-DeqJPnm7.js} +5 -5
  8. package/dist/{Main-Ada9K_jO.js → Main-TuG-h_qY.js} +8 -8
  9. package/dist/PasscodePinField.vue_vue_type_script_setup_true_lang-CqG0v0Sz.js +243 -0
  10. package/dist/{PermissionSetList-CkWYPmT2.js → PermissionSetList-qVaYkiQ4.js} +20 -20
  11. package/dist/{PortalPermissionEditor.vue_vue_type_script_setup_true_lang-CCLLrSyq.js → PortalPermissionEditor.vue_vue_type_script_setup_true_lang-DcpNr0M4.js} +1237 -1244
  12. package/dist/{PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-Z-DH7ouY.js → PortalUserSearcher.vue_vue_type_style_index_0_scoped_827dfd60_lang-XHuHin8t.js} +1 -1
  13. package/dist/{RoleList-Do36AmlU.js → RoleList-CM0m4nya.js} +9 -9
  14. package/dist/TeamMemberList-GkMQuyoE.js +1153 -0
  15. package/dist/{TimesheetList-DboJ2_89.js → TimesheetList-Ci2r3AOF.js} +92 -90
  16. package/dist/{TimesheetList.vue_vue_type_style_index_0_scoped_2c7a177a_lang-C4g8wRjv.js → TimesheetList.vue_vue_type_style_index_0_scoped_63294af2_lang-QbQ7tbJP.js} +3 -3
  17. package/dist/{app-CcCcPbyB.js → app-MXDLzWd6.js} +1262 -1230
  18. package/dist/app.js +1 -1
  19. package/dist/{approval-code-BRClD2HN.js → approval-code-jIjkeVEb.js} +1 -1
  20. package/dist/{dayjs.min-lvkj1Rwa.js → dayjs.min-DRqYbe11.js} +1 -1
  21. package/dist/employee-zsQMMIVM.js +204 -0
  22. package/dist/{grant-user-Dhi3ilC_.js → grant-user-SNiDV22U.js} +1 -1
  23. package/dist/{iteration-LZbo-knt.js → iteration-CtN8sidV.js} +1 -1
  24. package/dist/{lodash-CKzaMa7f.js → lodash-BwY7earz.js} +1 -1
  25. package/dist/{restaurant-DiYb0pCm.js → restaurant-BTpBmfBV.js} +2 -2
  26. package/dist/{role-BZr8zzeq.js → role-Ds1yN3BN.js} +2 -2
  27. package/dist/{rule-DNaqlUUB.js → rule-DkG2eGGH.js} +274 -262
  28. package/dist/src/api/employee/index.d.ts +5 -1
  29. package/dist/src/api/team/index.d.ts +3 -0
  30. package/dist/src/components/form/OutletRoleAssignment.vue.d.ts +16 -0
  31. package/dist/src/components/form/PasscodeGenerateButton.vue.d.ts +15 -0
  32. package/dist/src/components/form/PasscodePinField.vue.d.ts +18 -0
  33. package/dist/src/helpers/outlet-role-assignment.d.ts +40 -0
  34. package/dist/src/helpers/rule.d.ts +15 -0
  35. package/dist/src/helpers/string.d.ts +2 -1
  36. package/dist/src/views/audit-log/locales/index.d.ts +4 -0
  37. package/dist/src/views/hr/locales/index.d.ts +8 -0
  38. package/dist/src/views/team/locales/index.d.ts +12 -0
  39. package/dist/src/views/team/member/AddMemberForm.vue.d.ts +1 -0
  40. package/dist/src/views/team/member/TeamMemberMasterUser.vue.d.ts +21 -3
  41. package/dist/string-VNuQNweN.js +15 -0
  42. package/dist/style.css +1 -1
  43. package/dist/tsconfig.app.tsbuildinfo +1 -1
  44. package/dist/{useAppStore-BGhlB1_1.js → useAppStore-DCwd8GWN.js} +1 -1
  45. package/dist/{useLoading-CvgqVDbF.js → useLoading-CXzTpIVv.js} +1 -1
  46. package/dist/{useReportPermissions-Buzv6pkY.js → useReportPermissions-B_YakoB-.js} +3 -3
  47. package/package.json +1 -1
  48. package/dist/EmployeeList-PdGzSCP-.js +0 -887
  49. package/dist/Skeleton.vue_vue_type_script_setup_true_lang-B4PxNMwq.js +0 -16
  50. package/dist/TeamMemberList-CVVNnz0R.js +0 -1216
  51. package/dist/employee-CLgrXpmZ.js +0 -201
@@ -1,5 +1,9 @@
1
1
  import { FdtoUpdatePosUserReq, FdtoUpdatePosMasterUserReq } from '@feedmepos/core/entity';
2
2
  import type { Employee, IFdtoEmployeePage, IFdtoPosUser, IReadEmployeesPageReq } from '@/types/employee';
3
+ export interface IGeneratePasscodeParams {
4
+ restaurantIds: string[];
5
+ excludePosUserId?: string;
6
+ }
3
7
  declare const EmployeeAPI: {
4
8
  readEmployees(): Promise<IFdtoPosUser[]>;
5
9
  readEmployeesPage(query: IReadEmployeesPageReq): Promise<IFdtoEmployeePage>;
@@ -10,7 +14,7 @@ declare const EmployeeAPI: {
10
14
  updateMasterEmployee(employeeId: string, dto: FdtoUpdatePosMasterUserReq): Promise<void>;
11
15
  deleteEmployee(employee: Employee): Promise<void>;
12
16
  deleteMasterEmployee(employee: Employee): Promise<void>;
13
- generateEmployeePasscode(): Promise<string>;
17
+ generateEmployeePasscode(params: IGeneratePasscodeParams): Promise<string>;
14
18
  syncUsersMeta(): Promise<void>;
15
19
  };
16
20
  export default EmployeeAPI;
@@ -1,5 +1,7 @@
1
+ import type { IGeneratePasscodeParams } from '@/api/employee';
1
2
  import { type IFdtoPortalPermissionsWithVisibilityCondition } from '@feedmepos/hrm-permission';
2
3
  import type { FTeamMember, IFdtoCreatePortalUserReq, IFdtoTeamMemberPage, IReadTeamMembersPageReq, IFdtoUpdatePortalUserReq } from '@/types/team';
4
+ export type IGenerateMasterUserPasscodeParams = IGeneratePasscodeParams;
3
5
  export declare const portalTeamPermissions: IFdtoPortalPermissionsWithVisibilityCondition[];
4
6
  export declare const teamApi: {
5
7
  readTeamMembers(): Promise<FTeamMember[]>;
@@ -9,5 +11,6 @@ export declare const teamApi: {
9
11
  updateTeamMember(permissionUserId: string, req: IFdtoUpdatePortalUserReq): Promise<FTeamMember>;
10
12
  deleteTeamMember(permissionUserId: string): Promise<boolean>;
11
13
  readTeamMemberPosUserIds(): Promise<string[]>;
14
+ generateMasterUserPasscode(params: IGenerateMasterUserPasscodeParams): Promise<string>;
12
15
  };
13
16
  export default teamApi;
@@ -0,0 +1,16 @@
1
+ import { type OutletRoleAssignmentProps, type OutletRoleRow } from '@/helpers/outlet-role-assignment';
2
+ declare const _default: <T extends OutletRoleRow>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
3
+ props: __VLS_PrettifyLocal<Pick<Partial<{}> & Omit<{
4
+ readonly "onUpdate:modelValue"?: ((rows: T[]) => any) | undefined;
5
+ } & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, never>, "onUpdate:modelValue"> & OutletRoleAssignmentProps<T> & Partial<{}>> & import("vue").PublicProps;
6
+ expose(exposed: import("vue").ShallowUnwrapRef<{}>): void;
7
+ attrs: any;
8
+ slots: {};
9
+ emit: (evt: "update:modelValue", rows: T[]) => void;
10
+ }>) => import("vue").VNode & {
11
+ __ctx?: Awaited<typeof __VLS_setup>;
12
+ };
13
+ export default _default;
14
+ type __VLS_PrettifyLocal<T> = {
15
+ [K in keyof T]: T[K];
16
+ } & {};
@@ -0,0 +1,15 @@
1
+ type __VLS_Props = {
2
+ label: string;
3
+ hint: string;
4
+ disabled?: boolean;
5
+ loading?: boolean;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ click: () => any;
9
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ onClick?: (() => any) | undefined;
11
+ }>, {
12
+ disabled: boolean;
13
+ loading: boolean;
14
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
15
+ export default _default;
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ modelValue: string[];
3
+ masked: boolean;
4
+ length?: number;
5
+ toggleLabel: string;
6
+ };
7
+ declare const _default: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
+ "update:modelValue": (value: string[]) => any;
9
+ "update:masked": (value: boolean) => any;
10
+ complete: (value: string) => any;
11
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
12
+ "onUpdate:modelValue"?: ((value: string[]) => any) | undefined;
13
+ "onUpdate:masked"?: ((value: boolean) => any) | undefined;
14
+ onComplete?: ((value: string) => any) | undefined;
15
+ }>, {
16
+ length: number;
17
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ export default _default;
@@ -0,0 +1,40 @@
1
+ import type { HrmRestaurant } from '@/types/restaurant';
2
+ import type { Role } from '@/types/role';
3
+ export interface OutletRoleRow {
4
+ restaurantId: string;
5
+ roleId: string;
6
+ }
7
+ export interface SelectOption {
8
+ label: string;
9
+ value: string;
10
+ disabled: boolean;
11
+ }
12
+ export interface AssignmentRules {
13
+ /** Whether this role may be picked at this outlet (caller policy). */
14
+ isRoleUsable: (role: Role, restaurantId: string) => boolean;
15
+ /** Locked rows cannot be edited or removed. */
16
+ isRestaurantLocked: (restaurantId: string) => boolean;
17
+ }
18
+ /**
19
+ * Props of OutletRoleAssignment.vue. Exported from here (not declared in the
20
+ * SFC) so the generated component declaration can reference it.
21
+ */
22
+ export interface OutletRoleAssignmentProps<T extends OutletRoleRow> {
23
+ modelValue: T[];
24
+ restaurants: HrmRestaurant[];
25
+ roles: Role[];
26
+ isRoleUsable: (role: Role, restaurantId: string) => boolean;
27
+ isRestaurantLocked?: (restaurantId: string) => boolean;
28
+ createRow: () => T;
29
+ title: string;
30
+ restaurantLabel: string;
31
+ roleLabel: string;
32
+ addLabel: string;
33
+ removeLabel: string;
34
+ }
35
+ export declare function selectedRestaurantIds(rows: OutletRoleRow[]): string[];
36
+ export declare function buildRestaurantOptions(restaurants: HrmRestaurant[], rows: OutletRoleRow[], currentRestaurantId: string): SelectOption[];
37
+ export declare function buildRoleOptions(roles: Role[], restaurantId: string, currentRoleId: string, rules: AssignmentRules): SelectOption[];
38
+ export declare function pickRoleForRestaurant(roles: Role[], restaurantId: string, currentRoleId: string, rules: AssignmentRules): string;
39
+ export declare function canAddAssignment(restaurants: HrmRestaurant[], rows: OutletRoleRow[]): boolean;
40
+ export declare function removeAssignment<T extends OutletRoleRow>(rows: T[], index: number, createRow: () => T, rules: AssignmentRules): T[];
@@ -20,6 +20,21 @@ export declare function ruleExtension(rule: FdoPermissionRule): {
20
20
  };
21
21
  export declare function getMaxDiscount(rules: FdoPermissionRule[]): number;
22
22
  export declare function getManagableRestaurantIds(rules: (FdoPermissionRule | RawRule)[]): string[] | null;
23
+ export interface MasterUserAccess {
24
+ /** null = every restaurant, [] = none */
25
+ restaurantIds: string[] | null;
26
+ /** null = every role, [] = none */
27
+ roleIds: string[] | null;
28
+ }
29
+ /**
30
+ * Outlets and POS roles a team member may be assigned as a master user.
31
+ * The business owner is unrestricted regardless of stored rules: their rules
32
+ * are not editable in the portal and legacy documents often lack the
33
+ * `restaurant` / `business::role` subjects this derivation depends on.
34
+ */
35
+ export declare function resolveMasterUserAccess(rules: (FdoPermissionRule | RawRule)[], options: {
36
+ isOwner: boolean;
37
+ }): MasterUserAccess;
23
38
  export declare function hasAdminRule(rules: FdoPermissionRule[]): boolean;
24
39
  export declare function usableRoleIds(rules: (FdoPermissionRule | RawRule)[]): string[] | null;
25
40
  export declare function extractReportExtraCondition(rule: FdoPermissionRule): Record<string, unknown> | undefined;
@@ -9,4 +9,5 @@ declare const filter: {
9
9
  declare const validate: {
10
10
  email(input: string): RegExpMatchArray | null;
11
11
  };
12
- export { filter, validate, randomString };
12
+ declare function nameInitials(name: string | null | undefined): string;
13
+ export { filter, validate, randomString, nameInitials };
@@ -197,6 +197,7 @@ export declare const i18nMessages: {
197
197
  create: string;
198
198
  update: string;
199
199
  delete: string;
200
+ "generate-passcode": string;
200
201
  };
201
202
  "pos-user": {
202
203
  list: string;
@@ -422,6 +423,7 @@ export declare const i18nMessages: {
422
423
  create: string;
423
424
  update: string;
424
425
  delete: string;
426
+ "generate-passcode": string;
425
427
  };
426
428
  "pos-user": {
427
429
  list: string;
@@ -647,6 +649,7 @@ export declare const i18nMessages: {
647
649
  create: string;
648
650
  update: string;
649
651
  delete: string;
652
+ "generate-passcode": string;
650
653
  };
651
654
  "pos-user": {
652
655
  list: string;
@@ -872,6 +875,7 @@ export declare const i18nMessages: {
872
875
  create: string;
873
876
  update: string;
874
877
  delete: string;
878
+ "generate-passcode": string;
875
879
  };
876
880
  "pos-user": {
877
881
  list: string;
@@ -29,6 +29,8 @@ export declare const i18nMessages: {
29
29
  passcode: string;
30
30
  passcodeRequired: string;
31
31
  passcodeGenerate: string;
32
+ passcodeSelectOutletFirst: string;
33
+ passcodeToggleVisibility: string;
32
34
  atLeastOneRestaurant: string;
33
35
  roleRequired: string;
34
36
  all: string;
@@ -235,6 +237,8 @@ export declare const i18nMessages: {
235
237
  passcode: string;
236
238
  passcodeRequired: string;
237
239
  passcodeGenerate: string;
240
+ passcodeSelectOutletFirst: string;
241
+ passcodeToggleVisibility: string;
238
242
  atLeastOneRestaurant: string;
239
243
  roleRequired: string;
240
244
  all: string;
@@ -441,6 +445,8 @@ export declare const i18nMessages: {
441
445
  passcode: string;
442
446
  passcodeRequired: string;
443
447
  passcodeGenerate: string;
448
+ passcodeSelectOutletFirst: string;
449
+ passcodeToggleVisibility: string;
444
450
  atLeastOneRestaurant: string;
445
451
  roleRequired: string;
446
452
  all: string;
@@ -646,6 +652,8 @@ export declare const i18nMessages: {
646
652
  passcode: string;
647
653
  passcodeRequired: string;
648
654
  passcodeGenerate: string;
655
+ passcodeSelectOutletFirst: string;
656
+ passcodeToggleVisibility: string;
649
657
  atLeastOneRestaurant: string;
650
658
  roleRequired: string;
651
659
  all: string;
@@ -103,6 +103,9 @@ export declare const i18nMessages: {
103
103
  title: string;
104
104
  passcode: string;
105
105
  passcodeRequired: string;
106
+ passcodeGenerate: string;
107
+ passcodeSelectOutletFirst: string;
108
+ passcodeToggleVisibility: string;
106
109
  sublabel: string;
107
110
  assignmentSection: string;
108
111
  addAnother: string;
@@ -355,6 +358,9 @@ export declare const i18nMessages: {
355
358
  title: string;
356
359
  passcode: string;
357
360
  passcodeRequired: string;
361
+ passcodeGenerate: string;
362
+ passcodeSelectOutletFirst: string;
363
+ passcodeToggleVisibility: string;
358
364
  sublabel: string;
359
365
  assignmentSection: string;
360
366
  addAnother: string;
@@ -607,6 +613,9 @@ export declare const i18nMessages: {
607
613
  title: string;
608
614
  passcode: string;
609
615
  passcodeRequired: string;
616
+ passcodeGenerate: string;
617
+ passcodeSelectOutletFirst: string;
618
+ passcodeToggleVisibility: string;
610
619
  sublabel: string;
611
620
  assignmentSection: string;
612
621
  addAnother: string;
@@ -859,6 +868,9 @@ export declare const i18nMessages: {
859
868
  title: string;
860
869
  passcode: string;
861
870
  passcodeRequired: string;
871
+ passcodeGenerate: string;
872
+ passcodeSelectOutletFirst: string;
873
+ passcodeToggleVisibility: string;
862
874
  sublabel: string;
863
875
  assignmentSection: string;
864
876
  addAnother: string;
@@ -10,6 +10,7 @@ export interface TeamDialogData {
10
10
  permissions: RawRule[];
11
11
  permissionSetIds: string[];
12
12
  posUser?: IFdtoPermissionPosUser;
13
+ posUserId?: string;
13
14
  }
14
15
  declare function isModified(): boolean;
15
16
  declare function readFormData(): IFdtoCreatePortalUserReq;
@@ -1,6 +1,6 @@
1
1
  import { type PropType } from 'vue';
2
2
  import type { HrmRestaurant } from '@/types/restaurant';
3
- import type { CheckboxOption } from '@/components/CheckboxInput.vue';
3
+ import type { Role } from '@/types/role';
4
4
  import type { IFdtoPermissionPosUser } from '@/types/team';
5
5
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
6
6
  modelValue: {
@@ -20,9 +20,17 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
20
20
  required: true;
21
21
  };
22
22
  roles: {
23
- type: PropType<CheckboxOption[]>;
23
+ type: PropType<Role[]>;
24
24
  required: true;
25
25
  };
26
+ usableRoleIds: {
27
+ type: PropType<string[] | null>;
28
+ default: null;
29
+ };
30
+ posUserId: {
31
+ type: StringConstructor;
32
+ default: undefined;
33
+ };
26
34
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {} & {
27
35
  "update:model-value": (user: IFdtoPermissionPosUser | null | undefined) => any;
28
36
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
@@ -43,13 +51,23 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
43
51
  required: true;
44
52
  };
45
53
  roles: {
46
- type: PropType<CheckboxOption[]>;
54
+ type: PropType<Role[]>;
47
55
  required: true;
48
56
  };
57
+ usableRoleIds: {
58
+ type: PropType<string[] | null>;
59
+ default: null;
60
+ };
61
+ posUserId: {
62
+ type: StringConstructor;
63
+ default: undefined;
64
+ };
49
65
  }>> & Readonly<{
50
66
  "onUpdate:model-value"?: ((user: IFdtoPermissionPosUser | null | undefined) => any) | undefined;
51
67
  }>, {
52
68
  modelValue: IFdtoPermissionPosUser | null;
53
69
  fallbackPasscode: string;
70
+ usableRoleIds: string[] | null;
71
+ posUserId: string;
54
72
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
55
73
  export default _default;
@@ -0,0 +1,15 @@
1
+ function i(r, t) {
2
+ let n = "", e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
3
+ const c = e.length;
4
+ for (let a = 0; a < r; a++)
5
+ n += e.charAt(Math.floor(Math.random() * c));
6
+ return n;
7
+ }
8
+ function l(r) {
9
+ const t = (r ?? "").trim().split(/\s+/).filter(Boolean);
10
+ return t.length === 0 ? "" : t.length === 1 ? t[0].slice(0, 2) : t[0].charAt(0) + t[1].charAt(0);
11
+ }
12
+ export {
13
+ l as n,
14
+ i as r
15
+ };
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-8abe880c] [class~=gap-24]>div:first-child{display:none}.audit-log-list-table[data-v-8abe880c] 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-8abe880c] tr:has(.audit-op-marker):hover{background-color:#e8e8ed}.audit-log-action-label[data-v-8abe880c]{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-8abe880c]::-webkit-scrollbar{display:none}.audit-log-operation-label-detail[data-v-8abe880c]{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-8abe880c]::-webkit-scrollbar{display:none}
1
+ .employee-list-table[data-v-5aed0d1c] [class~=gap-24]>div:first-child{display:none}.timesheet-user-view[data-v-63294af2] .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-f7aebfad] [class~=gap-24]>div:first-child{display:none}.audit-log-list-table[data-v-f7aebfad] 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-f7aebfad] tr:has(.audit-op-marker):hover{background-color:#e8e8ed}.audit-log-action-label[data-v-f7aebfad]{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-f7aebfad]::-webkit-scrollbar{display:none}.audit-log-operation-label-detail[data-v-f7aebfad]{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-f7aebfad]::-webkit-scrollbar{display:none}