@pagamio/frontend-commons-lib 0.8.239 → 0.8.242

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 (78) hide show
  1. package/lib/api/ReactQuery.js +3 -1
  2. package/lib/api/context.d.ts +6 -0
  3. package/lib/api/context.js +9 -0
  4. package/lib/api/swr.d.ts +1 -1
  5. package/lib/auth/components/AuthFormUtils.d.ts +1 -1
  6. package/lib/auth/components/ChangePasswordPage.js +1 -1
  7. package/lib/auth/components/CustomerRegistrationPage.js +1 -1
  8. package/lib/auth/components/ForgotPasswordPage.js +1 -1
  9. package/lib/auth/components/LoginPage.js +1 -1
  10. package/lib/auth/components/ResetPasswordPage.js +1 -1
  11. package/lib/auth/shared/layout/AuthPageLayout.js +0 -1
  12. package/lib/components/layout/VerticalTabsLayout.js +0 -1
  13. package/lib/components/sidebar-v2/NavbarV2.js +1 -2
  14. package/lib/components/sidebar-v2/SidebarV2.js +1 -2
  15. package/lib/components/sidebar-v2/SidebarV2Context.js +1 -2
  16. package/lib/components/sidebar-v2/SidebarV2Primitives.js +1 -3
  17. package/lib/components/sidebar-v2/iconResolver.d.ts +38 -38
  18. package/lib/components/sidebar-v2/iconResolver.js +3 -2
  19. package/lib/components/ui/Chart.js +12 -5
  20. package/lib/components/ui/DateRangeModal.js +1 -1
  21. package/lib/components/ui/DetailsCard.d.ts +1 -1
  22. package/lib/components/ui/FilterComponent.js +8 -4
  23. package/lib/components/ui/FilterList.js +0 -1
  24. package/lib/components/ui/FilterSection.js +0 -1
  25. package/lib/components/ui/FilterWrapper.d.ts +2 -1
  26. package/lib/components/ui/ImageUploader.d.ts +1 -0
  27. package/lib/components/ui/ImageUploader.js +3 -4
  28. package/lib/components/ui/MultiSelect.js +1 -1
  29. package/lib/components/ui/PageLoader.d.ts +23 -0
  30. package/lib/components/ui/PageLoader.js +18 -0
  31. package/lib/components/ui/Progress.js +1 -2
  32. package/lib/components/ui/Select.js +8 -7
  33. package/lib/components/ui/Switch.d.ts +2 -1
  34. package/lib/components/ui/TailwindIndicator.js +3 -1
  35. package/lib/components/ui/Tooltip.js +0 -1
  36. package/lib/components/ui/index.d.ts +1 -0
  37. package/lib/components/ui/index.js +1 -0
  38. package/lib/context/BreadcrumbContext.js +0 -1
  39. package/lib/dashboard-visuals/components/ChartWrapper.d.ts +1 -1
  40. package/lib/dashboard-visuals/components/DataTable.js +1 -1
  41. package/lib/dashboard-visuals/components/ErrorState.js +1 -1
  42. package/lib/dashboard-visuals/components/Switch.js +1 -1
  43. package/lib/dashboard-visuals/components/molecules/NoChartData.js +1 -1
  44. package/lib/dashboard-visuals/hooks/useChartData.js +23 -2
  45. package/lib/dashboard-visuals/hooks/useChartDataV2.js +4 -2
  46. package/lib/dashboard-visuals/v2/components/ApexChartWrapper.js +51 -8
  47. package/lib/dashboard-visuals/v2/components/DashboardWrapperV2.js +1 -1
  48. package/lib/dashboard-visuals/visuals/DistributionChart.d.ts +2 -1
  49. package/lib/form-engine/Form.js +9 -4
  50. package/lib/form-engine/FormEngine.d.ts +2 -1
  51. package/lib/form-engine/FormEngine.js +11 -0
  52. package/lib/form-engine/components/FieldWrapper.js +0 -1
  53. package/lib/form-engine/index.d.ts +1 -0
  54. package/lib/form-engine/index.js +1 -0
  55. package/lib/form-engine/registry/RegisterComponents.d.ts +5 -1
  56. package/lib/form-engine/registry/RegisterComponents.js +51 -17
  57. package/lib/form-engine/registry/Registry.d.ts +2 -0
  58. package/lib/form-engine/registry/Registry.js +8 -4
  59. package/lib/form-engine/types/index.d.ts +1 -1
  60. package/lib/pagamio-table/data-table/MantineCoreTable.js +8 -14
  61. package/lib/pagamio-table/data-table/Pagination.js +1 -1
  62. package/lib/pagamio-table/utils/functionHelper.d.ts +2 -1
  63. package/lib/pagamio-table/utils/functionHelper.js +5 -4
  64. package/lib/permissions/Can.d.ts +20 -0
  65. package/lib/permissions/Can.js +14 -0
  66. package/lib/permissions/PermissionProvider.d.ts +15 -0
  67. package/lib/permissions/PermissionProvider.js +23 -0
  68. package/lib/permissions/hooks.d.ts +20 -0
  69. package/lib/permissions/hooks.js +34 -0
  70. package/lib/permissions/index.d.ts +4 -0
  71. package/lib/permissions/index.js +3 -0
  72. package/lib/permissions/types.d.ts +19 -0
  73. package/lib/permissions/types.js +7 -0
  74. package/lib/shared/hooks/useContainerWidth.d.ts +1 -1
  75. package/lib/shared/hooks/useImageUpload.d.ts +1 -1
  76. package/lib/shared/hooks/useImageUpload.js +2 -2
  77. package/lib/styles.css +21 -21
  78. package/package.json +123 -57
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Check if the current user has a specific permission.
3
+ * @example usePermission("order", "refund") // → true/false
4
+ */
5
+ export declare function usePermission(resource: string, action: string): boolean;
6
+ /**
7
+ * Check if a feature flag is enabled.
8
+ * @example useFeature("inventory.transfers") // → true/false
9
+ */
10
+ export declare function useFeature(flag: string): boolean;
11
+ /**
12
+ * Check if the user has access to a specific scope.
13
+ * @example useScope("store:123") // → true/false
14
+ */
15
+ export declare function useScope(scope: string): boolean;
16
+ /**
17
+ * Batch permission check — returns an array of booleans in the same order.
18
+ * @example usePermissions([["order","refund"], ["order","create"]]) // → [true, false]
19
+ */
20
+ export declare function usePermissions(checks: [resource: string, action: string][]): boolean[];
@@ -0,0 +1,34 @@
1
+ import { useMemo } from 'react';
2
+ import { usePermissionContext } from './PermissionProvider';
3
+ /**
4
+ * Check if the current user has a specific permission.
5
+ * @example usePermission("order", "refund") // → true/false
6
+ */
7
+ export function usePermission(resource, action) {
8
+ const { can } = usePermissionContext();
9
+ return can(resource, action);
10
+ }
11
+ /**
12
+ * Check if a feature flag is enabled.
13
+ * @example useFeature("inventory.transfers") // → true/false
14
+ */
15
+ export function useFeature(flag) {
16
+ const { hasFeature } = usePermissionContext();
17
+ return hasFeature(flag);
18
+ }
19
+ /**
20
+ * Check if the user has access to a specific scope.
21
+ * @example useScope("store:123") // → true/false
22
+ */
23
+ export function useScope(scope) {
24
+ const { hasScope } = usePermissionContext();
25
+ return hasScope(scope);
26
+ }
27
+ /**
28
+ * Batch permission check — returns an array of booleans in the same order.
29
+ * @example usePermissions([["order","refund"], ["order","create"]]) // → [true, false]
30
+ */
31
+ export function usePermissions(checks) {
32
+ const { can } = usePermissionContext();
33
+ return useMemo(() => checks.map(([resource, action]) => can(resource, action)), [can, JSON.stringify(checks)]);
34
+ }
@@ -0,0 +1,4 @@
1
+ export { Can } from './Can';
2
+ export { usePermission, useFeature, useScope, usePermissions } from './hooks';
3
+ export { PermissionProvider, usePermissionContext } from './PermissionProvider';
4
+ export type { Permission, PermissionPolicy } from './types';
@@ -0,0 +1,3 @@
1
+ export { Can } from './Can';
2
+ export { usePermission, useFeature, useScope, usePermissions } from './hooks';
3
+ export { PermissionProvider, usePermissionContext } from './PermissionProvider';
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Frontend Permission Engine Types
3
+ *
4
+ * Routes check identity (isAuthenticated, roleGroup).
5
+ * Components check capabilities (usePermission).
6
+ */
7
+ export interface Permission {
8
+ resource: string;
9
+ action: string;
10
+ scope?: string;
11
+ }
12
+ export interface PermissionPolicy {
13
+ /** Array of granted permissions */
14
+ permissions: Permission[];
15
+ /** Feature flags — "is inventory.transfers enabled?" */
16
+ features: Record<string, boolean>;
17
+ /** Scopes the user can access — "store:123", "org:456" */
18
+ scopes: string[];
19
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Frontend Permission Engine Types
3
+ *
4
+ * Routes check identity (isAuthenticated, roleGroup).
5
+ * Components check capabilities (usePermission).
6
+ */
7
+ export {};
@@ -1,2 +1,2 @@
1
1
  import { type RefObject } from 'react';
2
- export declare function useContainerWidth<T extends HTMLElement>(): [RefObject<T>, number];
2
+ export declare function useContainerWidth<T extends HTMLElement>(): [RefObject<T | null>, number];
@@ -5,7 +5,7 @@ export interface UploadResponse {
5
5
  export interface UseImageUploadProps {
6
6
  project: 'vas' | 'stocklink' | 'events' | 'commerce';
7
7
  env: 'dev' | 'uat' | 'prod';
8
- endpoint?: string;
8
+ endpoint: string;
9
9
  }
10
10
  export declare const useImageUpload: ({ project, env, endpoint }: UseImageUploadProps) => {
11
11
  getPresignedUrl: (fileName: string, contentType: string) => Promise<UploadResponse>;
@@ -1,9 +1,9 @@
1
1
  import { useCallback, useState } from 'react';
2
2
  import { generateSecureRandomString, uploadFileWithXHR } from '../utils/functionHelper';
3
3
  export const useImageUpload = ({ project, env, endpoint }) => {
4
- const resolvedEndpoint = endpoint ?? process.env.NEXT_PUBLIC_UPLOAD_URL_ENDPOINT;
4
+ const resolvedEndpoint = endpoint;
5
5
  if (!resolvedEndpoint) {
6
- throw new Error('NEXT_PUBLIC_UPLOAD_URL_ENDPOINT is not configured.');
6
+ throw new Error('"endpoint" is required. Pass the upload URL endpoint explicitly');
7
7
  }
8
8
  const [isLoading, setIsLoading] = useState(false);
9
9
  const [error, setError] = useState(null);
package/lib/styles.css CHANGED
@@ -105,7 +105,7 @@
105
105
  --tw-contain-paint: ;
106
106
  --tw-contain-style: ;
107
107
  }/*
108
- ! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com
108
+ ! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
109
109
  *//*
110
110
  1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
111
111
  2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
@@ -1703,6 +1703,9 @@ input[type="range"]::-ms-fill-lower {
1703
1703
  .min-h-\[60px\] {
1704
1704
  min-height: 60px;
1705
1705
  }
1706
+ .min-h-\[calc\(100vh-5rem\)\] {
1707
+ min-height: calc(100vh - 5rem);
1708
+ }
1706
1709
  .min-h-screen {
1707
1710
  min-height: 100vh;
1708
1711
  }
@@ -2537,6 +2540,9 @@ input[type="range"]::-ms-fill-lower {
2537
2540
  --tw-border-opacity: 1;
2538
2541
  border-color: rgb(214 31 105 / var(--tw-border-opacity, 1));
2539
2542
  }
2543
+ .border-primary {
2544
+ border-color: hsl(var(--primary));
2545
+ }
2540
2546
  .border-purple-500 {
2541
2547
  --tw-border-opacity: 1;
2542
2548
  border-color: rgb(144 97 249 / var(--tw-border-opacity, 1));
@@ -2646,10 +2652,6 @@ input[type="range"]::-ms-fill-lower {
2646
2652
  --tw-bg-opacity: 1;
2647
2653
  background-color: rgb(235 245 255 / var(--tw-bg-opacity, 1));
2648
2654
  }
2649
- .bg-blue-500 {
2650
- --tw-bg-opacity: 1;
2651
- background-color: rgb(63 131 248 / var(--tw-bg-opacity, 1));
2652
- }
2653
2655
  .bg-blue-600 {
2654
2656
  --tw-bg-opacity: 1;
2655
2657
  background-color: rgb(28 100 242 / var(--tw-bg-opacity, 1));
@@ -3912,18 +3914,14 @@ input[type="range"]::-ms-fill-lower {
3912
3914
  }
3913
3915
  .backdrop-blur-md {
3914
3916
  --tw-backdrop-blur: blur(12px);
3915
- -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3916
3917
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3917
3918
  }
3918
3919
  .backdrop-blur-sm {
3919
3920
  --tw-backdrop-blur: blur(4px);
3920
- -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3921
3921
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
3922
3922
  }
3923
3923
  .transition {
3924
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
3925
3924
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
3926
- transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
3927
3925
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
3928
3926
  transition-duration: 150ms;
3929
3927
  }
@@ -3932,6 +3930,11 @@ input[type="range"]::-ms-fill-lower {
3932
3930
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
3933
3931
  transition-duration: 150ms;
3934
3932
  }
3933
+ .transition-\[margin-left\] {
3934
+ transition-property: margin-left;
3935
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
3936
+ transition-duration: 150ms;
3937
+ }
3935
3938
  .transition-all {
3936
3939
  transition-property: all;
3937
3940
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
@@ -4275,10 +4278,6 @@ input[type="range"]::-ms-fill-lower {
4275
4278
  --tw-bg-opacity: 1;
4276
4279
  background-color: rgb(195 221 253 / var(--tw-bg-opacity, 1));
4277
4280
  }
4278
- .hover\:bg-blue-600:hover {
4279
- --tw-bg-opacity: 1;
4280
- background-color: rgb(28 100 242 / var(--tw-bg-opacity, 1));
4281
- }
4282
4281
  .hover\:bg-blue-800:hover {
4283
4282
  --tw-bg-opacity: 1;
4284
4283
  background-color: rgb(30 66 159 / var(--tw-bg-opacity, 1));
@@ -4417,6 +4416,9 @@ input[type="range"]::-ms-fill-lower {
4417
4416
  .hover\:opacity-100:hover {
4418
4417
  opacity: 1;
4419
4418
  }
4419
+ .hover\:opacity-90:hover {
4420
+ opacity: 0.9;
4421
+ }
4420
4422
  .hover\:shadow:hover {
4421
4423
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
4422
4424
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
@@ -4430,10 +4432,6 @@ input[type="range"]::-ms-fill-lower {
4430
4432
  .focus\:z-10:focus {
4431
4433
  z-index: 10;
4432
4434
  }
4433
- .focus\:border-blue-500:focus {
4434
- --tw-border-opacity: 1;
4435
- border-color: rgb(63 131 248 / var(--tw-border-opacity, 1));
4436
- }
4437
4435
  .focus\:border-blue-600:focus {
4438
4436
  --tw-border-opacity: 1;
4439
4437
  border-color: rgb(28 100 242 / var(--tw-border-opacity, 1));
@@ -4450,6 +4448,9 @@ input[type="range"]::-ms-fill-lower {
4450
4448
  --tw-border-opacity: 1;
4451
4449
  border-color: rgb(5 122 85 / var(--tw-border-opacity, 1));
4452
4450
  }
4451
+ .focus\:border-primary:focus {
4452
+ border-color: hsl(var(--primary));
4453
+ }
4453
4454
  .focus\:border-red-500:focus {
4454
4455
  --tw-border-opacity: 1;
4455
4456
  border-color: rgb(240 82 82 / var(--tw-border-opacity, 1));
@@ -4512,10 +4513,6 @@ input[type="range"]::-ms-fill-lower {
4512
4513
  --tw-ring-opacity: 1;
4513
4514
  --tw-ring-color: rgb(118 169 250 / var(--tw-ring-opacity, 1));
4514
4515
  }
4515
- .focus\:ring-blue-500:focus {
4516
- --tw-ring-opacity: 1;
4517
- --tw-ring-color: rgb(63 131 248 / var(--tw-ring-opacity, 1));
4518
- }
4519
4516
  .focus\:ring-blue-600:focus {
4520
4517
  --tw-ring-opacity: 1;
4521
4518
  --tw-ring-color: rgb(28 100 242 / var(--tw-ring-opacity, 1));
@@ -4632,6 +4629,9 @@ input[type="range"]::-ms-fill-lower {
4632
4629
  --tw-ring-opacity: 1;
4633
4630
  --tw-ring-color: rgb(214 31 105 / var(--tw-ring-opacity, 1));
4634
4631
  }
4632
+ .focus\:ring-primary:focus {
4633
+ --tw-ring-color: hsl(var(--primary));
4634
+ }
4635
4635
  .focus\:ring-purple-200:focus {
4636
4636
  --tw-ring-opacity: 1;
4637
4637
  --tw-ring-color: rgb(220 215 254 / var(--tw-ring-opacity, 1));
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pagamio/frontend-commons-lib",
3
3
  "description": "Pagamio library for Frontend reusable components like the form engine and table container",
4
- "version": "0.8.239",
4
+ "version": "0.8.242",
5
5
  "publishConfig": {
6
6
  "access": "public",
7
7
  "provenance": false
@@ -19,6 +19,14 @@
19
19
  "types": "./lib/index.d.ts",
20
20
  "default": "./lib/index.js"
21
21
  },
22
+ "./dashboard-visuals": {
23
+ "types": "./lib/dashboard-visuals/index.d.ts",
24
+ "default": "./lib/dashboard-visuals/index.js"
25
+ },
26
+ "./dashboard-visuals/v2": {
27
+ "types": "./lib/dashboard-visuals/v2/index.d.ts",
28
+ "default": "./lib/dashboard-visuals/v2/index.js"
29
+ },
22
30
  "./components/layout": {
23
31
  "types": "./lib/components/layout/index.d.ts",
24
32
  "default": "./lib/components/layout/index.js"
@@ -85,106 +93,164 @@
85
93
  "extract-translations": "i18next-scanner --config i18next-scanner.config.js 'src/**/*.{js,jsx,ts,tsx}'"
86
94
  },
87
95
  "dependencies": {
88
- "@emotion/react": "^11.13.5",
89
- "@heroicons/react": "^2.1.5",
90
- "@hookform/resolvers": "^3.9.0",
91
- "@mantine/core": "6.0.21",
92
- "@mantine/dates": "6.0.21",
93
- "@mantine/hooks": "6.0.21",
94
- "@radix-ui/react-avatar": "^1.1.0",
95
- "@radix-ui/react-checkbox": "^1.1.1",
96
- "@radix-ui/react-dialog": "^1.1.2",
97
- "@radix-ui/react-icons": "^1.3.0",
98
- "@radix-ui/react-label": "^2.1.0",
99
- "@radix-ui/react-popover": "^1.1.1",
100
- "@radix-ui/react-radio-group": "^1.2.1",
101
- "@radix-ui/react-select": "^2.1.1",
102
- "@radix-ui/react-separator": "^1.1.0",
103
- "@radix-ui/react-switch": "^1.1.1",
104
- "@radix-ui/react-tooltip": "^1.2.8",
105
- "@tabler/icons-react": "^3.23.0",
106
- "@tanstack/react-query": "^5.90.16",
107
- "@tanstack/react-query-devtools": "^5.91.2",
108
- "@tanstack/react-table": "^8.20.5",
109
- "@testing-library/react": "^16.0.1",
110
- "@types/file-saver": "^2.0.7",
111
- "@types/papaparse": "^5.3.15",
112
- "@typescript-eslint/eslint-plugin": "^8.26.1",
113
- "@typescript-eslint/parser": "^8.26.1",
114
- "apexcharts": "^4.4.0",
115
96
  "class-variance-authority": "^0.7.0",
116
97
  "classnames": "^2.5.1",
117
98
  "clsx": "^2.1.1",
118
- "cmdk": "1.0.0",
119
99
  "date-fns": "^4.1.0",
120
100
  "dayjs": "^1.11.13",
121
- "echarts": "^5.5.1",
122
- "echarts-for-react": "^3.0.2",
123
- "eslint-plugin-jsx-a11y": "^6.10.2",
124
- "eslint-plugin-unicorn": "^57.0.0",
125
101
  "file-saver": "^2.0.5",
126
- "flowbite": "^2.5.2",
127
- "flowbite-react": "^0.10.2",
128
102
  "js-cookie": "^3.0.5",
129
103
  "jspdf": "^2.5.2",
130
104
  "jspdf-autotable": "^3.8.4",
131
105
  "jwt-decode": "^4.0.0",
132
106
  "lodash": "^4.17.21",
133
- "lucide-react": "^0.441.0",
134
- "mantine-react-table": "^1.3.4",
135
- "next": "^16.0.10",
136
107
  "papaparse": "^5.4.1",
137
- "react": "^19.2.3",
138
- "react-apexcharts": "^1.7.0",
139
- "react-date-range": "^2.0.1",
140
- "react-datepicker": "^7.6.0",
141
- "react-day-picker": "^9.4.4",
142
- "react-dom": "^19.2.3",
143
- "react-dropzone": "^14.2.3",
144
- "react-hook-form": "^7.53.1",
145
- "react-icons": "^5.3.0",
146
- "react-phone-number-input": "^3.4.12",
147
- "react-table": "^7.8.0",
148
- "swr": "^2.3.3",
149
108
  "tailwind-merge": "^2.5.2",
150
- "tailwindcss-animate": "^1.0.7",
151
109
  "uuid": "^11.1.0",
152
110
  "xlsx": "^0.18.5",
153
111
  "zod": "^3.23.8"
154
112
  },
113
+ "peerDependencies": {
114
+ "@emotion/react": "^11.0.0",
115
+ "@heroicons/react": "^2.0.0",
116
+ "@hookform/resolvers": "^3.0.0",
117
+ "@mantine/core": ">=6.0.0",
118
+ "@mantine/dates": ">=6.0.0",
119
+ "@mantine/hooks": ">=6.0.0",
120
+ "@radix-ui/react-avatar": "^1.1.0",
121
+ "@radix-ui/react-checkbox": "^1.1.0",
122
+ "@radix-ui/react-dialog": "^1.1.0",
123
+ "@radix-ui/react-icons": "^1.3.0",
124
+ "@radix-ui/react-label": "^2.1.0",
125
+ "@radix-ui/react-popover": "^1.1.0",
126
+ "@radix-ui/react-radio-group": "^1.2.0",
127
+ "@radix-ui/react-scroll-area": "^1.2.0",
128
+ "@radix-ui/react-select": "^2.1.0",
129
+ "@radix-ui/react-separator": "^1.1.0",
130
+ "@radix-ui/react-slot": "^1.1.0",
131
+ "@radix-ui/react-switch": "^1.1.0",
132
+ "@radix-ui/react-tooltip": "^1.1.0",
133
+ "@tabler/icons-react": "^3.0.0",
134
+ "@tanstack/react-query": "^5.0.0",
135
+ "@tanstack/react-query-devtools": "^5.0.0",
136
+ "@tanstack/react-table": "^8.0.0",
137
+ "@types/react": "^18 || ^19",
138
+ "@types/react-dom": "^18 || ^19",
139
+ "apexcharts": "^4.0.0",
140
+ "cmdk": "^1.0.0",
141
+ "echarts": "^5.0.0",
142
+ "echarts-for-react": "^3.0.0",
143
+ "flowbite-react": "^0.10.0",
144
+ "lucide-react": ">=0.400.0",
145
+ "mantine-react-table": "^1.3.0",
146
+ "react": "^18.0.0 || ^19.0.0",
147
+ "react-apexcharts": "^1.5.0",
148
+ "react-date-range": "^2.0.0",
149
+ "react-datepicker": "^7.0.0",
150
+ "react-day-picker": "^9.0.0",
151
+ "react-dom": "^18.0.0 || ^19.0.0",
152
+ "react-dropzone": "^14.0.0",
153
+ "react-hook-form": "^7.0.0",
154
+ "react-icons": "^5.0.0",
155
+ "react-phone-number-input": "^3.0.0",
156
+ "react-table": "^7.0.0",
157
+ "swr": "^2.0.0"
158
+ },
159
+ "peerDependenciesMeta": {
160
+ "@tanstack/react-query-devtools": {
161
+ "optional": true
162
+ },
163
+ "apexcharts": {
164
+ "optional": true
165
+ },
166
+ "echarts": {
167
+ "optional": true
168
+ },
169
+ "echarts-for-react": {
170
+ "optional": true
171
+ },
172
+ "react-apexcharts": {
173
+ "optional": true
174
+ }
175
+ },
155
176
  "devDependencies": {
156
- "@next/eslint-plugin-next": "^15.2.2",
177
+ "@emotion/react": "^11.0.0",
178
+ "@heroicons/react": "^2.0.0",
179
+ "@hookform/resolvers": "^3.0.0",
180
+ "@mantine/core": ">=6.0.0",
181
+ "@mantine/dates": ">=6.0.0",
182
+ "@mantine/hooks": ">=6.0.0",
183
+ "@radix-ui/react-avatar": "^1.1.0",
184
+ "@radix-ui/react-checkbox": "^1.1.0",
185
+ "@radix-ui/react-dialog": "^1.1.0",
186
+ "@radix-ui/react-icons": "^1.3.0",
187
+ "@radix-ui/react-label": "^2.1.0",
188
+ "@radix-ui/react-popover": "^1.1.0",
189
+ "@radix-ui/react-radio-group": "^1.2.0",
190
+ "@radix-ui/react-select": "^2.1.0",
191
+ "@radix-ui/react-separator": "^1.1.0",
192
+ "@radix-ui/react-switch": "^1.1.0",
193
+ "@radix-ui/react-tooltip": "^1.1.0",
194
+ "@tabler/icons-react": "^3.0.0",
195
+ "@tanstack/react-query": "^5.0.0",
196
+ "@tanstack/react-query-devtools": "^5.0.0",
197
+ "@tanstack/react-table": "^8.0.0",
157
198
  "@testing-library/jest-dom": "^6.6.3",
199
+ "@testing-library/react": "^16.0.1",
158
200
  "@testing-library/user-event": "^14.5.2",
159
201
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
202
+ "@types/file-saver": "^2.0.7",
160
203
  "@types/jest": "^29.5.14",
161
204
  "@types/js-cookie": "^3.0.6",
162
205
  "@types/lodash": "^4.17.13",
163
206
  "@types/node": "^20",
164
- "@types/react": "^18",
207
+ "@types/papaparse": "^5.3.15",
208
+ "@types/react": "^19",
165
209
  "@types/react-date-range": "^1.4.10",
166
- "@types/react-dom": "^18",
210
+ "@types/react-dom": "^19",
167
211
  "@types/react-dropzone": "^5.1.0",
168
212
  "@types/react-table": "^7.7.20",
169
- "@vitejs/plugin-react": "^4.3.3",
213
+ "@typescript-eslint/eslint-plugin": "^8.26.1",
214
+ "@typescript-eslint/parser": "^8.26.1",
215
+ "apexcharts": "^4.0.0",
170
216
  "autoprefixer": "^10.4.20",
217
+ "cmdk": "^1.0.0",
171
218
  "concurrently": "^9.0.1",
172
219
  "copyfiles": "^2.4.1",
220
+ "echarts": "^5.0.0",
221
+ "echarts-for-react": "^3.0.0",
173
222
  "eslint": "^9.22.0",
174
223
  "eslint-config-prettier": "^10.0.1",
224
+ "eslint-plugin-jsx-a11y": "^6.10.2",
175
225
  "eslint-plugin-prettier": "^5.2.3",
176
226
  "eslint-plugin-react": "^7.37.4",
177
227
  "eslint-plugin-react-hooks": "^5.2.0",
178
228
  "eslint-plugin-tailwindcss": "^3.18.0",
229
+ "eslint-plugin-unicorn": "^57.0.0",
230
+ "flowbite-react": "^0.10.0",
179
231
  "husky": "^9.1.7",
180
232
  "i18next-scanner": "^4.4.0",
181
233
  "lint-staged": "^15.5.0",
234
+ "lucide-react": ">=0.400.0",
235
+ "mantine-react-table": "^1.3.0",
182
236
  "postcss": "^8.4.47",
183
237
  "postcss-cli": "^11.0.0",
184
238
  "prettier": "^3.4.2",
239
+ "react": "^19.0.0",
240
+ "react-apexcharts": "^1.5.0",
241
+ "react-date-range": "^2.0.0",
242
+ "react-datepicker": "^7.0.0",
243
+ "react-day-picker": "^9.0.0",
244
+ "react-dom": "^19.0.0",
245
+ "react-dropzone": "^14.0.0",
246
+ "react-hook-form": "^7.0.0",
247
+ "react-icons": "^5.0.0",
248
+ "react-phone-number-input": "^3.0.0",
249
+ "react-table": "^7.0.0",
250
+ "swr": "^2.0.0",
185
251
  "tailwindcss": "^3.4.1",
186
- "typescript": "^5",
187
- "vite": "^4.0.0"
252
+ "tailwindcss-animate": "^1.0.7",
253
+ "typescript": "^5.9.3"
188
254
  },
189
255
  "lint-staged": {
190
256
  "*.{js,ts,tsx}": "eslint . --fix"