@makroz/mobile 1.1.2 β†’ 1.2.1

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 (131) hide show
  1. package/dist/__mocks__/flash-list.d.ts +12 -0
  2. package/dist/__mocks__/react-native.d.ts +77 -0
  3. package/dist/auth/MkAuthContext.d.ts +72 -0
  4. package/dist/auth/MkAuthForm.d.ts +31 -0
  5. package/dist/auth/MkAuthProvider.d.ts +57 -0
  6. package/dist/auth/authExports.test.d.ts +2 -0
  7. package/dist/auth/authExports.test.d.ts.map +1 -0
  8. package/dist/auth/authExports.test.js +14 -0
  9. package/dist/auth/authExports.test.js.map +1 -0
  10. package/dist/auth/secureStorage.d.ts +63 -0
  11. package/dist/auth/types.d.ts +65 -0
  12. package/dist/auth/useMkAuth.d.ts +17 -0
  13. package/dist/components/MkAccordion.d.ts +19 -0
  14. package/dist/components/MkAccordion.test.d.ts +2 -0
  15. package/dist/components/MkAlert.d.ts +18 -0
  16. package/dist/components/MkAlert.test.d.ts +2 -0
  17. package/dist/components/MkAvatar.d.ts +12 -0
  18. package/dist/components/MkAvatar.test.d.ts +2 -0
  19. package/dist/components/MkBadge.d.ts +11 -0
  20. package/dist/components/MkBadge.test.d.ts +2 -0
  21. package/dist/components/MkButton.d.ts +13 -0
  22. package/dist/components/MkButton.test.d.ts +2 -0
  23. package/dist/components/MkCard.d.ts +15 -0
  24. package/dist/components/MkCard.test.d.ts +2 -0
  25. package/dist/components/MkCheck.d.ts +18 -0
  26. package/dist/components/MkCheck.test.d.ts +2 -0
  27. package/dist/components/MkDatePicker.d.ts +30 -0
  28. package/dist/components/MkDatePicker.test.d.ts +2 -0
  29. package/dist/components/MkDivider.d.ts +11 -0
  30. package/dist/components/MkDivider.test.d.ts +2 -0
  31. package/dist/components/MkDropDown.d.ts +37 -0
  32. package/dist/components/MkDropDown.test.d.ts +2 -0
  33. package/dist/components/MkEmptyState.d.ts +11 -0
  34. package/dist/components/MkEmptyState.test.d.ts +2 -0
  35. package/dist/components/MkFileUpload.d.ts +63 -0
  36. package/dist/components/MkFileUpload.test.d.ts +2 -0
  37. package/dist/components/MkIcons.d.ts +15 -0
  38. package/dist/components/MkInfiniteList.d.ts +22 -0
  39. package/dist/components/MkInfiniteList.d.ts.map +1 -1
  40. package/dist/components/MkInfiniteList.js +7 -7
  41. package/dist/components/MkInfiniteList.js.map +1 -1
  42. package/dist/components/MkInfiniteList.test.d.ts +2 -0
  43. package/dist/components/MkInput.d.ts +16 -0
  44. package/dist/components/MkInput.test.d.ts +2 -0
  45. package/dist/components/MkLoading.d.ts +12 -0
  46. package/dist/components/MkLoading.test.d.ts +2 -0
  47. package/dist/components/MkModal.d.ts +20 -0
  48. package/dist/components/MkModal.test.d.ts +2 -0
  49. package/dist/components/MkProgressBar.d.ts +13 -0
  50. package/dist/components/MkProgressBar.test.d.ts +2 -0
  51. package/dist/components/MkRadio.d.ts +20 -0
  52. package/dist/components/MkRadio.test.d.ts +2 -0
  53. package/dist/components/MkSearchInput.d.ts +21 -0
  54. package/dist/components/MkSearchInput.test.d.ts +2 -0
  55. package/dist/components/MkSelect.d.ts +16 -0
  56. package/dist/components/MkSelect.test.d.ts +2 -0
  57. package/dist/components/MkSkeleton.d.ts +13 -0
  58. package/dist/components/MkSkeleton.d.ts.map +1 -1
  59. package/dist/components/MkSkeleton.js +10 -7
  60. package/dist/components/MkSkeleton.js.map +1 -1
  61. package/dist/components/MkSkeleton.test.d.ts +2 -0
  62. package/dist/components/MkSwitch.d.ts +13 -0
  63. package/dist/components/MkSwitch.test.d.ts +2 -0
  64. package/dist/components/MkTable.d.ts +39 -0
  65. package/dist/components/MkTable.test.d.ts +2 -0
  66. package/dist/components/MkTabs.d.ts +19 -0
  67. package/dist/components/MkTabs.test.d.ts +2 -0
  68. package/dist/components/MkTextArea.d.ts +17 -0
  69. package/dist/components/MkTextArea.test.d.ts +2 -0
  70. package/dist/components/MkToastRenderer.d.ts +3 -0
  71. package/dist/components/MkToastRenderer.d.ts.map +1 -1
  72. package/dist/components/MkToastRenderer.js +9 -7
  73. package/dist/components/MkToastRenderer.js.map +1 -1
  74. package/dist/components/MkToastRenderer.test.d.ts +2 -0
  75. package/dist/components/MkTooltip.d.ts +15 -0
  76. package/dist/components/MkTooltip.test.d.ts +2 -0
  77. package/dist/components/MkWindowList.d.ts +48 -0
  78. package/dist/components/MkWindowList.test.d.ts +2 -0
  79. package/dist/components/index.d.ts +30 -0
  80. package/dist/context/MkApiContext.d.ts +14 -0
  81. package/dist/context/MkAuthContext.d.ts +34 -0
  82. package/dist/context/MkAuthContext.d.ts.map +1 -1
  83. package/dist/context/MkAuthContext.js +10 -0
  84. package/dist/context/MkAuthContext.js.map +1 -1
  85. package/dist/context/MkConfirmContext.d.ts +8 -0
  86. package/dist/context/MkToastContext.d.ts +19 -0
  87. package/dist/hooks/filePicker.types.d.ts +13 -0
  88. package/dist/hooks/useApi.d.ts +19 -0
  89. package/dist/hooks/useApi.d.ts.map +1 -1
  90. package/dist/hooks/useApi.js +7 -6
  91. package/dist/hooks/useApi.js.map +1 -1
  92. package/dist/hooks/useApi.test.d.ts +2 -0
  93. package/dist/hooks/useApi.test.js +38 -3
  94. package/dist/hooks/useApi.test.js.map +1 -1
  95. package/dist/hooks/useMkCrud.d.ts +39 -0
  96. package/dist/hooks/useMkDebounce.d.ts +24 -0
  97. package/dist/hooks/useMkEffectDebug.d.ts +6 -0
  98. package/dist/hooks/useMkEvent.d.ts +42 -0
  99. package/dist/hooks/useMkFilePickerCli.d.ts +59 -0
  100. package/dist/hooks/useMkFilePickerExpo.d.ts +38 -0
  101. package/dist/hooks/useMkForm.d.ts +43 -0
  102. package/dist/hooks/useMkInfiniteList.d.ts +16 -0
  103. package/dist/hooks/useMkInfiniteList.d.ts.map +1 -1
  104. package/dist/hooks/useMkInfiniteList.js +14 -3
  105. package/dist/hooks/useMkInfiniteList.js.map +1 -1
  106. package/dist/hooks/useMkInfiniteList.test.d.ts +2 -0
  107. package/dist/hooks/useMkInfiniteList.test.d.ts.map +1 -0
  108. package/dist/hooks/useMkInfiniteList.test.js +8 -0
  109. package/dist/hooks/useMkInfiniteList.test.js.map +1 -0
  110. package/dist/hooks/useMkList.d.ts +79 -0
  111. package/dist/hooks/useMkList.d.ts.map +1 -1
  112. package/dist/hooks/useMkList.js.map +1 -1
  113. package/dist/hooks/useMkLocalStorage.d.ts +6 -0
  114. package/dist/hooks/useMkPrevious.d.ts +6 -0
  115. package/dist/hooks/useMkToggle.d.ts +6 -0
  116. package/dist/index.d.ts +28 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +2 -1
  119. package/dist/index.js.map +1 -1
  120. package/dist/test-setup.d.ts +28 -0
  121. package/dist/test-utils.d.ts +22 -0
  122. package/dist/theme/MkThemeProvider.d.ts +14 -0
  123. package/dist/theme/MkThemeProvider.d.ts.map +1 -1
  124. package/dist/theme/MkThemeProvider.js +3 -6
  125. package/dist/theme/MkThemeProvider.js.map +1 -1
  126. package/dist/theme/MkThemeProvider.test.d.ts +2 -0
  127. package/dist/theme/MkThemeProvider.test.d.ts.map +1 -0
  128. package/dist/theme/MkThemeProvider.test.js +32 -0
  129. package/dist/theme/MkThemeProvider.test.js.map +1 -0
  130. package/package.json +16 -16
  131. package/LICENSE +0 -33
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import type { ViewStyle } from 'react-native';
3
+ /**
4
+ * @module MkTooltip (Mobile)
5
+ * @description Long-press tooltip/popover for mobile. Shows info on press since hover doesn't exist in RN.
6
+ * Same conceptual API as web MkTooltip β€” adapted for touch interaction.
7
+ */
8
+ export interface MkTooltipProps {
9
+ content: string;
10
+ position?: 'top' | 'bottom';
11
+ children: React.ReactElement;
12
+ style?: ViewStyle;
13
+ }
14
+ export declare const MkTooltip: React.FC<MkTooltipProps>;
15
+ //# sourceMappingURL=MkTooltip.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MkTooltip.test.d.ts.map
@@ -0,0 +1,48 @@
1
+ import React from 'react';
2
+ import type { ViewStyle } from 'react-native';
3
+ /**
4
+ * @module MkWindowList (Mobile)
5
+ * @description High-performance virtualized list backed by FlashList.
6
+ * Equivalent API to mk-web's MkWindowList β€” same props for items, renderItem, loading, hasMore, etc.
7
+ *
8
+ * RN's FlatList natively virtualizes, so this is a thin wrapper that:
9
+ * 1. Standardizes the API to match web's MkWindowList
10
+ * 2. Adds infinite scroll (onEndReached β†’ onLoadMore)
11
+ * 3. Handles empty states and loading indicators
12
+ * 4. Provides pull-to-refresh
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <MkWindowList
17
+ * items={products}
18
+ * renderItem={(item, index) => <ProductCard product={item} />}
19
+ * itemHeight={80}
20
+ * loading={loading}
21
+ * hasMore={hasMore}
22
+ * onLoadMore={loadMore}
23
+ * onRefresh={refresh}
24
+ * />
25
+ * ```
26
+ */
27
+ export interface MkWindowListProps<T> {
28
+ items: T[];
29
+ renderItem: (item: T, index: number) => React.ReactElement;
30
+ /** Item height. Kept for backwards compatibility with v1 callers; v2 no longer
31
+ * requires it because FlashList v2 automatically handles all sizing. */
32
+ itemHeight?: number;
33
+ /** Container height β€” in mobile this is typically flex-auto. Can pass explicit value. */
34
+ containerHeight?: number;
35
+ /** Extra items to render outside viewport. Default 5. */
36
+ overscan?: number;
37
+ loading?: boolean;
38
+ hasMore?: boolean;
39
+ onLoadMore?: () => void;
40
+ emptyMessage?: string;
41
+ /** Pull-to-refresh handler. */
42
+ onRefresh?: () => void;
43
+ refreshing?: boolean;
44
+ keyExtractor?: (item: T, index: number) => string;
45
+ style?: ViewStyle;
46
+ }
47
+ export declare function MkWindowList<T>({ items, renderItem, itemHeight, containerHeight, overscan, loading, hasMore, onLoadMore, emptyMessage, onRefresh, refreshing, keyExtractor, style, }: MkWindowListProps<T>): import("react/jsx-runtime").JSX.Element;
48
+ //# sourceMappingURL=MkWindowList.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MkWindowList.test.d.ts.map
@@ -0,0 +1,30 @@
1
+ export * from './MkButton';
2
+ export * from './MkInput';
3
+ export * from './MkTextArea';
4
+ export * from './MkCheck';
5
+ export * from './MkSwitch';
6
+ export * from './MkRadio';
7
+ export * from './MkSelect';
8
+ export * from './MkFileUpload';
9
+ export * from './MkSearchInput';
10
+ export * from './MkDatePicker';
11
+ export * from './MkAccordion';
12
+ export * from './MkAlert';
13
+ export * from './MkAvatar';
14
+ export * from './MkBadge';
15
+ export * from './MkCard';
16
+ export * from './MkDivider';
17
+ export * from './MkEmptyState';
18
+ export * from './MkLoading';
19
+ export * from './MkProgressBar';
20
+ export * from './MkSkeleton';
21
+ export * from './MkTabs';
22
+ export * from './MkTooltip';
23
+ export * from './MkModal';
24
+ export * from './MkDropDown';
25
+ export * from './MkToastRenderer';
26
+ export * from './MkTable';
27
+ export * from './MkInfiniteList';
28
+ export * from './MkWindowList';
29
+ export * from './MkIcons';
30
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ export interface MkApiContextType {
3
+ waiting: number;
4
+ setWaiting: (change: number, origin?: string) => void;
5
+ baseUrl: string;
6
+ headers: Record<string, string>;
7
+ }
8
+ export declare function MkApiProvider({ children, baseUrl, initialHeaders }: {
9
+ children: ReactNode;
10
+ baseUrl?: string;
11
+ initialHeaders?: Record<string, string>;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ export declare function useMkApiContext(): MkApiContextType;
14
+ //# sourceMappingURL=MkApiContext.d.ts.map
@@ -0,0 +1,34 @@
1
+ import type { ReactNode } from 'react';
2
+ import React from 'react';
3
+ import type { MkAuthContextType } from '@makroz/core';
4
+ /**
5
+ * @deprecated Use the new Auth module located in `src/auth/` instead.
6
+ * This legacy context is kept for backward compatibility only and will be removed in future releases.
7
+ * Migrate to `MkAuthProvider` from `src/auth/MkAuthProvider.tsx`.
8
+ */
9
+ export interface MkAuthProviderProps {
10
+ children: ReactNode;
11
+ endpoints?: {
12
+ login?: string;
13
+ logout?: string;
14
+ user?: string;
15
+ };
16
+ storage?: {
17
+ getItem: (key: string) => Promise<string | null> | string | null;
18
+ setItem: (key: string, value: string) => Promise<void> | void;
19
+ removeItem: (key: string) => Promise<void> | void;
20
+ };
21
+ }
22
+ /**
23
+ * @deprecated Use `MkAuthProvider` from `@makroz/mobile` (backed by `src/auth/MkAuthProvider.tsx`) instead.
24
+ * The new provider uses SecureStore for token persistence and scope-aware authentication.
25
+ * This legacy provider is kept for backward compatibility only and will be removed in future releases.
26
+ */
27
+ export declare const MkAuthProvider: React.FC<MkAuthProviderProps>;
28
+ /**
29
+ * @deprecated Use `useMkAuth` from `@makroz/mobile` (backed by `src/auth/useMkAuth.ts`) instead.
30
+ * The new hook uses SecureStore and throws `'useMkAuth must be used within an <MkAuthProvider>'`.
31
+ * This legacy hook is kept for backward compatibility only and will be removed in future releases.
32
+ */
33
+ export declare const useMkAuth: () => MkAuthContextType;
34
+ //# sourceMappingURL=MkAuthContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MkAuthContext.d.ts","sourceRoot":"","sources":["../../src/context/MkAuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAkE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAU,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAQ7D,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;QACjE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACrD,CAAC;CACL;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAiFxD,CAAC;AAEF,eAAO,MAAM,SAAS,yBAIrB,CAAA"}
1
+ {"version":3,"file":"MkAuthContext.d.ts","sourceRoot":"","sources":["../../src/context/MkAuthContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAkE,MAAM,OAAO,CAAC;AACvF,OAAO,KAAK,EAAU,iBAAiB,EAAC,MAAM,cAAc,CAAC;AAQ7D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAChC,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,OAAO,CAAC,EAAE;QACN,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;QACjE,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;QAC9D,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;KACrD,CAAC;CACL;AAED;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAiFxD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,SAAS,yBAIrB,CAAA"}
@@ -4,6 +4,11 @@ import { canUser } from '@makroz/core';
4
4
  import { useApi } from '../hooks/useApi';
5
5
  const MkAuthContext = createContext(undefined);
6
6
  const TOKEN_KEY = 'mk_auth_token';
7
+ /**
8
+ * @deprecated Use `MkAuthProvider` from `@makroz/mobile` (backed by `src/auth/MkAuthProvider.tsx`) instead.
9
+ * The new provider uses SecureStore for token persistence and scope-aware authentication.
10
+ * This legacy provider is kept for backward compatibility only and will be removed in future releases.
11
+ */
7
12
  export const MkAuthProvider = ({ children, endpoints = { login: '/auth/login', logout: '/auth/logout', user: '/auth/me' }, storage = (typeof localStorage !== 'undefined' ? localStorage : undefined) }) => {
8
13
  const api = useApi();
9
14
  const [user, setUser] = useState(null);
@@ -77,6 +82,11 @@ export const MkAuthProvider = ({ children, endpoints = { login: '/auth/login', l
77
82
  }), [user, api.error, api.waiting, splash, loaded]);
78
83
  return (_jsx(MkAuthContext.Provider, { value: value, children: children }));
79
84
  };
85
+ /**
86
+ * @deprecated Use `useMkAuth` from `@makroz/mobile` (backed by `src/auth/useMkAuth.ts`) instead.
87
+ * The new hook uses SecureStore and throws `'useMkAuth must be used within an <MkAuthProvider>'`.
88
+ * This legacy hook is kept for backward compatibility only and will be removed in future releases.
89
+ */
80
90
  export const useMkAuth = () => {
81
91
  const context = useContext(MkAuthContext);
82
92
  if (!context)
@@ -1 +1 @@
1
- {"version":3,"file":"MkAuthContext.js","sourceRoot":"","sources":["../../src/context/MkAuthContext.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MkAuthContext.js","sourceRoot":"","sources":["../../src/context/MkAuthContext.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from 'react';
2
+ import React from 'react';
3
+ import type { MkConfirmContextValue } from '@makroz/core';
4
+ export declare const MkConfirmProvider: React.FC<{
5
+ children: ReactNode;
6
+ }>;
7
+ export declare const useMkConfirm: () => MkConfirmContextValue;
8
+ //# sourceMappingURL=MkConfirmContext.d.ts.map
@@ -0,0 +1,19 @@
1
+ import type { ReactNode } from 'react';
2
+ import React from 'react';
3
+ import type { MkToastOptions, MkToastContextValue } from '@makroz/core';
4
+ export interface MkToastProviderProps {
5
+ children: ReactNode;
6
+ /** Default position for toasts. Default: 'top-right'. */
7
+ defaultPosition?: MkToastOptions['position'];
8
+ /** Default timeout in ms. Default: 4000. */
9
+ defaultTimeout?: number;
10
+ /** Maximum concurrent toasts. Default: 5. */
11
+ maxToasts?: number;
12
+ }
13
+ export declare const MkToastProvider: React.FC<MkToastProviderProps>;
14
+ /**
15
+ * Hook to access toast operations.
16
+ * Must be used within MkToastProvider.
17
+ */
18
+ export declare const useMkToast: () => MkToastContextValue;
19
+ //# sourceMappingURL=MkToastContext.d.ts.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @module filePicker.types
3
+ * @internal
4
+ * Shared types for MkFileUpload picker adapters.
5
+ */
6
+ import type { MkFilePickerResult } from '../components/MkFileUpload';
7
+ /** Return type of useMkFilePickerExpo and useMkFilePickerCli. */
8
+ export interface UseMkFilePickerReturn {
9
+ /** Pass directly to MkFileUpload's `onTap` prop. */
10
+ pick: () => Promise<MkFilePickerResult[]>;
11
+ }
12
+ export type { MkFilePickerResult };
13
+ //# sourceMappingURL=filePicker.types.d.ts.map
@@ -0,0 +1,19 @@
1
+ import type { MkResponse, ApiStatus } from '@makroz/core';
2
+ interface UseApiOptions {
3
+ baseUrl?: string;
4
+ headers?: Record<string, string>;
5
+ }
6
+ export declare function useApi<T = unknown>(options?: UseApiOptions): {
7
+ status: ApiStatus;
8
+ data: T | null;
9
+ error: unknown;
10
+ waiting: number;
11
+ loading: boolean;
12
+ get: <R = T>(endpoint: string, params?: Record<string, string | number | boolean | Record<string, any>> | null) => Promise<MkResponse<R>>;
13
+ post: <R = T>(endpoint: string, body: Record<string, unknown> | FormData | null) => Promise<MkResponse<R>>;
14
+ put: <R = T>(endpoint: string, body: Record<string, unknown> | FormData | null) => Promise<MkResponse<R>>;
15
+ delete: (endpoint: string) => Promise<MkResponse<void>>;
16
+ remove: (endpoint: string) => Promise<MkResponse<void>>;
17
+ };
18
+ export {};
19
+ //# sourceMappingURL=useApi.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1D,UAAU,aAAa;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB;;;;;;oBA8E1B,MAAM,WAAU,GAAG;qBAClB,MAAM,QAAQ,GAAG;oBAClB,MAAM,QAAQ,GAAG;uBACd,MAAM;uBACN,MAAM;EAEhC"}
1
+ {"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG1D,UAAU,aAAa;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,wBAAgB,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAE,aAAkB;;;;;;UAoFjD,CAAC,gBAAgB,MAAM,WAAU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI;WACtG,CAAC,gBAAgB,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,GAAG,IAAI;UACzE,CAAC,gBAAgB,MAAM,QAAQ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,QAAQ,GAAG,IAAI;uBAC3D,MAAM;uBACN,MAAM;EAEhC"}
@@ -11,13 +11,13 @@ export function useApi(options = {}) {
11
11
  if (!params)
12
12
  return "";
13
13
  if (params.q)
14
- query.append('q', params.q);
14
+ query.append('q', String(params.q));
15
15
  if (params.sort)
16
- query.append('sort', params.sort);
16
+ query.append('sort', String(params.sort));
17
17
  if (params.page)
18
- query.append('page', params.page.toString());
18
+ query.append('page', String(params.page));
19
19
  if (params.per_page)
20
- query.append('per_page', params.per_page.toString());
20
+ query.append('per_page', String(params.per_page));
21
21
  if (params.filter && typeof params.filter === 'object') {
22
22
  Object.entries(params.filter).forEach(([field, value]) => {
23
23
  if (typeof value === 'object' && value !== null) {
@@ -43,7 +43,7 @@ export function useApi(options = {}) {
43
43
  const response = await fetch(`${baseUrl}${fullEndpoint}`, {
44
44
  method,
45
45
  headers: Object.assign(Object.assign({ 'Content-Type': 'application/json' }, context.headers), options.headers),
46
- body: body ? JSON.stringify(body) : null,
46
+ body: body instanceof FormData ? body : (body ? JSON.stringify(body) : null),
47
47
  });
48
48
  const result = await response.json();
49
49
  if (!result.success) {
@@ -54,7 +54,8 @@ export function useApi(options = {}) {
54
54
  return result;
55
55
  }
56
56
  catch (err) {
57
- setError(err.message);
57
+ const errorMessage = err instanceof Error ? err.message : String(err);
58
+ setError(errorMessage);
58
59
  setStatus('error');
59
60
  throw err;
60
61
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAc,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,MAAM,UAAU,MAAM,CAAC,UAAyB,EAAE;IAC9C,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;IAClC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAY,MAAM,CAAC,CAAC;IACxD,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,CAAC;IAC5C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAM,IAAI,CAAC,CAAC;IAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAEnD,MAAM,gBAAgB,GAAG,CAAC,MAAW,EAAU,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;QAEpC,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,IAAI,MAAM,CAAC,CAAC;YAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACnD,IAAI,MAAM,CAAC,IAAI;YAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,QAAQ;YAAE,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE1E,IAAI,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,EAAE;gBACrD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC9C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;wBAC1C,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC3D,CAAC,CAAC,CAAC;gBACP,CAAC;qBAAM,CAAC;oBACJ,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpD,CAAC;YACL,CAAC,CAAC,CAAC;QACP,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,KAAK,EAAE,QAAgB,EAAE,SAAiB,KAAK,EAAE,OAAY,IAAI,EAAE,SAAc,IAAI,EAAuB,EAAE;QACvH,SAAS,CAAC,SAAS,CAAC,CAAC;QACrB,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,QAAQ,QAAQ,EAAE,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,YAAY,GAAG,GAAG,QAAQ,GAAG,SAAS,EAAE,CAAC;QAE/C,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,YAAY,EAAE,EAAE;gBACtD,MAAM;gBACN,OAAO,gCACH,cAAc,EAAE,kBAAkB,IAC/B,OAAO,CAAC,OAAO,GACf,OAAO,CAAC,OAAO,CACrB;gBACD,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;aAC3C,CAAC,CAAC;YAEH,MAAM,MAAM,GAAe,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEjD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,WAAW,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrB,SAAS,CAAC,SAAS,CAAC,CAAC;YACrB,OAAO,MAAM,CAAC;QAElB,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAChB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtB,SAAS,CAAC,OAAO,CAAC,CAAC;YACnB,MAAM,GAAG,CAAC;QACd,CAAC;gBAAS,CAAC;YACP,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC;QAChD,CAAC;IACL,CAAC,CAAC;IAEF,OAAO;QACH,MAAM;QACN,IAAI;QACJ,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,OAAO,EAAE,MAAM,KAAK,SAAS;QAC7B,GAAG,EAAE,CAAC,QAAgB,EAAE,SAAc,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC;QAClF,IAAI,EAAE,CAAC,QAAgB,EAAE,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC;QACnE,GAAG,EAAE,CAAC,QAAgB,EAAE,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC;QACjE,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;QACtD,MAAM,EAAE,CAAC,QAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;KACzD,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=useApi.test.d.ts.map
@@ -1,10 +1,45 @@
1
- import { describe, it, expect } from 'vitest';
2
- // Test that verifies the hook module structure
3
- describe('useApi hook module', () => {
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { renderHook, act } from '@testing-library/react-native';
3
+ import { useApi } from './useApi';
4
+ const mockSetWaiting = vi.fn();
5
+ const mockContext = {
6
+ baseUrl: 'http://localhost:8000/api',
7
+ headers: { 'X-Custom-Header': 'test' },
8
+ waiting: 0,
9
+ setWaiting: mockSetWaiting,
10
+ };
11
+ vi.mock('../context/MkApiContext', () => ({
12
+ useMkApiContext: () => mockContext,
13
+ }));
14
+ const mockFetch = vi.fn();
15
+ global.fetch = mockFetch;
16
+ describe('useApi hook module (mobile)', () => {
17
+ beforeEach(() => {
18
+ vi.clearAllMocks();
19
+ mockFetch.mockReset();
20
+ });
4
21
  it('should export useApi function', async () => {
5
22
  const module = await import('./useApi');
6
23
  expect(module.useApi).toBeDefined();
7
24
  expect(typeof module.useApi).toBe('function');
8
25
  });
26
+ it('should flow the generic response type correctly', async () => {
27
+ const mockResponse = {
28
+ success: true,
29
+ data: { uuid: 'abc-123', title: 'Mobile Item' },
30
+ message: 'OK',
31
+ };
32
+ mockFetch.mockResolvedValueOnce({
33
+ ok: true,
34
+ json: () => Promise.resolve(mockResponse),
35
+ });
36
+ const { result } = renderHook(() => useApi());
37
+ await act(async () => {
38
+ const response = await result.current.get('/dummy');
39
+ expect(response.data.uuid).toBe('abc-123');
40
+ expect(response.data.title).toBe('Mobile Item');
41
+ });
42
+ expect(result.current.data).toEqual({ uuid: 'abc-123', title: 'Mobile Item' });
43
+ });
9
44
  });
10
45
  //# sourceMappingURL=useApi.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useApi.test.js","sourceRoot":"","sources":["../../src/hooks/useApi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE9C,+CAA+C;AAC/C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"useApi.test.js","sourceRoot":"","sources":["../../src/hooks/useApi.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/B,MAAM,WAAW,GAAG;IAChB,OAAO,EAAE,2BAA2B;IACpC,OAAO,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE;IACtC,OAAO,EAAE,CAAC;IACV,UAAU,EAAE,cAAc;CAC7B,CAAC;AAEF,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,eAAe,EAAE,GAAG,EAAE,CAAC,WAAW;CACrC,CAAC,CAAC,CAAC;AAEJ,MAAM,SAAS,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1B,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;AAEzB,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IACzC,UAAU,CAAC,GAAG,EAAE;QACZ,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,SAAS,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAM7D,MAAM,YAAY,GAAG;YACjB,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE;YAC/C,OAAO,EAAE,IAAI;SAChB,CAAC;QAEF,SAAS,CAAC,qBAAqB,CAAC;YAC5B,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC;SAC5C,CAAC,CAAC;QAEH,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAa,CAAC,CAAC;QAEzD,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { MkCrudConfig, MkCrudAction, MkCrudReturn } from '@makroz/core';
2
+ /**
3
+ * @module useMkCrud
4
+ * @description Full CRUD operations hook with form management, validation, and API integration.
5
+ * Same API surface for both mk-web and mk-mobile.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * const crud = useMkCrud({
10
+ * module: 'users',
11
+ * singular: 'Usuario',
12
+ * plural: 'Usuarios',
13
+ * fields: {
14
+ * name: { rules: ['required', 'min:3'], api: 'ae', label: 'Nombre' },
15
+ * email: { rules: ['required', 'email'], api: 'ae', label: 'Email' },
16
+ * },
17
+ * });
18
+ *
19
+ * // In your component:
20
+ * <MkButton label="Nuevo" onPress={crud.onAdd} />
21
+ *
22
+ * // In the modal:
23
+ * <MkInput label="Nombre" value={crud.form.formState.name}
24
+ * error={crud.form.errors.name}
25
+ * onChangeText={v => crud.form.setField('name', v)} />
26
+ * <MkButton label="Guardar" loading={crud.saving} onPress={crud.onSave} />
27
+ * ```
28
+ */
29
+ interface UseMkCrudOptions extends MkCrudConfig {
30
+ /** Callback after successful save. */
31
+ onSuccess?: (action: MkCrudAction, data: any) => void;
32
+ /** Callback after failed save. */
33
+ onError?: (action: MkCrudAction, error: any) => void;
34
+ /** External reload function (from useMkList). */
35
+ onReload?: () => void;
36
+ }
37
+ export declare function useMkCrud<T extends Record<string, any> = Record<string, any>>(config: UseMkCrudOptions): MkCrudReturn<T>;
38
+ export {};
39
+ //# sourceMappingURL=useMkCrud.d.ts.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @module useMkDebounce
3
+ * @description Returns a debounced value β€” the value only updates after the specified
4
+ * delay of inactivity. Useful for search inputs, filters, and API-driven queries.
5
+ *
6
+ * API is identical between mk-web and mk-mobile.
7
+ *
8
+ * @template T - Type of the input value.
9
+ * @param value - The value to debounce.
10
+ * @param delay - Milliseconds to wait before updating. Default 300.
11
+ * @returns The debounced value.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const [search, setSearch] = useState('');
16
+ * const debouncedSearch = useMkDebounce(search, 400);
17
+ *
18
+ * useEffect(() => {
19
+ * if (debouncedSearch) api.get('/search', { q: debouncedSearch });
20
+ * }, [debouncedSearch]);
21
+ * ```
22
+ */
23
+ export declare const useMkDebounce: <T = any>(value: T, delay?: number) => T;
24
+ //# sourceMappingURL=useMkDebounce.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * useMkEffectDebug (Mobile)
3
+ * πŸš€ Parity with Web.
4
+ */
5
+ export declare const useMkEffectDebug: (effectFunction: () => void | (() => void), dependencies: any[]) => void;
6
+ //# sourceMappingURL=useMkEffectDebug.d.ts.map
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @module useMkEvent
3
+ * @description Lightweight event bus for cross-component communication in React Native.
4
+ * Uses a shared in-memory Map β€” no DOM APIs, no external dependencies.
5
+ * API matches mk-web's useMkEvent exactly: { emit }.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * // Component A β€” listen
10
+ * useMkEvent('cart:updated', (data) => {
11
+ * console.log('Cart updated:', data);
12
+ * });
13
+ *
14
+ * // Component B β€” emit
15
+ * const { emit } = useMkEvent('cart:updated');
16
+ * emit({ items: 5 });
17
+ * ```
18
+ */
19
+ type Listener = (data?: any) => void;
20
+ declare function _on(event: string, fn: Listener): void;
21
+ declare function _off(event: string, fn: Listener): void;
22
+ declare function _emit(event: string, data?: any): void;
23
+ export declare function useMkEvent<T = any>(eventName: string, handler?: (data: T) => void): {
24
+ emit: (data?: T) => void;
25
+ };
26
+ /**
27
+ * Imperative event API β€” for use outside React components (services, callbacks).
28
+ * @example
29
+ * import { MkEventBus } from '@makroz/mobile';
30
+ * MkEventBus.emit('notification:received', payload);
31
+ */
32
+ export declare const MkEventBus: {
33
+ readonly on: typeof _on;
34
+ readonly off: typeof _off;
35
+ readonly emit: typeof _emit;
36
+ /** Clear all listeners for an event. */
37
+ readonly clear: (event: string) => void;
38
+ /** Clear ALL listeners. */
39
+ readonly clearAll: () => void;
40
+ };
41
+ export {};
42
+ //# sourceMappingURL=useMkEvent.d.ts.map
@@ -0,0 +1,59 @@
1
+ import type { UseMkFilePickerReturn } from './filePicker.types';
2
+ /**
3
+ * @module useMkFilePickerCli
4
+ * @description Picker adapter for **React Native CLI** projects.
5
+ *
6
+ * **Required peer packages** (choose what you need):
7
+ * ```bash
8
+ * # Images / Videos:
9
+ * npm install react-native-image-picker
10
+ * cd ios && pod install && cd ..
11
+ *
12
+ * # Documents (PDF, Word, etc.):
13
+ * npm install react-native-document-picker
14
+ * cd ios && pod install && cd ..
15
+ * ```
16
+ *
17
+ * **Android** β€” add to AndroidManifest.xml:
18
+ * ```xml
19
+ * <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
20
+ * <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
21
+ * ```
22
+ *
23
+ * **iOS** β€” add to Info.plist:
24
+ * ```xml
25
+ * <key>NSPhotoLibraryUsageDescription</key>
26
+ * <string>Necesitamos acceso para subir imΓ‘genes</string>
27
+ * ```
28
+ *
29
+ * @example Images
30
+ * ```tsx
31
+ * const picker = useMkFilePickerCli({ mediaType: 'images', multiple: true });
32
+ * <MkFileUpload onTap={picker.pick} onFiles={setFiles} />
33
+ * ```
34
+ *
35
+ * @example Documents
36
+ * ```tsx
37
+ * const picker = useMkFilePickerCli({
38
+ * mediaType: 'documents',
39
+ * documentMimeTypes: ['application/pdf'],
40
+ * });
41
+ * <MkFileUpload onTap={picker.pick} onFiles={setFiles} />
42
+ * ```
43
+ */
44
+ export type CliMediaType = 'images' | 'videos' | 'documents' | 'all';
45
+ export interface UseMkFilePickerCliOptions {
46
+ /** What type of files to pick. Default 'images'. */
47
+ mediaType?: CliMediaType;
48
+ /** Allow multiple selection. Default false. */
49
+ multiple?: boolean;
50
+ /** Image quality 0–1. Default 0.8. */
51
+ quality?: number;
52
+ /**
53
+ * MIME types for document picker.
54
+ * Default: ['image/*', 'application/pdf']
55
+ */
56
+ documentMimeTypes?: string[];
57
+ }
58
+ export declare function useMkFilePickerCli(options?: UseMkFilePickerCliOptions): UseMkFilePickerReturn;
59
+ //# sourceMappingURL=useMkFilePickerCli.d.ts.map
@@ -0,0 +1,38 @@
1
+ import type { UseMkFilePickerReturn } from './filePicker.types';
2
+ /**
3
+ * @module useMkFilePickerExpo
4
+ * @description Picker adapter for **Expo** projects.
5
+ *
6
+ * **Required peer packages** (install separately in your app):
7
+ * ```bash
8
+ * npx expo install expo-image-picker expo-document-picker
9
+ * ```
10
+ *
11
+ * This hook uses `require()` at runtime so the library compiles even if these
12
+ * packages are not installed. A clear error message is shown if they're missing.
13
+ *
14
+ * @example Images
15
+ * ```tsx
16
+ * const picker = useMkFilePickerExpo({ mediaType: 'images', multiple: true });
17
+ * <MkFileUpload onTap={picker.pick} onFiles={setFiles} />
18
+ * ```
19
+ *
20
+ * @example Documents
21
+ * ```tsx
22
+ * const picker = useMkFilePickerExpo({ mediaType: 'documents' });
23
+ * <MkFileUpload onTap={picker.pick} onFiles={setFiles} accept=".pdf" />
24
+ * ```
25
+ */
26
+ export type ExpoMediaType = 'images' | 'videos' | 'documents' | 'all';
27
+ export interface UseMkFilePickerExpoOptions {
28
+ /** What type of files to pick. Default 'images'. */
29
+ mediaType?: ExpoMediaType;
30
+ /** Allow multiple selection. Default false. */
31
+ multiple?: boolean;
32
+ /** Allow editing after picking (images only, ignored when multiple=true). */
33
+ allowsEditing?: boolean;
34
+ /** Image quality 0–1. Default 0.8. */
35
+ quality?: number;
36
+ }
37
+ export declare function useMkFilePickerExpo(options?: UseMkFilePickerExpoOptions): UseMkFilePickerReturn;
38
+ //# sourceMappingURL=useMkFilePickerExpo.d.ts.map