create-near-app 6.0.2 → 6.1.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 (51) hide show
  1. package/README.md +1 -1
  2. package/dist/messages.js +37 -12
  3. package/dist/types.js +1 -1
  4. package/dist/user-input.js +2 -1
  5. package/package.json +1 -1
  6. package/templates/contracts/rs/Cargo.toml +3 -0
  7. package/templates/frontend/next-page/README.md +36 -0
  8. package/templates/frontend/next-page/jsconfig.json +7 -0
  9. package/templates/frontend/next-page/next.config.js +6 -0
  10. package/templates/frontend/next-page/package-lock.json +14642 -0
  11. package/templates/frontend/next-page/package.json +43 -0
  12. package/templates/frontend/next-page/public/favicon.ico +0 -0
  13. package/templates/frontend/next-page/public/near-logo.svg +43 -0
  14. package/templates/frontend/next-page/public/near.svg +1 -0
  15. package/templates/frontend/next-page/public/next.svg +1 -0
  16. package/templates/frontend/next-page/public/vercel.svg +1 -0
  17. package/templates/frontend/next-page/src/components/cards.js +43 -0
  18. package/templates/frontend/next-page/src/components/navigation.js +36 -0
  19. package/templates/frontend/next-page/src/components/vm-component.js +26 -0
  20. package/templates/frontend/next-page/src/config.js +21 -0
  21. package/templates/frontend/next-page/src/layout.js +17 -0
  22. package/templates/frontend/next-page/src/pages/_app.js +10 -0
  23. package/templates/frontend/next-page/src/pages/_document.js +17 -0
  24. package/templates/frontend/next-page/src/pages/hello-components/index.js +48 -0
  25. package/templates/frontend/next-page/src/pages/hello-near/index.js +78 -0
  26. package/templates/frontend/next-page/src/pages/index.js +41 -0
  27. package/templates/frontend/next-page/src/styles/app.module.css +228 -0
  28. package/templates/frontend/next-page/src/styles/globals.css +95 -0
  29. package/templates/frontend/next-page/src/wallets/wallet-selector.js +120 -0
  30. package/templates/frontend/next-page/src/wallets/web3-wallet.ts +289 -0
  31. /package/templates/frontend/{next → next-app}/README.md +0 -0
  32. /package/templates/frontend/{next → next-app}/jsconfig.json +0 -0
  33. /package/templates/frontend/{next → next-app}/next.config.js +0 -0
  34. /package/templates/frontend/{next → next-app}/package.json +0 -0
  35. /package/templates/frontend/{next → next-app}/public/near-logo.svg +0 -0
  36. /package/templates/frontend/{next → next-app}/public/near.svg +0 -0
  37. /package/templates/frontend/{next → next-app}/public/next.svg +0 -0
  38. /package/templates/frontend/{next → next-app}/public/vercel.svg +0 -0
  39. /package/templates/frontend/{next → next-app}/src/app/app.module.css +0 -0
  40. /package/templates/frontend/{next → next-app}/src/app/favicon.ico +0 -0
  41. /package/templates/frontend/{next → next-app}/src/app/globals.css +0 -0
  42. /package/templates/frontend/{next → next-app}/src/app/hello-components/page.js +0 -0
  43. /package/templates/frontend/{next → next-app}/src/app/hello-near/page.js +0 -0
  44. /package/templates/frontend/{next → next-app}/src/app/layout.js +0 -0
  45. /package/templates/frontend/{next → next-app}/src/app/page.js +0 -0
  46. /package/templates/frontend/{next → next-app}/src/components/cards.js +0 -0
  47. /package/templates/frontend/{next → next-app}/src/components/navigation.js +0 -0
  48. /package/templates/frontend/{next → next-app}/src/components/vm-component.js +0 -0
  49. /package/templates/frontend/{next → next-app}/src/config.js +0 -0
  50. /package/templates/frontend/{next → next-app}/src/wallets/wallet-selector.js +0 -0
  51. /package/templates/frontend/{next → next-app}/src/wallets/web3-wallet.ts +0 -0
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "hello-near",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "engines": {
6
+ "node": ">=18"
7
+ },
8
+ "scripts": {
9
+ "dev": "next dev",
10
+ "build": "next build",
11
+ "start": "next start",
12
+ "lint": "next lint"
13
+ },
14
+ "dependencies": {
15
+ "@near-wallet-selector/core": "^8.5.1",
16
+ "@near-wallet-selector/here-wallet": "^8.5.1",
17
+ "@near-wallet-selector/modal-ui": "^8.5.1",
18
+ "@near-wallet-selector/my-near-wallet": "^8.5.1",
19
+ "@web3-onboard/core": "^2.20.2",
20
+ "@web3-onboard/injected-wallets": "^2.10.1",
21
+ "@web3-onboard/ledger": "^2.4.6",
22
+ "@web3-onboard/react": "^2.8.7",
23
+ "@web3-onboard/walletconnect": "^2.3.9",
24
+ "base64-js": "^1.5.1",
25
+ "bootstrap": "^5.3.2",
26
+ "bootstrap-icons": "^1.11.1",
27
+ "ieee754": "^1.2.1",
28
+ "near-api-js": "^2.1.3",
29
+ "near-social-vm": "github:NearSocial/VM#2.5.2",
30
+ "next": "14.0.1",
31
+ "pino-pretty": "^10.2.3",
32
+ "react": "^18",
33
+ "react-bootstrap": "2.9.1",
34
+ "react-bootstrap-icons": "^1.10.3",
35
+ "react-dom": "^18",
36
+ "react-singleton-hook": "^4.0.1",
37
+ "zustand": "^4.4.4"
38
+ },
39
+ "devDependencies": {
40
+ "eslint": "^8.53",
41
+ "eslint-config-next": "14.0.1"
42
+ }
43
+ }
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ width="26.707293"
4
+ height="26.619026"
5
+ viewBox="0 0 26.707293 26.619026"
6
+ fill="none"
7
+ version="1.1"
8
+ id="svg196"
9
+ sodipodi:docname="near-logo.svg"
10
+ inkscape:version="1.2.1 (9c6d41e, 2022-07-14)"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ xmlns:svg="http://www.w3.org/2000/svg">
15
+ <sodipodi:namedview
16
+ id="namedview198"
17
+ pagecolor="#ffffff"
18
+ bordercolor="#000000"
19
+ borderopacity="0.25"
20
+ inkscape:showpageshadow="2"
21
+ inkscape:pageopacity="0.0"
22
+ inkscape:pagecheckerboard="0"
23
+ inkscape:deskcolor="#d1d1d1"
24
+ showgrid="false"
25
+ inkscape:zoom="4.305628"
26
+ inkscape:cx="52.721693"
27
+ inkscape:cy="16.025537"
28
+ inkscape:window-width="1403"
29
+ inkscape:window-height="430"
30
+ inkscape:window-x="0"
31
+ inkscape:window-y="25"
32
+ inkscape:window-maximized="0"
33
+ inkscape:current-layer="svg196" />
34
+ <g
35
+ clip-path="url(#clip0_1_1899)"
36
+ id="g192"
37
+ transform="translate(-0.217407,-0.690475)">
38
+ <path
39
+ d="m 24.079,0.690475 c -0.9891,0 -1.9075,0.511145 -2.4256,1.351425 l -5.5825,8.261 c -0.1819,0.2723 -0.1081,0.6393 0.1651,0.8206 0.2214,0.1471 0.5143,0.1289 0.716,-0.044 l 5.495,-4.75049 c 0.0913,-0.0819 0.232,-0.07356 0.3142,0.01744 0.0373,0.04171 0.0571,0.09556 0.0571,0.15092 V 21.3707 c 0,0.1228 -0.0997,0.2214 -0.223,0.2214 -0.0662,0 -0.1285,-0.0288 -0.1704,-0.0796 L 5.81436,1.69457 C 5.27339,1.05829 4.47904,0.691234 3.64284,0.690475 H 3.0623 C 1.4911,0.690475 0.217407,1.96 0.217407,3.52605 V 24.4739 c 0,1.5661 1.273693,2.8356 2.844893,2.8356 0.98913,0 1.9075,-0.5111 2.42565,-1.3514 l 5.58255,-8.261 c 0.1818,-0.2723 0.108,-0.6393 -0.1652,-0.8206 -0.2214,-0.1471 -0.5143,-0.1289 -0.7159,0.044 L 4.69436,21.671 C 4.60306,21.7529 4.4623,21.7445 4.38013,21.6535 4.34284,21.6118 4.32306,21.558 4.32382,21.5026 V 6.62554 c 0,-0.12286 0.09967,-0.22145 0.22293,-0.22145 0.06544,0 0.12859,0.02882 0.17044,0.07963 L 21.3255,26.3054 c 0.5409,0.6363 1.3353,1.0034 2.1715,1.0041 h 0.5805 c 1.5712,8e-4 2.8457,-1.268 2.8472,-2.834 V 3.52605 C 26.9247,1.96 25.651,0.690475 24.0798,0.690475 Z"
40
+ fill="#000000"
41
+ id="path190" />
42
+ </g>
43
+ </svg>
@@ -0,0 +1 @@
1
+ <svg width="110" height="28" viewBox="0 0 110 28" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1_1899)"><path d="M45.5211 4.46114C43.4964 4.46114 42.0241 4.93816 40.7733 6.03856L38.5644 7.94588C38.3803 8.09301 38.0121 8.20297 37.7549 7.98228C37.4969 7.76235 37.4604 7.46886 37.6811 7.17537L38.8589 5.41442C39.043 5.15733 38.8962 4.82743 38.5644 4.82743H35.7302C35.3992 4.82743 35.1413 5.08452 35.1413 5.41442V22.5841C35.1413 22.914 35.3992 23.1711 35.7302 23.1711H38.6748C39.0058 23.1711 39.2637 22.914 39.2637 22.5841V12.8988C39.2637 8.46006 42.9813 7.76311 44.3798 7.76311C47.3609 7.76311 48.4284 9.89112 48.4284 11.5049V22.5841C48.4284 22.914 48.6863 23.1711 49.0173 23.1711H51.9618C52.2928 23.1711 52.5508 22.914 52.5508 22.5841V11.1379C52.5508 7.029 49.8634 4.46114 45.5203 4.46114H45.5211Z" fill="black"/><path d="M64.5489 4.38757C58.8439 4.38757 55.2001 7.87307 55.2001 12.6053V15.2104C55.2001 20.1997 58.8439 23.6117 64.5489 23.6117C69.5912 23.6117 73.1246 21.0067 73.4929 17.4848C73.5302 17.1177 73.2723 16.8614 72.904 16.8614H70.0332C69.7753 16.8614 69.5546 17.0085 69.4808 17.2648C69.1126 18.4388 67.3831 20.1997 64.5489 20.1997C61.7146 20.1997 59.0645 18.1453 59.1011 15.2104L59.1383 11.9456C59.1749 9.48766 61.7519 7.80027 64.5489 7.80027C67.0887 7.80027 69.5546 9.23133 69.8118 11.5793C69.8331 11.8508 69.6459 12.0957 69.3774 12.1473L61.125 13.7437C60.794 13.8172 60.5361 14.1107 60.5361 14.477V14.5134C60.5361 14.8433 60.867 15.1368 61.3456 15.1368H73.1977C73.5233 15.1368 73.7866 14.8737 73.7866 14.5498V12.2391C73.7866 7.87383 69.9952 4.38833 64.5481 4.38833L64.5489 4.38757Z" fill="black"/><path d="M85.0863 4.38757C80.4853 4.38757 76.5105 7.0654 76.5105 10.5873C76.5105 10.8808 76.7685 11.1007 77.0994 11.1007H80.0805C80.375 11.1007 80.5956 10.8808 80.6329 10.5873C80.9274 8.97348 82.8782 7.79951 84.976 7.79951C87.4785 7.79951 89.1722 9.34053 89.1722 11.982V15.174C89.1722 18.4388 86.7427 20.0898 83.7243 20.0898C81.3687 20.0898 80.0067 19.2093 80.0067 17.7782C80.0067 16.5307 80.6694 15.4667 83.3926 14.8433L87.3309 13.7793C87.7356 13.6693 87.8832 13.3387 87.8094 12.9724C87.7729 12.6789 87.4419 12.5318 87.1467 12.5318H83.0616C79.6019 12.5318 76.105 14.7326 76.105 17.961V18.4744C76.105 21.7764 79.2337 23.5002 82.8037 23.5002C85.0855 23.5002 87.0364 22.6197 88.2507 21.5929L90.0548 20.0519C90.3492 19.7948 90.6437 19.7948 90.9008 20.0519C91.1215 20.2718 91.0477 20.6024 90.8636 20.8588L89.7595 22.5833C89.5754 22.8404 89.7223 23.1703 90.054 23.1703H92.7041C93.0351 23.1703 93.293 22.9132 93.293 22.5833V11.467C93.293 7.21177 90.2381 4.38681 85.0848 4.38681L85.0863 4.38757Z" fill="black"/><path d="M109.194 4.82819H105.071C103.636 4.82819 102.237 5.70866 101.243 6.55274L99.6243 7.94663C99.4401 8.09376 99.1084 8.20372 98.8877 8.0202C98.6298 7.83667 98.5195 7.46962 98.7409 7.17612L99.9187 5.41517C100.103 5.15808 99.956 4.82819 99.6243 4.82819H96.8638C96.5328 4.82819 96.2749 5.08528 96.2749 5.41517V22.5848C96.2749 22.9147 96.5328 23.1718 96.8638 23.1718H99.8822C100.213 23.1718 100.471 22.9147 100.471 22.5848V13.7801C100.471 10.0011 102.017 8.31369 105.367 8.31369H109.194C109.525 8.31369 109.783 8.0566 109.783 7.7267V5.41517C109.783 5.08528 109.525 4.82819 109.194 4.82819H109.194Z" fill="black"/><path d="M24.079 0.690475C23.0899 0.690475 22.1715 1.20162 21.6534 2.0419L16.0709 10.3029C15.889 10.5752 15.9628 10.9422 16.236 11.1235C16.4574 11.2706 16.7503 11.2524 16.952 11.0795L22.447 6.32901C22.5383 6.24711 22.679 6.25545 22.7612 6.34645C22.7985 6.38816 22.8183 6.44201 22.8183 6.49737V21.3707C22.8183 21.4935 22.7186 21.5921 22.5953 21.5921C22.5291 21.5921 22.4668 21.5633 22.4249 21.5125L5.81436 1.69457C5.27339 1.05829 4.47904 0.691234 3.64284 0.690475H3.0623C1.4911 0.690475 0.217407 1.96 0.217407 3.52605V24.4739C0.217407 26.04 1.4911 27.3095 3.0623 27.3095C4.05143 27.3095 4.9698 26.7984 5.48795 25.9581L11.0705 17.6971C11.2523 17.4248 11.1785 17.0578 10.9053 16.8765C10.6839 16.7294 10.391 16.7476 10.1894 16.9205L4.69436 21.671C4.60306 21.7529 4.4623 21.7445 4.38013 21.6535C4.34284 21.6118 4.32306 21.558 4.32382 21.5026V6.62554C4.32382 6.50268 4.42349 6.40409 4.54675 6.40409C4.61219 6.40409 4.67534 6.43291 4.71719 6.48372L21.3255 26.3054C21.8664 26.9417 22.6608 27.3088 23.497 27.3095H24.0775C25.6487 27.3103 26.9232 26.0415 26.9247 24.4755V3.52605C26.9247 1.96 25.651 0.690475 24.0798 0.690475H24.079Z" fill="black"/></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 283 64"><path fill="black" d="M141 16c-11 0-19 7-19 18s9 18 20 18c7 0 13-3 16-7l-7-5c-2 3-6 4-9 4-5 0-9-3-10-7h28v-3c0-11-8-18-19-18zm-9 15c1-4 4-7 9-7s8 3 9 7h-18zm117-15c-11 0-19 7-19 18s9 18 20 18c6 0 12-3 16-7l-8-5c-2 3-5 4-8 4-5 0-9-3-11-7h28l1-3c0-11-8-18-19-18zm-10 15c2-4 5-7 10-7s8 3 9 7h-19zm-39 3c0 6 4 10 10 10 4 0 7-2 9-5l8 5c-3 5-9 8-17 8-11 0-19-7-19-18s8-18 19-18c8 0 14 3 17 8l-8 5c-2-3-5-5-9-5-6 0-10 4-10 10zm83-29v46h-9V5h9zM37 0l37 64H0L37 0zm92 5-27 48L74 5h10l18 30 17-30h10zm59 12v10l-3-1c-6 0-10 4-10 10v15h-9V17h9v9c0-5 6-9 13-9z"/></svg>
@@ -0,0 +1,43 @@
1
+ import styles from "../styles/app.module.css";
2
+
3
+ export const DocsCard = () => {
4
+ return (
5
+ <a
6
+ href="https://docs.near.org/develop/integrate/quickstart-frontend"
7
+ className={styles.card}
8
+ target="_blank"
9
+ rel="noopener noreferrer"
10
+ >
11
+ <h2>
12
+ Near Docs <span>-&gt;</span>
13
+ </h2>
14
+ <p>Learn how this application works, and what you can build on Near.</p>
15
+ </a>
16
+ );
17
+ };
18
+
19
+ export const HelloNearCard = () => {
20
+ return (
21
+ <a href="/hello-near" className={styles.card} rel="noopener noreferrer">
22
+ <h2>
23
+ Near Integration <span>-&gt;</span>
24
+ </h2>
25
+ <p>Discover how simple it is to interact with a Near smart contract.</p>
26
+ </a>
27
+ );
28
+ };
29
+
30
+ export const HelloComponentsCard = () => {
31
+ return (
32
+ <a
33
+ href="/hello-components"
34
+ className={styles.card}
35
+ rel="noopener noreferrer"
36
+ >
37
+ <h2>
38
+ Web3 Components <span>-&gt;</span>
39
+ </h2>
40
+ <p>See how Web3 components can help you to create multi-chain apps.</p>
41
+ </a>
42
+ );
43
+ };
@@ -0,0 +1,36 @@
1
+ import Image from 'next/image';
2
+ import Link from 'next/link';
3
+ import { useEffect, useState } from 'react';
4
+
5
+ import NearLogo from 'public/near-logo.svg';
6
+ import { useWallet } from '@/wallets/wallet-selector';
7
+
8
+ export const Navigation = () => {
9
+
10
+ const { signedAccountId, logOut, logIn } = useWallet();
11
+ const [action, setAction] = useState(() => { });
12
+ const [label, setLabel] = useState('Loading...');
13
+
14
+ useEffect(() => {
15
+ if (signedAccountId) {
16
+ setAction(() => logOut);
17
+ setLabel(`Logout ${signedAccountId}`);
18
+ } else {
19
+ setAction(() => logIn);
20
+ setLabel('Login');
21
+ }
22
+ }, [signedAccountId, logOut, logIn, setAction, setLabel]);
23
+
24
+ return (
25
+ <nav className="navbar navbar-expand-lg">
26
+ <div className="container-fluid">
27
+ <Link href="/" passHref legacyBehavior>
28
+ <Image priority src={NearLogo} alt="NEAR" width="30" height="24" className="d-inline-block align-text-top" />
29
+ </Link>
30
+ <div className='navbar-nav pt-1'>
31
+ <button className="btn btn-secondary" onClick={action} > {label} </button>
32
+ </div>
33
+ </div>
34
+ </nav>
35
+ );
36
+ };
@@ -0,0 +1,26 @@
1
+ 'use client';
2
+ import { useEffect } from 'react';
3
+ import { useInitNear, Widget, EthersProviderContext } from 'near-social-vm';
4
+
5
+ import { useWallet } from '@/wallets/wallet-selector';
6
+ import { useEthersProviderContext } from '@/wallets/web3-wallet';
7
+ import { NetworkId } from '@/config';
8
+
9
+ export default function Component({ src }) {
10
+ const ethersContext = useEthersProviderContext();
11
+ const { selector } = useWallet();
12
+ const { initNear } = useInitNear();
13
+
14
+ useEffect(() => {
15
+ initNear && selector && initNear({ networkId: NetworkId, selector });
16
+ }, [initNear, selector]);
17
+
18
+ return (
19
+ <div>
20
+ <EthersProviderContext.Provider value={ethersContext}>
21
+ <Widget src={src} />
22
+ </EthersProviderContext.Provider>
23
+ <p className="mt-4 small"> <span className="text-secondary">Source:</span> <a href={`https://near.social/mob.near/widget/WidgetSource?src=${src}`}> {src} </a> </p>
24
+ </div>
25
+ );
26
+ }
@@ -0,0 +1,21 @@
1
+ export const NetworkId = 'testnet';
2
+
3
+ export const HelloNearContract = {
4
+ mainnet: 'hello.near-examples.near',
5
+ testnet: 'hello.near-examples.testnet',
6
+ }
7
+
8
+ export const ComponentMap = {
9
+ mainnet: {
10
+ socialDB: 'social.near',
11
+ Lido: 'zavodil.near/widget/Lido',
12
+ HelloNear: 'gagdiez.near/widget/HelloNear',
13
+ LoveNear: 'gagdiez.near/widget/LoveNear',
14
+ },
15
+ testnet: {
16
+ socialDB: 'v1.social08.testnet',
17
+ Lido: 'influencer.testnet/widget/Lido',
18
+ HelloNear: 'influencer.testnet/widget/HelloNear',
19
+ LoveNear: 'influencer.testnet/widget/LoveNear',
20
+ }
21
+ }
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import "@near-wallet-selector/modal-ui/styles.css";
3
+
4
+ import { NetworkId } from "@/config";
5
+ import { Navigation } from "@/components/navigation";
6
+ import { useInitWallet } from "@/wallets/wallet-selector";
7
+
8
+ export default function RootLayout({ children }) {
9
+ useInitWallet({ createAccessKeyFor: "", networkId: NetworkId });
10
+
11
+ return (
12
+ <>
13
+ <Navigation />
14
+ {children}
15
+ </>
16
+ );
17
+ }
@@ -0,0 +1,10 @@
1
+ import RootLayout from "@/layout";
2
+ import "@/styles/globals.css";
3
+
4
+ export default function MyApp({ Component, pageProps }) {
5
+ return (
6
+ <RootLayout>
7
+ <Component {...pageProps} />
8
+ </RootLayout>
9
+ );
10
+ }
@@ -0,0 +1,17 @@
1
+ import Document, { Html, Head, Main, NextScript } from "next/document";
2
+
3
+ class MyDocument extends Document {
4
+ render() {
5
+ return (
6
+ <Html lang="en">
7
+ <Head />
8
+ <body>
9
+ <Main />
10
+ <NextScript />
11
+ </body>
12
+ </Html>
13
+ );
14
+ }
15
+ }
16
+
17
+ export default MyDocument;
@@ -0,0 +1,48 @@
1
+ import dynamic from "next/dynamic";
2
+
3
+ import styles from "@/styles/app.module.css";
4
+ import { DocsCard, HelloNearCard } from "@/components/cards";
5
+ import { NetworkId, ComponentMap } from "@/config";
6
+
7
+ const Component = dynamic(() => import("@/components/vm-component"), {
8
+ ssr: false,
9
+ });
10
+
11
+ const socialComponents = ComponentMap[NetworkId];
12
+
13
+ export default function HelloComponents() {
14
+ return (
15
+ <>
16
+ <main className={styles.main}>
17
+ <div className={styles.description}>
18
+ <p>
19
+ Loading components from: &nbsp;
20
+ <code className={styles.code}>{socialComponents.socialDB}</code>
21
+ </p>
22
+ </div>
23
+ <div className={styles.center}>
24
+ <h1>
25
+ {" "}
26
+ <code>Multi-chain</code> Components Made Simple{" "}
27
+ </h1>
28
+ </div>
29
+ <div className="row">
30
+ <div class="col-6">
31
+ <Component src={socialComponents.HelloNear} />
32
+ <p class="my-4">&nbsp;</p>
33
+ <Component src={socialComponents.LoveNear} />
34
+ </div>
35
+ <div class="col-6">
36
+ <Component src={socialComponents.Lido} />
37
+ </div>
38
+ </div>
39
+ <hr />
40
+
41
+ <div className={styles.grid}>
42
+ <DocsCard />
43
+ <HelloNearCard />
44
+ </div>
45
+ </main>
46
+ </>
47
+ );
48
+ }
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { DocsCard, HelloComponentsCard } from "@/components/cards";
3
+ import { useWallet } from "@/wallets/wallet-selector";
4
+ import { useState, useEffect } from "react";
5
+ import { HelloNearContract, NetworkId } from "../../config";
6
+ import styles from "@/styles/app.module.css";
7
+
8
+ // Contract that the app will interact with
9
+ const CONTRACT = HelloNearContract[NetworkId];
10
+
11
+ export default function HelloNear() {
12
+ const { signedAccountId, viewMethod, callMethod } = useWallet();
13
+
14
+ const [greeting, setGreeting] = useState("loading...");
15
+ const [loggedIn, setLoggedIn] = useState(false);
16
+ const [showSpinner, setShowSpinner] = useState(false);
17
+
18
+ useEffect(() => {
19
+ viewMethod &&
20
+ viewMethod(CONTRACT, "get_greeting", {}).then((greeting) =>
21
+ setGreeting(greeting)
22
+ );
23
+ }, [viewMethod]);
24
+
25
+ useEffect(() => {
26
+ setLoggedIn(!!signedAccountId);
27
+ }, [signedAccountId]);
28
+
29
+ const saveGreeting = async () => {
30
+ setShowSpinner(true);
31
+ await callMethod(CONTRACT, "set_greeting", { greeting });
32
+ setShowSpinner(false);
33
+ };
34
+
35
+ return (
36
+ <main className={styles.main}>
37
+ <div className={styles.description}>
38
+ <p>
39
+ Interacting with the contract: &nbsp;
40
+ <code className={styles.code}>{CONTRACT}</code>
41
+ </p>
42
+ </div>
43
+
44
+ <div className={styles.center}>
45
+ <h1 className="w-100">
46
+ {" "}
47
+ The contract says: <code>{greeting}</code>{" "}
48
+ </h1>
49
+ <div className="input-group" hidden={!loggedIn}>
50
+ <input
51
+ type="text"
52
+ className="form-control w-20"
53
+ placeholder="Store a new greeting"
54
+ onChange={(t) => {
55
+ setGreeting(t.target.value);
56
+ }}
57
+ />
58
+ <div className="input-group-append">
59
+ <button className="btn btn-secondary" onClick={saveGreeting}>
60
+ <span hidden={showSpinner}> Save </span>
61
+ <i
62
+ className="spinner-border spinner-border-sm"
63
+ hidden={!showSpinner}
64
+ ></i>
65
+ </button>
66
+ </div>
67
+ </div>
68
+ <div className="w-100 text-end align-text-center" hidden={loggedIn}>
69
+ <p className="m-0"> Please login to change the greeting </p>
70
+ </div>
71
+ </div>
72
+ <div className={styles.grid}>
73
+ <DocsCard />
74
+ <HelloComponentsCard />
75
+ </div>
76
+ </main>
77
+ );
78
+ }
@@ -0,0 +1,41 @@
1
+ import Image from "next/image";
2
+ import styles from "@/styles/app.module.css";
3
+ import {
4
+ DocsCard,
5
+ HelloComponentsCard,
6
+ HelloNearCard,
7
+ } from "@/components/cards";
8
+
9
+ export default function Home() {
10
+ return (
11
+ <main className={styles.main}>
12
+ <div className={styles.description}> </div>
13
+
14
+ <div className={styles.center}>
15
+ <Image
16
+ className={styles.logo}
17
+ src="/near.svg"
18
+ alt="Next.js Logo"
19
+ width={110 * 1.5}
20
+ height={28 * 1.5}
21
+ priority
22
+ />
23
+ <h3 className="ms-2 me-3 text-dark"> + </h3>
24
+ <Image
25
+ className={styles.logo}
26
+ src="/next.svg"
27
+ alt="Next.js Logo"
28
+ width={300 * 0.58}
29
+ height={61 * 0.58}
30
+ priority
31
+ />
32
+ </div>
33
+
34
+ <div className={styles.grid}>
35
+ <HelloComponentsCard />
36
+ <HelloNearCard />
37
+ <DocsCard />
38
+ </div>
39
+ </main>
40
+ );
41
+ }
@@ -0,0 +1,228 @@
1
+ .main {
2
+ display: flex;
3
+ flex-direction: column;
4
+ justify-content: space-between;
5
+ align-items: center;
6
+ padding: 6rem;
7
+ min-height: 100vh;
8
+ }
9
+
10
+ .description {
11
+ display: inherit;
12
+ justify-content: inherit;
13
+ align-items: inherit;
14
+ font-size: 0.85rem;
15
+ max-width: var(--max-width);
16
+ width: 100%;
17
+ z-index: 2;
18
+ font-family: var(--font-mono);
19
+ }
20
+
21
+ .description a {
22
+ display: flex;
23
+ justify-content: center;
24
+ align-items: center;
25
+ gap: 0.5rem;
26
+ }
27
+
28
+ .description p {
29
+ position: relative;
30
+ margin: 0;
31
+ padding: 1rem;
32
+ background-color: rgba(var(--callout-rgb), 0.5);
33
+ border: 1px solid rgba(var(--callout-border-rgb), 0.3);
34
+ border-radius: var(--border-radius);
35
+ }
36
+
37
+ .code {
38
+ font-weight: 700;
39
+ font-family: var(--font-mono);
40
+ }
41
+
42
+ .grid {
43
+ display: grid;
44
+ grid-template-columns: repeat(2, minmax(25%, auto));
45
+ max-width: 100%;
46
+ width: var(--max-width);
47
+ }
48
+
49
+ .card {
50
+ padding: 1rem 1.2rem;
51
+ border-radius: var(--border-radius);
52
+ background: rgba(var(--card-rgb), 0);
53
+ border: 1px solid rgba(var(--card-border-rgb), 0);
54
+ transition: background 200ms, border 200ms;
55
+ }
56
+
57
+ .card span {
58
+ display: inline-block;
59
+ transition: transform 200ms;
60
+ }
61
+
62
+ .card h2 {
63
+ font-weight: 600;
64
+ margin-bottom: 0.7rem;
65
+ }
66
+
67
+ .card p {
68
+ margin: 0;
69
+ opacity: 0.6;
70
+ font-size: 0.9rem;
71
+ line-height: 1.5;
72
+ max-width: 30ch;
73
+ }
74
+
75
+ .center {
76
+ display: flex;
77
+ justify-content: center;
78
+ align-items: center;
79
+ position: relative;
80
+ padding: 4rem 0;
81
+ width: 100%;
82
+ }
83
+
84
+ .center::before {
85
+ background: var(--secondary-glow);
86
+ border-radius: 50%;
87
+ width: 480px;
88
+ height: 360px;
89
+ margin-left: -400px;
90
+ }
91
+
92
+ .center::after {
93
+ background: var(--primary-glow);
94
+ width: 240px;
95
+ height: 180px;
96
+ z-index: -1;
97
+ }
98
+
99
+ .center::before,
100
+ .center::after {
101
+ content: '';
102
+ left: 50%;
103
+ position: absolute;
104
+ filter: blur(45px);
105
+ transform: translateZ(0);
106
+ opacity: 0.3;
107
+ }
108
+
109
+ .logo {
110
+ position: relative;
111
+ }
112
+
113
+ /* Enable hover only on non-touch devices */
114
+ @media (hover: hover) and (pointer: fine) {
115
+ .card:hover {
116
+ background: rgba(var(--card-rgb), 0.1);
117
+ border: 1px solid rgba(var(--card-border-rgb), 0.15);
118
+ }
119
+
120
+ .card:hover span {
121
+ transform: translateX(4px);
122
+ }
123
+ }
124
+
125
+ @media (prefers-reduced-motion) {
126
+ .card:hover span {
127
+ transform: none;
128
+ }
129
+ }
130
+
131
+ /* Mobile */
132
+ @media (max-width: 700px) {
133
+ .content {
134
+ padding: 4rem;
135
+ }
136
+
137
+ .grid {
138
+ grid-template-columns: 1fr;
139
+ margin-bottom: 120px;
140
+ max-width: 320px;
141
+ text-align: center;
142
+ }
143
+
144
+ .card {
145
+ padding: 1rem 2.5rem;
146
+ }
147
+
148
+ .card h2 {
149
+ margin-bottom: 0.5rem;
150
+ }
151
+
152
+ .center {
153
+ padding: 8rem 0 6rem;
154
+ }
155
+
156
+ .center::before {
157
+ transform: none;
158
+ height: 300px;
159
+ }
160
+
161
+ .description {
162
+ font-size: 0.8rem;
163
+ }
164
+
165
+ .description a {
166
+ padding: 1rem;
167
+ }
168
+
169
+ .description p,
170
+ .description div {
171
+ display: flex;
172
+ justify-content: center;
173
+ width: 100%;
174
+ }
175
+
176
+ .description p {
177
+ align-items: center;
178
+ inset: 0 0 auto;
179
+ padding: 2rem 1rem 1.4rem;
180
+ border-radius: 0;
181
+ border: none;
182
+ border-bottom: 1px solid rgba(var(--callout-border-rgb), 0.25);
183
+ background: linear-gradient(to bottom,
184
+ rgba(var(--background-start-rgb), 1),
185
+ rgba(var(--callout-rgb), 0.5));
186
+ background-clip: padding-box;
187
+ backdrop-filter: blur(24px);
188
+ }
189
+
190
+ .description div {
191
+ align-items: flex-end;
192
+ pointer-events: none;
193
+ inset: auto 0 0;
194
+ padding: 2rem;
195
+ height: 200px;
196
+ background: linear-gradient(to bottom,
197
+ transparent 0%,
198
+ rgb(var(--background-end-rgb)) 40%);
199
+ z-index: 1;
200
+ }
201
+ }
202
+
203
+ /* Tablet and Smaller Desktop */
204
+ @media (min-width: 701px) and (max-width: 1120px) {
205
+ .grid {
206
+ grid-template-columns: repeat(2, 50%);
207
+ }
208
+ }
209
+
210
+ @media (prefers-color-scheme: dark) {
211
+ .vercelLogo {
212
+ filter: invert(1);
213
+ }
214
+
215
+ .logo {
216
+ filter: invert(1) drop-shadow(0 0 0.3rem #ffffff70);
217
+ }
218
+ }
219
+
220
+ @keyframes rotate {
221
+ from {
222
+ transform: rotate(360deg);
223
+ }
224
+
225
+ to {
226
+ transform: rotate(0deg);
227
+ }
228
+ }