react-hook-toolkit 1.0.10 → 1.0.12

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 CHANGED
@@ -619,8 +619,52 @@ Displays a styled file card with an icon based on file type, filename with ellip
619
619
  />
620
620
  ```
621
621
  ---
622
+ ✅ **UploadFile**
623
+ Renders an icon button for file uploads with visual feedback for different upload states (loading, success, error). It supports disabling, color customization, and a hidden file input for seamless UX.
622
624
 
623
- ### ✅ **LabeledValue**
625
+ ```tsx
626
+ <UploadFile
627
+ isUpload={true}
628
+ color="#1976d2"
629
+ state={{
630
+ isUploaded: false,
631
+ isUploadError: false,
632
+ isLoadingUpload: true,
633
+ }}
634
+ onFileSelect={(file) => console.log(file)}
635
+ />
636
+
637
+ const handleFileSelect = async (files: any) => {
638
+ setState({ isUploaded: false, isUploadError: false, isLoadingUpload: true });
639
+ try {
640
+ await _promise(2000);
641
+ setState({ isUploaded: true, isUploadError: false, isLoadingUpload: false });
642
+ } catch (err) {
643
+ setState({ isUploaded: false, isUploadError: true, isLoadingUpload: false });
644
+ }
645
+ };
646
+ ```
647
+ ---
648
+
649
+ ✅ **DownloadFile**
650
+ Renders an icon button for file downloads with visual feedback for different states (loading, success, error). It supports color customization and disables interaction during loading.
651
+
652
+ ```tsx
653
+ <DownloadFile
654
+ isDownload={true}
655
+ color="primary"
656
+ state={{
657
+ isDownloaded: false,
658
+ isDownloadError: false,
659
+ isLoadingDownload: true,
660
+ }}
661
+ onDownload={() => console.log('Download initiated')}
662
+ />
663
+ ```
664
+
665
+ ---
666
+
667
+ ✅ **LabeledValue**
624
668
  Displays a simple key-value label pair in a single line, with optional styling.
625
669
 
626
670
  ```tsx
@@ -631,7 +675,7 @@ Displays a simple key-value label pair in a single line, with optional styling.
631
675
  ```
632
676
  ---
633
677
 
634
- ### ✅ **DetailsCard**
678
+ ✅ **DetailsCard**
635
679
  Renders a card with a title and grid-based layout of labeled values. It supports custom spacing, responsive behavior, and optional card shadow.
636
680
 
637
681
  ```tsx
@@ -653,7 +697,7 @@ A functional React component that displays dynamic alerts using the enqueueSnack
653
697
  ```
654
698
  ---
655
699
 
656
- ### ✅ **FileSkeleton**
700
+ ✅ **FileSkeleton**
657
701
  Displays one or more placeholder file cards mimicking the layout of file previews. Useful during file list loading.
658
702
 
659
703
  ```tsx
@@ -666,7 +710,7 @@ Displays one or more placeholder file cards mimicking the layout of file preview
666
710
 
667
711
  ---
668
712
 
669
- ### ✅ **TableSkeleton**
713
+ ✅ **TableSkeleton**
670
714
  Shows a full table layout with skeleton headers and rows. Includes a toolbar area for filters or search bars.
671
715
 
672
716
  ```tsx
@@ -678,25 +722,25 @@ Shows a full table layout with skeleton headers and rows. Includes a toolbar are
678
722
 
679
723
  ---
680
724
 
681
- ### ✅ **LineChartSkeleton**
682
- Represents a placeholder for a line chart with gridlines and axis lines to simulate loading of chart data.
725
+ ✅ **CardSkeleton**
726
+ Simulates a card layout with a title and multiple row placeholders, ideal for stat or summary cards.
683
727
 
684
728
  ```tsx
685
- <LineChartSkeleton />
729
+ <CardSkeleton />
686
730
  ```
687
731
 
688
732
  ---
689
733
 
690
- ### ✅ **CardSkeleton**
691
- Simulates a card layout with a title and multiple row placeholders, ideal for stat or summary cards.
734
+ ✅ **LineChartSkeleton**
735
+ Represents a placeholder for a line chart with gridlines and axis lines to simulate loading of chart data.
692
736
 
693
737
  ```tsx
694
- <CardSkeleton />
738
+ <LineChartSkeleton />
695
739
  ```
696
740
 
697
741
  ---
698
742
 
699
- ### ✅ **PieChartSkeleton**
743
+ ✅ **PieChartSkeleton**
700
744
  Displays a skeleton placeholder for a pie chart inside a card layout. Includes a title and circular loading element.
701
745
 
702
746
  ```tsx
@@ -1,4 +1,4 @@
1
- import { FC } from 'react';
1
+ import React, { FC } from 'react';
2
2
  export declare const DynamicLoader: (Component: any) => (props: any) => import("react/jsx-runtime").JSX.Element;
3
3
  interface PropsType {
4
4
  type: string;
@@ -7,13 +7,16 @@ interface PropsType {
7
7
  }
8
8
  export declare const AlertMessage: FC<PropsType>;
9
9
  interface DetailsCardProps {
10
+ isLoading?: boolean;
10
11
  title: string;
11
- details: any;
12
+ details: any[];
12
13
  spacing?: number;
13
14
  boxShadow?: string;
14
15
  background?: string;
16
+ loaderType?: 'skeleton' | 'circular';
17
+ displayType?: 'flex' | 'block';
15
18
  }
16
- export declare const DetailsCard: ({ title, details, spacing, boxShadow, background, }: DetailsCardProps) => import("react/jsx-runtime").JSX.Element;
19
+ export declare const DetailsCard: ({ isLoading, title, details, spacing, boxShadow, background, loaderType, displayType, }: DetailsCardProps) => import("react/jsx-runtime").JSX.Element;
17
20
  export declare const LabeledValue: ({ label, value, style }: any) => import("react/jsx-runtime").JSX.Element;
18
21
  interface FileComponentProps {
19
22
  primaryKey: string | number;
@@ -23,6 +26,30 @@ interface FileComponentProps {
23
26
  width?: number;
24
27
  borderColor?: string;
25
28
  fileColor?: 'inherit' | 'primary' | 'secondary' | 'error' | 'disabled' | 'action';
29
+ isDownloading: boolean;
26
30
  }
27
- export declare const FilePreview: ({ primaryKey, filename, size, onDownload, width, borderColor, fileColor, }: FileComponentProps) => import("react/jsx-runtime").JSX.Element;
31
+ export declare const FilePreview: ({ primaryKey, filename, size, onDownload, width, borderColor, fileColor, isDownloading, }: FileComponentProps) => import("react/jsx-runtime").JSX.Element;
32
+ interface UploadButtonProps {
33
+ isUpload?: boolean;
34
+ color?: 'inherit' | 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning';
35
+ state?: {
36
+ isUploaded?: boolean;
37
+ isUploadError?: boolean;
38
+ isLoadingUpload?: boolean;
39
+ };
40
+ onFileSelect: (file: File) => void;
41
+ }
42
+ export declare const UploadFile: React.FC<UploadButtonProps>;
43
+ interface DownloadButtonState {
44
+ isDownloaded?: boolean;
45
+ isDownloadError?: boolean;
46
+ isLoadingDownload?: boolean;
47
+ }
48
+ interface DownloadFileProps {
49
+ isDownload?: boolean;
50
+ color?: 'inherit' | 'primary' | 'secondary' | 'success' | 'error' | 'info' | 'warning';
51
+ state?: DownloadButtonState;
52
+ onDownload: () => void;
53
+ }
54
+ export declare const DownloadFile: React.FC<DownloadFileProps>;
28
55
  export {};
@@ -10,9 +10,10 @@ var __assign = (this && this.__assign) || function () {
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ import { forwardRef } from 'react';
13
14
  import { useEffect, useCallback, useRef, Suspense } from 'react';
14
- import { Box, Alert, AlertTitle, IconButton, CardContent, Tooltip, Typography, Card, Grid, } from '@mui/material';
15
- import { Close, InsertDriveFile, Image, Description, Download } from '@mui/icons-material';
15
+ import { Box, Alert, AlertTitle, IconButton, CardContent, Tooltip, Typography, Card, Grid, Skeleton, CircularProgress, } from '@mui/material';
16
+ import { Close, InsertDriveFile, Image, Description, Download, CheckCircleOutlined, ErrorOutlineOutlined, Upload, } from '@mui/icons-material';
16
17
  import NProgress from 'nprogress';
17
18
  import { ErrorBoundary } from 'react-error-boundary';
18
19
  import { promise } from '../utils';
@@ -73,16 +74,16 @@ export var AlertMessage = function (_a) {
73
74
  return null;
74
75
  };
75
76
  export var DetailsCard = function (_a) {
76
- var title = _a.title, details = _a.details, _b = _a.spacing, spacing = _b === void 0 ? 2 : _b, _c = _a.boxShadow, boxShadow = _c === void 0 ? '0px 0px 2px 2px #d8d8d8' : _c, _d = _a.background, background = _d === void 0 ? '#eee' : _d;
77
+ var _b = _a.isLoading, isLoading = _b === void 0 ? false : _b, title = _a.title, details = _a.details, _c = _a.spacing, spacing = _c === void 0 ? 2 : _c, _d = _a.boxShadow, boxShadow = _d === void 0 ? '0px 0px 2px 2px #d8d8d8' : _d, _e = _a.background, background = _e === void 0 ? '#eee' : _e, _f = _a.loaderType, loaderType = _f === void 0 ? 'skeleton' : _f, _g = _a.displayType, displayType = _g === void 0 ? 'flex' : _g;
77
78
  var width = useWindowSize().width;
78
- return (_jsx(Card, { sx: { boxShadow: boxShadow }, children: _jsxs(CardContent, { children: [_jsx(Typography, { variant: "h6", sx: { background: background, padding: '4px' }, children: title }), _jsx(Grid, { container: true, spacing: spacing, sx: { mt: 1 }, children: details.filter(Boolean).map(function (item, index) { return (_jsxs(Grid, { item: true, xs: 12, sm: 6, md: 6, lg: width < 1367 ? 6 : 4, children: [_jsxs(Typography, { fontWeight: "bold", component: "span", sx: { fontSize: '14px' }, children: [item === null || item === void 0 ? void 0 : item.label, ": \u00A0"] }), _jsx(Typography, { component: "span", sx: { fontSize: '14px' }, children: (item === null || item === void 0 ? void 0 : item.value) || 'N/A' })] }, index.toString())); }) })] }) }));
79
+ return (_jsx(Card, { sx: { boxShadow: boxShadow }, children: _jsxs(CardContent, { children: [_jsx(Typography, { variant: "h6", sx: { background: background, padding: '4px' }, children: title }), _jsx(Grid, { container: true, spacing: spacing, sx: { mt: 1 }, children: details.filter(Boolean).map(function (item, index) { return (_jsx(Grid, { item: true, xs: 12, sm: 6, md: 6, lg: width < 1367 ? 6 : 4, children: _jsxs(Box, { display: displayType, alignItems: "center", sx: { fontSize: '14px' }, children: [_jsxs(Typography, { fontWeight: "bold", component: "span", sx: { fontSize: '14px' }, children: [item === null || item === void 0 ? void 0 : item.label, ":\u00A0"] }), isLoading ? (loaderType === 'skeleton' ? (_jsx(Skeleton, { sx: { ml: 2 }, variant: "text", width: 100, height: 20 })) : (_jsx(CircularProgress, { sx: { ml: 2 }, color: "success", size: 18 }))) : (_jsx(Typography, { component: "span", sx: { fontSize: '14px' }, children: (item === null || item === void 0 ? void 0 : item.value) !== undefined && (item === null || item === void 0 ? void 0 : item.value) !== null && (item === null || item === void 0 ? void 0 : item.value) !== '' ? item.value : 'N/A' }))] }) }, index.toString())); }) })] }) }));
79
80
  };
80
81
  export var LabeledValue = function (_a) {
81
82
  var label = _a.label, value = _a.value, _b = _a.style, style = _b === void 0 ? undefined : _b;
82
83
  return (_jsx(_Fragment, { children: _jsx(Typography, { sx: style !== null && style !== void 0 ? style : { padding: '5px' }, children: _jsxs("span", { style: { fontSize: '13px' }, children: [_jsxs("b", { children: [label, " "] }), ": ", value !== null && value !== void 0 ? value : 'N/A'] }) }) }));
83
84
  };
84
85
  export var FilePreview = function (_a) {
85
- var primaryKey = _a.primaryKey, filename = _a.filename, size = _a.size, _b = _a.onDownload, onDownload = _b === void 0 ? undefined : _b, _c = _a.width, width = _c === void 0 ? 350 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? '#dfdfdf' : _d, _e = _a.fileColor, fileColor = _e === void 0 ? 'primary' : _e;
86
+ var primaryKey = _a.primaryKey, filename = _a.filename, size = _a.size, _b = _a.onDownload, onDownload = _b === void 0 ? undefined : _b, _c = _a.width, width = _c === void 0 ? 350 : _c, _d = _a.borderColor, borderColor = _d === void 0 ? '#dfdfdf' : _d, _e = _a.fileColor, fileColor = _e === void 0 ? 'primary' : _e, _f = _a.isDownloading, isDownloading = _f === void 0 ? false : _f;
86
87
  // Icon mapping configuration
87
88
  var iconMap = {
88
89
  pdf: _jsx(InsertDriveFile, { fontSize: "large", color: fileColor }),
@@ -125,5 +126,43 @@ export var FilePreview = function (_a) {
125
126
  overflow: 'hidden',
126
127
  textOverflow: 'ellipsis',
127
128
  maxWidth: width - 120,
128
- }, children: filename })), _jsx(Typography, { variant: "caption", color: "text.secondary", children: size })] }), _jsx(IconButton, { disabled: onDownload === undefined, "aria-label": "download", onClick: function () { return onDownload(primaryKey); }, sx: { color: '#dfdfdf', '&:hover': { color: 'primary.main' } }, children: _jsx(Download, { fontSize: "small", color: "primary" }) })] }) }));
129
+ }, children: filename })), _jsx(Typography, { variant: "caption", color: "text.secondary", children: size })] }), _jsx(IconButton, { disabled: onDownload === undefined, "aria-label": "download", onClick: function () { return onDownload(primaryKey); }, sx: { color: '#dfdfdf', '&:hover': { color: 'primary.main' } }, children: isDownloading ? (_jsx(CircularProgress, { color: "success", size: 20 })) : (_jsx(Download, { fontSize: "small", color: "primary" })) })] }) }));
130
+ };
131
+ var VisuallyHiddenInput = forwardRef(function (props, ref) { return (_jsx("input", __assign({ ref: ref, type: "file", style: {
132
+ position: 'absolute',
133
+ width: 1,
134
+ height: 1,
135
+ padding: 0,
136
+ overflow: 'hidden',
137
+ clip: 'rect(0,0,0,0)',
138
+ whiteSpace: 'nowrap',
139
+ border: 0,
140
+ } }, props))); });
141
+ export var UploadFile = function (_a) {
142
+ var _b = _a.isUpload, isUpload = _b === void 0 ? true : _b, color = _a.color, _c = _a.state, state = _c === void 0 ? {} : _c, onFileSelect = _a.onFileSelect;
143
+ var onFileInputChange = function (e) {
144
+ var _a;
145
+ var file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
146
+ if (file) {
147
+ onFileSelect(file);
148
+ e.target.value = '';
149
+ }
150
+ };
151
+ return (_jsx(Tooltip, { title: "Upload", children: _jsxs(Box, { sx: { position: 'relative', display: 'inline-block' }, children: [_jsxs(IconButton, { disabled: !isUpload, component: "label", children: [(state === null || state === void 0 ? void 0 : state.isUploaded) ? (_jsx(CheckCircleOutlined, { color: "success" })) : (state === null || state === void 0 ? void 0 : state.isUploadError) ? (_jsx(ErrorOutlineOutlined, { color: "error" })) : (_jsx(Upload, { color: color !== null && color !== void 0 ? color : 'primary' })), _jsx(VisuallyHiddenInput, { onChange: onFileInputChange })] }), (state === null || state === void 0 ? void 0 : state.isLoadingUpload) && (_jsx(CircularProgress, { size: "40px", sx: {
152
+ position: 'absolute',
153
+ top: 0,
154
+ left: 0,
155
+ zIndex: 1,
156
+ } }))] }) }));
157
+ };
158
+ export var DownloadFile = function (_a) {
159
+ var _b = _a.isDownload, isDownload = _b === void 0 ? true : _b, color = _a.color, _c = _a.state, state = _c === void 0 ? {} : _c, onDownload = _a.onDownload;
160
+ return (_jsx(Tooltip, { title: "Download", children: _jsxs(Box, { sx: { position: 'relative', display: 'inline-block' }, children: [_jsx(IconButton, { disabled: !isDownload || (state === null || state === void 0 ? void 0 : state.isLoadingDownload), onClick: onDownload, sx: {
161
+ bgcolor: function (theme) { return (color ? (theme.palette.mode === 'dark' ? '#303041' : color) : 'default'); },
162
+ }, children: (state === null || state === void 0 ? void 0 : state.isDownloaded) ? (_jsx(CheckCircleOutlined, { color: "success" })) : (state === null || state === void 0 ? void 0 : state.isDownloadError) ? (_jsx(ErrorOutlineOutlined, { color: "error" })) : (_jsx(Download, { color: color !== null && color !== void 0 ? color : 'primary' })) }), (state === null || state === void 0 ? void 0 : state.isLoadingDownload) && (_jsx(CircularProgress, { size: "40px", sx: {
163
+ position: 'absolute',
164
+ top: 0,
165
+ left: 0,
166
+ zIndex: 1,
167
+ } }))] }) }));
129
168
  };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import 'nprogress/nprogress.css';
2
2
  import { ReactHooksWrapper, getHook, setHook } from "./hookExecuter/hookExecuter";
3
- import { DynamicLoader, AlertMessage, FilePreview, LabeledValue, DetailsCard } from './hooks/hooksComp';
3
+ import { DynamicLoader, AlertMessage, FilePreview, LabeledValue, DetailsCard, UploadFile, DownloadFile } from './hooks/hooksComp';
4
4
  import { FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton } from './skeletons/skeletons';
5
5
  import { useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown } from './hooks/hooks';
6
6
  export default ReactHooksWrapper;
7
- export { getHook, setHook, useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown, DynamicLoader, AlertMessage, FilePreview, FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton, LabeledValue, DetailsCard };
7
+ export { getHook, setHook, useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown, DynamicLoader, AlertMessage, FilePreview, FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton, LabeledValue, DetailsCard, UploadFile, DownloadFile };
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import 'nprogress/nprogress.css';
2
2
  import { ReactHooksWrapper, getHook, setHook } from "./hookExecuter/hookExecuter";
3
- import { DynamicLoader, AlertMessage, FilePreview, LabeledValue, DetailsCard } from './hooks/hooksComp';
3
+ import { DynamicLoader, AlertMessage, FilePreview, LabeledValue, DetailsCard, UploadFile, DownloadFile } from './hooks/hooksComp';
4
4
  import { FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton } from './skeletons/skeletons';
5
5
  import { useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown, } from './hooks/hooks';
6
6
  export default ReactHooksWrapper;
7
- export { getHook, setHook, useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown, DynamicLoader, AlertMessage, FilePreview, FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton, LabeledValue, DetailsCard };
7
+ export { getHook, setHook, useAxios, useAdvReducer, useFetch, useLocalStorage, useToggle, useDebounce, useThrottle, usePrevious, useMediaQuery, useClipboard, useInterval, useWindowSize, useKeyPress, useOnlineStatus, useScrollPosition, useTimeout, useDarkMode, useForm, useArray, useStepper, useUpdateEffect, useTouch, useSound, useSessionStorage, usePreferredLanguage, useHistory, useEventListener, useBattery, useDebouncedCallback, useScrollLock, useResizeObserver, useMousePosition, useScrollDirection, useImageLoader, usePersistedState, useReducedMotion, useCookie, useFetchRetry, useDelay, useVisibilityChange, useDebouncedValue, useAsync, useScript, useIndexedDB, useGeoLocation, useTimer, useIsMounted, useCss, useSpeak, useCountUp, useCountDown, DynamicLoader, AlertMessage, FilePreview, FileSkeleton, TableSkeleton, PieChartSkeleton, CardSkeleton, LineChartSkeleton, FieldSkeleton, LabeledValue, DetailsCard, UploadFile, DownloadFile };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-hook-toolkit",
3
- "version": "1.0.10",
3
+ "version": "1.0.12",
4
4
  "description": "Ultimate package for React developers, offering a powerful collection of hooks and components to enhance their development experience.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",