@iota/create-dapp 0.4.5 → 0.5.0

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 (31) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/package.json +5 -5
  3. package/templates/react-client-dapp/README.md +2 -2
  4. package/templates/react-client-dapp/index.html +11 -57
  5. package/templates/react-client-dapp/package.json +29 -35
  6. package/templates/react-client-dapp/src/App.tsx +15 -34
  7. package/templates/react-client-dapp/src/OwnedObjects.tsx +34 -35
  8. package/templates/react-client-dapp/src/WalletStatus.tsx +17 -18
  9. package/templates/react-client-dapp/src/index.css +9 -0
  10. package/templates/react-client-dapp/src/main.tsx +18 -21
  11. package/templates/react-client-dapp/src/networkConfig.ts +7 -8
  12. package/templates/react-client-dapp/tsconfig.json +20 -21
  13. package/templates/react-client-dapp/vite.config.ts +4 -3
  14. package/templates/react-e2e-counter/README.md +4 -4
  15. package/templates/react-e2e-counter/index.html +11 -57
  16. package/templates/react-e2e-counter/package.json +29 -36
  17. package/templates/react-e2e-counter/src/App.tsx +36 -55
  18. package/templates/react-e2e-counter/src/Counter.tsx +84 -90
  19. package/templates/react-e2e-counter/src/CreateCounter.tsx +47 -57
  20. package/templates/react-e2e-counter/src/constants.ts +3 -3
  21. package/templates/react-e2e-counter/src/index.css +9 -0
  22. package/templates/react-e2e-counter/src/main.tsx +18 -21
  23. package/templates/react-e2e-counter/src/networkConfig.ts +20 -21
  24. package/templates/react-e2e-counter/tsconfig.json +20 -21
  25. package/templates/react-e2e-counter/vite.config.ts +4 -3
  26. package/templates/react-client-dapp/eslint.config.js +0 -28
  27. package/templates/react-client-dapp/prettier.config.cjs +0 -4
  28. package/templates/react-client-dapp/tsconfig.node.json +0 -10
  29. package/templates/react-e2e-counter/eslint.config.js +0 -28
  30. package/templates/react-e2e-counter/prettier.config.cjs +0 -4
  31. package/templates/react-e2e-counter/tsconfig.node.json +0 -10
@@ -1,38 +1,31 @@
1
1
  {
2
- "name": "@iota/template-react-e2e-coinflip",
3
- "private": true,
4
- "version": "0.0.0",
5
- "type": "module",
6
- "scripts": {
7
- "dev": "vite",
8
- "build": "tsc && vite build",
9
- "lint": "eslint .",
10
- "preview": "vite preview",
11
- "format": "prettier -w ."
12
- },
13
- "dependencies": {
14
- "@iota/dapp-kit": "workspace:*",
15
- "@iota/iota-sdk": "workspace:*",
16
- "@radix-ui/themes": "^3.1.1",
17
- "@tanstack/react-query": "^5.50.1",
18
- "react": "^18.3.1",
19
- "react-dom": "^18.3.1",
20
- "react-spinners": "^0.14.1"
21
- },
22
- "devDependencies": {
23
- "@eslint/js": "^9.17.0",
24
- "@types/react": "^18.3.3",
25
- "@types/react-dom": "^18.3.0",
26
- "@typescript-eslint/eslint-plugin": "^8.18.0",
27
- "@typescript-eslint/parser": "^8.18.0",
28
- "@vitejs/plugin-react-swc": "^3.7.0",
29
- "eslint": "^9.17.0",
30
- "eslint-plugin-react-hooks": "^5.1.0",
31
- "eslint-plugin-react-refresh": "^0.4.7",
32
- "eslint-plugin-react": "^7.37.2",
33
- "typescript-eslint": "^8.18.0",
34
- "prettier": "^3.3.2",
35
- "typescript": "^5.5.3",
36
- "vite": "^5.4.12"
37
- }
2
+ "name": "@iota/template-react-e2e-counter",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc && vite build",
9
+ "lint": "oxlint .",
10
+ "format": "oxfmt --write src/",
11
+ "preview": "vite preview"
12
+ },
13
+ "dependencies": {
14
+ "@iota/dapp-kit": "workspace:*",
15
+ "@iota/iota-sdk": "workspace:*",
16
+ "@tanstack/react-query": "^5.91.2",
17
+ "react": "^18.3.1",
18
+ "react-dom": "^18.3.1"
19
+ },
20
+ "devDependencies": {
21
+ "@tailwindcss/vite": "^4.2.2",
22
+ "@types/react": "^18.3.28",
23
+ "@types/react-dom": "^18.3.7",
24
+ "@vitejs/plugin-react": "^6.0.1",
25
+ "oxfmt": "^0.41.0",
26
+ "oxlint": "^1.56.0",
27
+ "tailwindcss": "^4.2.2",
28
+ "typescript": "^5.9.3",
29
+ "vite": "^8.0.1"
30
+ }
38
31
  }
@@ -1,61 +1,42 @@
1
- import { ConnectButton, useCurrentAccount } from "@iota/dapp-kit";
2
- import { isValidIotaObjectId } from "@iota/iota-sdk/utils";
3
- import { Box, Container, Flex, Heading } from "@radix-ui/themes";
4
- import { useState } from "react";
5
- import { Counter } from "./Counter";
6
- import { CreateCounter } from "./CreateCounter";
1
+ import { ConnectButton, useCurrentAccount } from '@iota/dapp-kit';
2
+ import { isValidIotaObjectId } from '@iota/iota-sdk/utils';
3
+ import { useState } from 'react';
4
+ import { Counter } from './Counter';
5
+ import { CreateCounter } from './CreateCounter';
7
6
 
8
7
  function App() {
9
- const currentAccount = useCurrentAccount();
10
- const [counterId, setCounter] = useState(() => {
11
- const hash = window.location.hash.slice(1);
12
- return isValidIotaObjectId(hash) ? hash : null;
13
- });
8
+ const currentAccount = useCurrentAccount();
9
+ const [counterId, setCounter] = useState(() => {
10
+ const hash = window.location.hash.slice(1);
11
+ return isValidIotaObjectId(hash) ? hash : null;
12
+ });
14
13
 
15
- return (
16
- <>
17
- <Flex
18
- position="sticky"
19
- px="4"
20
- py="2"
21
- justify="between"
22
- style={{
23
- borderBottom: "1px solid var(--gray-a2)",
24
- }}
25
- >
26
- <Box>
27
- <Heading>dApp Starter Template</Heading>
28
- </Box>
29
-
30
- <Box>
31
- <ConnectButton />
32
- </Box>
33
- </Flex>
34
- <Container>
35
- <Container
36
- mt="5"
37
- pt="2"
38
- px="4"
39
- style={{ background: "var(--gray-a2)", minHeight: 500 }}
40
- >
41
- {currentAccount ? (
42
- counterId ? (
43
- <Counter id={counterId} />
44
- ) : (
45
- <CreateCounter
46
- onCreated={(id) => {
47
- window.location.hash = id;
48
- setCounter(id);
49
- }}
50
- />
51
- )
52
- ) : (
53
- <Heading>Please connect your wallet</Heading>
54
- )}
55
- </Container>
56
- </Container>
57
- </>
58
- );
14
+ return (
15
+ <>
16
+ <div className="sticky top-0 flex px-4 py-2 justify-between items-center border-b border-gray-800 bg-gray-950">
17
+ <h1 className="text-2xl font-bold">dApp Starter Template</h1>
18
+ <ConnectButton />
19
+ </div>
20
+ <div className="max-w-4xl mx-auto">
21
+ <div className="mt-5 pt-2 px-4 bg-gray-900 min-h-[500px] rounded">
22
+ {currentAccount ? (
23
+ counterId ? (
24
+ <Counter id={counterId} />
25
+ ) : (
26
+ <CreateCounter
27
+ onCreated={(id) => {
28
+ window.location.hash = id;
29
+ setCounter(id);
30
+ }}
31
+ />
32
+ )
33
+ ) : (
34
+ <h2 className="text-xl font-semibold">Please connect your wallet</h2>
35
+ )}
36
+ </div>
37
+ </div>
38
+ </>
39
+ );
59
40
  }
60
41
 
61
42
  export default App;
@@ -1,108 +1,102 @@
1
1
  import {
2
- useCurrentAccount,
3
- useSignAndExecuteTransaction,
4
- useIotaClient,
5
- useIotaClientQuery,
6
- } from "@iota/dapp-kit";
7
- import type { IotaObjectData } from "@iota/iota-sdk/client";
8
- import { Transaction } from "@iota/iota-sdk/transactions";
9
- import { Button, Flex, Heading, Text } from "@radix-ui/themes";
10
- import { useNetworkVariable } from "./networkConfig";
11
- import { useState } from "react";
12
- import ClipLoader from "react-spinners/ClipLoader";
2
+ useCurrentAccount,
3
+ useSignAndExecuteTransaction,
4
+ useIotaClient,
5
+ useIotaClientQuery,
6
+ } from '@iota/dapp-kit';
7
+ import type { IotaObjectData } from '@iota/iota-sdk/client';
8
+ import { Transaction } from '@iota/iota-sdk/transactions';
9
+ import { useNetworkVariable } from './networkConfig';
10
+ import { useState } from 'react';
13
11
 
14
12
  export function Counter({ id }: { id: string }) {
15
- const counterPackageId = useNetworkVariable("counterPackageId");
16
- const iotaClient = useIotaClient();
17
- const currentAccount = useCurrentAccount();
18
- const { mutate: signAndExecute } = useSignAndExecuteTransaction();
19
- const { data, isPending, error, refetch } = useIotaClientQuery("getObject", {
20
- id,
21
- options: {
22
- showContent: true,
23
- showOwner: true,
24
- },
25
- });
26
-
27
- const [waitingForTxn, setWaitingForTxn] = useState("");
13
+ const counterPackageId = useNetworkVariable('counterPackageId');
14
+ const iotaClient = useIotaClient();
15
+ const currentAccount = useCurrentAccount();
16
+ const { mutate: signAndExecute } = useSignAndExecuteTransaction();
17
+ const { data, isPending, error, refetch } = useIotaClientQuery('getObject', {
18
+ id,
19
+ options: {
20
+ showContent: true,
21
+ showOwner: true,
22
+ },
23
+ });
28
24
 
29
- const executeMoveCall = (method: "increment" | "reset") => {
30
- setWaitingForTxn(method);
25
+ const [waitingForTxn, setWaitingForTxn] = useState('');
31
26
 
32
- const tx = new Transaction();
27
+ const executeMoveCall = (method: 'increment' | 'reset') => {
28
+ setWaitingForTxn(method);
33
29
 
34
- if (method === "reset") {
35
- tx.moveCall({
36
- arguments: [tx.object(id), tx.pure.u64(0)],
37
- target: `${counterPackageId}::counter::set_value`,
38
- });
39
- } else {
40
- tx.moveCall({
41
- arguments: [tx.object(id)],
42
- target: `${counterPackageId}::counter::increment`,
43
- });
44
- }
30
+ const tx = new Transaction();
45
31
 
46
- signAndExecute(
47
- {
48
- transaction: tx,
49
- },
50
- {
51
- onSuccess: (tx) => {
52
- iotaClient
53
- .waitForTransaction({ digest: tx.digest })
54
- .then(async () => {
55
- await refetch();
56
- setWaitingForTxn("");
32
+ if (method === 'reset') {
33
+ tx.moveCall({
34
+ arguments: [tx.object(id), tx.pure.u64(0)],
35
+ target: `${counterPackageId}::counter::set_value`,
57
36
  });
58
- },
59
- },
60
- );
61
- };
37
+ } else {
38
+ tx.moveCall({
39
+ arguments: [tx.object(id)],
40
+ target: `${counterPackageId}::counter::increment`,
41
+ });
42
+ }
43
+
44
+ signAndExecute(
45
+ {
46
+ transaction: tx,
47
+ },
48
+ {
49
+ onSuccess: (tx) => {
50
+ iotaClient.waitForTransaction({ digest: tx.digest }).then(async () => {
51
+ await refetch();
52
+ setWaitingForTxn('');
53
+ });
54
+ },
55
+ },
56
+ );
57
+ };
62
58
 
63
- if (isPending) return <Text>Loading...</Text>;
59
+ if (isPending) return <p className="text-gray-300">Loading...</p>;
64
60
 
65
- if (error) return <Text>Error: {error.message}</Text>;
61
+ if (error) return <p className="text-red-400">Error: {error.message}</p>;
66
62
 
67
- if (!data.data) return <Text>Not found</Text>;
63
+ if (!data.data) return <p className="text-gray-300">Not found</p>;
68
64
 
69
- const ownedByCurrentAccount =
70
- getCounterFields(data.data)?.owner === currentAccount?.address;
65
+ const ownedByCurrentAccount = getCounterFields(data.data)?.owner === currentAccount?.address;
71
66
 
72
- return (
73
- <>
74
- <Heading size="3">Counter {id}</Heading>
67
+ return (
68
+ <>
69
+ <h3 className="text-lg font-semibold">Counter {id}</h3>
75
70
 
76
- <Flex direction="column" gap="2">
77
- <Text>Count: {getCounterFields(data.data)?.value}</Text>
78
- <Flex direction="row" gap="2">
79
- <Button
80
- onClick={() => executeMoveCall("increment")}
81
- disabled={waitingForTxn !== ""}
82
- >
83
- {waitingForTxn === "increment" ? (
84
- <ClipLoader size={20} />
85
- ) : (
86
- "Increment"
87
- )}
88
- </Button>
89
- {ownedByCurrentAccount ? (
90
- <Button
91
- onClick={() => executeMoveCall("reset")}
92
- disabled={waitingForTxn !== ""}
93
- >
94
- {waitingForTxn === "reset" ? <ClipLoader size={20} /> : "Reset"}
95
- </Button>
96
- ) : null}
97
- </Flex>
98
- </Flex>
99
- </>
100
- );
71
+ <div className="flex flex-col gap-2">
72
+ <p className="text-gray-300">Count: {getCounterFields(data.data)?.value}</p>
73
+ <div className="flex flex-row gap-2">
74
+ <button
75
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 disabled:opacity-50"
76
+ onClick={() => executeMoveCall('increment')}
77
+ disabled={waitingForTxn !== ''}
78
+ >
79
+ {waitingForTxn === 'increment' ? 'Loading...' : 'Increment'}
80
+ </button>
81
+ {ownedByCurrentAccount ? (
82
+ <button
83
+ className="px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 disabled:opacity-50"
84
+ onClick={() => executeMoveCall('reset')}
85
+ disabled={waitingForTxn !== ''}
86
+ >
87
+ {waitingForTxn === 'reset' ? 'Loading...' : 'Reset'}
88
+ </button>
89
+ ) : null}
90
+ </div>
91
+ </div>
92
+ </>
93
+ );
101
94
  }
95
+
102
96
  function getCounterFields(data: IotaObjectData) {
103
- if (data.content?.dataType !== "moveObject") {
104
- return null;
105
- }
97
+ if (data.content?.dataType !== 'moveObject') {
98
+ return null;
99
+ }
106
100
 
107
- return data.content.fields as { value: number; owner: string };
101
+ return data.content.fields as { value: number; owner: string };
108
102
  }
@@ -1,65 +1,55 @@
1
- import { Transaction } from "@iota/iota-sdk/transactions";
2
- import { Button, Container } from "@radix-ui/themes";
3
- import { useSignAndExecuteTransaction, useIotaClient } from "@iota/dapp-kit";
4
- import { useNetworkVariable } from "./networkConfig";
5
- import ClipLoader from "react-spinners/ClipLoader";
1
+ import { Transaction } from '@iota/iota-sdk/transactions';
2
+ import { useSignAndExecuteTransaction, useIotaClient } from '@iota/dapp-kit';
3
+ import { useNetworkVariable } from './networkConfig';
6
4
 
7
- export function CreateCounter({
8
- onCreated,
9
- }: {
10
- onCreated: (id: string) => void;
11
- }) {
12
- const counterPackageId = useNetworkVariable("counterPackageId");
13
- const iotaClient = useIotaClient();
14
- const {
15
- mutate: signAndExecute,
16
- isSuccess,
17
- isPending,
18
- } = useSignAndExecuteTransaction();
5
+ export function CreateCounter({ onCreated }: { onCreated: (id: string) => void }) {
6
+ const counterPackageId = useNetworkVariable('counterPackageId');
7
+ const iotaClient = useIotaClient();
8
+ const { mutate: signAndExecute, isSuccess, isPending } = useSignAndExecuteTransaction();
19
9
 
20
- function create() {
21
- const tx = new Transaction();
10
+ function create() {
11
+ const tx = new Transaction();
22
12
 
23
- tx.moveCall({
24
- arguments: [],
25
- target: `${counterPackageId}::counter::create`,
26
- });
13
+ tx.moveCall({
14
+ arguments: [],
15
+ target: `${counterPackageId}::counter::create`,
16
+ });
27
17
 
28
- signAndExecute(
29
- {
30
- transaction: tx,
31
- },
32
- {
33
- onSuccess: async ({ digest }) => {
34
- const { effects } = await iotaClient.waitForTransaction({
35
- digest: digest,
36
- options: {
37
- showEffects: true,
18
+ signAndExecute(
19
+ {
20
+ transaction: tx,
38
21
  },
39
- });
22
+ {
23
+ onSuccess: async ({ digest }) => {
24
+ const { effects } = await iotaClient.waitForTransaction({
25
+ digest: digest,
26
+ options: {
27
+ showEffects: true,
28
+ },
29
+ });
40
30
 
41
- const objectId = effects?.created?.[0]?.reference?.objectId;
42
- if (objectId) {
43
- onCreated(objectId);
44
- } else {
45
- console.error("Failed to get objectId from transaction effects");
46
- }
47
- },
48
- },
49
- );
50
- }
31
+ const objectId = effects?.created?.[0]?.reference?.objectId;
32
+ if (objectId) {
33
+ onCreated(objectId);
34
+ } else {
35
+ console.error('Failed to get objectId from transaction effects');
36
+ }
37
+ },
38
+ },
39
+ );
40
+ }
51
41
 
52
- return (
53
- <Container>
54
- <Button
55
- size="3"
56
- onClick={() => {
57
- create();
58
- }}
59
- disabled={isSuccess || isPending}
60
- >
61
- {isSuccess || isPending ? <ClipLoader size={20} /> : "Create Counter"}
62
- </Button>
63
- </Container>
64
- );
42
+ return (
43
+ <div>
44
+ <button
45
+ className="px-6 py-3 text-lg bg-blue-600 text-white rounded hover:bg-blue-700 disabled:opacity-50"
46
+ onClick={() => {
47
+ create();
48
+ }}
49
+ disabled={isSuccess || isPending}
50
+ >
51
+ {isSuccess || isPending ? 'Creating...' : 'Create Counter'}
52
+ </button>
53
+ </div>
54
+ );
65
55
  }
@@ -1,3 +1,3 @@
1
- export const DEVNET_COUNTER_PACKAGE_ID = "0xTODO";
2
- export const TESTNET_COUNTER_PACKAGE_ID = "0xTODO";
3
- export const MAINNET_COUNTER_PACKAGE_ID = "0xTODO";
1
+ export const DEVNET_COUNTER_PACKAGE_ID = '0xTODO';
2
+ export const TESTNET_COUNTER_PACKAGE_ID = '0xTODO';
3
+ export const MAINNET_COUNTER_PACKAGE_ID = '0xTODO';
@@ -0,0 +1,9 @@
1
+ @import 'tailwindcss';
2
+
3
+ :root {
4
+ color-scheme: dark;
5
+ }
6
+
7
+ body {
8
+ @apply bg-gray-950 text-gray-100;
9
+ }
@@ -1,26 +1,23 @@
1
- import React from "react";
2
- import ReactDOM from "react-dom/client";
3
- import "@iota/dapp-kit/dist/index.css";
4
- import "@radix-ui/themes/styles.css";
1
+ import React from 'react';
2
+ import ReactDOM from 'react-dom/client';
3
+ import '@iota/dapp-kit/dist/index.css';
4
+ import './index.css';
5
5
 
6
- import { IotaClientProvider, WalletProvider } from "@iota/dapp-kit";
7
- import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
8
- import { Theme } from "@radix-ui/themes";
9
- import App from "./App.tsx";
10
- import { networkConfig } from "./networkConfig.ts";
6
+ import { IotaClientProvider, WalletProvider } from '@iota/dapp-kit';
7
+ import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
8
+ import App from './App.tsx';
9
+ import { networkConfig } from './networkConfig.ts';
11
10
 
12
11
  const queryClient = new QueryClient();
13
12
 
14
- ReactDOM.createRoot(document.getElementById("root")!).render(
15
- <React.StrictMode>
16
- <Theme appearance="dark">
17
- <QueryClientProvider client={queryClient}>
18
- <IotaClientProvider networks={networkConfig} defaultNetwork="testnet">
19
- <WalletProvider autoConnect>
20
- <App />
21
- </WalletProvider>
22
- </IotaClientProvider>
23
- </QueryClientProvider>
24
- </Theme>
25
- </React.StrictMode>,
13
+ ReactDOM.createRoot(document.getElementById('root')!).render(
14
+ <React.StrictMode>
15
+ <QueryClientProvider client={queryClient}>
16
+ <IotaClientProvider networks={networkConfig} defaultNetwork="testnet">
17
+ <WalletProvider autoConnect>
18
+ <App />
19
+ </WalletProvider>
20
+ </IotaClientProvider>
21
+ </QueryClientProvider>
22
+ </React.StrictMode>,
26
23
  );
@@ -1,31 +1,30 @@
1
- import { getFullnodeUrl } from "@iota/iota-sdk/client";
1
+ import { getFullnodeUrl } from '@iota/iota-sdk/client';
2
2
  import {
3
- DEVNET_COUNTER_PACKAGE_ID,
4
- TESTNET_COUNTER_PACKAGE_ID,
5
- MAINNET_COUNTER_PACKAGE_ID,
6
- } from "./constants.ts";
7
- import { createNetworkConfig } from "@iota/dapp-kit";
3
+ DEVNET_COUNTER_PACKAGE_ID,
4
+ TESTNET_COUNTER_PACKAGE_ID,
5
+ MAINNET_COUNTER_PACKAGE_ID,
6
+ } from './constants.ts';
7
+ import { createNetworkConfig } from '@iota/dapp-kit';
8
8
 
9
- const { networkConfig, useNetworkVariable, useNetworkVariables } =
10
- createNetworkConfig({
9
+ const { networkConfig, useNetworkVariable, useNetworkVariables } = createNetworkConfig({
11
10
  devnet: {
12
- url: getFullnodeUrl("devnet"),
13
- variables: {
14
- counterPackageId: DEVNET_COUNTER_PACKAGE_ID,
15
- },
11
+ url: getFullnodeUrl('devnet'),
12
+ variables: {
13
+ counterPackageId: DEVNET_COUNTER_PACKAGE_ID,
14
+ },
16
15
  },
17
16
  testnet: {
18
- url: getFullnodeUrl("testnet"),
19
- variables: {
20
- counterPackageId: TESTNET_COUNTER_PACKAGE_ID,
21
- },
17
+ url: getFullnodeUrl('testnet'),
18
+ variables: {
19
+ counterPackageId: TESTNET_COUNTER_PACKAGE_ID,
20
+ },
22
21
  },
23
22
  mainnet: {
24
- url: getFullnodeUrl("mainnet"),
25
- variables: {
26
- counterPackageId: MAINNET_COUNTER_PACKAGE_ID,
27
- },
23
+ url: getFullnodeUrl('mainnet'),
24
+ variables: {
25
+ counterPackageId: MAINNET_COUNTER_PACKAGE_ID,
26
+ },
28
27
  },
29
- });
28
+ });
30
29
 
31
30
  export { useNetworkVariable, useNetworkVariables, networkConfig };
@@ -1,25 +1,24 @@
1
1
  {
2
- "compilerOptions": {
3
- "target": "ES2020",
4
- "useDefineForClassFields": true,
5
- "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
- "module": "ESNext",
7
- "skipLibCheck": true,
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
8
 
9
- /* Bundler mode */
10
- "moduleResolution": "bundler",
11
- "allowImportingTsExtensions": true,
12
- "resolveJsonModule": true,
13
- "isolatedModules": true,
14
- "noEmit": true,
15
- "jsx": "react-jsx",
9
+ /* Bundler mode */
10
+ "moduleResolution": "bundler",
11
+ "allowImportingTsExtensions": true,
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "noEmit": true,
15
+ "jsx": "react-jsx",
16
16
 
17
- /* Linting */
18
- "strict": true,
19
- "noUnusedLocals": true,
20
- "noUnusedParameters": true,
21
- "noFallthroughCasesInSwitch": true
22
- },
23
- "include": ["src"],
24
- "references": [{ "path": "./tsconfig.node.json" }]
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "noFallthroughCasesInSwitch": true
22
+ },
23
+ "include": ["src", "vite.config.ts"]
25
24
  }