izen-react-starter 2.0.0 → 2.2.0

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 (53) hide show
  1. package/README.md +51 -10
  2. package/dist/{MIMHJGAX-DM3PPc6i.js → MIMHJGAX-D6lE7oii.js} +1 -1
  3. package/dist/{Q7LWSL4U-Dp8mxbtM.js → Q7LWSL4U-v0l_umPn.js} +2 -2
  4. package/dist/{VLTTJS3N-Dfn6o7Pv.js → VLTTJS3N-BqFxuU2V.js} +2 -2
  5. package/dist/components/ui/badge.d.ts +1 -1
  6. package/dist/components/ui/toast.d.ts +1 -1
  7. package/dist/{index-Dnn3beiE.js → index-BVgl5TkI.js} +52103 -51445
  8. package/dist/index.d.ts +4 -4
  9. package/dist/index.d.ts.map +1 -1
  10. package/dist/izen-react-starter.css +1 -1
  11. package/dist/lib/api/axios/axios.d.ts +44 -0
  12. package/dist/lib/api/axios/axios.d.ts.map +1 -0
  13. package/dist/lib/api/axios/delete-item.d.ts +39 -0
  14. package/dist/lib/api/axios/delete-item.d.ts.map +1 -0
  15. package/dist/lib/api/axios/hooks/useAxiosAuth.d.ts +61 -0
  16. package/dist/lib/api/axios/hooks/useAxiosAuth.d.ts.map +1 -0
  17. package/dist/lib/api/axios/hooks/useAxiosHeadersUrl.d.ts +35 -0
  18. package/dist/lib/api/axios/hooks/useAxiosHeadersUrl.d.ts.map +1 -0
  19. package/dist/lib/api/axios/hooks/useFetchSingleAxios.d.ts +61 -0
  20. package/dist/lib/api/axios/hooks/useFetchSingleAxios.d.ts.map +1 -0
  21. package/dist/lib/api/axios/index.d.ts +13 -0
  22. package/dist/lib/api/axios/index.d.ts.map +1 -0
  23. package/dist/lib/api/axios/useRefreshToken.d.ts +38 -0
  24. package/dist/lib/api/axios/useRefreshToken.d.ts.map +1 -0
  25. package/dist/lib/api/index.d.ts +14 -0
  26. package/dist/lib/api/index.d.ts.map +1 -0
  27. package/dist/lib/api/mutation/file-uploading.d.ts +88 -0
  28. package/dist/lib/api/mutation/file-uploading.d.ts.map +1 -0
  29. package/dist/lib/api/mutation/index.d.ts +5 -0
  30. package/dist/lib/api/mutation/index.d.ts.map +1 -0
  31. package/dist/lib/api/mutation/send-email.d.ts +74 -0
  32. package/dist/lib/api/mutation/send-email.d.ts.map +1 -0
  33. package/dist/lib/api/queries/generic.d.ts +102 -0
  34. package/dist/lib/api/queries/generic.d.ts.map +1 -0
  35. package/dist/lib/api/queries/index.d.ts +3 -0
  36. package/dist/lib/api/queries/index.d.ts.map +1 -0
  37. package/dist/lib/index.d.ts +1 -0
  38. package/dist/lib/index.d.ts.map +1 -1
  39. package/dist/rbac/AccessControlWrapper.d.ts +32 -5
  40. package/dist/rbac/AccessControlWrapper.d.ts.map +1 -1
  41. package/dist/rbac/RBACProvider.d.ts +55 -0
  42. package/dist/rbac/RBACProvider.d.ts.map +1 -0
  43. package/dist/rbac/UpdateAccessControlWrapper.d.ts +14 -2
  44. package/dist/rbac/UpdateAccessControlWrapper.d.ts.map +1 -1
  45. package/dist/rbac/access-rules.d.ts +26 -45
  46. package/dist/rbac/access-rules.d.ts.map +1 -1
  47. package/dist/rbac/index.d.ts +4 -1
  48. package/dist/rbac/index.d.ts.map +1 -1
  49. package/dist/rbac/useAccessControl.d.ts +16 -3
  50. package/dist/rbac/useAccessControl.d.ts.map +1 -1
  51. package/dist/react-starter.js +246 -237
  52. package/dist/react-starter.umd.cjs +147 -147
  53. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/mutation/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGnG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,74 @@
1
+ import { UseMutationResult } from '@tanstack/react-query';
2
+ import { AxiosInstance } from 'axios';
3
+ export interface SendEmailResponse {
4
+ success: boolean;
5
+ message: string;
6
+ [key: string]: any;
7
+ }
8
+ export interface SendEmailParams {
9
+ to: string | string[];
10
+ subject: string;
11
+ body: string;
12
+ [key: string]: any;
13
+ }
14
+ export interface UseSendEmailOptions {
15
+ /**
16
+ * Custom API endpoint
17
+ */
18
+ endpoint?: string;
19
+ /**
20
+ * Callback on success
21
+ */
22
+ onSuccess?: (response: SendEmailResponse) => void;
23
+ /**
24
+ * Callback on error
25
+ */
26
+ onError?: (error: Error) => void;
27
+ /**
28
+ * Callback on settle (success or error)
29
+ */
30
+ onSettled?: () => void;
31
+ }
32
+ /**
33
+ * Hook to send emails through API
34
+ *
35
+ * @param axios - Configured axios instance
36
+ * @param options - Email configuration options
37
+ * @returns Mutation result object
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * import { useSendEmail } from 'izen-react-starter';
42
+ * import useAxiosAuth from './hooks/useAxiosAuth';
43
+ *
44
+ * function EmailSender() {
45
+ * const axios = useAxiosAuth({ axiosInstance: myAxios });
46
+ * const sendEmail = useSendEmail(axios, {
47
+ * endpoint: '/email/send',
48
+ * onSuccess: (response) => {
49
+ * console.log('Email sent successfully');
50
+ * }
51
+ * });
52
+ *
53
+ * const handleSendEmail = () => {
54
+ * sendEmail.mutate({
55
+ * to: 'user@example.com',
56
+ * subject: 'Hello',
57
+ * body: 'This is a test email'
58
+ * });
59
+ * };
60
+ *
61
+ * return (
62
+ * <div>
63
+ * {sendEmail.isPending && <div>Sending...</div>}
64
+ * {sendEmail.isError && <div>Error: {sendEmail.error?.message}</div>}
65
+ * {sendEmail.isSuccess && <div>Email sent!</div>}
66
+ * <button onClick={handleSendEmail}>Send Email</button>
67
+ * </div>
68
+ * );
69
+ * }
70
+ * ```
71
+ */
72
+ declare const useSendEmail: (axios: AxiosInstance, options?: UseSendEmailOptions) => UseMutationResult<SendEmailResponse, Error, SendEmailParams>;
73
+ export { useSendEmail };
74
+ //# sourceMappingURL=send-email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send-email.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/mutation/send-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,QAAA,MAAM,YAAY,GAChB,OAAO,aAAa,EACpB,UAAS,mBAAwB,KAChC,iBAAiB,CAAC,iBAAiB,EAAE,KAAK,EAAE,eAAe,CAqB7D,CAAC;AAEF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,102 @@
1
+ import { UseQueryResult } from '@tanstack/react-query';
2
+ import { AxiosInstance } from 'axios';
3
+ export interface UseGetOptions {
4
+ /**
5
+ * Cache key for the query
6
+ */
7
+ queryKey?: string;
8
+ /**
9
+ * Query parameters
10
+ */
11
+ params?: Record<string, any>;
12
+ /**
13
+ * Override URL (if different from key)
14
+ */
15
+ url?: string;
16
+ /**
17
+ * Time in milliseconds until data is considered stale
18
+ */
19
+ staleTime?: number;
20
+ /**
21
+ * Enable refetch on window focus
22
+ */
23
+ refetchOnWindowFocus?: boolean;
24
+ /**
25
+ * Enable refetch on mount
26
+ */
27
+ refetchOnMount?: boolean;
28
+ /**
29
+ * Enable refetch on reconnect
30
+ */
31
+ refetchOnReconnect?: boolean;
32
+ /**
33
+ * Enable the query (useful for conditional queries)
34
+ */
35
+ enabled?: boolean;
36
+ }
37
+ /**
38
+ * Generic hook to fetch multiple items
39
+ *
40
+ * @param axios - Configured axios instance
41
+ * @param key - Query key / API endpoint
42
+ * @param options - Query configuration options
43
+ * @returns React Query result object
44
+ *
45
+ * @example
46
+ * ```tsx
47
+ * import { useGet } from 'izen-react-starter';
48
+ * import useAxiosAuth from './hooks/useAxiosAuth';
49
+ *
50
+ * function UsersList() {
51
+ * const axios = useAxiosAuth({ axiosInstance: myAxios });
52
+ * const { data, isLoading, error } = useGet(axios, '/users', {
53
+ * queryKey: 'users',
54
+ * params: { page: 1, limit: 10 }
55
+ * });
56
+ *
57
+ * if (isLoading) return <div>Loading...</div>;
58
+ * if (error) return <div>Error: {error.message}</div>;
59
+ *
60
+ * return (
61
+ * <ul>
62
+ * {data?.map(user => (
63
+ * <li key={user.id}>{user.name}</li>
64
+ * ))}
65
+ * </ul>
66
+ * );
67
+ * }
68
+ * ```
69
+ */
70
+ declare const useGet: <T = any>(axios: AxiosInstance, key: string, options?: UseGetOptions) => UseQueryResult<T[], Error>;
71
+ /**
72
+ * Generic hook to fetch a single item
73
+ *
74
+ * @param axios - Configured axios instance
75
+ * @param key - Query key / API endpoint
76
+ * @param options - Query configuration options
77
+ * @returns React Query result object with single item
78
+ *
79
+ * @example
80
+ * ```tsx
81
+ * import { useGetSingle } from 'izen-react-starter';
82
+ * import useAxiosAuth from './hooks/useAxiosAuth';
83
+ *
84
+ * function UserDetail({ userId }) {
85
+ * const axios = useAxiosAuth({ axiosInstance: myAxios });
86
+ * const { data: user, isLoading, error } = useGetSingle(axios, `/users/${userId}`, {
87
+ * queryKey: `user-${userId}`,
88
+ * enabled: !!userId
89
+ * });
90
+ *
91
+ * if (isLoading) return <div>Loading...</div>;
92
+ * if (error) return <div>Error: {error.message}</div>;
93
+ *
94
+ * return <div>{user?.name}</div>;
95
+ * }
96
+ * ```
97
+ */
98
+ declare const useGetSingle: <T = any>(axios: AxiosInstance, key: string, options?: UseGetOptions & {
99
+ defaultValue?: T;
100
+ }) => UseQueryResult<T, Error>;
101
+ export { useGet, useGetSingle };
102
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/queries/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,QAAA,MAAM,MAAM,GAAI,CAAC,GAAG,GAAG,EACrB,OAAO,aAAa,EACpB,KAAK,MAAM,EACX,UAAS,aAAkB,KAC1B,cAAc,CAAC,CAAC,EAAE,EAAE,KAAK,CAkC3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,QAAA,MAAM,YAAY,GAAI,CAAC,GAAG,GAAG,EAC3B,OAAO,aAAa,EACpB,KAAK,MAAM,EACX,UAAS,aAAa,GAAG;IAAE,YAAY,CAAC,EAAE,CAAC,CAAA;CAAO,KACjD,cAAc,CAAC,CAAC,EAAE,KAAK,CAmCzB,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { useGet, useGetSingle } from './generic';
2
+ export type { UseGetOptions } from './generic';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/api/queries/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACjD,YAAY,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { cn, capitalize, convertToHourMinuteString, formatErrorToList, formatDate, appendFormData, debounce, throttle } from './utils';
2
2
  export { handleEditCache, handleSingleEditCache } from './cache-util';
3
3
  export type { CacheEditOptions } from './cache-util';
4
+ export * from './api';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvI,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lib/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACvI,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,cAAc,OAAO,CAAC"}
@@ -1,16 +1,43 @@
1
1
  import { default as React, ReactElement } from 'react';
2
- import { Action, Resource } from './access-rules';
3
2
  export interface AccessControlWrapperProps {
4
3
  children: ReactElement;
5
- resource: Resource;
6
- action?: Action;
4
+ resource: string;
5
+ action?: string;
7
6
  fallback?: ReactElement | null;
8
7
  }
8
+ /**
9
+ * Component to conditionally render children based on RBAC permissions
10
+ *
11
+ * @param resource - The resource to check access for
12
+ * @param action - The action to check (default: 'read')
13
+ * @param fallback - Component to render if access is denied
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <AccessControlWrapper resource="posts" action="create">
18
+ * <CreatePostButton />
19
+ * </AccessControlWrapper>
20
+ * ```
21
+ */
9
22
  export declare const AccessControlWrapper: React.FC<AccessControlWrapperProps>;
10
23
  export interface WithAccessControlProps {
11
- accessedResource: Resource;
12
- accessAction?: Action;
24
+ accessedResource: string;
25
+ accessAction?: string;
13
26
  }
27
+ /**
28
+ * HOC to wrap components with access control
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * const ProtectedComponent = withAccessControl(MyComponent);
33
+ *
34
+ * <ProtectedComponent
35
+ * accessedResource="posts"
36
+ * accessAction="create"
37
+ * // ... other props
38
+ * />
39
+ * ```
40
+ */
14
41
  export declare const withAccessControl: <P extends object>(WrappedComponent: React.ComponentType<P>) => React.ForwardRefExoticComponent<React.PropsWithoutRef<P & WithAccessControlProps> & React.RefAttributes<any>>;
15
42
  export default withAccessControl;
16
43
  //# sourceMappingURL=AccessControlWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AccessControlWrapper.d.ts","sourceRoot":"","sources":["../../src/rbac/AccessControlWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAapE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,kBAAkB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,kHAYzC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"AccessControlWrapper.d.ts","sourceRoot":"","sources":["../../src/rbac/AccessControlWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAapE,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAAI,CAAC,SAAS,MAAM,EAChD,kBAAkB,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,kHAYzC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { ReactNode } from 'react';
2
+ import { RBACConfig, Rules } from './access-rules';
3
+ export interface RBACContextType {
4
+ config: RBACConfig;
5
+ rules: Rules;
6
+ defaultResource?: string;
7
+ resources: string[];
8
+ roles: string[];
9
+ }
10
+ export interface RBACProviderProps {
11
+ children: ReactNode;
12
+ config: RBACConfig;
13
+ }
14
+ /**
15
+ * RBACProvider - Provides RBAC configuration to the application
16
+ *
17
+ * @param config - The RBAC configuration object containing:
18
+ * - roles: Array of role identifiers
19
+ * - resources: Array of resource identifiers
20
+ * - rules: Object mapping roles to their permissions
21
+ * - roleLabels: Optional array of role display labels
22
+ * - defaultResource: Optional default/undefined resource identifier
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * const rbacConfig = {
27
+ * roles: ['admin', 'user'],
28
+ * resources: ['posts', 'comments'],
29
+ * rules: {
30
+ * admin: {
31
+ * manage: { can: 'all' },
32
+ * create: { can: 'all' },
33
+ * read: { can: 'all' },
34
+ * update: { can: 'all' },
35
+ * delete: { can: 'all' },
36
+ * },
37
+ * user: {
38
+ * read: { can: ['posts', 'comments'] },
39
+ * create: { can: ['comments'] },
40
+ * }
41
+ * },
42
+ * roleLabels: [
43
+ * { label: 'Administrator', value: 'admin' },
44
+ * { label: 'User', value: 'user' }
45
+ * ]
46
+ * };
47
+ *
48
+ * <RBACProvider config={rbacConfig}>
49
+ * <App />
50
+ * </RBACProvider>
51
+ * ```
52
+ */
53
+ export declare const RBACProvider: ({ children, config }: RBACProviderProps) => import("react/jsx-runtime").JSX.Element;
54
+ export declare function useRBAC(): RBACContextType;
55
+ //# sourceMappingURL=RBACProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RBACProvider.d.ts","sourceRoot":"","sources":["../../src/rbac/RBACProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEnD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,KAAK,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAID,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,eAAO,MAAM,YAAY,GAAI,sBAAsB,iBAAiB,4CAcnE,CAAC;AAEF,wBAAgB,OAAO,oBAMtB"}
@@ -1,10 +1,22 @@
1
1
  import { default as React, ReactElement } from 'react';
2
- import { Resource } from './access-rules';
3
2
  export interface UpdateAccessControlWrapperProps {
4
3
  children: ReactElement;
5
- resource: Resource;
4
+ resource: string;
6
5
  fallback?: ReactElement | null;
7
6
  }
7
+ /**
8
+ * Component to conditionally render children based on update permissions
9
+ *
10
+ * @param resource - The resource to check update access for
11
+ * @param fallback - Component to render if access is denied
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <UpdateAccessControlWrapper resource="posts">
16
+ * <EditPostButton />
17
+ * </UpdateAccessControlWrapper>
18
+ * ```
19
+ */
8
20
  export declare const UpdateAccessControlWrapper: React.FC<UpdateAccessControlWrapperProps>;
9
21
  export default UpdateAccessControlWrapper;
10
22
  //# sourceMappingURL=UpdateAccessControlWrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UpdateAccessControlWrapper.d.ts","sourceRoot":"","sources":["../../src/rbac/UpdateAccessControlWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAU,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAElD,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAYhF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
1
+ {"version":3,"file":"UpdateAccessControlWrapper.d.ts","sourceRoot":"","sources":["../../src/rbac/UpdateAccessControlWrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAG5C,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;CAChC;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,0BAA0B,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAYhF,CAAC;AAEF,eAAe,0BAA0B,CAAC"}
@@ -1,52 +1,33 @@
1
- export declare enum Action {
2
- Manage = "manage",
3
- Create = "create",
4
- Read = "read",
5
- Update = "update",
6
- Delete = "delete"
7
- }
8
- export declare enum Resource {
9
- Undefined = "d.e.f.a.u.l.t",
10
- Auth = "auth",
11
- Users = "users",
12
- UserGroups = "user-groups",
13
- Clients = "clients",
14
- Shared = "shared",
15
- Reports = "reports",
16
- Preferences = "preferences",
17
- Locations = "locations",
18
- IssueTypes = "issue-types",
19
- Checkpoint = "checkpoints",
20
- LocationShift = "location",
21
- Employees = "employees",
22
- EmployeeAvailabilities = "employee-availabilities",
23
- EmployeeShift = "employee-shifts",
24
- UserDevice = "user-devices",
25
- EmployeeShift_SelfSchedule = "employee-shifts/self-schedule",
26
- Map = "map",
27
- Issue = "issues"
28
- }
29
- export declare enum Role {
30
- Admin = "admin",
31
- Manager = "manager",
32
- Reader = "reader",
33
- Client = "client"
34
- }
35
- export declare const RolesNames: {
1
+ export type Action = string;
2
+ export type Resource = string;
3
+ export type Role = string;
4
+ export declare const CommonActions: {
5
+ readonly Manage: "manage";
6
+ readonly Create: "create";
7
+ readonly Read: "read";
8
+ readonly Update: "update";
9
+ readonly Delete: "delete";
10
+ };
11
+ export interface RoleLabel {
36
12
  label: string;
37
- value: Role;
38
- }[];
39
- interface Rule {
13
+ value: string;
14
+ }
15
+ export interface Rule {
40
16
  can: string | string[];
41
17
  cannot?: string[];
42
18
  }
43
- type RoleRules = {
44
- [key in Action]?: Rule;
19
+ export type RoleRules = {
20
+ [action: string]: Rule;
45
21
  };
46
- type Rules = {
47
- [key in Role]?: RoleRules;
22
+ export type Rules = {
23
+ [role: string]: RoleRules;
48
24
  };
49
- export declare const rules: Rules;
50
- export declare const userCan: (userRoles: Role[], action: Action, target: string) => boolean;
51
- export {};
25
+ export interface RBACConfig {
26
+ roles: string[];
27
+ resources: string[];
28
+ rules: Rules;
29
+ roleLabels?: RoleLabel[];
30
+ defaultResource?: string;
31
+ }
32
+ export declare const userCan: (userRoles: string[], action: string, target: string, rules: Rules, defaultResource?: string) => boolean;
52
33
  //# sourceMappingURL=access-rules.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"access-rules.d.ts","sourceRoot":"","sources":["../../src/rbac/access-rules.ts"],"names":[],"mappings":"AAAA,oBAAY,MAAM;IAChB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,oBAAY,QAAQ;IAClB,SAAS,kBAAkB;IAC3B,IAAI,SAAS;IACb,KAAK,UAAU;IACf,UAAU,gBAAgB;IAC1B,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,aAAa,aAAa;IAC1B,SAAS,cAAc;IACvB,sBAAsB,4BAA4B;IAClD,aAAa,oBAAoB;IACjC,UAAU,iBAAiB;IAC3B,0BAA0B,kCAAkC;IAC5D,GAAG,QAAQ;IACX,KAAK,WAAW;CACjB;AAED,oBAAY,IAAI;IACd,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB;AAED,eAAO,MAAM,UAAU;;;GAKtB,CAAC;AAEF,UAAU,IAAI;IACZ,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,KAAK,SAAS,GAAG;KACd,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,IAAI;CACvB,CAAA;AAED,KAAK,KAAK,GAAG;KACV,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS;CAC1B,CAAA;AAED,eAAO,MAAM,KAAK,EAAE,KA+GnB,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,WAAW,IAAI,EAAE,EAAE,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,OA2B3E,CAAC"}
1
+ {"version":3,"file":"access-rules.d.ts","sourceRoot":"","sources":["../../src/rbac/access-rules.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC;AAC5B,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAC9B,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC;AAG1B,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC;AAGX,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B,CAAA;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAGD,eAAO,MAAM,OAAO,GAClB,WAAW,MAAM,EAAE,EACnB,QAAQ,MAAM,EACd,QAAQ,MAAM,EACd,OAAO,KAAK,EACZ,kBAAkB,MAAM,KACvB,OA6BF,CAAC"}
@@ -1,8 +1,11 @@
1
- export { Action, Resource, Role, RolesNames, rules, userCan } from './access-rules';
1
+ export { CommonActions, userCan } from './access-rules';
2
+ export type { Action, Resource, Role, RoleLabel, Rule, RoleRules, Rules, RBACConfig } from './access-rules';
2
3
  export { useAccessControl } from './useAccessControl';
3
4
  export type { UseAccessControlReturn } from './useAccessControl';
4
5
  export { AccessControlWrapper, withAccessControl } from './AccessControlWrapper';
5
6
  export type { AccessControlWrapperProps, WithAccessControlProps } from './AccessControlWrapper';
6
7
  export { UpdateAccessControlWrapper } from './UpdateAccessControlWrapper';
7
8
  export type { UpdateAccessControlWrapperProps } from './UpdateAccessControlWrapper';
9
+ export { RBACProvider, useRBAC } from './RBACProvider';
10
+ export type { RBACProviderProps, RBACContextType } from './RBACProvider';
8
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rbac/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rbac/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,OAAO,EACR,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,MAAM,EACN,QAAQ,EACR,IAAI,EACJ,SAAS,EACT,IAAI,EACJ,SAAS,EACT,KAAK,EACL,UAAU,EACX,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,YAAY,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AACpF,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACvD,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,8 +1,21 @@
1
- import { Action, Resource } from './access-rules';
2
1
  export interface UseAccessControlReturn {
3
- isAllowed: (action: Action, target: Resource) => boolean;
4
- getResourceByUrl: (url: string) => Resource;
2
+ isAllowed: (action: string, target: string) => boolean;
3
+ getResourceByUrl: (url: string) => string;
5
4
  }
5
+ /**
6
+ * Hook to check access control permissions
7
+ *
8
+ * @returns Object with isAllowed and getResourceByUrl functions
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * const { isAllowed } = useAccessControl();
13
+ *
14
+ * if (isAllowed('create', 'posts')) {
15
+ * // User can create posts
16
+ * }
17
+ * ```
18
+ */
6
19
  export declare const useAccessControl: () => UseAccessControlReturn;
7
20
  export default useAccessControl;
8
21
  //# sourceMappingURL=useAccessControl.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAccessControl.d.ts","sourceRoot":"","sources":["../../src/rbac/useAccessControl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAiB,MAAM,gBAAgB,CAAC;AAEjE,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC;IACzD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,CAAC;CAC7C;AAED,eAAO,MAAM,gBAAgB,QAAO,sBA8BnC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"useAccessControl.d.ts","sourceRoot":"","sources":["../../src/rbac/useAccessControl.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;CAC3C;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,gBAAgB,QAAO,sBA+BnC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}