create-near-app 6.0.0-beta.2 → 6.0.0-beta.3

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 (150) hide show
  1. package/dist/app.js +6 -11
  2. package/dist/make.js +44 -81
  3. package/dist/messages.js +31 -23
  4. package/dist/package-json.js +16 -16
  5. package/dist/tracking.js +1 -1
  6. package/dist/types.js +5 -4
  7. package/dist/user-input.js +81 -89
  8. package/package.json +1 -1
  9. package/templates/contracts/{rust → rs}/Cargo.toml +0 -3
  10. package/templates/contracts/{rust → rs}/README.md +14 -5
  11. package/templates/contracts/rs/build.sh +3 -0
  12. package/templates/contracts/rs/deploy.sh +2 -0
  13. package/templates/contracts/{rust → rs}/src/lib.rs +4 -6
  14. package/templates/contracts/rs/test-rs.sh +9 -0
  15. package/templates/contracts/rs/test-ts.sh +10 -0
  16. package/templates/contracts/{js → ts}/README.md +1 -0
  17. package/templates/contracts/ts/package.json +20 -0
  18. package/templates/frontend/next/.eslintrc.json +3 -0
  19. package/templates/frontend/next/README.md +36 -0
  20. package/templates/frontend/next/jsconfig.json +7 -0
  21. package/templates/frontend/next/next.config.js +6 -0
  22. package/templates/frontend/next/package.json +40 -0
  23. package/templates/frontend/next/public/near-logo.svg +43 -0
  24. package/templates/frontend/next/public/near.svg +1 -0
  25. package/templates/frontend/next/src/app/app.module.css +228 -0
  26. package/templates/frontend/next/src/app/globals.css +95 -0
  27. package/templates/frontend/next/src/app/hello-components/page.js +44 -0
  28. package/templates/frontend/next/src/app/hello-near/page.js +64 -0
  29. package/templates/frontend/next/src/app/layout.js +22 -0
  30. package/templates/frontend/next/src/app/page.js +37 -0
  31. package/templates/frontend/next/src/components/cards.js +46 -0
  32. package/templates/frontend/next/src/components/navigation.js +36 -0
  33. package/templates/frontend/next/src/components/vm-component.js +26 -0
  34. package/templates/frontend/next/src/config.js +21 -0
  35. package/templates/frontend/next/src/wallets/wallet-selector.js +128 -0
  36. package/templates/frontend/{gateway/src/data/web3.ts → next/src/wallets/web3-wallet.ts} +4 -7
  37. package/templates/frontend/vanilla/.babelrc +7 -0
  38. package/templates/frontend/vanilla/package.json +27 -13
  39. package/templates/frontend/vanilla/{assets → src/assets}/global.css +25 -56
  40. package/templates/frontend/vanilla/src/components.html +61 -0
  41. package/templates/frontend/vanilla/src/components.js +63 -0
  42. package/templates/frontend/vanilla/src/hello-near.html +80 -0
  43. package/templates/frontend/vanilla/src/hello.js +61 -0
  44. package/templates/frontend/vanilla/src/index.html +65 -0
  45. package/templates/frontend/vanilla/{near-wallet.js → src/near-wallet.js} +20 -18
  46. package/templates/frontend/vanilla/webpack.config.js +79 -0
  47. package/templates/{integration-tests/rust-tests → sandbox-tests/sandbox-rs}/Cargo.toml +5 -5
  48. package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/package.json +6 -6
  49. package/templates/contracts/js/build.sh +0 -5
  50. package/templates/contracts/js/deploy.sh +0 -18
  51. package/templates/contracts/js/package.json +0 -19
  52. package/templates/contracts/rust/build.sh +0 -6
  53. package/templates/contracts/rust/deploy.sh +0 -18
  54. package/templates/frontend/gateway/.env +0 -1
  55. package/templates/frontend/gateway/.nvmrc +0 -1
  56. package/templates/frontend/gateway/.prettierrc +0 -6
  57. package/templates/frontend/gateway/next.config.js +0 -15
  58. package/templates/frontend/gateway/package.json +0 -74
  59. package/templates/frontend/gateway/public/apple-touch-icon.png +0 -0
  60. package/templates/frontend/gateway/public/bos-meta.png +0 -0
  61. package/templates/frontend/gateway/public/favicon.png +0 -0
  62. package/templates/frontend/gateway/public/fonts/FKGrotesk.woff2 +0 -0
  63. package/templates/frontend/gateway/public/fonts/Mona-Sans.woff2 +0 -0
  64. package/templates/frontend/gateway/public/logo192.png +0 -0
  65. package/templates/frontend/gateway/public/robots.txt +0 -3
  66. package/templates/frontend/gateway/public/site.webmanifest +0 -8
  67. package/templates/frontend/gateway/src/assets/images/near-icon.svg +0 -3
  68. package/templates/frontend/gateway/src/components/MetaTags.tsx +0 -22
  69. package/templates/frontend/gateway/src/components/component/ComponentWrapperPage.tsx +0 -27
  70. package/templates/frontend/gateway/src/components/layouts/DefaultLayout.tsx +0 -16
  71. package/templates/frontend/gateway/src/components/layouts/SimpleLayout.tsx +0 -9
  72. package/templates/frontend/gateway/src/components/lib/Button/Button.tsx +0 -379
  73. package/templates/frontend/gateway/src/components/lib/Button/index.tsx +0 -1
  74. package/templates/frontend/gateway/src/components/lib/Spinner/Spinner.tsx +0 -33
  75. package/templates/frontend/gateway/src/components/lib/Spinner/index.ts +0 -1
  76. package/templates/frontend/gateway/src/components/lib/Text/Text.tsx +0 -14
  77. package/templates/frontend/gateway/src/components/lib/Text/index.tsx +0 -1
  78. package/templates/frontend/gateway/src/components/lib/Toast/README.md +0 -83
  79. package/templates/frontend/gateway/src/components/lib/Toast/Toast.tsx +0 -25
  80. package/templates/frontend/gateway/src/components/lib/Toast/Toaster.tsx +0 -48
  81. package/templates/frontend/gateway/src/components/lib/Toast/api.ts +0 -6
  82. package/templates/frontend/gateway/src/components/lib/Toast/index.ts +0 -3
  83. package/templates/frontend/gateway/src/components/lib/Toast/store.ts +0 -83
  84. package/templates/frontend/gateway/src/components/lib/Toast/styles.ts +0 -126
  85. package/templates/frontend/gateway/src/components/navigation/Navigation.tsx +0 -23
  86. package/templates/frontend/gateway/src/components/navigation/UserDropdownMenu.tsx +0 -209
  87. package/templates/frontend/gateway/src/components/navigation/desktop/DesktopNavigation.tsx +0 -109
  88. package/templates/frontend/gateway/src/components/navigation/desktop/MainNavigationMenu.tsx +0 -170
  89. package/templates/frontend/gateway/src/components/navigation/icons/close.svg +0 -22
  90. package/templates/frontend/gateway/src/components/navigation/icons/near-icon.svg +0 -3
  91. package/templates/frontend/gateway/src/components/navigation/icons/near-logo.svg +0 -14
  92. package/templates/frontend/gateway/src/components/navigation/icons/return.svg +0 -29
  93. package/templates/frontend/gateway/src/components/navigation/icons/search.svg +0 -3
  94. package/templates/frontend/gateway/src/components/navigation/mobile/AccordionMenu.tsx +0 -141
  95. package/templates/frontend/gateway/src/components/navigation/mobile/Menu.tsx +0 -86
  96. package/templates/frontend/gateway/src/components/navigation/mobile/MobileNavigation.tsx +0 -131
  97. package/templates/frontend/gateway/src/components/navigation/navigation-categories.ts +0 -75
  98. package/templates/frontend/gateway/src/components/vm/VmCommitButton.tsx +0 -20
  99. package/templates/frontend/gateway/src/components/vm/VmComponent.tsx +0 -29
  100. package/templates/frontend/gateway/src/components/vm/VmInitializer.tsx +0 -124
  101. package/templates/frontend/gateway/src/data/components.ts +0 -50
  102. package/templates/frontend/gateway/src/hooks/useBosComponents.ts +0 -14
  103. package/templates/frontend/gateway/src/hooks/useBosLoaderInitializer.ts +0 -60
  104. package/templates/frontend/gateway/src/hooks/useFlags.ts +0 -40
  105. package/templates/frontend/gateway/src/hooks/useLayout.tsx +0 -12
  106. package/templates/frontend/gateway/src/index.d.ts +0 -9
  107. package/templates/frontend/gateway/src/pages/_app.tsx +0 -47
  108. package/templates/frontend/gateway/src/pages/_document.tsx +0 -27
  109. package/templates/frontend/gateway/src/pages/dig.tsx +0 -25
  110. package/templates/frontend/gateway/src/pages/flags.tsx +0 -83
  111. package/templates/frontend/gateway/src/pages/hello-api.tsx +0 -105
  112. package/templates/frontend/gateway/src/pages/hello-component.tsx +0 -23
  113. package/templates/frontend/gateway/src/pages/hello-ethereum.tsx +0 -23
  114. package/templates/frontend/gateway/src/pages/hello-social.tsx +0 -31
  115. package/templates/frontend/gateway/src/pages/index.tsx +0 -51
  116. package/templates/frontend/gateway/src/pages/nui.tsx +0 -25
  117. package/templates/frontend/gateway/src/stores/auth.ts +0 -29
  118. package/templates/frontend/gateway/src/stores/bos-loader.ts +0 -20
  119. package/templates/frontend/gateway/src/stores/current-component.ts +0 -11
  120. package/templates/frontend/gateway/src/stores/vm.ts +0 -24
  121. package/templates/frontend/gateway/src/styles/globals.css +0 -68
  122. package/templates/frontend/gateway/src/styles/theme.css +0 -129
  123. package/templates/frontend/gateway/src/utils/config.ts +0 -49
  124. package/templates/frontend/gateway/src/utils/form-validation.ts +0 -18
  125. package/templates/frontend/gateway/src/utils/keypom-options.ts +0 -59
  126. package/templates/frontend/gateway/src/utils/route/privateRoute.tsx +0 -20
  127. package/templates/frontend/gateway/src/utils/route/signedOutRoute.tsx +0 -21
  128. package/templates/frontend/gateway/src/utils/types.ts +0 -33
  129. package/templates/frontend/gateway/tsconfig.json +0 -24
  130. package/templates/frontend/vanilla/.env +0 -1
  131. package/templates/frontend/vanilla/index.html +0 -97
  132. package/templates/frontend/vanilla/index.js +0 -70
  133. package/templates/shared/template.gitignore +0 -31
  134. /package/templates/contracts/{rust → rs}/.cargo/config +0 -0
  135. /package/templates/contracts/{rust → rs}/rust-toolchain.toml +0 -0
  136. /package/templates/contracts/{js → ts}/package-lock.json +0 -0
  137. /package/templates/contracts/{js → ts}/src/contract.ts +0 -0
  138. /package/templates/contracts/{js → ts}/tsconfig.json +0 -0
  139. /package/templates/frontend/{gateway → next}/public/next.svg +0 -0
  140. /package/templates/frontend/{gateway → next}/public/vercel.svg +0 -0
  141. /package/templates/frontend/{gateway/public → next/src/app}/favicon.ico +0 -0
  142. /package/templates/{shared → frontend/vanilla}/.gitpod.yml +0 -0
  143. /package/templates/{shared → frontend/vanilla}/README.md +0 -0
  144. /package/templates/frontend/vanilla/{assets → src/assets}/favicon.ico +0 -0
  145. /package/templates/frontend/vanilla/{assets → src/assets}/logo-black.svg +0 -0
  146. /package/templates/frontend/vanilla/{assets → src/assets}/logo-white.svg +0 -0
  147. /package/templates/{integration-tests/rust-tests → sandbox-tests/sandbox-rs}/src/tests.rs +0 -0
  148. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/ava.config.cjs +0 -0
  149. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/package-lock.json +0 -0
  150. /package/templates/{integration-tests/js-tests → sandbox-tests/sandbox-ts}/src/main.ava.ts +0 -0
@@ -1,18 +0,0 @@
1
- export const getEmailId = (email: string) => {
2
- return email
3
- .split('@')[0]
4
- .toLowerCase()
5
- .replace(/[^a-zA-Z0-9_-]/g, '-');
6
- };
7
-
8
- export const emailPattern = /\S+@\S+\.\S+/;
9
- export const accountAddressPattern = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/;
10
-
11
- /**
12
- * regex for the body of an account not including TLA and not allowing subaccount
13
- */
14
- export const accountAddressPatternNoSubaccount = /^([a-z\d]+[-_])*[a-z\d]+$/;
15
-
16
- export const isValidEmail = (email: string) => {
17
- return emailPattern.test(email);
18
- };
@@ -1,59 +0,0 @@
1
- import type { NetworkId } from './types';
2
-
3
- export const KEYPOM_OPTIONS = (networkId: NetworkId) => {
4
- return {
5
- beginTrial: {
6
- landing: {
7
- title: 'Create an Account',
8
- body: 'To start, enter a username.',
9
- fieldPlaceholder: 'Account ID',
10
- buttonText: 'Create',
11
- },
12
- claiming: {
13
- title: 'Creating Account',
14
- body: 'Your account is being created. Please wait...',
15
- },
16
- claimed: {
17
- title: 'You\'re all set! 🎉',
18
- body: 'Your account has been successfully created.',
19
- buttonText: 'Continue to app',
20
- },
21
- },
22
- trialOver: {
23
- mainBody: {
24
- title: 'Your trial has ended',
25
- body: 'Choose a wallet provider and onboard fully into the NEAR ecosystem.',
26
- imageOne: {
27
- title: 'Secure Your Digital Assets',
28
- body: 'Now that your trial is over, secure your account with an official wallet provider!',
29
- },
30
- imageTwo: {
31
- title: 'Log In to Any NEAR App',
32
- body: 'Once your account is secured, you can use any app on NEAR!',
33
- },
34
- },
35
- offboardingOptions: {
36
- title: 'Choose a Wallet',
37
- },
38
- },
39
- invalidAction: {
40
- title: 'Invalid Action',
41
- body: 'Your trial does not allow you to perform this action. For more information, please contact the site administrator.',
42
- },
43
- insufficientBalance: {
44
- title: 'Insufficient Balance',
45
- body: 'Your account does not have enough balance for the action you are trying to perform. Please try again with a different action. For more information, please contact the site administrator.',
46
- },
47
- wallets: [
48
- {
49
- name: 'MyNEARWallet',
50
- description: 'Secure your account with a Seed Phrase',
51
- iconUrl:
52
- 'data:image/png;base64,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',
53
- redirectUrl: `${
54
- networkId === 'testnet' ? 'https://testnet.mynearwallet.com' : 'https://app.mynearwallet.com'
55
- }/linkdrop/ACCOUNT_ID/SECRET_KEY`,
56
- },
57
- ],
58
- };
59
- };
@@ -1,20 +0,0 @@
1
- import { useAuthStore } from '@/stores/auth';
2
- import type { NextComponentType } from 'next';
3
- import { useRouter } from 'next/router';
4
-
5
- const privateRoute = (Component: NextComponentType) => {
6
- const Private = (props: any) => {
7
- const signedIn = useAuthStore((store) => store.signedIn);
8
- const router = useRouter();
9
-
10
- if (!signedIn && router) {
11
- // `signin` or `signup`?
12
- router.push('/signup');
13
- }
14
- return <Component {...props} />;
15
- };
16
-
17
- return Private;
18
- };
19
-
20
- export default privateRoute;
@@ -1,21 +0,0 @@
1
- import { useRouter } from 'next/router';
2
-
3
- import { useAuthStore } from '@/stores/auth';
4
-
5
- import type { NextPageWithLayout } from '../types';
6
-
7
- const signedOutRoute = (Component: NextPageWithLayout) => {
8
- const SignedOut = (props: NextPageWithLayout) => {
9
- const signedIn = useAuthStore((store) => store.signedIn);
10
- const router = useRouter();
11
-
12
- if (signedIn && router) {
13
- router.push('/');
14
- }
15
- return <Component {...props} />;
16
- };
17
-
18
- return SignedOut;
19
- };
20
-
21
- export default signedOutRoute;
@@ -1,33 +0,0 @@
1
- import type { NextPage } from 'next';
2
- import type { ReactElement, ReactNode } from 'react';
3
-
4
- export type NextPageWithLayout<T = any> = NextPage<T> & {
5
- getLayout?: (page: ReactElement) => ReactNode;
6
- };
7
-
8
- export type NetworkId = ProductionNetwork['networkId'];
9
- export type Network = ProductionNetwork;
10
- // export type NetworkId = ProductionNetwork['networkId'] | DevelopmentNetwork['networkId'];
11
- // export type Network = ProductionNetwork | DevelopmentNetwork;
12
-
13
- type ProductionNetwork = {
14
- networkId: 'testnet' | 'mainnet';
15
- viewAccountId: string;
16
- nodeUrl: string;
17
- walletUrl: string;
18
- helperUrl: string;
19
- fastAuth: {
20
- mpcRecoveryUrl: string;
21
- authHelperUrl: string; // TODO refactor: review by fastauth team
22
- accountIdSuffix: string;
23
- firebase: {
24
- apiKey: string;
25
- authDomain: string;
26
- projectId: string;
27
- storageBucket: string;
28
- messagingSenderId: string;
29
- appId: string;
30
- measurementId: string;
31
- };
32
- };
33
- };
@@ -1,24 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es5",
4
- "lib": ["dom", "dom.iterable", "esnext"],
5
- "allowJs": true,
6
- "skipLibCheck": true,
7
- "strict": true,
8
- "forceConsistentCasingInFileNames": true,
9
- "strictPropertyInitialization": false,
10
- "noEmit": true,
11
- "esModuleInterop": true,
12
- "module": "esnext",
13
- "moduleResolution": "node",
14
- "resolveJsonModule": true,
15
- "isolatedModules": true,
16
- "jsx": "preserve",
17
- "incremental": true,
18
- "paths": {
19
- "@/*": ["./src/*"]
20
- }
21
- },
22
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "types/**/*.d.ts"],
23
- "exclude": ["node_modules"]
24
- }
@@ -1 +0,0 @@
1
- CONTRACT_NAME=hello.near-examples.testnet
@@ -1,97 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <link rel="icon" href="assets/favicon.ico"/>
7
- <link rel="apple-touch-icon" href="assets/favicon.ico"/>
8
- <!-- <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous"> -->
9
- <title>Welcome to NEAR</title>
10
- <link rel="stylesheet" href="assets/global.css">
11
- </head>
12
- <body>
13
- <main id="signed-out-flow" style="display: none">
14
- <h1>
15
- The contract says: <span class="greeting" data-behavior="greeting"></span>
16
- </h1>
17
- <h3>
18
- Welcome to NEAR!
19
- </h3>
20
- <p>
21
- <b data-behavior="contract"></b>
22
- is storing a greeting message in the NEAR blockchain. To change it you
23
- need to sign in using the NEAR Wallet. It is very simple, just use the
24
- button below.
25
- </p>
26
- <p>
27
- Do not worry, this app runs in the test network ("testnet"). It works
28
- just like the main network ("mainnet"), but using NEAR Tokens that are
29
- only for testing!
30
- </p>
31
-
32
- <p>
33
- <b> Note </b>: The contract address is being loaded from
34
- an <code> env </code> variable. If you chose to add a contract during
35
- the wizard, running <code> npm run deploy </code> will deploy the
36
- contract code and update the <code> env </code> variable used here.
37
- </p>
38
-
39
- <p style="text-align: center; margin-top: 2.5em">
40
- <button id="sign-in-button">Sign in with NEAR Wallet</button>
41
- </p>
42
-
43
- </main>
44
-
45
- <div id="signed-in-flow" style="display: none">
46
- <button style="float: right" id="sign-out-button">
47
- Sign out <span data-behavior="account-id"></span>
48
- </button>
49
- <main>
50
- <h1>
51
- The contract says: <span class="greeting" data-behavior="greeting"></span>
52
- </h1>
53
- <form class="change">
54
- <label for="greeting">Change greeting:</label>
55
- <div>
56
- <input
57
- autocomplete="off"
58
- id="greeting"
59
- data-behavior="greeting"
60
- />
61
- <button>
62
- <span>Save</span>
63
- <div class="loader"></div>
64
- </button>
65
- </div>
66
- </form>
67
- <p>
68
- Look at that! A Hello World app! This greeting is stored on <b data-behavior="contract"></b>.
69
- </p>
70
- <ol>
71
- <li>
72
- Look in <code>index.js</code> - you will see a <code>Wallet</code> object being created and used
73
- to interact with the methods <code>set_greeting</code> and <code>get_greeting</code>.
74
- </li>
75
- <li>
76
- These method live in the <a target="_blank" href="https://docs.near.org/develop/contracts/welcome">smart contract</a>,
77
- who's code is defined in the <code>contract/</code> folder.
78
- </li>
79
- <li>
80
- When you run <code>npm run deploy</code> the code in the <code>contract/</code> folder is compiled and deployed to the NEAR testnet.
81
- You can see how this happens by looking in <code>package.json</code> at the <code>scripts</code> section to
82
- find the <code>dev</code> command.
83
- </li>
84
- </ol>
85
- <hr>
86
- <p>
87
- To keep learning, check out
88
- <a target="_blank" href="https://docs.near.org">the NEAR docs</a>
89
- or look through some
90
- <a target="_blank" href="https://examples.near.org">example apps</a>.
91
- </p>
92
- </main>
93
- </div>
94
-
95
- <script src="index.js" type="module"></script>
96
- </body>
97
- </html>
@@ -1,70 +0,0 @@
1
- import 'regenerator-runtime/runtime';
2
- import { Wallet } from './near-wallet';
3
-
4
- const CONTRACT_ADDRESS = process.env.CONTRACT_NAME;
5
-
6
- // When creating the wallet you can optionally ask to create an access key
7
- // Having the key enables to call non-payable methods without interrupting the user to sign
8
- const wallet = new Wallet({ createAccessKeyFor: CONTRACT_ADDRESS });
9
-
10
- // Setup on page load
11
- window.onload = async () => {
12
- let isSignedIn = await wallet.startUp();
13
-
14
- if (isSignedIn) {
15
- signedInFlow();
16
- } else {
17
- signedOutFlow();
18
- }
19
-
20
- getGreeting();
21
- };
22
-
23
- // Button clicks
24
- document.querySelector('form').onsubmit = setGreeting;
25
- document.querySelector('#sign-in-button').onclick = () => { wallet.signIn(); };
26
- document.querySelector('#sign-out-button').onclick = () => { wallet.signOut(); };
27
-
28
- async function setGreeting(event) {
29
- // handle UI
30
- event.preventDefault();
31
- const { greeting } = event.target.elements;
32
-
33
- document.querySelector('#signed-in-flow main')
34
- .classList.add('please-wait');
35
-
36
- // use the wallet to send the greeting to the Smart Contract
37
- await wallet.callMethod({ method: 'set_greeting', args: { message: greeting.value }, contractId: CONTRACT_ADDRESS });
38
-
39
- // query the new greeting
40
- await getGreeting();
41
-
42
- // handle UI stuff
43
- document.querySelector('#signed-in-flow main').classList.remove('please-wait');
44
- }
45
-
46
- async function getGreeting() {
47
- // use the wallet to query the Smart Contract
48
- const currentGreeting = await wallet.viewMethod({ method: 'get_greeting', contractId: CONTRACT_ADDRESS });
49
-
50
- // handle UI stuff
51
- document.querySelectorAll('[data-behavior=greeting]').forEach(el => {
52
- el.innerText = currentGreeting;
53
- el.value = currentGreeting;
54
- });
55
- }
56
-
57
- // UI: Display the signed-out-flow container
58
- function signedOutFlow() {
59
- document.querySelector('#signed-in-flow').style.display = 'none';
60
- document.querySelector('#signed-out-flow').style.display = 'block';
61
- }
62
-
63
- // UI: Displaying the signed in flow container and fill in account-specific data
64
- function signedInFlow() {
65
- document.querySelector('#signed-out-flow').style.display = 'none';
66
- document.querySelector('#signed-in-flow').style.display = 'block';
67
- document.querySelectorAll('[data-behavior=account-id]').forEach(el => {
68
- el.innerText = wallet.accountId;
69
- });
70
- }
@@ -1,31 +0,0 @@
1
- # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
- # Developer note: near.gitignore will be renamed to .gitignore upon project creation
3
- # dependencies
4
- node_modules
5
- /.pnp
6
- .pnp.js
7
-
8
- # build
9
- /out
10
- /dist
11
-
12
- # keys
13
- /templates/react/neardev
14
-
15
- # testing
16
- /coverage
17
-
18
- # production
19
- /build
20
-
21
- # misc
22
- .DS_Store
23
- .env.local
24
- .env.development.local
25
- .env.test.local
26
- .env.production.local
27
- /.cache
28
-
29
- npm-debug.log*
30
- yarn-debug.log*
31
- yarn-error.log*
File without changes
File without changes
File without changes