@makroz/web 1.2.4 → 1.2.6-rc14
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.
- package/README.md +1 -1
- package/bin/mk-update.js +249 -0
- package/dist/auth/AuthStorageAdapter.d.ts +74 -0
- package/dist/auth/AuthStorageAdapter.d.ts.map +1 -0
- package/dist/auth/AuthStorageAdapter.js +140 -0
- package/dist/auth/AuthStorageAdapter.js.map +1 -0
- package/dist/auth/MkAuthProvider.d.ts +11 -2
- package/dist/auth/MkAuthProvider.d.ts.map +1 -1
- package/dist/auth/MkAuthProvider.js +15 -25
- package/dist/auth/MkAuthProvider.js.map +1 -1
- package/dist/components/MkFileUpload.d.ts.map +1 -1
- package/dist/components/MkFileUpload.js +36 -2
- package/dist/components/MkFileUpload.js.map +1 -1
- package/dist/components/MkTable.d.ts +8 -1
- package/dist/components/MkTable.d.ts.map +1 -1
- package/dist/components/MkTable.js +28 -2
- package/dist/components/MkTable.js.map +1 -1
- package/dist/hooks/useApi.d.ts +21 -5
- package/dist/hooks/useApi.d.ts.map +1 -1
- package/dist/hooks/useApi.js +83 -63
- package/dist/hooks/useApi.js.map +1 -1
- package/dist/hooks/useMkInfiniteList.d.ts +1 -1
- package/dist/hooks/useMkList.d.ts +8 -12
- package/dist/hooks/useMkList.d.ts.map +1 -1
- package/dist/hooks/useMkList.js +23 -9
- package/dist/hooks/useMkList.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/eslint-plugin-mk/__tests__/no-cross-module-import-dynamic.test.js +89 -0
- package/eslint-plugin-mk/rules/no-cross-module-import.js +16 -0
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkFileUpload.d.ts","sourceRoot":"","sources":["../../src/components/MkFileUpload.tsx"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"MkFileUpload.d.ts","sourceRoot":"","sources":["../../src/components/MkFileUpload.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,IAAI,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAC9B,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqJpD,CAAC"}
|
|
@@ -1,11 +1,26 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useRef, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useRef, useState } from 'react';
|
|
3
3
|
import styles from './MkFileUpload.module.css';
|
|
4
4
|
export const MkFileUpload = ({ onFiles, accept, multiple = false, maxSizeMB = 10, label = 'Arrastra archivos aquí o haz clic', sublabel, disabled = false, error, className, }) => {
|
|
5
5
|
const inputRef = useRef(null);
|
|
6
6
|
const [isDragging, setIsDragging] = useState(false);
|
|
7
7
|
const [localError, setLocalError] = useState('');
|
|
8
8
|
const [fileList, setFileList] = useState([]);
|
|
9
|
+
// Track every preview URL we create so we can revoke them on
|
|
10
|
+
// unmount and on replacement. Without this, every replace
|
|
11
|
+
// (`!multiple` selection) and every unmount leaks blob URLs that
|
|
12
|
+
// the browser keeps the underlying blob alive for — a real memory
|
|
13
|
+
// cost when users pick many large images.
|
|
14
|
+
const previewUrlsRef = useRef([]);
|
|
15
|
+
// Revoke all tracked URLs on unmount. Empty-deps so we close over
|
|
16
|
+
// the ref (which is mutated by processFiles/removeFile), not over
|
|
17
|
+
// `fileList` (which would capture only the mount-time value).
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
return () => {
|
|
20
|
+
previewUrlsRef.current.forEach((url) => URL.revokeObjectURL(url));
|
|
21
|
+
previewUrlsRef.current = [];
|
|
22
|
+
};
|
|
23
|
+
}, []);
|
|
9
24
|
const processFiles = useCallback((rawFiles) => {
|
|
10
25
|
const results = [];
|
|
11
26
|
const errors = [];
|
|
@@ -17,7 +32,9 @@ export const MkFileUpload = ({ onFiles, accept, multiple = false, maxSizeMB = 10
|
|
|
17
32
|
}
|
|
18
33
|
const info = { file, name: file.name, sizeMB, type: file.type };
|
|
19
34
|
if (file.type.startsWith('image/')) {
|
|
20
|
-
|
|
35
|
+
const url = URL.createObjectURL(file);
|
|
36
|
+
info.preview = url;
|
|
37
|
+
previewUrlsRef.current.push(url);
|
|
21
38
|
}
|
|
22
39
|
results.push(info);
|
|
23
40
|
});
|
|
@@ -26,6 +43,18 @@ export const MkFileUpload = ({ onFiles, accept, multiple = false, maxSizeMB = 10
|
|
|
26
43
|
return;
|
|
27
44
|
}
|
|
28
45
|
setLocalError('');
|
|
46
|
+
if (!multiple) {
|
|
47
|
+
// Single-selection mode replaces the fileList wholesale. The
|
|
48
|
+
// previous previews are no longer reachable via the DOM, so
|
|
49
|
+
// revoke them now to release the underlying blobs.
|
|
50
|
+
fileList.forEach((f) => {
|
|
51
|
+
if (f.preview)
|
|
52
|
+
URL.revokeObjectURL(f.preview);
|
|
53
|
+
});
|
|
54
|
+
previewUrlsRef.current = results
|
|
55
|
+
.map((r) => r.preview)
|
|
56
|
+
.filter((u) => Boolean(u));
|
|
57
|
+
}
|
|
29
58
|
const next = multiple ? [...fileList, ...results] : results;
|
|
30
59
|
setFileList(next);
|
|
31
60
|
onFiles(next);
|
|
@@ -38,6 +67,11 @@ export const MkFileUpload = ({ onFiles, accept, multiple = false, maxSizeMB = 10
|
|
|
38
67
|
}
|
|
39
68
|
}, [disabled, processFiles]);
|
|
40
69
|
const removeFile = useCallback((idx) => {
|
|
70
|
+
const removed = fileList[idx];
|
|
71
|
+
if (removed === null || removed === void 0 ? void 0 : removed.preview) {
|
|
72
|
+
URL.revokeObjectURL(removed.preview);
|
|
73
|
+
previewUrlsRef.current = previewUrlsRef.current.filter((u) => u !== removed.preview);
|
|
74
|
+
}
|
|
41
75
|
const next = fileList.filter((_, i) => i !== idx);
|
|
42
76
|
setFileList(next);
|
|
43
77
|
onFiles(next);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkFileUpload.js","sourceRoot":"","sources":["../../src/components/MkFileUpload.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MkFileUpload.js","sourceRoot":"","sources":["../../src/components/MkFileUpload.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,14 @@ interface MkTableProps<T> {
|
|
|
21
21
|
onPageChange?: (page: number) => void;
|
|
22
22
|
actions?: (item: T) => MkDropdownOptionType[];
|
|
23
23
|
onAction?: (action: string | number, item: T) => void;
|
|
24
|
+
/**
|
|
25
|
+
* Override the default `key` extraction. Use this only if your
|
|
26
|
+
* rows have none of `id`, `uuid`, or `key` (the built-in smart
|
|
27
|
+
* fallback) — supply a stable, unique string per row so React
|
|
28
|
+
* can reconcile the list correctly across sort / filter.
|
|
29
|
+
*/
|
|
30
|
+
keyExtractor?: (item: T, index: number) => string;
|
|
24
31
|
}
|
|
25
|
-
export declare function MkTable<T>({ data, columns, loading, onSort, sortField, sortOrder, pagination, onPageChange, actions, onAction }: MkTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
32
|
+
export declare function MkTable<T>({ data, columns, loading, onSort, sortField, sortOrder, pagination, onPageChange, actions, onAction, keyExtractor, }: MkTableProps<T>): import("react/jsx-runtime").JSX.Element;
|
|
26
33
|
export {};
|
|
27
34
|
//# sourceMappingURL=MkTable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkTable.d.ts","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,UAAU,MAAM,CAAC,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,YAAY,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,oBAAoB,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"MkTable.d.ts","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAGzD,UAAU,MAAM,CAAC,CAAC;IACd,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,YAAY,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,oBAAoB,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IACtD;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACrD;AA6BD,wBAAgB,OAAO,CAAC,CAAC,EAAE,EACvB,IAAS,EACT,OAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,EACT,SAAS,EACT,UAAU,EACV,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,YAAkC,GACrC,EAAE,YAAY,CAAC,CAAC,CAAC,2CA4FjB"}
|
|
@@ -1,11 +1,37 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import styles from './MkTable.module.css';
|
|
3
3
|
import { MkDropDown } from './MkDropDown';
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Default row-key resolver. Tries the common stable-id field names
|
|
6
|
+
* first, then warns once in dev when nothing matches, and finally
|
|
7
|
+
* falls back to a positional placeholder. The positional fallback
|
|
8
|
+
* is unique per index within a render, but it WILL cause React to
|
|
9
|
+
* reconcile rows incorrectly across sort/filter — the console
|
|
10
|
+
* warning is there so the missing stable id gets fixed at the
|
|
11
|
+
* source.
|
|
12
|
+
*/
|
|
13
|
+
function defaultKeyExtractor(item, index) {
|
|
14
|
+
const candidate = item;
|
|
15
|
+
const toKey = (v) => typeof v === 'string' || typeof v === 'number' ? String(v) : '';
|
|
16
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.id))
|
|
17
|
+
return toKey(candidate.id);
|
|
18
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.uuid))
|
|
19
|
+
return toKey(candidate.uuid);
|
|
20
|
+
if (toKey(candidate === null || candidate === void 0 ? void 0 : candidate.key))
|
|
21
|
+
return toKey(candidate.key);
|
|
22
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
console.warn(`[MkTable] Row at index ${index} has no id/uuid/key. ` +
|
|
25
|
+
'Falling back to a positional key — add a stable id to fix ' +
|
|
26
|
+
'reconciliation bugs after sort/filter.');
|
|
27
|
+
}
|
|
28
|
+
return `mk-row-${index}`;
|
|
29
|
+
}
|
|
30
|
+
export function MkTable({ data = [], columns = [], loading, onSort, sortField, sortOrder, pagination, onPageChange, actions, onAction, keyExtractor = defaultKeyExtractor, }) {
|
|
5
31
|
const handleSort = (key) => {
|
|
6
32
|
if (onSort)
|
|
7
33
|
onSort(key);
|
|
8
34
|
};
|
|
9
|
-
return (_jsxs("div", { className: styles.container, children: [_jsx("div", { className: styles.tableWrapper, children: _jsxs("table", { className: styles.table, children: [_jsx("thead", { children: _jsxs("tr", { children: [columns.map((col) => (_jsx("th", { onClick: () => col.sortable && handleSort(String(col.key)), className: col.sortable ? styles.sortable : '', children: _jsxs("div", { className: styles.headerContent, children: [col.label, col.sortable && sortField === col.key && (_jsx("span", { className: styles.sortIcon, children: sortOrder === 'asc' ? '↑' : '↓' }))] }) }, String(col.key)))), actions && _jsx("th", { className: styles.actionsHeader, children: "Acciones" })] }) }), _jsxs("tbody", { children: [loading && (_jsx("tr", { className: styles.loadingRow, children: _jsx("td", { colSpan: columns.length, children: _jsx("div", { className: styles.skeleton }) }) })), !loading && data.length === 0 && (_jsx("tr", { className: styles.emptyRow, children: _jsx("td", { colSpan: columns.length, children: "No se encontraron datos." }) })), !loading && data.map((item, idx) => (_jsxs("tr", { className: styles.row, style: { '--row-index': idx }, children: [columns.map((col) => (_jsx("td", { children: col.render ? col.render(item) : item[col.key] }, String(col.key)))), actions && (_jsx("td", { className: styles.actionsCell, children: _jsx(MkDropDown, { options: actions(item), onSelect: (val) => onAction === null || onAction === void 0 ? void 0 : onAction(val, item) }) }))] }, idx)))] })] }) }), pagination && pagination.last_page && pagination.last_page > 1 && (_jsxs("div", { className: styles.pagination, children: [_jsx("button", { disabled: pagination.current_page === 1, onClick: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) - 1), className: styles.pageBtn, children: "Anterior" }), _jsxs("span", { className: styles.pageInfo, children: ["P\u00E1gina ", pagination.current_page, " de ", pagination.last_page] }), _jsx("button", { disabled: pagination.current_page === pagination.last_page, onClick: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) + 1), className: styles.pageBtn, children: "Siguiente" })] }))] }));
|
|
35
|
+
return (_jsxs("div", { className: styles.container, children: [_jsx("div", { className: styles.tableWrapper, children: _jsxs("table", { className: styles.table, children: [_jsx("thead", { children: _jsxs("tr", { children: [columns.map((col) => (_jsx("th", { onClick: () => col.sortable && handleSort(String(col.key)), className: col.sortable ? styles.sortable : '', children: _jsxs("div", { className: styles.headerContent, children: [col.label, col.sortable && sortField === col.key && (_jsx("span", { className: styles.sortIcon, children: sortOrder === 'asc' ? '↑' : '↓' }))] }) }, String(col.key)))), actions && _jsx("th", { className: styles.actionsHeader, children: "Acciones" })] }) }), _jsxs("tbody", { children: [loading && (_jsx("tr", { className: styles.loadingRow, children: _jsx("td", { colSpan: columns.length, children: _jsx("div", { className: styles.skeleton }) }) })), !loading && data.length === 0 && (_jsx("tr", { className: styles.emptyRow, children: _jsx("td", { colSpan: columns.length, children: "No se encontraron datos." }) })), !loading && data.map((item, idx) => (_jsxs("tr", { className: styles.row, style: { '--row-index': idx }, children: [columns.map((col) => (_jsx("td", { children: col.render ? col.render(item) : item[col.key] }, String(col.key)))), actions && (_jsx("td", { className: styles.actionsCell, children: _jsx(MkDropDown, { options: actions(item), onSelect: (val) => onAction === null || onAction === void 0 ? void 0 : onAction(val, item) }) }))] }, keyExtractor(item, idx))))] })] }) }), pagination && pagination.last_page && pagination.last_page > 1 && (_jsxs("div", { className: styles.pagination, children: [_jsx("button", { disabled: pagination.current_page === 1, onClick: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) - 1), className: styles.pageBtn, children: "Anterior" }), _jsxs("span", { className: styles.pageInfo, children: ["P\u00E1gina ", pagination.current_page, " de ", pagination.last_page] }), _jsx("button", { disabled: pagination.current_page === pagination.last_page, onClick: () => onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange((pagination.current_page || 1) + 1), className: styles.pageBtn, children: "Siguiente" })] }))] }));
|
|
10
36
|
}
|
|
11
37
|
//# sourceMappingURL=MkTable.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MkTable.js","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":";AACA,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAE1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"MkTable.js","sourceRoot":"","sources":["../../src/components/MkTable.tsx"],"names":[],"mappings":"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"}
|
package/dist/hooks/useApi.d.ts
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApiStatus, MkResponse } from '@makroz/core';
|
|
2
|
+
import { type MkQueryParams } from '@makroz/core';
|
|
3
|
+
/**
|
|
4
|
+
* Web `useApi` hook.
|
|
5
|
+
*
|
|
6
|
+
* State, refs, and lifecycle are owned here (web-local) while the
|
|
7
|
+
* actual fetch execution + AbortController + response.ok logic lives
|
|
8
|
+
* in `@makroz/core`'s `executeApiRequest`. The mobile wrapper follows
|
|
9
|
+
* the same shape, so both packages share semantics without sharing a
|
|
10
|
+
* React instance (pnpm strict-mode hoisting would otherwise create
|
|
11
|
+
* two React copies and trip `Invalid hook call`).
|
|
12
|
+
*
|
|
13
|
+
* Public return shape is byte-compatible with v1.2.5 so consumer
|
|
14
|
+
* call sites do not need to change.
|
|
15
|
+
*/
|
|
2
16
|
interface UseApiOptions {
|
|
3
17
|
baseUrl?: string;
|
|
4
18
|
headers?: Record<string, string>;
|
|
@@ -6,14 +20,16 @@ interface UseApiOptions {
|
|
|
6
20
|
export declare function useApi<T = unknown>(options?: UseApiOptions): {
|
|
7
21
|
status: ApiStatus;
|
|
8
22
|
data: T | null;
|
|
9
|
-
error:
|
|
23
|
+
error: string | null;
|
|
10
24
|
waiting: number;
|
|
11
25
|
loading: boolean;
|
|
12
|
-
get: <R = T>(endpoint: string, params?:
|
|
13
|
-
post: <R = T>(endpoint: string, body:
|
|
14
|
-
put: <R = T>(endpoint: string, body:
|
|
26
|
+
get: <R = T>(endpoint: string, params?: MkQueryParams) => Promise<MkResponse<R>>;
|
|
27
|
+
post: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
28
|
+
put: <R = T>(endpoint: string, body: unknown) => Promise<MkResponse<R>>;
|
|
15
29
|
delete: (endpoint: string) => Promise<MkResponse<void>>;
|
|
16
30
|
remove: (endpoint: string) => Promise<MkResponse<void>>;
|
|
31
|
+
abort: () => void;
|
|
32
|
+
refetch: () => void;
|
|
17
33
|
};
|
|
18
34
|
export {};
|
|
19
35
|
//# 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,
|
|
1
|
+
{"version":3,"file":"useApi.d.ts","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAGnF;;;;;;;;;;;;GAYG;AAEH,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;;;;;;UAwHtD,CAAC,gBAAgB,MAAM,WAAW,aAAa;WAK/C,CAAC,gBAAgB,MAAM,QAAQ,OAAO;UAKtC,CAAC,gBAAgB,MAAM,QAAQ,OAAO;uBAK5B,MAAM;uBAAN,MAAM;;;EAkBxB"}
|
package/dist/hooks/useApi.js
CHANGED
|
@@ -1,83 +1,101 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { executeApiRequest, ApiCoreError } from '@makroz/core';
|
|
2
3
|
import { useMkApiContext } from '../context/MkApiContext';
|
|
3
|
-
const buildQueryParams = (params) => {
|
|
4
|
-
const query = new URLSearchParams();
|
|
5
|
-
if (!params)
|
|
6
|
-
return "";
|
|
7
|
-
// Specific MK-Director mappings
|
|
8
|
-
if (params.q)
|
|
9
|
-
query.append('q', String(params.q));
|
|
10
|
-
if (params.sort)
|
|
11
|
-
query.append('sort', String(params.sort));
|
|
12
|
-
if (params.page)
|
|
13
|
-
query.append('page', String(params.page));
|
|
14
|
-
if (params.per_page)
|
|
15
|
-
query.append('per_page', String(params.per_page));
|
|
16
|
-
// Advanced Filtering mapping: { filter: { status: 'A', price: { gt: 100 } } }
|
|
17
|
-
if (params.filter && typeof params.filter === 'object') {
|
|
18
|
-
Object.entries(params.filter).forEach(([field, value]) => {
|
|
19
|
-
if (typeof value === 'object' && value !== null) {
|
|
20
|
-
Object.entries(value).forEach(([op, opVal]) => {
|
|
21
|
-
query.append(`filter[${field}][${op}]`, String(opVal));
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
query.append(`filter[${field}]`, String(value));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
const queryString = query.toString();
|
|
30
|
-
return queryString ? `?${queryString}` : "";
|
|
31
|
-
};
|
|
32
4
|
export function useApi(options = {}) {
|
|
33
5
|
const context = useMkApiContext();
|
|
6
|
+
const baseUrl = options.baseUrl || context.baseUrl;
|
|
7
|
+
const mergedHeaders = useMemo(() => { var _a, _b; return (Object.assign(Object.assign({}, ((_a = context.headers) !== null && _a !== void 0 ? _a : {})), ((_b = options.headers) !== null && _b !== void 0 ? _b : {}))); }, [context.headers, options.headers]);
|
|
8
|
+
// Resolve fetch ONCE per provider, not per call. We deliberately
|
|
9
|
+
// prefer `globalThis.fetch` (browser global) so the same lookup
|
|
10
|
+
// path works in dev, prod, and jsdom-test envs. Note: do NOT
|
|
11
|
+
// `.bind(globalThis)` here — vi.fn() mocks in tests are sensitive
|
|
12
|
+
// to `this` rebinding, and the bare global already has the right
|
|
13
|
+
// receiver.
|
|
14
|
+
const fetchImpl = useMemo(() => globalThis.fetch, []);
|
|
34
15
|
const [status, setStatus] = useState('idle');
|
|
35
16
|
const [data, setData] = useState(null);
|
|
36
17
|
const [error, setError] = useState(null);
|
|
37
|
-
const
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
18
|
+
const controllerRef = useRef(null);
|
|
19
|
+
const lastRequestRef = useRef(null);
|
|
20
|
+
const abort = useCallback(() => {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
23
|
+
controllerRef.current = null;
|
|
24
|
+
}, []);
|
|
25
|
+
const call = useCallback(async (req) => {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
// Cancel any prior in-flight request so the newest wins.
|
|
28
|
+
(_a = controllerRef.current) === null || _a === void 0 ? void 0 : _a.abort();
|
|
29
|
+
const controller = new AbortController();
|
|
30
|
+
controllerRef.current = controller;
|
|
31
|
+
lastRequestRef.current = req;
|
|
32
|
+
context.setWaiting(1, `call:${req.endpoint}`);
|
|
48
33
|
try {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
method,
|
|
55
|
-
|
|
56
|
-
|
|
34
|
+
setStatus('loading');
|
|
35
|
+
setError(null);
|
|
36
|
+
const result = await executeApiRequest({
|
|
37
|
+
baseUrl,
|
|
38
|
+
endpoint: req.endpoint,
|
|
39
|
+
method: req.method,
|
|
40
|
+
body: req.body,
|
|
41
|
+
params: req.params,
|
|
42
|
+
headers: mergedHeaders,
|
|
43
|
+
signal: controller.signal,
|
|
44
|
+
timeoutMs: req.timeoutMs,
|
|
45
|
+
fetchImpl,
|
|
57
46
|
});
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
// Stale-response guard: if a newer call started while
|
|
48
|
+
// we were awaiting, drop this response silently.
|
|
49
|
+
if (controller.signal.aborted && controllerRef.current !== controller) {
|
|
50
|
+
return result;
|
|
61
51
|
}
|
|
62
52
|
setData(result.data);
|
|
63
53
|
setStatus('success');
|
|
64
54
|
return result;
|
|
65
55
|
}
|
|
66
56
|
catch (err) {
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
58
|
+
throw err;
|
|
59
|
+
}
|
|
60
|
+
if (controllerRef.current !== controller) {
|
|
61
|
+
throw err;
|
|
62
|
+
}
|
|
63
|
+
const message = err instanceof Error
|
|
64
|
+
? err.message
|
|
65
|
+
: typeof err === 'string'
|
|
66
|
+
? err
|
|
67
|
+
: 'Unknown fetch error';
|
|
68
|
+
// BC: state stores the message string (what v1.2.5 consumers
|
|
69
|
+
// expect). The thrown value is the full ApiCoreError so
|
|
70
|
+
// callers using `.rejects.toThrow(...)` still get the
|
|
71
|
+
// structured info via `instanceof ApiCoreError`.
|
|
72
|
+
setError(message);
|
|
69
73
|
setStatus('error');
|
|
70
|
-
throw err
|
|
74
|
+
throw err instanceof Error
|
|
75
|
+
? err
|
|
76
|
+
: new ApiCoreError(message, {
|
|
77
|
+
status: 0,
|
|
78
|
+
statusText: 'unknown',
|
|
79
|
+
endpoint: req.endpoint,
|
|
80
|
+
method: ((_b = req.method) !== null && _b !== void 0 ? _b : 'GET'),
|
|
81
|
+
});
|
|
71
82
|
}
|
|
72
83
|
finally {
|
|
73
|
-
context.setWaiting(-1, `-call:${endpoint}`);
|
|
84
|
+
context.setWaiting(-1, `-call:${req.endpoint}`);
|
|
85
|
+
if (controllerRef.current === controller) {
|
|
86
|
+
controllerRef.current = null;
|
|
87
|
+
}
|
|
74
88
|
}
|
|
75
|
-
}, [context]);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
89
|
+
}, [baseUrl, mergedHeaders, fetchImpl, context]);
|
|
90
|
+
const refetch = useCallback(() => {
|
|
91
|
+
const last = lastRequestRef.current;
|
|
92
|
+
if (last)
|
|
93
|
+
void call(last);
|
|
94
|
+
}, [call]);
|
|
95
|
+
const get = useCallback((endpoint, params) => call({ endpoint, method: 'GET', params }), [call]);
|
|
96
|
+
const post = useCallback((endpoint, body) => call({ endpoint, method: 'POST', body }), [call]);
|
|
97
|
+
const put = useCallback((endpoint, body) => call({ endpoint, method: 'PUT', body }), [call]);
|
|
98
|
+
const deleteFn = useCallback((endpoint) => call({ endpoint, method: 'DELETE' }), [call]);
|
|
81
99
|
return {
|
|
82
100
|
status,
|
|
83
101
|
data,
|
|
@@ -88,7 +106,9 @@ export function useApi(options = {}) {
|
|
|
88
106
|
post,
|
|
89
107
|
put,
|
|
90
108
|
delete: deleteFn,
|
|
91
|
-
remove:
|
|
109
|
+
remove: deleteFn,
|
|
110
|
+
abort,
|
|
111
|
+
refetch,
|
|
92
112
|
};
|
|
93
113
|
}
|
|
94
114
|
//# sourceMappingURL=useApi.js.map
|
package/dist/hooks/useApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"useApi.js","sourceRoot":"","sources":["../../src/hooks/useApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ export interface InfiniteListOptions {
|
|
|
7
7
|
export declare function useMkInfiniteList(endpoint: string, options?: InfiniteListOptions): {
|
|
8
8
|
items: any[];
|
|
9
9
|
loading: boolean;
|
|
10
|
-
error:
|
|
10
|
+
error: string | null;
|
|
11
11
|
hasMore: boolean;
|
|
12
12
|
loadMore: () => void;
|
|
13
13
|
reset: () => void;
|
|
@@ -57,23 +57,19 @@ export declare function useMkList(endpoint: string, options?: MkListOptions): {
|
|
|
57
57
|
setPerPage: (per_page: number) => void;
|
|
58
58
|
resetFilters: () => void;
|
|
59
59
|
refresh: (extraParams?: MkListParams) => Promise<import("@makroz/core").MkResponse<MkListResponse<unknown>>>;
|
|
60
|
-
/** Pagination meta from __extraData */
|
|
61
|
-
pagination:
|
|
62
|
-
[key: string]: unknown;
|
|
63
|
-
current_page?: number;
|
|
64
|
-
last_page?: number;
|
|
65
|
-
per_page?: number;
|
|
66
|
-
total?: number;
|
|
67
|
-
};
|
|
60
|
+
/** Pagination meta from __extraData (R-PKG-023: top-level, fallback to legacy nested) */
|
|
61
|
+
pagination: Record<string, unknown>;
|
|
68
62
|
status: import("@makroz/core").ApiStatus;
|
|
69
63
|
data: MkListResponse<unknown> | null;
|
|
70
|
-
error:
|
|
64
|
+
error: string | null;
|
|
71
65
|
waiting: number;
|
|
72
66
|
loading: boolean;
|
|
73
|
-
get: <R = MkListResponse<unknown>>(endpoint: string, params?:
|
|
74
|
-
post: <R = MkListResponse<unknown>>(endpoint: string, body:
|
|
75
|
-
put: <R = MkListResponse<unknown>>(endpoint: string, body:
|
|
67
|
+
get: <R = MkListResponse<unknown>>(endpoint: string, params?: import("@makroz/core").MkQueryParams) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
68
|
+
post: <R = MkListResponse<unknown>>(endpoint: string, body: unknown) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
69
|
+
put: <R = MkListResponse<unknown>>(endpoint: string, body: unknown) => Promise<import("@makroz/core").MkResponse<R>>;
|
|
76
70
|
delete: (endpoint: string) => Promise<import("@makroz/core").MkResponse<void>>;
|
|
77
71
|
remove: (endpoint: string) => Promise<import("@makroz/core").MkResponse<void>>;
|
|
72
|
+
abort: () => void;
|
|
73
|
+
refetch: () => void;
|
|
78
74
|
};
|
|
79
75
|
//# sourceMappingURL=useMkList.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;
|
|
1
|
+
{"version":3,"file":"useMkList.d.ts","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,wDAAwD;AACxD,MAAM,WAAW,cAAc,CAAC,CAAC,GAAG,OAAO;IACvC,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,CAAC,EAAE;QACV,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC1B,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC1B,sBAAsB;IACtB,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB;;;uBA+B7B,MAAM,SAAS,OAAO;oBAQzB,MAAM;mBAIP,MAAM;oBAIL,MAAM;2BAIC,MAAM;;4BAjCxB,YAAY;IAgEhC,yFAAyF;;;;;;;;;;;;;;EAGhG"}
|
package/dist/hooks/useMkList.js
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
import { useState, useCallback, useEffect, useRef } from 'react';
|
|
2
2
|
import { useApi } from './useApi';
|
|
3
3
|
export function useMkList(endpoint, options = {}) {
|
|
4
|
-
var _a;
|
|
5
4
|
const { initialParams = {}, autoFetch = true } = options;
|
|
6
5
|
const api = useApi();
|
|
7
6
|
const [params, setParams] = useState(Object.assign({ page: 1, per_page: 15 }, initialParams));
|
|
7
|
+
// R-PKG-023 (rc12): capture __extraData from the response envelope
|
|
8
|
+
// (top-level, sibling of `data`, per the @makroz/core MkResponse<T>
|
|
9
|
+
// contract). The previous implementation read from `api.data?.__extraData`
|
|
10
|
+
// which worked for the legacy nested shape but breaks once the Laravel
|
|
11
|
+
// backend emits the canonical top-level shape. We auto-detect: top-level
|
|
12
|
+
// first, then fallback to legacy nested.
|
|
13
|
+
const [extraData, setExtraData] = useState({});
|
|
8
14
|
const mountedRef = useRef(false);
|
|
9
|
-
const refresh = useCallback((extraParams = {}) => {
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
const refresh = useCallback(async (extraParams = {}) => {
|
|
16
|
+
var _a, _b;
|
|
17
|
+
const response = await api.get(endpoint, Object.assign(Object.assign({}, params), extraParams));
|
|
18
|
+
// Auto-detect response shape (R-PKG-023):
|
|
19
|
+
// - Top-level (rc12+ with flag): `response.__extraData` exists.
|
|
20
|
+
// - Legacy nested (rc11 and earlier): `response.data?.__extraData`.
|
|
21
|
+
const topLevel = response.__extraData;
|
|
22
|
+
const nested = (_a = response.data) === null || _a === void 0 ? void 0 : _a.__extraData;
|
|
23
|
+
setExtraData((_b = topLevel !== null && topLevel !== void 0 ? topLevel : nested) !== null && _b !== void 0 ? _b : {});
|
|
24
|
+
return response;
|
|
25
|
+
}, [endpoint, params, api]);
|
|
12
26
|
const setFilter = useCallback((field, value) => {
|
|
13
27
|
setParams(prev => (Object.assign(Object.assign({}, prev), { page: 1, filter: Object.assign(Object.assign({}, prev.filter), { [field]: value }) })));
|
|
14
28
|
}, []);
|
|
@@ -33,11 +47,11 @@ export function useMkList(endpoint, options = {}) {
|
|
|
33
47
|
return;
|
|
34
48
|
if (!mountedRef.current) {
|
|
35
49
|
mountedRef.current = true;
|
|
36
|
-
refresh();
|
|
50
|
+
void refresh();
|
|
37
51
|
return;
|
|
38
52
|
}
|
|
39
|
-
refresh();
|
|
40
|
-
}, [params]);
|
|
53
|
+
void refresh();
|
|
54
|
+
}, [params, refresh]);
|
|
41
55
|
return Object.assign(Object.assign({}, api), { params,
|
|
42
56
|
setParams,
|
|
43
57
|
setFilter,
|
|
@@ -47,7 +61,7 @@ export function useMkList(endpoint, options = {}) {
|
|
|
47
61
|
setPerPage,
|
|
48
62
|
resetFilters,
|
|
49
63
|
refresh,
|
|
50
|
-
/** Pagination meta from __extraData */
|
|
51
|
-
pagination:
|
|
64
|
+
/** Pagination meta from __extraData (R-PKG-023: top-level, fallback to legacy nested) */
|
|
65
|
+
pagination: extraData });
|
|
52
66
|
}
|
|
53
67
|
//# sourceMappingURL=useMkList.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAuDlC,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,UAAyB,EAAE
|
|
1
|
+
{"version":3,"file":"useMkList.js","sourceRoot":"","sources":["../../src/hooks/useMkList.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export { useMkAuth } from './auth/useMkAuth';
|
|
|
28
28
|
export { MkAuthForm } from './auth/MkAuthForm';
|
|
29
29
|
export type { MkAuthFormProps } from './auth/MkAuthForm';
|
|
30
30
|
export type { MkAuthContextValue } from './auth/MkAuthContext';
|
|
31
|
-
export type { AdminDto, AuthTokens, LoginInput, LoginResponse, RefreshResponse, } from './auth/types';
|
|
31
|
+
export type { AdminDto, AuthTokens, AuthStorageAdapter, LoginInput, LoginResponse, RefreshResponse, } from './auth/types';
|
|
32
|
+
export { CookieStorageAdapter, LocalStorageAdapter, getDefaultAuthStorage, type CookieStorageAdapterOptions, } from './auth/AuthStorageAdapter';
|
|
32
33
|
export * from './utils/images';
|
|
33
34
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGtE,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,aAAa,EACb,eAAe,GAClB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGtE,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AAGxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AAGnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EACR,QAAQ,EACR,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,eAAe,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,2BAA2B,GACnC,MAAM,2BAA2B,CAAC;AAGnC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -28,6 +28,7 @@ export * from './hooks/useMkStore';
|
|
|
28
28
|
export { MkAuthProvider } from './auth/MkAuthProvider';
|
|
29
29
|
export { useMkAuth } from './auth/useMkAuth';
|
|
30
30
|
export { MkAuthForm } from './auth/MkAuthForm';
|
|
31
|
+
export { CookieStorageAdapter, LocalStorageAdapter, getDefaultAuthStorage, } from './auth/AuthStorageAdapter';
|
|
31
32
|
// Utils
|
|
32
33
|
export * from './utils/images';
|
|
33
34
|
// Note: Global CSS (`@makroz/web/styles/index.css`) MUST be imported by the
|