@microcosmmoney/auth-react 1.0.2 → 1.0.4

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 (75) hide show
  1. package/dist/hooks/use-auction-bid.d.ts +5 -0
  2. package/dist/hooks/use-auction-bid.js +34 -0
  3. package/dist/hooks/use-auction-cancel.d.ts +5 -0
  4. package/dist/hooks/use-auction-cancel.js +34 -0
  5. package/dist/hooks/use-auction-detail.d.ts +3 -0
  6. package/dist/hooks/use-auction-detail.js +12 -0
  7. package/dist/hooks/use-auction-history.d.ts +9 -0
  8. package/dist/hooks/use-auction-history.js +41 -0
  9. package/dist/hooks/use-buyback-action.d.ts +6 -0
  10. package/dist/hooks/use-buyback-action.js +34 -0
  11. package/dist/hooks/use-buyback-history.d.ts +6 -0
  12. package/dist/hooks/use-buyback-history.js +14 -0
  13. package/dist/hooks/use-buyback-quote.d.ts +7 -0
  14. package/dist/hooks/use-buyback-quote.js +44 -0
  15. package/dist/hooks/use-cycle-history.d.ts +13 -0
  16. package/dist/hooks/use-cycle-history.js +41 -0
  17. package/dist/hooks/use-mcc-history.d.ts +18 -0
  18. package/dist/hooks/use-mcc-history.js +50 -0
  19. package/dist/hooks/use-mcc-locks.d.ts +4 -0
  20. package/dist/hooks/use-mcc-locks.js +12 -0
  21. package/dist/hooks/use-mcd-rewards.d.ts +8 -0
  22. package/dist/hooks/use-mcd-rewards.js +19 -0
  23. package/dist/hooks/use-mcd-transactions.d.ts +7 -0
  24. package/dist/hooks/use-mcd-transactions.js +17 -0
  25. package/dist/hooks/use-mining-action.d.ts +20 -0
  26. package/dist/hooks/use-mining-action.js +55 -0
  27. package/dist/hooks/use-mining-config.d.ts +7 -0
  28. package/dist/hooks/use-mining-config.js +38 -0
  29. package/dist/hooks/use-mining-distribution.d.ts +6 -0
  30. package/dist/hooks/use-mining-distribution.js +14 -0
  31. package/dist/hooks/use-mining-history.d.ts +9 -0
  32. package/dist/hooks/use-mining-history.js +46 -0
  33. package/dist/hooks/use-mining-ratio.d.ts +4 -0
  34. package/dist/hooks/use-mining-ratio.js +11 -0
  35. package/dist/hooks/use-my-bids.d.ts +4 -0
  36. package/dist/hooks/use-my-bids.js +12 -0
  37. package/dist/hooks/use-proposal-detail.d.ts +4 -0
  38. package/dist/hooks/use-proposal-detail.js +13 -0
  39. package/dist/hooks/use-proposals.d.ts +7 -0
  40. package/dist/hooks/use-proposals.js +17 -0
  41. package/dist/hooks/use-public-mining.d.ts +12 -0
  42. package/dist/hooks/use-public-mining.js +54 -0
  43. package/dist/hooks/use-reincarnation-config.d.ts +7 -0
  44. package/dist/hooks/use-reincarnation-config.js +38 -0
  45. package/dist/hooks/use-territories.d.ts +8 -0
  46. package/dist/hooks/use-territories.js +19 -0
  47. package/dist/hooks/use-territory-detail.d.ts +4 -0
  48. package/dist/hooks/use-territory-detail.js +13 -0
  49. package/dist/hooks/use-territory-income.d.ts +6 -0
  50. package/dist/hooks/use-territory-income.js +43 -0
  51. package/dist/hooks/use-territory-kpi.d.ts +6 -0
  52. package/dist/hooks/use-territory-kpi.js +43 -0
  53. package/dist/hooks/use-territory-members.d.ts +6 -0
  54. package/dist/hooks/use-territory-members.js +15 -0
  55. package/dist/hooks/use-territory-ranking.d.ts +9 -0
  56. package/dist/hooks/use-territory-ranking.js +46 -0
  57. package/dist/hooks/use-territory-stats.d.ts +4 -0
  58. package/dist/hooks/use-territory-stats.js +13 -0
  59. package/dist/hooks/use-territory-summary.d.ts +4 -0
  60. package/dist/hooks/use-territory-summary.js +12 -0
  61. package/dist/hooks/use-territory-update.d.ts +12 -0
  62. package/dist/hooks/use-territory-update.js +56 -0
  63. package/dist/hooks/use-token-portfolio.d.ts +4 -0
  64. package/dist/hooks/use-token-portfolio.js +12 -0
  65. package/dist/hooks/use-user-stats.d.ts +3 -0
  66. package/dist/hooks/use-user-stats.js +11 -0
  67. package/dist/hooks/use-vote-action.d.ts +14 -0
  68. package/dist/hooks/use-vote-action.js +58 -0
  69. package/dist/hooks/use-vote-power.d.ts +4 -0
  70. package/dist/hooks/use-vote-power.js +12 -0
  71. package/dist/hooks/use-wallets.d.ts +4 -0
  72. package/dist/hooks/use-wallets.js +12 -0
  73. package/dist/index.d.ts +37 -1
  74. package/dist/index.js +74 -1
  75. package/package.json +2 -2
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useVoteAction = useVoteAction;
4
+ // AI-generated · AI-managed · AI-maintained
5
+ const react_1 = require("react");
6
+ const provider_1 = require("../provider");
7
+ function useVoteAction() {
8
+ const { client, isAuthenticated } = (0, provider_1.useAuth)();
9
+ const [loading, setLoading] = (0, react_1.useState)(false);
10
+ const [error, setError] = (0, react_1.useState)(null);
11
+ const mountedRef = (0, react_1.useRef)(true);
12
+ const createProposal = (0, react_1.useCallback)(async (params) => {
13
+ if (!isAuthenticated)
14
+ throw new Error('Authentication required');
15
+ const api = client.getApiClient();
16
+ try {
17
+ setLoading(true);
18
+ setError(null);
19
+ const res = await api.post('/voting/proposals', params);
20
+ return res.data;
21
+ }
22
+ catch (err) {
23
+ const e = err instanceof Error ? err : new Error(String(err));
24
+ if (mountedRef.current)
25
+ setError(e);
26
+ throw e;
27
+ }
28
+ finally {
29
+ if (mountedRef.current)
30
+ setLoading(false);
31
+ }
32
+ }, [client, isAuthenticated]);
33
+ const castVote = (0, react_1.useCallback)(async (proposalId, optionIndex, voteCount) => {
34
+ if (!isAuthenticated)
35
+ throw new Error('Authentication required');
36
+ const api = client.getApiClient();
37
+ try {
38
+ setLoading(true);
39
+ setError(null);
40
+ const body = { option_index: optionIndex };
41
+ if (voteCount !== undefined)
42
+ body.vote_count = voteCount;
43
+ const res = await api.post(`/voting/proposals/${proposalId}/vote`, body);
44
+ return res.data;
45
+ }
46
+ catch (err) {
47
+ const e = err instanceof Error ? err : new Error(String(err));
48
+ if (mountedRef.current)
49
+ setError(e);
50
+ throw e;
51
+ }
52
+ finally {
53
+ if (mountedRef.current)
54
+ setLoading(false);
55
+ }
56
+ }, [client, isAuthenticated]);
57
+ return { createProposal, castVote, loading, error };
58
+ }
@@ -0,0 +1,4 @@
1
+ import type { VotePower } from '@microcosmmoney/auth-core';
2
+ export declare function useVotePower(options?: {
3
+ refetchInterval?: number;
4
+ }): import("./use-api-query").UseApiQueryResult<VotePower>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useVotePower = useVotePower;
4
+ // AI-generated · AI-managed · AI-maintained
5
+ const use_api_query_1 = require("./use-api-query");
6
+ function useVotePower(options) {
7
+ return (0, use_api_query_1.useApiQuery)({
8
+ path: '/voting/power',
9
+ requireAuth: true,
10
+ refetchInterval: options?.refetchInterval ?? 0,
11
+ });
12
+ }
@@ -0,0 +1,4 @@
1
+ import type { Wallet } from '@microcosmmoney/auth-core';
2
+ export declare function useWallets(options?: {
3
+ refetchInterval?: number;
4
+ }): import("./use-api-query").UseApiQueryResult<Wallet[]>;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useWallets = useWallets;
4
+ // AI-generated · AI-managed · AI-maintained
5
+ const use_api_query_1 = require("./use-api-query");
6
+ function useWallets(options) {
7
+ return (0, use_api_query_1.useApiQuery)({
8
+ path: '/wallets',
9
+ requireAuth: true,
10
+ refetchInterval: options?.refetchInterval ?? 0,
11
+ });
12
+ }
package/dist/index.d.ts CHANGED
@@ -19,4 +19,40 @@ export { useOrganizations } from './hooks/use-organizations';
19
19
  export { useTechTree } from './hooks/use-tech-tree';
20
20
  export { usePriceHistory } from './hooks/use-price-history';
21
21
  export { useDashboardSummary } from './hooks/use-dashboard-summary';
22
- export type { MicrocosmAuthConfig, MicrocosmAPIConfig, User, AuthState, LoginOptions, MCDBalance, MCCBalance, MCCPrice, } from '@microcosmmoney/auth-core';
22
+ export { useWallets } from './hooks/use-wallets';
23
+ export { useTokenPortfolio } from './hooks/use-token-portfolio';
24
+ export { useMCCLocks } from './hooks/use-mcc-locks';
25
+ export { useMiningRatio } from './hooks/use-mining-ratio';
26
+ export { useMiningDistribution } from './hooks/use-mining-distribution';
27
+ export { useMCDTransactions } from './hooks/use-mcd-transactions';
28
+ export { useMCDRewards } from './hooks/use-mcd-rewards';
29
+ export { useBuybackQuote } from './hooks/use-buyback-quote';
30
+ export { useBuybackHistory } from './hooks/use-buyback-history';
31
+ export { useTerritories } from './hooks/use-territories';
32
+ export { useTerritorySummary } from './hooks/use-territory-summary';
33
+ export { useTerritoryDetail } from './hooks/use-territory-detail';
34
+ export { useTerritoryStats } from './hooks/use-territory-stats';
35
+ export { useTerritoryMembers } from './hooks/use-territory-members';
36
+ export { useProposals } from './hooks/use-proposals';
37
+ export { useProposalDetail } from './hooks/use-proposal-detail';
38
+ export { useVotePower } from './hooks/use-vote-power';
39
+ export { useMyBids } from './hooks/use-my-bids';
40
+ export { useAuctionDetail } from './hooks/use-auction-detail';
41
+ export { useUserStats } from './hooks/use-user-stats';
42
+ export { useMiningAction } from './hooks/use-mining-action';
43
+ export { usePublicMining } from './hooks/use-public-mining';
44
+ export { useBuybackAction } from './hooks/use-buyback-action';
45
+ export { useTerritoryUpdate } from './hooks/use-territory-update';
46
+ export { useAuctionCancel } from './hooks/use-auction-cancel';
47
+ export { useAuctionBid } from './hooks/use-auction-bid';
48
+ export { useAuctionHistory } from './hooks/use-auction-history';
49
+ export { useVoteAction } from './hooks/use-vote-action';
50
+ export { useMCCHistory } from './hooks/use-mcc-history';
51
+ export { useMiningConfig } from './hooks/use-mining-config';
52
+ export { useMiningHistory } from './hooks/use-mining-history';
53
+ export { useReincarnationConfig } from './hooks/use-reincarnation-config';
54
+ export { useCycleHistory } from './hooks/use-cycle-history';
55
+ export { useTerritoryIncome } from './hooks/use-territory-income';
56
+ export { useTerritoryKPI } from './hooks/use-territory-kpi';
57
+ export { useTerritoryRanking } from './hooks/use-territory-ranking';
58
+ export type { MicrocosmAuthConfig, MicrocosmAPIConfig, User, AuthState, LoginOptions, MCDBalance, MCCBalance, MCCPrice, Wallet, TokenPortfolio, MCCLock, MiningRatio, MiningDistribution, BuybackQuote, BuybackRecord, Territory, TerritorySummary, TerritoryStats, TerritoryMember, Proposal, ProposalDetail, VoteResult, VotePower, AuctionBid, MCDTransaction, MCDReward, MiningRequest, MiningConfirmData, MiningRequestResult, MiningConfig, BuybackRecordInput, ReincarnationConfig, MCCHistoryRecord, CycleHistory, AuctionHistory, } from '@microcosmmoney/auth-core';
package/dist/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useDashboardSummary = exports.usePriceHistory = exports.useTechTree = exports.useOrganizations = exports.useAuctions = exports.useTerritoryNFTs = exports.useReincarnationPool = exports.useUserLevel = exports.useMiningRecords = exports.useMiningStats = exports.useMCDStats = exports.useMCCStats = exports.useMCCPrice = exports.useApiQuery = exports.useProfile = exports.useMCC = exports.useMCD = exports.RequireRole = exports.withAuth = exports.AuthCallback = exports.useAuth = exports.MicrocosmAuthProvider = void 0;
3
+ exports.useVoteAction = exports.useAuctionHistory = exports.useAuctionBid = exports.useAuctionCancel = exports.useTerritoryUpdate = exports.useBuybackAction = exports.usePublicMining = exports.useMiningAction = exports.useUserStats = exports.useAuctionDetail = exports.useMyBids = exports.useVotePower = exports.useProposalDetail = exports.useProposals = exports.useTerritoryMembers = exports.useTerritoryStats = exports.useTerritoryDetail = exports.useTerritorySummary = exports.useTerritories = exports.useBuybackHistory = exports.useBuybackQuote = exports.useMCDRewards = exports.useMCDTransactions = exports.useMiningDistribution = exports.useMiningRatio = exports.useMCCLocks = exports.useTokenPortfolio = exports.useWallets = exports.useDashboardSummary = exports.usePriceHistory = exports.useTechTree = exports.useOrganizations = exports.useAuctions = exports.useTerritoryNFTs = exports.useReincarnationPool = exports.useUserLevel = exports.useMiningRecords = exports.useMiningStats = exports.useMCDStats = exports.useMCCStats = exports.useMCCPrice = exports.useApiQuery = exports.useProfile = exports.useMCC = exports.useMCD = exports.RequireRole = exports.withAuth = exports.AuthCallback = exports.useAuth = exports.MicrocosmAuthProvider = void 0;
4
+ exports.useTerritoryRanking = exports.useTerritoryKPI = exports.useTerritoryIncome = exports.useCycleHistory = exports.useReincarnationConfig = exports.useMiningHistory = exports.useMiningConfig = exports.useMCCHistory = void 0;
4
5
  // AI-generated · AI-managed · AI-maintained
5
6
  var provider_1 = require("./provider");
6
7
  Object.defineProperty(exports, "MicrocosmAuthProvider", { enumerable: true, get: function () { return provider_1.MicrocosmAuthProvider; } });
@@ -45,3 +46,75 @@ var use_price_history_1 = require("./hooks/use-price-history");
45
46
  Object.defineProperty(exports, "usePriceHistory", { enumerable: true, get: function () { return use_price_history_1.usePriceHistory; } });
46
47
  var use_dashboard_summary_1 = require("./hooks/use-dashboard-summary");
47
48
  Object.defineProperty(exports, "useDashboardSummary", { enumerable: true, get: function () { return use_dashboard_summary_1.useDashboardSummary; } });
49
+ var use_wallets_1 = require("./hooks/use-wallets");
50
+ Object.defineProperty(exports, "useWallets", { enumerable: true, get: function () { return use_wallets_1.useWallets; } });
51
+ var use_token_portfolio_1 = require("./hooks/use-token-portfolio");
52
+ Object.defineProperty(exports, "useTokenPortfolio", { enumerable: true, get: function () { return use_token_portfolio_1.useTokenPortfolio; } });
53
+ var use_mcc_locks_1 = require("./hooks/use-mcc-locks");
54
+ Object.defineProperty(exports, "useMCCLocks", { enumerable: true, get: function () { return use_mcc_locks_1.useMCCLocks; } });
55
+ var use_mining_ratio_1 = require("./hooks/use-mining-ratio");
56
+ Object.defineProperty(exports, "useMiningRatio", { enumerable: true, get: function () { return use_mining_ratio_1.useMiningRatio; } });
57
+ var use_mining_distribution_1 = require("./hooks/use-mining-distribution");
58
+ Object.defineProperty(exports, "useMiningDistribution", { enumerable: true, get: function () { return use_mining_distribution_1.useMiningDistribution; } });
59
+ var use_mcd_transactions_1 = require("./hooks/use-mcd-transactions");
60
+ Object.defineProperty(exports, "useMCDTransactions", { enumerable: true, get: function () { return use_mcd_transactions_1.useMCDTransactions; } });
61
+ var use_mcd_rewards_1 = require("./hooks/use-mcd-rewards");
62
+ Object.defineProperty(exports, "useMCDRewards", { enumerable: true, get: function () { return use_mcd_rewards_1.useMCDRewards; } });
63
+ var use_buyback_quote_1 = require("./hooks/use-buyback-quote");
64
+ Object.defineProperty(exports, "useBuybackQuote", { enumerable: true, get: function () { return use_buyback_quote_1.useBuybackQuote; } });
65
+ var use_buyback_history_1 = require("./hooks/use-buyback-history");
66
+ Object.defineProperty(exports, "useBuybackHistory", { enumerable: true, get: function () { return use_buyback_history_1.useBuybackHistory; } });
67
+ var use_territories_1 = require("./hooks/use-territories");
68
+ Object.defineProperty(exports, "useTerritories", { enumerable: true, get: function () { return use_territories_1.useTerritories; } });
69
+ var use_territory_summary_1 = require("./hooks/use-territory-summary");
70
+ Object.defineProperty(exports, "useTerritorySummary", { enumerable: true, get: function () { return use_territory_summary_1.useTerritorySummary; } });
71
+ var use_territory_detail_1 = require("./hooks/use-territory-detail");
72
+ Object.defineProperty(exports, "useTerritoryDetail", { enumerable: true, get: function () { return use_territory_detail_1.useTerritoryDetail; } });
73
+ var use_territory_stats_1 = require("./hooks/use-territory-stats");
74
+ Object.defineProperty(exports, "useTerritoryStats", { enumerable: true, get: function () { return use_territory_stats_1.useTerritoryStats; } });
75
+ var use_territory_members_1 = require("./hooks/use-territory-members");
76
+ Object.defineProperty(exports, "useTerritoryMembers", { enumerable: true, get: function () { return use_territory_members_1.useTerritoryMembers; } });
77
+ var use_proposals_1 = require("./hooks/use-proposals");
78
+ Object.defineProperty(exports, "useProposals", { enumerable: true, get: function () { return use_proposals_1.useProposals; } });
79
+ var use_proposal_detail_1 = require("./hooks/use-proposal-detail");
80
+ Object.defineProperty(exports, "useProposalDetail", { enumerable: true, get: function () { return use_proposal_detail_1.useProposalDetail; } });
81
+ var use_vote_power_1 = require("./hooks/use-vote-power");
82
+ Object.defineProperty(exports, "useVotePower", { enumerable: true, get: function () { return use_vote_power_1.useVotePower; } });
83
+ var use_my_bids_1 = require("./hooks/use-my-bids");
84
+ Object.defineProperty(exports, "useMyBids", { enumerable: true, get: function () { return use_my_bids_1.useMyBids; } });
85
+ var use_auction_detail_1 = require("./hooks/use-auction-detail");
86
+ Object.defineProperty(exports, "useAuctionDetail", { enumerable: true, get: function () { return use_auction_detail_1.useAuctionDetail; } });
87
+ var use_user_stats_1 = require("./hooks/use-user-stats");
88
+ Object.defineProperty(exports, "useUserStats", { enumerable: true, get: function () { return use_user_stats_1.useUserStats; } });
89
+ var use_mining_action_1 = require("./hooks/use-mining-action");
90
+ Object.defineProperty(exports, "useMiningAction", { enumerable: true, get: function () { return use_mining_action_1.useMiningAction; } });
91
+ var use_public_mining_1 = require("./hooks/use-public-mining");
92
+ Object.defineProperty(exports, "usePublicMining", { enumerable: true, get: function () { return use_public_mining_1.usePublicMining; } });
93
+ var use_buyback_action_1 = require("./hooks/use-buyback-action");
94
+ Object.defineProperty(exports, "useBuybackAction", { enumerable: true, get: function () { return use_buyback_action_1.useBuybackAction; } });
95
+ var use_territory_update_1 = require("./hooks/use-territory-update");
96
+ Object.defineProperty(exports, "useTerritoryUpdate", { enumerable: true, get: function () { return use_territory_update_1.useTerritoryUpdate; } });
97
+ var use_auction_cancel_1 = require("./hooks/use-auction-cancel");
98
+ Object.defineProperty(exports, "useAuctionCancel", { enumerable: true, get: function () { return use_auction_cancel_1.useAuctionCancel; } });
99
+ var use_auction_bid_1 = require("./hooks/use-auction-bid");
100
+ Object.defineProperty(exports, "useAuctionBid", { enumerable: true, get: function () { return use_auction_bid_1.useAuctionBid; } });
101
+ var use_auction_history_1 = require("./hooks/use-auction-history");
102
+ Object.defineProperty(exports, "useAuctionHistory", { enumerable: true, get: function () { return use_auction_history_1.useAuctionHistory; } });
103
+ var use_vote_action_1 = require("./hooks/use-vote-action");
104
+ Object.defineProperty(exports, "useVoteAction", { enumerable: true, get: function () { return use_vote_action_1.useVoteAction; } });
105
+ var use_mcc_history_1 = require("./hooks/use-mcc-history");
106
+ Object.defineProperty(exports, "useMCCHistory", { enumerable: true, get: function () { return use_mcc_history_1.useMCCHistory; } });
107
+ var use_mining_config_1 = require("./hooks/use-mining-config");
108
+ Object.defineProperty(exports, "useMiningConfig", { enumerable: true, get: function () { return use_mining_config_1.useMiningConfig; } });
109
+ var use_mining_history_1 = require("./hooks/use-mining-history");
110
+ Object.defineProperty(exports, "useMiningHistory", { enumerable: true, get: function () { return use_mining_history_1.useMiningHistory; } });
111
+ var use_reincarnation_config_1 = require("./hooks/use-reincarnation-config");
112
+ Object.defineProperty(exports, "useReincarnationConfig", { enumerable: true, get: function () { return use_reincarnation_config_1.useReincarnationConfig; } });
113
+ var use_cycle_history_1 = require("./hooks/use-cycle-history");
114
+ Object.defineProperty(exports, "useCycleHistory", { enumerable: true, get: function () { return use_cycle_history_1.useCycleHistory; } });
115
+ var use_territory_income_1 = require("./hooks/use-territory-income");
116
+ Object.defineProperty(exports, "useTerritoryIncome", { enumerable: true, get: function () { return use_territory_income_1.useTerritoryIncome; } });
117
+ var use_territory_kpi_1 = require("./hooks/use-territory-kpi");
118
+ Object.defineProperty(exports, "useTerritoryKPI", { enumerable: true, get: function () { return use_territory_kpi_1.useTerritoryKPI; } });
119
+ var use_territory_ranking_1 = require("./hooks/use-territory-ranking");
120
+ Object.defineProperty(exports, "useTerritoryRanking", { enumerable: true, get: function () { return use_territory_ranking_1.useTerritoryRanking; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@microcosmmoney/auth-react",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Microcosm OAuth 2.0 React/Next.js adapter",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -24,7 +24,7 @@
24
24
  "react-dom": ">=18.0.0"
25
25
  },
26
26
  "dependencies": {
27
- "@microcosmmoney/auth-core": "^1.0.1"
27
+ "@microcosmmoney/auth-core": "^1.0.3"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/react": "^18.0.0",