mimir-ui-kit 1.8.0 → 1.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. package/dist/{DatePickerModal-ByEDSY5o.js → DatePickerModal-DUUCHAWF.js} +17 -17
  2. package/dist/assets/DatePickerModal.css +1 -1
  3. package/dist/assets/SelectSearch.css +1 -1
  4. package/dist/assets/Timer.css +1 -0
  5. package/dist/components/DatePicker/DatePicker.d.ts +5 -5
  6. package/dist/components/DatePicker/DatePicker.js +1 -1
  7. package/dist/components/DatePicker/DatePickerModal.js +1 -1
  8. package/dist/components/DatePicker/index.d.ts +1 -1
  9. package/dist/components/Input/Input.d.ts +2 -2
  10. package/dist/components/RadioGroup/RadioGroup.d.ts +18 -2
  11. package/dist/components/RadioGroup/RadioGroup.js +50 -44
  12. package/dist/components/RadioGroup/index.d.ts +1 -1
  13. package/dist/components/SelectSearch/SelectSearch.d.ts +10 -16
  14. package/dist/components/SelectSearch/SelectSearch.js +100 -104
  15. package/dist/components/SelectSearch/index.d.ts +1 -2
  16. package/dist/components/Switch/Switch.d.ts +293 -3
  17. package/dist/components/Switch/Switch.js +27 -22
  18. package/dist/components/Switch/index.d.ts +1 -1
  19. package/dist/components/Timer/Timer.d.ts +24 -0
  20. package/dist/components/Timer/Timer.js +29 -0
  21. package/dist/components/Timer/index.d.ts +1 -0
  22. package/dist/components/Timer/index.js +4 -0
  23. package/dist/components/index.d.ts +4 -3
  24. package/dist/components/index.js +2 -0
  25. package/dist/hooks/index.d.ts +2 -0
  26. package/dist/hooks/index.js +5 -1
  27. package/dist/hooks/useInterval/index.d.ts +1 -0
  28. package/dist/hooks/useInterval/index.js +4 -0
  29. package/dist/hooks/useInterval/useInterval.d.ts +1 -0
  30. package/dist/hooks/useInterval/useInterval.js +17 -0
  31. package/dist/hooks/useTimer/index.d.ts +18 -0
  32. package/dist/hooks/useTimer/index.js +83 -0
  33. package/dist/hooks/useTimer/useTimer.d.ts +18 -0
  34. package/dist/hooks/useTimer/useTimer.js +83 -0
  35. package/dist/hooks/useTimer/utils.d.ts +20 -0
  36. package/dist/hooks/useTimer/utils.js +78 -0
  37. package/dist/index.js +7 -1
  38. package/package.json +1 -1
  39. package/dist/components/SelectSearch/types.d.ts +0 -17
  40. package/dist/components/SelectSearch/types.js +0 -1
  41. package/dist/components/Switch/types.d.ts +0 -4
  42. package/dist/components/Switch/types.js +0 -1
@@ -0,0 +1,83 @@
1
+ import { useState, useCallback } from "react";
2
+ import { Time, Validate } from "./utils.js";
3
+ import { useInterval } from "../useInterval/useInterval.js";
4
+ const DEFAULT_DELAY = 1e3;
5
+ function getDelayFromExpiryTimestamp(expiryTimestamp) {
6
+ if (!Validate.expiryTimestamp(expiryTimestamp)) {
7
+ return null;
8
+ }
9
+ const seconds = Time.getSecondsFromExpiry(expiryTimestamp);
10
+ const extraMilliSeconds = Math.floor((seconds - Math.floor(seconds)) * 1e3);
11
+ return extraMilliSeconds > 0 ? extraMilliSeconds : DEFAULT_DELAY;
12
+ }
13
+ function useTimer({
14
+ expiryTimestamp: expiry,
15
+ onExpire,
16
+ autoStart = true
17
+ }) {
18
+ const [expiryTimestamp, setExpiryTimestamp] = useState(expiry);
19
+ const [seconds, setSeconds] = useState(
20
+ Time.getSecondsFromExpiry(expiry ?? 0)
21
+ );
22
+ const [isRunning, setIsRunning] = useState(autoStart);
23
+ const [didStart, setDidStart] = useState(autoStart);
24
+ const [delay, setDelay] = useState(getDelayFromExpiryTimestamp(expiry ?? 0));
25
+ const handleExpire = useCallback(() => {
26
+ Validate.onExpire(onExpire) && (onExpire == null ? void 0 : onExpire());
27
+ setIsRunning(false);
28
+ setDelay(null);
29
+ }, [onExpire]);
30
+ const pause = useCallback(() => {
31
+ setIsRunning(false);
32
+ }, []);
33
+ const restart = useCallback(
34
+ (newExpiryTimestamp, newAutoStart = true) => {
35
+ setDelay(getDelayFromExpiryTimestamp(newExpiryTimestamp));
36
+ setDidStart(newAutoStart);
37
+ setIsRunning(newAutoStart);
38
+ setExpiryTimestamp(newExpiryTimestamp);
39
+ setSeconds(Time.getSecondsFromExpiry(newExpiryTimestamp));
40
+ },
41
+ []
42
+ );
43
+ const resume = useCallback(() => {
44
+ const time = /* @__PURE__ */ new Date();
45
+ time.setMilliseconds(time.getMilliseconds() + seconds * 1e3);
46
+ restart(time.getTime(), true);
47
+ }, [seconds, restart]);
48
+ const start = useCallback(() => {
49
+ if (didStart) {
50
+ setSeconds(Time.getSecondsFromExpiry(expiryTimestamp ?? 0, false));
51
+ setIsRunning(true);
52
+ } else {
53
+ resume();
54
+ }
55
+ }, [expiryTimestamp, didStart, resume]);
56
+ useInterval(
57
+ () => {
58
+ if (delay !== DEFAULT_DELAY) {
59
+ setDelay(DEFAULT_DELAY);
60
+ }
61
+ const secondsValue = Time.getSecondsFromExpiry(
62
+ expiryTimestamp ?? 0,
63
+ false
64
+ );
65
+ setSeconds(secondsValue);
66
+ if (secondsValue <= 0) {
67
+ handleExpire();
68
+ }
69
+ },
70
+ isRunning ? delay : null
71
+ );
72
+ return {
73
+ ...Time.getTimeFromSeconds(seconds),
74
+ start,
75
+ pause,
76
+ resume,
77
+ restart,
78
+ isRunning
79
+ };
80
+ }
81
+ export {
82
+ useTimer
83
+ };
@@ -0,0 +1,20 @@
1
+ type TTimeObject = {
2
+ totalSeconds: number;
3
+ days: number;
4
+ hours: number;
5
+ minutes: number;
6
+ seconds: number;
7
+ };
8
+ type TFormattedTime = Omit<TTimeObject, 'totalSeconds' | 'days'>;
9
+ export declare class Time {
10
+ static getTimeFromSeconds(secs: number): TTimeObject;
11
+ static getSecondsFromExpiry(expiry: number, shouldRound?: boolean): number;
12
+ static getSecondsFromPrevTime(prevTime: number, shouldRound: boolean): number;
13
+ static getSecondsFromTimeNow(): number;
14
+ static getFormattedTimeFromSeconds(totalSeconds: number): TFormattedTime;
15
+ }
16
+ export declare class Validate {
17
+ static expiryTimestamp(expiryTimestamp: number): boolean;
18
+ static onExpire(onExpire?: VoidFunction | null): boolean | null | undefined;
19
+ }
20
+ export {};
@@ -0,0 +1,78 @@
1
+ class Time {
2
+ static getTimeFromSeconds(secs) {
3
+ const totalSeconds = Math.ceil(secs);
4
+ const days = Math.floor(totalSeconds / (60 * 60 * 24));
5
+ const hours = Math.floor(totalSeconds % (60 * 60 * 24) / (60 * 60));
6
+ const minutes = Math.floor(totalSeconds % (60 * 60) / 60);
7
+ const seconds = Math.floor(totalSeconds % 60);
8
+ return {
9
+ totalSeconds,
10
+ seconds,
11
+ minutes,
12
+ hours,
13
+ days
14
+ };
15
+ }
16
+ static getSecondsFromExpiry(expiry, shouldRound) {
17
+ const now = (/* @__PURE__ */ new Date()).getTime();
18
+ const milliSecondsDistance = expiry - now;
19
+ if (milliSecondsDistance > 0) {
20
+ const val = milliSecondsDistance / 1e3;
21
+ return shouldRound ? Math.round(val) : val;
22
+ }
23
+ return 0;
24
+ }
25
+ static getSecondsFromPrevTime(prevTime, shouldRound) {
26
+ const now = (/* @__PURE__ */ new Date()).getTime();
27
+ const milliSecondsDistance = now - prevTime;
28
+ if (milliSecondsDistance > 0) {
29
+ const val = milliSecondsDistance / 1e3;
30
+ return shouldRound ? Math.round(val) : val;
31
+ }
32
+ return 0;
33
+ }
34
+ static getSecondsFromTimeNow() {
35
+ const now = /* @__PURE__ */ new Date();
36
+ const currentTimestamp = now.getTime();
37
+ const offset = now.getTimezoneOffset() * 60;
38
+ return currentTimestamp / 1e3 - offset;
39
+ }
40
+ static getFormattedTimeFromSeconds(totalSeconds) {
41
+ const {
42
+ seconds: secondsValue,
43
+ minutes,
44
+ hours
45
+ } = Time.getTimeFromSeconds(totalSeconds);
46
+ return {
47
+ seconds: secondsValue,
48
+ minutes,
49
+ hours
50
+ };
51
+ }
52
+ }
53
+ class Validate {
54
+ static expiryTimestamp(expiryTimestamp) {
55
+ const isValid = new Date(expiryTimestamp).getTime() > 0;
56
+ if (!isValid) {
57
+ console.warn(
58
+ "{ useTimer } Invalid expiryTimestamp settings",
59
+ expiryTimestamp
60
+ );
61
+ }
62
+ return isValid;
63
+ }
64
+ static onExpire(onExpire) {
65
+ const isValid = onExpire && typeof onExpire === "function";
66
+ if (onExpire && !isValid) {
67
+ console.warn(
68
+ " { useTimer } Invalid onExpire settings function",
69
+ onExpire
70
+ );
71
+ }
72
+ return isValid;
73
+ }
74
+ }
75
+ export {
76
+ Time,
77
+ Validate
78
+ };
package/dist/index.js CHANGED
@@ -22,9 +22,12 @@ import { EVoteSize } from "./components/Vote/constants.js";
22
22
  import { SelectSearch } from "./components/SelectSearch/SelectSearch.js";
23
23
  import { ESelectSearchSize } from "./components/SelectSearch/constants.js";
24
24
  import { Switch } from "./components/Switch/Switch.js";
25
+ import { Timer } from "./components/Timer/Timer.js";
25
26
  import { useMediaQuery } from "./hooks/useMediaQuery/useMediaQuery.js";
26
27
  import { EMediaQuery } from "./hooks/useMediaQuery/constants.js";
27
28
  import { useLockBodyScroll } from "./hooks/useLockBodyScroll/useLockBodyScroll.js";
29
+ import { useInterval } from "./hooks/useInterval/useInterval.js";
30
+ import { useTimer } from "./hooks/useTimer/index.js";
28
31
  import { Icon } from "./icons/Icon.js";
29
32
  import { formating } from "./utils/index.js";
30
33
  import './assets/index.css';export {
@@ -58,10 +61,13 @@ import './assets/index.css';export {
58
61
  Slider,
59
62
  Steps,
60
63
  Switch,
64
+ Timer,
61
65
  Vote,
62
66
  formating,
63
67
  getMaskedInputPhoneValue,
64
68
  getUnmaskedInputValue,
69
+ useInterval,
65
70
  useLockBodyScroll,
66
- useMediaQuery
71
+ useMediaQuery,
72
+ useTimer
67
73
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mimir-ui-kit",
3
3
  "private": false,
4
- "version": "1.8.0",
4
+ "version": "1.9.0",
5
5
  "type": "module",
6
6
  "exports": {
7
7
  ".": {
@@ -1,17 +0,0 @@
1
- import { ESelectSearchSize } from './constants';
2
-
3
- export type TSelectSearchItem = {
4
- id: number;
5
- name: string;
6
- };
7
- export type TSelectSearchProps = {
8
- items: TSelectSearchItem[];
9
- value?: TSelectSearchItem | null;
10
- onChange?: (value: TSelectSearchItem | null) => void;
11
- placeholder?: string;
12
- size?: TSelectSearchSize;
13
- full?: boolean;
14
- };
15
- export type TSelectSearchSize = {
16
- size?: ESelectSearchSize;
17
- };
@@ -1 +0,0 @@
1
-
@@ -1,4 +0,0 @@
1
- export type TSwitchProps = {
2
- checked: boolean;
3
- onChange?: (checked: boolean) => void;
4
- };
@@ -1 +0,0 @@
1
-