yet-another-github-card 1.0.1 → 1.0.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 (71) hide show
  1. package/AUTHORS.md +3 -0
  2. package/CODE_OF_CONDUCT.md +3 -0
  3. package/CONTRIBUTING.md +5 -0
  4. package/LICENSE +21 -0
  5. package/README.md +4 -4
  6. package/SECURITY.md +13 -0
  7. package/css/theme-dark.css +10 -0
  8. package/css/theme-light.css +10 -0
  9. package/images/android-chrome-192x192.png +0 -0
  10. package/images/android-chrome-512x512.png +0 -0
  11. package/images/apple-touch-icon.png +0 -0
  12. package/images/blog.svg +4 -0
  13. package/images/commits.svg +44 -0
  14. package/images/contributions.svg +44 -0
  15. package/images/docs/favicon_io/android-chrome-192x192.png +0 -0
  16. package/images/docs/favicon_io/android-chrome-512x512.png +0 -0
  17. package/images/docs/favicon_io/apple-touch-icon.png +0 -0
  18. package/images/docs/favicon_io/favicon-16x16.png +0 -0
  19. package/images/docs/favicon_io/favicon-32x32.png +0 -0
  20. package/images/docs/favicon_io/favicon.ico +0 -0
  21. package/images/docs/favicon_io/site.webmanifest +1 -0
  22. package/images/docs/yagc-ico.png +0 -0
  23. package/images/docs/yagc-logo-square.png +0 -0
  24. package/images/docs/yagc-logo.png +0 -0
  25. package/images/docs/yagc-mkt.png +0 -0
  26. package/images/docs/yagc-showroom.kra +0 -0
  27. package/images/docs/yagc-showroom.png +0 -0
  28. package/images/docs/yagc-themes-style_cloud.png +0 -0
  29. package/images/docs/yagc-themes-style_default.png +0 -0
  30. package/images/docs/yagc-themes-style_polygon.png +0 -0
  31. package/images/favicon-16x16.png +0 -0
  32. package/images/favicon-32x32.png +0 -0
  33. package/images/favicon.ico +0 -0
  34. package/images/favicon_io/android-chrome-192x192.png +0 -0
  35. package/images/favicon_io/android-chrome-512x512.png +0 -0
  36. package/images/favicon_io/apple-touch-icon.png +0 -0
  37. package/images/favicon_io/favicon-16x16.png +0 -0
  38. package/images/favicon_io/favicon-32x32.png +0 -0
  39. package/images/favicon_io/favicon.ico +0 -0
  40. package/images/favicon_io/site.webmanifest +1 -0
  41. package/images/followers.svg +3 -0
  42. package/images/following.svg +40 -0
  43. package/images/generic.svg +4 -0
  44. package/images/gists.svg +38 -0
  45. package/images/github-logo.png +0 -0
  46. package/images/helm.svg +2 -0
  47. package/images/info-logo.svg +1 -0
  48. package/images/instagram.svg +54 -0
  49. package/images/linkedin.svg +3 -0
  50. package/images/npmjs.svg +44 -0
  51. package/images/nuget.svg +4 -0
  52. package/images/prs.svg +44 -0
  53. package/images/repositories.svg +38 -0
  54. package/images/rubygems.svg +4 -0
  55. package/images/site.webmanifest +1 -0
  56. package/images/sourceforge.svg +4 -0
  57. package/images/sponsor.svg +3 -0
  58. package/images/twitter.svg +3 -0
  59. package/images/yagc-ico.png +0 -0
  60. package/images/yagc-logo-square.png +0 -0
  61. package/images/yagc-logo.png +0 -0
  62. package/images/yagc-mkt.png +0 -0
  63. package/images/yagc-showroom.kra +0 -0
  64. package/images/yagc-showroom.png +0 -0
  65. package/images/yagc-themes-style_cloud.png +0 -0
  66. package/images/yagc-themes-style_default.png +0 -0
  67. package/images/yagc-themes-style_polygon.png +0 -0
  68. package/images/yarnpkg.svg +2 -0
  69. package/package.json +22 -4
  70. package/yagc.js +867 -0
  71. package/yagc.min.js +1 -0
package/yagc.js ADDED
@@ -0,0 +1,867 @@
1
+ import 'https://cdn.skypack.dev/graphql@15.8.0';
2
+ import 'https://cdn.skypack.dev/graphql-request@6.0.0';
3
+
4
+ // src/constants.ts
5
+
6
+ /**
7
+ * The base URL for the GraphQL API.
8
+ * @constant
9
+ */
10
+ const API_GQL_URL = 'https://yagc-api.notesoncloudcomputing.com/api/stats';
11
+
12
+ /**
13
+ * The base URL for the npm package.
14
+ * @constant
15
+ */
16
+ const NPM_URL = 'https://www.npmjs.com/package/yet-another-github-card';
17
+
18
+ /**
19
+ * The npm package name.
20
+ * @constant
21
+ */
22
+ const NPM_PKG = 'yet-another-github-card';
23
+
24
+ /**
25
+ * The npm package version.
26
+ * @constant
27
+ */
28
+ const NPM_VER = 'v1.0';
29
+
30
+ /**
31
+ * The default user profile data.
32
+ * @constant
33
+ */
34
+ const GH_DEF_COLLECTION = [{name: 'name'}, {name: 'bio'}, {name: 'createdAt'}, {name: 'location'}];
35
+
36
+ /**
37
+ * Theme Polygon style CSS Background-image code.
38
+ * @constant
39
+ */
40
+ const polygon = `
41
+ background-image: url("data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB3aWR0aD0iMTMwMCIgaGVpZ2h0PSIzMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGNpcmNsZSBjeD0iLTEyLjc3NCIgY3k9IjU4NS43MzMiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ibWF0cml4KC0uOTAyNzggMCAwIC0xIDAgNTYwKSIgcj0iNC4xNzQiIG1hc2s9InVybCgjYSkiLz48Y2lyY2xlIGN4PSItMTIuNzc0IiBjeT0iNTg1LjczMyIgZmlsbD0iIzhiOWFkOSIgdHJhbnNmb3JtPSJtYXRyaXgoLS45MDI3OCAwIDAgLTEgMCA1NjApIiByPSI0LjE3NCIgbWFzaz0idXJsKCNiKSIvPjxwYXRoIGZpbGw9IiMwZDIwNDUiIGQ9Ik0tLjAwMyAyOTkuOTc1aDEzMDB2LTMwMGgtMTMwMHoiLz48cGF0aCBkPSJtMTA0MC4zODggNDcuNTI4LTkyLjE1MyA0Ni44MThtOTIuMTUzLTQ2LjgxOEwxMDEwLjQzNi02Ni42M000NjcuMzkyIDg3LjM1bDI5LjI1IDk1LjY3M20tMjkuMjUtOTUuNjczIDk4LjU0NC0zMS45MTZNNDY3LjM5MiA4Ny4zNWwtMy4yMS0xMTYuNzAzbTMuMjEgMTE2LjcwM0wzNTYuMzMgNDcuMzI3TTQ2Ny4zOTIgODcuMzUgMzY4LjE0LTMxLjg0MW0tMTAuNzEgMzUxLjg1NEwzMzcuNDY1IDE3MS43Mm0xOS45NjUgMTQ4LjI5NC0xMzAuNjg5LTE0NS40M20xMDU2Ljc2Mi05OS40MDUtMTIuOTI1LTEwOC45MjNtMTIuOTI1IDEwOC45MjMtMTIzLjYyNi0xNDQuNzNtMTEwLjcgMzUuODA3LTExMC43LTM1LjgwNm0xMTAuNyAzNS44MDYtMjMwLjE5IDgxLjI3M20yMzAuMTktODEuMjczLTI2MC4xNC0zMi44ODRtMjYwLjE0IDMyLjg4NEw5MzIuNzAyLTY2LjM4N20zMzcuODc3IDMyLjY0Mkw5NDguMjM1IDk0LjM0NU0xMTU5Ljg3Ny02OS41NWwtMTQ5LjQ0IDIuOTIybTAgMC03Ny43MzYuMjQybTc3LjczNS0uMjQyTDk0OC4yMzUgOTQuMzQ2bTYyLjIwMS0xNjAuOTc1TDgwNy4wMzItMzcuMjE4bTIwMy40MDQtMjkuNDExTDgwMi43OTYgNDcuNDUzbTE0NS40MzkgNDYuODkzTDkzMi43LTY2LjM4N20wIDAtMTI1LjY2OSAyOS4xN20xMjUuNjctMjkuMTcgMTA3LjY4NiAxMTMuOTE1TTkzMi43LTY2LjM4NyA4MDIuNzk2IDQ3LjQ1M20xMjkuOTA1LTExMy44NCAyMjcuMTc2LTMuMTY0TTgwMi43OTcgNDcuNDUzbDQuMjM1LTg0LjY3bS00LjIzNiA4NC42Ny05My4xNyAzNy4zNW05My4xNy0zNy4zNUw2OTIuMTE4LTQwLjExNW0xMTAuNjc4IDg3LjU2NyAxNDUuNDM5IDQ2Ljg5NE04MDcuMDMyLTM3LjIxOGwtMTE0LjkxNC0yLjg5N20tMTAuMSAyMzkuMDM0IDI3LjYwOC0xMTQuMTE1TTY4Mi4wMiAxOTguOTE5bC0xMDYuMDc0IDI2LjkwN20xMDYuMDc0LTI2LjkwN0w1NjUuOTM2IDU1LjQzNE02ODIuMDIgMTk4LjkxOSA4MDIuNzk2IDQ3LjQ1Mk02ODIuMDIgMTk4LjkybC0xODUuMzc2LTE1Ljg5Nm0xODUuMzc2IDE1Ljg5NiAxMC4wOTktMjM5LjAzNG0wIDAgMTcuNTA4IDEyNC45MTlNNjkyLjExOC00MC4xMTVsLTEzMC45NDUtMjEuNzhtMTMwLjk0NSAyMS43OEw1NjUuOTM2IDU1LjQzNG0xMC4wMSAxNzAuMzkyLTc5LjMwMy00Mi44MDNtNzkuMzAyIDQyLjgwM0w1NjUuOTM2IDU1LjQzNG0xMC4wMSAxNzAuMzkyTDQ2Ny4zOTEgODcuMzVtOTguNTQ0LTMxLjkxNi00Ljc2My0xMTcuMzNtMCAwLTk2Ljk5MSAzMi41NDNtOTYuOTkxLTMyLjU0M0w0NjcuMzkzIDg3LjM1bTkzLjc4LTE0OS4yNDZMMzY4LjE0LTMxLjg0bTE5My4wMzMtMzAuMDU1IDE0OC40NTMgMTQ2LjdtLTIxMi45ODMgOTguMjIgNjkuMjkzLTEyNy41OW0tNjkuMjkzIDEyNy41OS0xNTkuMTc4LTExLjMwNU00NjQuMTgyLTI5LjM1M2wtOTYuMDQyLTIuNDg4bTk2LjA0MiAyLjQ4OCAxMDEuNzU0IDg0Ljc4N00zMzcuNDY1IDE3MS43MTlsLTExMC43MjQgMi44NjRtMTEwLjcyNC0yLjg2NEwzNTYuMzMgNDcuMzI3bTAgMCAxMS44MS03OS4xNjhtLTExLjgxIDc5LjE2OEwyNjUuMDU5IDY1LjAxbTkxLjI3LTE3LjY4MiAxMDcuODUzLTc2LjY4TTM1Ni4zMyA0Ny4zMjcgMjM1LjkyOS03MC4zOTRtMTMyLjIxIDM4LjU1My0xMDMuMDggOTYuODVNMjI2Ljc0IDE3NC41ODNsLTc5LjMxNyAzMC4wNTRtNzkuMzE3LTMwLjA1NEwyNjUuMDYgNjUuMDA5bS0yOS4xMy0xMzUuNDA0LTkyLjEyMyAzOC4wMDNtOTIuMTIzLTM4LjAwMiAyOS4xMyAxMzUuNDAzbS0yOS4xMy0xMzUuNDA0IDEzMi4yMSAzOC41NTRNMTQ3LjQyNSAyMDQuNjM3bC0xLjY2Ni0xNDMuMzAxbTAgMC0xLjk1Mi05My43MjhtMS45NTIgOTMuNzI4IDExOS4zIDMuNjczTTg2LjY5MiAxNzguOTIybDU5LjA2Ny0xMTcuNTg2IiBzdHJva2U9IiMxMDI1N2QiIHN0cm9rZS13aWR0aD0iMS4xOSIgY2xpcC1wYXRoPSJ1cmwoI2MpIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNjcuOTcgLjAwOSkiLz48cGF0aCBkPSJtMTA0MC4zODggNDcuNTI4LTkyLjE1MyA0Ni44MThtOTIuMTUzLTQ2LjgxOEwxMDEwLjQzNi02Ni42M000NjcuMzkyIDg3LjM1bDI5LjI1IDk1LjY3M20tMjkuMjUtOTUuNjczIDk4LjU0NC0zMS45MTZNNDY3LjM5MiA4Ny4zNWwtMy4yMS0xMTYuNzAzbTMuMjEgMTE2LjcwM0wzNTYuMzMgNDcuMzI3TTQ2Ny4zOTIgODcuMzUgMzY4LjE0LTMxLjg0MW0tMTAuNzEgMzUxLjg1NEwzMzcuNDY1IDE3MS43Mm0xOS45NjUgMTQ4LjI5NC0xMzAuNjg5LTE0NS40M00yMi44NTUgMzUzLjUyNGwtMy40LTE3NC41MzNtMy40IDE3NC41MzMgMTI0LjU2OS0xNDguODg3bTExMzYuMDgtMTI5LjQ2LTEyLjkyNi0xMDguOTIybTEyLjkyNSAxMDguOTIzLTEyMy42MjYtMTQ0LjczbTExMC43IDM1LjgwNy0xMTAuNy0zNS44MDZtMTEwLjcgMzUuODA2LTIzMC4xOSA4MS4yNzNtMjMwLjE5LTgxLjI3My0yNjAuMTQtMzIuODg0bTI2MC4xNCAzMi44ODRMOTMyLjcwMi02Ni4zODdtMzM3Ljg3NyAzMi42NDJMOTQ4LjIzNSA5NC4zNDVNMTE1OS44NzctNjkuNTVsLTE0OS40NCAyLjkyMm0wIDAtNzcuNzM2LjI0Mm03Ny43MzUtLjI0Mkw5NDguMjM1IDk0LjM0Nm02Mi4yMDEtMTYwLjk3NUw4MDcuMDMyLTM3LjIxOG0yMDMuNDA0LTI5LjQxMUw4MDIuNzk2IDQ3LjQ1M20xNDUuNDM5IDQ2Ljg5M0w5MzIuNy02Ni4zODdtMCAwLTEyNS42NjkgMjkuMTdtMTI1LjY3LTI5LjE3IDEwNy42ODYgMTEzLjkxNU05MzIuNy02Ni4zODcgODAyLjc5NiA0Ny40NTNtMTI5LjkwNS0xMTMuODQgMjI3LjE3Ni0zLjE2NE04MDIuNzk3IDQ3LjQ1M2w0LjIzNS04NC42N20tNC4yMzYgODQuNjctOTMuMTcgMzcuMzVtOTMuMTctMzcuMzVMNjkyLjExOC00MC4xMTVtMTEwLjY3OCA4Ny41NjcgMTQ1LjQzOSA0Ni44OTRNODA3LjAzMi0zNy4yMThsLTExNC45MTQtMi44OTdtLTEwLjEgMjM5LjAzNCAyNy42MDgtMTE0LjExNU02ODIuMDIgMTk4LjkxOWwtMTA2LjA3NCAyNi45MDdtMTA2LjA3NC0yNi45MDdMNTY1LjkzNiA1NS40MzRNNjgyLjAyIDE5OC45MTkgODAyLjc5NiA0Ny40NTJNNjgyLjAyIDE5OC45MmwtMTg1LjM3Ni0xNS44OTZtMTg1LjM3NiAxNS44OTYgMTAuMDk5LTIzOS4wMzRtMCAwIDE3LjUwOCAxMjQuOTE5TTY5Mi4xMTgtNDAuMTE1bC0xMzAuOTQ1LTIxLjc4bTEzMC45NDUgMjEuNzhMNTY1LjkzNiA1NS40MzRtMTAuMDEgMTcwLjM5Mi03OS4zMDMtNDIuODAzbTc5LjMwMiA0Mi44MDNMNTY1LjkzNiA1NS40MzRtMTAuMDEgMTcwLjM5Mkw0NjcuMzkxIDg3LjM1bTk4LjU0NC0zMS45MTYtNC43NjMtMTE3LjMzbTAgMC05Ni45OTEgMzIuNTQzbTk2Ljk5MS0zMi41NDNMNDY3LjM5MyA4Ny4zNW05My43OC0xNDkuMjQ2TDM2OC4xNC0zMS44NG0xOTMuMDMzLTMwLjA1NSAxNDguNDUzIDE0Ni43bS0yMTIuOTgzIDk4LjIyIDY5LjI5My0xMjcuNTltLTY5LjI5MyAxMjcuNTktMTU5LjE3OC0xMS4zMDVNNDY0LjE4Mi0yOS4zNTNsLTk2LjA0Mi0yLjQ4OG05Ni4wNDIgMi40ODggMTAxLjc1NCA4NC43ODdNMzM3LjQ2NSAxNzEuNzE5bC0xMTAuNzI0IDIuODY0bTExMC43MjQtMi44NjRMMzU2LjMzIDQ3LjMyN20wIDAgMTEuODEtNzkuMTY4bS0xMS44MSA3OS4xNjhMMjY1LjA1OSA2NS4wMW05MS4yNy0xNy42ODIgMTA3Ljg1My03Ni42OE0zNTYuMzMgNDcuMzI3IDIzNS45MjktNzAuMzk0bTEzMi4yMSAzOC41NTMtMTAzLjA4IDk2Ljg1TTIyNi43NCAxNzQuNTgzbC03OS4zMTcgMzAuMDU0bTc5LjMxNy0zMC4wNTRMMjY1LjA2IDY1LjAwOW0tMjkuMTMtMTM1LjQwNC05Mi4xMjMgMzguMDAzbTkyLjEyMy0zOC4wMDIgMjkuMTMgMTM1LjQwM20tMjkuMTMtMTM1LjQwNCAxMzIuMjEgMzguNTU0TTE0Ny40MjUgMjA0LjYzN2wtMS42NjYtMTQzLjMwMW0wIDAtMS45NTItOTMuNzI4bTEuOTUyIDkzLjcyOCAxMTkuMyAzLjY3M00xOS40NTcgMTc4Ljk5MWwyLjg1Ni0xMTIuNDA0bS0yLjg1NiAxMTIuNDA0IDEyNy45NjggMjUuNjQ2TTE5LjQ1NiAxNzguOTkxIDE0NS43NTggNjEuMzM2TTE5LjQ1NiAxNzguOTkxIDExLjU2NS0yNC41MDNtMTAuNzQ3IDkxLjA5LTEwLjc0Ny05MS4wOW0wIDAgMTMyLjI0MS03Ljg5IiBzdHJva2U9IiMyMzQ4ZTMiIHN0cm9rZS13aWR0aD0iMS4xOSIgY2xpcC1wYXRoPSJ1cmwoI2QpIi8+PGVsbGlwc2UgY3g9Ii0xMjgzLjQ3OSIgY3k9Ii03NS43IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTk0OC4yMSIgY3k9Ii05NC44NjgiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMTAzOS45NjIiIGN5PSItNDYuOTk3IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTgwMi43NzIiIGN5PSItNDcuOTc0IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTY4MS45OTUiIGN5PSItMTk5LjQ0MSIgZmlsbD0iIzhiOWFkOSIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii03MDkuNjAyIiBjeT0iLTg1LjMyNSIgZmlsbD0iIzhiOWFkOSIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii01NzUuOTIxIiBjeT0iLTIyNi4zNDgiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNTY1LjkxMiIgY3k9Ii01NS45NTYiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNDk2LjYxOSIgY3k9Ii0xODMuNTQ1IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTMzNy40NDEiIGN5PSItMTcyLjI0MSIgZmlsbD0iIzhiOWFkOSIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii00NjYuOTQ2IiBjeT0iODYuMzE5IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMzU2LjMwNiIgY3k9Ii00Ny44NDkiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMjI2LjcxNyIgY3k9Ii0xNzUuMTA1IiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTI2NS4wMzUiIGN5PSItNjUuNTMxIiBmaWxsPSIjOGI5YWQ5IiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTE0Ny40IiBjeT0iLTIwNS4xNTkiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMTQ1LjczNCIgY3k9Ii02MS44NTgiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMTkuNDMyIiBjeT0iLTE3OS41MTMiIGZpbGw9IiM4YjlhZDkiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMjIuMjg4IiBjeT0iLTY3LjEwOSIgZmlsbD0iIzhiOWFkOSIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii0xMjE1LjU3NiIgY3k9Ii03NC44NzUiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItODgwLjMwOCIgY3k9Ii05NC4wNDMiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItOTcyLjA2IiBjeT0iLTQ2LjE3MyIgZmlsbD0iIzY4NjJjYiIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii03MzQuODciIGN5PSItNDcuMTUiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNjE0LjA5MiIgY3k9Ii0xOTguNjE2IiBmaWxsPSIjNjg2MmNiIiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTY0MS43IiBjeT0iLTg0LjUwMSIgZmlsbD0iIzY4NjJjYiIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii01MDguMDE5IiBjeT0iLTIyNS41MjQiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNDk4LjAxIiBjeT0iLTU1LjEzMSIgZmlsbD0iIzY4NjJjYiIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii00MjguNzE2IiBjeT0iLTE4Mi43MjEiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMjY5LjUzOCIgY3k9Ii0xNzEuNDE3IiBmaWxsPSIjNjg2MmNiIiB0cmFuc2Zvcm09InNjYWxlKC0xKSIgcng9IjMuNzY4IiByeT0iNC4xNzQiLz48ZWxsaXBzZSBjeD0iLTM5OS4wNDQiIGN5PSI4NS40OTUiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEgMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii0yODguNDAzIiBjeT0iLTQ3LjAyNSIgZmlsbD0iIzY4NjJjYiIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGVsbGlwc2UgY3g9Ii0xNTguODE1IiBjeT0iLTE3NC4yODEiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItMTk3LjEzMiIgY3k9Ii02NC43MDciIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNzkuNDk3IiBjeT0iLTIwNC4zMzUiIGZpbGw9IiM2ODYyY2IiIHRyYW5zZm9ybT0ic2NhbGUoLTEpIiByeD0iMy43NjgiIHJ5PSI0LjE3NCIvPjxlbGxpcHNlIGN4PSItNzcuODMxIiBjeT0iLTYxLjAzNCIgZmlsbD0iIzY4NjJjYiIgdHJhbnNmb3JtPSJzY2FsZSgtMSkiIHJ4PSIzLjc2OCIgcnk9IjQuMTc0Ii8+PGRlZnM+PG1hc2sgaWQ9ImYiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTQ0MHY1NjBIMFoiLz48L21hc2s+PG1hc2sgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImEiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDU2MGgxMzAwLjAwM1YwSDBaIiBzdHJva2Utd2lkdGg9Ii45NSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEuMTA3NjkgMCAwIC0xIDAgNTYwKSIvPjwvbWFzaz48bWFzayBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iYiI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgNTYwaDEzMDAuMDAzVjBIMFoiIHN0cm9rZS13aWR0aD0iLjk1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMS4xMDc2OSAwIDAgLTEgMCA1NjApIi8+PC9tYXNrPjxjbGlwUGF0aCBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgaWQ9ImQiPjxwYXRoIGZpbGw9IiNmZjAiIHN0cm9rZS13aWR0aD0iNC4xNyIgZD0iTS4wMDQtLjAwOWgxMzAwdjMwMEguMDA0eiIvPjwvY2xpcFBhdGg+PGNsaXBQYXRoIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBpZD0iYyI+PHBhdGggZmlsbD0iI2ZmMCIgc3Ryb2tlLXdpZHRoPSI0LjE3IiBkPSJNLjAwNC0uMDA5aDEzMDB2MzAwSC4wMDR6Ii8+PC9jbGlwUGF0aD48cmFkaWFsR3JhZGllbnQgaWQ9ImUiPjxzdG9wIHN0b3AtY29sb3I9IiNmZmYiIG9mZnNldD0iLjEiLz48c3RvcCBzdG9wLWNvbG9yPSIjMTczNWIzIiBvZmZzZXQ9Ii4yIi8+PHN0b3Agc3RvcC1jb2xvcj0icmdiYSgyMywgNTMsIDE3OSwgMCkiIG9mZnNldD0iMSIvPjwvcmFkaWFsR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==")
42
+ `;
43
+
44
+ /**
45
+ * Theme Cloud style CSS Background-image code.
46
+ * @constant
47
+ */
48
+ const cloud = `
49
+ background-image: url("data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB3aWR0aD0iMTMwMC4wMDMiIGhlaWdodD0iMzAwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGZpbGw9IiMxZTMyNjYiIGQ9Ik0wIDIwNC4wODVoMTMwMC4wMDNWLTJIMFoiLz48cGF0aCBkPSJNNjE0LjE5MyA0NS4zMDNjLTE2LjEyLS41Ni0zMy4zNjQgNS4zNzUtNTEuNzMyIDE3LjgwNC02NS4yNC02LjU1NC0xMDEuMzUzIDIwLjgxOC0xMDguMzM0IDgyLjExOC0yLjU5NC0zOC4yNzktMjQuMjYtNTYuMi02NS01My43NjItNDAuOTI2LTI5LjQwNS03Ny4wMzgtMjQuODgxLTEwOC4zMzQgMTMuNTcyLTIyLjg3LTQ2LjM3LTU4Ljk4Mi01OC44MTEtMTA4LjMzNC0zNy4zMjItNDQuNjEtMjUuOTQ1LTgwLjcyMS0xNy45NTktMTA4LjMzNCAyMy45NTUtMzYuMjA3LTYuNjk1LTU3Ljg3NCA2Ljk2Ni02NSA0MC45ODZ2MTYxLjkxbDIuMTY2LTcuNDNjMjMuMjc0LTE4Ljg0MiA0NC45NC0xNy4zMyA2NSA0LjUzOCA3LjU0MS0zMy42MyAyOS4yMDgtNDYuOTAyIDY1LTM5LjgxNyAyNy42NS0xNC43MzYgNDkuMzE2LTkuMTE1IDY1IDE2Ljg2NCAyNC40OS00NC44NSA2MC42MDEtNTUuNzcyIDEwOC4zMzQtMzIuNzY4IDQzLjctMjYuNzk4IDc5LjgxMi0xOS42NyAxMDguMzM0IDIxLjM4NSA0My41ODYtMjYuOSA3OS42OTYtMTkuODc0IDEwOC4zMzIgMjEuMDc4IDkuOTI1LTMxLjM5NiAzMS41OTEtNDIuNDMyIDY1LTMzLjEwNyAxNC41ODktMjcuMDA4IDM2LjI1OC0zMy42NTggNjUuMDAyLTE5Ljk1IDM0LjkwMS03LjkyMyA1Ni41NjggNC41MTIgNjUgMzcuMzA1IDQ0LjkwNC0yNS42NjcgODEuMDE0LTE3LjQwNiAxMDguMzMyIDI0Ljc4NSAyNS45NTgtMTYuMzI2IDQ3LjYyNi0xMi4yOTIgNjUuMDAyIDEyLjA5OCA1LjQ0LTM1LjYwMyAyNy4xMDctNTAuODUgNjUtNDUuNzM4IDEzLjk2My0yNy41OSAzNS42My0zNC44MjcgNjUtMjEuNzA3IDMzLjAzLTkuNjgxIDU0LjY5Ni45OTIgNjUgMzIuMDIxIDQ1LjgwNy0yNC44MiA4MS45MTktMTUuNzExIDEwOC4zMzQgMjcuMzIyIDE1LjE3NC01Mi45NjggNTAuODIyLTcyLjUyNyAxMDYuODEyLTU4Ljg5NlYxMDMuNzAzYy0uMjIzLjA2My0uNDIuMDgtLjY0NC4xNDUtMTcuMDItMjQuNzE4LTM4LjY4Ny0yOS4wOC02NS0xMy4wODgtNDUuOTIxLTI0LjcxOC04Mi4wMzMtMTUuNTAzLTEwOC4zMzQgMjcuNjQ0LTIwLjk0NS00OC4xODUtNTcuMDU2LTYyLjQzOS0xMDguMzM0LTQyLjc2LTQ3LjEwNy0yMy41OTctODMuMjE5LTEzLjI2Ni0xMDguMzM0IDMwLjk5NS0xOC40MS0yMy40MTctNDAuMDc3LTI2LjQ3Ni02NS05LjE3OC0zNC4zNzgtOC40MTUtNTYuMDQ0IDMuNTMtNjUgMzUuODMtMTcuMDg3LTUxLjc5OS01My4xOTgtNjkuNjcxLTEwOC4zMzQtNTMuNjE3LTE3LjAwOC0yMi4xOTMtMzUuODc0LTMzLjY1MS01Ni42LTM0LjM3MVoiIGZpbGw9IiMxODJmNWQiLz48cGF0aCBkPSJNNTQ2LjUxNiAxMjAuNTM3Yy04LjUxNC40NDYtMTcuNjExIDMuNzU1LTI3LjI5MSA5LjkyNi0yOS44NjQtMTIuNjUtNTEuNTMtNC45NDYtNjUgMjMuMTEzLTE3LjI0My0yNC41MDgtMzguOTEtMjguNjYyLTY1LTEyLjQ2LTUyLjYwOC0xOC40My04OC43Mi0yLjkyOC0xMDguMzM0IDQ2LjUwMS00MC41OTUtMjkuNzE3LTc2LjcwNy0yNS41MDYtMTA4LjMzNCAxMi42MzctMjIuODc3LTQ2LjM1OS01OC45ODgtNTguNzktMTA4LjMzNC0zNy4yOTUtMTcuNjQtMjQuMTQ3LTM5LjMwNy0yNy45MzQtNjUtMTEuMzZ2MTQyLjIxNUwxLjIgMjg3LjAzYzIzLjI3NC0xOC44NDIgNDQuOTQtMTcuMzI4IDY1IDQuNTQgNy41NDEtMzMuNjMgMjkuMjA4LTQ2LjkwMyA2NS0zOS44MTcgMjcuNjUtMTQuNzM3IDQ5LjMxNi05LjExNSA2NSAxNi44NjMgMjQuNDktNDQuODQ5IDYwLjYwMS01NS43NzEgMTA4LjMzNC0zMi43NjcgNDMuNy0yNi43OTkgNzkuODEtMTkuNjcyIDEwOC4zMzIgMjEuMzgyIDQzLjU4Ni0yNi45IDc5LjY5OC0xOS44NzIgMTA4LjMzNCAyMS4wOCA5LjkyNS0zMS4zOTYgMzEuNTkxLTQyLjQzMiA2NS0zMy4xMDcgMTQuNTktMjcuMDA4IDM2LjI1Ni0zMy42NTcgNjUtMTkuOTUgMzQuOTAyLTcuOTIyIDU2LjU2OCA0LjUxMyA2NSAzNy4zMDYgNDQuOTA0LTI1LjY2OCA4MS4wMTYtMTcuNDA3IDEwOC4zMzQgMjQuNzg1IDI1Ljk1OC0xNi4zMjYgNDcuNjI1LTEyLjI5NSA2NSAxMi4wOTUgNS40NC0zNS42MDMgMjcuMTA4LTUwLjg0OCA2NS00NS43MzYgMTMuOTYzLTI3LjU5IDM1LjYzLTM0LjgyNiA2NS0yMS43MDcgMzMuMDMtOS42OCA1NC42OTguOTkzIDY1LjAwMiAzMi4wMjIgNDUuODA3LTI0LjgyIDgxLjkxNy0xNS43MTQgMTA4LjMzMiAyNy4zMiAxNS4yMDItNTMuMDY0IDUwLjkxMS03Mi42NjYgMTA3LjA3Ni01OC44OXYtNTIuNjljLS4yNDUuMTM3LS40NzMuMjExLS43MTguMzUxLTIyLjE5LTQ3LjAwOS01OC4zMDMtNjAuMDg1LTEwOC4zMzQtMzkuMjMtNTUuMTA2LTE2LjA4My05MS4yMTggMS43Ni0xMDguMzM0IDUzLjUzMS0xNC4yMjItMjcuMzQ3LTM1Ljg4OS0zNC4zNC02NS0yMC45NzYtMjEuMjM0LTQ3LjkwMy01Ny4zNDUtNjEuODc5LTEwOC4zMzQtNDEuOTI4LTI5LjM2NS0xMy4xMi01MS4wMzEtNS44ODUtNjUgMjEuNzA1LTE4LjU2Mi0yMy4yNzYtNDAuMjI4LTI2LjE5NC02NS04Ljc1NC00MC4yMDQtMi45MzUtNjEuODcgMTQuNDg3LTY1IDUyLjI2Mi0xMy4wMTItMjguNDktMzQuNjgtMzYuNjItNjUtMjQuMzg5LTEwLjk2Ni0zMC40MTItMzIuNjMzLTQwLjQ2Ny02NS0zMC4xNy0xMC45NS0xNS4xNTgtMjMuNTItMjIuMzY2LTM3LjcxLTIxLjYyM3oiIGZpbGw9IiMyNTQ2N2QiLz48cGF0aCBkPSJNMTA1Ny4zMTIgMTcyLjczNGMtMjQuMTQ2LjYyNC00NC4zNSAxNC41MDEtNjAuNjExIDQxLjYzLTI5LjUzMy00MC4xMS02NS42NDUtNDYuMjkzLTEwOC4zMzQtMTguNTUtMzQuMzEyLTguNDc2LTU1Ljk3OSAzLjQwNi02NSAzNS42NS0yNy41MjMtMTQuODU1LTQ5LjE5LTkuMzUyLTY1IDE2LjUwOC0yMC41MzUtNDguNTY0LTU2LjY0Ny02My4yMDMtMTA4LjMzNC00My45MTQtMjUuNTU1LTE2LjcwNC00Ny4yMjItMTMuMDUyLTY1IDEwLjk2LTI3LjQ5My0xNC44OS00OS4xNi05LjQxOS02NSAxNi40MTMtNDQuMjc2LTIxLjM4My04MS43OC0xMC4xODMtMTA2LjA4NCAyNi44OTIgNDEuNTY2LTIzLjY4MiA4MC43MzQtMTguMTc1IDEwOC4zNzMgMjEuMzUxIDkuOTI1LTMxLjM5NiAzMi4wMjQtNDIuNjIzIDY1LjQzMy0zMy4yOTggMTQuNTg5LTI3LjAwOCAzNS42NzktMzMuMTkgNjQuNDIzLTE5LjQ4MiAzNC45MDItNy45MjMgNTYuMjYgNC41MjQgNjQuNjkxIDM3LjMxNyA0NC45MDUtMjUuNjY4IDgxLjIwNC0xNy45NyAxMDguNTIyIDI0LjIyMiAyNS45NTgtMTYuMzI2IDQ3Ljc3LTEyLjIxNiA2NS4xNDYgMTIuMTc0IDUuNDQtMzUuNjAzIDI3LjA5My01MC4zNzIgNjQuOTg2LTQ1LjI2IDEzLjk2My0yNy41OSAzNS44MjYtMzQuODAzIDY1LjE5Ny0yMS42ODQgMzMuMDMtOS42ODEgNTQuNTM5LjM0NiA2NC44NDMgMzEuMzc0IDQ1LjgwNy0yNC44MiA4MS45NDYtMTUuMzkgMTA4LjM2MiAyNy42NDMgMTIuOTEtNDUuMDY3IDQwLjU4LTY2LjE1NCA4My4wMzctNjMuMDEtMjYuMTc3LTM5Ljg4NS02Mi40MzYtNDguNjktMTA2LjkyNy0yNC42MS0xNC44NzgtMjYuNzM2LTM2LjU0NS0zMy4xMTUtNjUtMTkuMTM3LTE3LjMyNy05LjE2Ny0zMy4yMzUtMTMuNTY0LTQ3LjcyMy0xMy4xOXptLTkyMC42OCA0LjQyYy04LjY0NC0uMDQ0LTE4LjA2NiAyLjc3NC0yOC4yNjcgOC40NTVDNDYuOTY0IDE3NS40NDIgMTAuODUyIDE5OS4yMDQuMDMgMjU2Ljg5NmwuNDI1IDM3LjE4Mi44OTgtLjc3M2MyNy4xNjUtMTcuMDYzIDQ1Ljg1LTIxLjk2NCA2NS45MS0uMDk2IDcuNTQyLTMzLjYzIDI5LjMxMi00Ny4yNTIgNjUuMTA0LTQwLjE2NiAyNy42NS0xNC43MzcgNDkuNDY1LTguOTgxIDY1LjE1IDE2Ljk5NyAyMi45MDYtNDEuOTUgNTQuNzczLTU0Ljc1MiA5OC4wMTUtMzcuMzM3LTExLjA1Mi0xOC4yNzUtMzAuMDUtMjQuNjA0LTU3LjE2OC0xOC43MjktMTcuMTQ3LTI0LjYxLTM4LjgxNC0yOC44Ni02NS0xMi43NS0xMC4wODEtMTUuOTc1LTIyLjMyNi0yMy45OTctMzYuNzMzLTI0LjA3em0xMTY0LjM0IDM3LjA1NmMtNy4wODkgMi44MjUtMTQuMTQgOC4xNDYtMjAuMzY3IDE1LjY0IDYuMzYuNzM0IDEzLjM3OSAyLjM0NiAyMC4zNjcgNC4xMDV6IiBmaWxsPSIjMzU2Y2IxIi8+PC9zdmc+")
50
+ `;
51
+
52
+ /**
53
+ * Default theme Circuit style CSS Background-image code.
54
+ * @constant
55
+ */
56
+ const defaultTheme = `
57
+ background-image: url("data:image/svg+xml;base64,PHN2ZyBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIiB3aWR0aD0iMTMwMCIgaGVpZ2h0PSIzMDAiIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxkZWZzPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJtIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJsIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJrIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJqIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJpIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJoIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJnIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJmIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJlIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJkIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJjIj48ZyB0cmFuc2Zvcm09Im1hdHJpeCguNzcyMyAwIDAgLjg3MjkyIDAgNTkuOTUyKSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjxtYXNrIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIGlkPSJiIj48ZyB0cmFuc2Zvcm09InNjYWxlKDEgLjk4MjA0KSI+PHBhdGggZD0iTS0xLjAwMy0xLjA3OGgxMzAydjQxMy4xMjdoLTEzMDJaIiBmaWxsPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMDA5Ii8+PHVzZSB4bGluazpocmVmPSIjYSIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiLz48L2c+PC9tYXNrPjwvZGVmcz48ZGVmcz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMCAwaDE0NDB2NTYwSDBaIiBpZD0iYSIvPjwvZGVmcz48cGF0aCBtYXNrPSJ1cmwoI2IpIiBkPSJNLS4wMDQtLjA2djI5NC42MTNoNTY0Ljc2NnYtMi4wMDRsMTAuOTY4LTEwLjc3MmgzMDUuMTk4bDMwLjk4OC0zMC40MzNoMTQ4LjQ1M2wyMy4zMi0zOS42NjdzMTYwLjU1OSAxLjMwNyAyMTYuMzA3LjcwOFYtLjA2aC0xMzAweiIgdHJhbnNmb3JtPSJzY2FsZSgxIDEuMDE4MykiIGZpbGw9IiM1MDE2MTYiLz48cGF0aCBkPSJNLTEyLjUgMjg3LjVoNDAwIiBzdHJva2U9IiMzYTdjYzMiIHN0cm9rZS13aWR0aD0iNC4xNyIgdHJhbnNmb3JtPSJtYXRyaXgoMS4yOTQ4MyAwIDAgMS4xNDU1OCAwIC02OC42OCkiIG1hc2s9InVybCgjYykiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNMzgxLjI1IDI4Ny41YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHoiIGZpbGw9IiMzYTdjYzMiIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2QpIi8+PHBhdGggZD0ibTY5NC4wODcgMjUwLjMxMiAzMC41MS0yOC4zODFNNDMxLjI4IDI2Mi40NjJsMjkuNTkzLTI0LjkyNGg4OC43NzdtLTU5LjE4NiAyNC45MjQgMjkuNTkzIDI0LjkyNW0yMzAuOTc3LTM2LjcxNiA0MS4zNDUtNDMuMjltLTIxMy4xMzYgODAuMDA2aDU5LjE4Nm0tODguNzc5IDAgMjcuNTQ0LTIzLjIgMi4wNDktMS43MjUgMzAuNDU3LTIzLjg5Nm0tMjA4LjAxNCAyMy44OTYgMjkuNTkzLTI0LjkyNCAyOS41OTMtMjQuOTI1aDg4Ljc3OG0tNTYyLjI2NCA0OS44NWg1MzIuNjcxbDI5LjU5MyAyNC45MjRoMjkuNTkzbDI5LjU5My0yNC45MjUgMTUuNjU0LTExLjk0OSAxNjMuMTA4LjI0MSIgc3Ryb2tlPSIjZDEzIiBzdHJva2Utd2lkdGg9IjQuMTciIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2UpIiBmaWxsPSJub25lIi8+PHBhdGggZD0ibTI2Mi41IDIxMi41IDI1IDI1aDUwbS0xMDAtMjUgMjUgMjVtLTc1IDBoMjVtLTIyNSAwaDIwMGwyNS0yNWg3NSIgc3Ryb2tlPSIjM2E3Y2MzIiBzdHJva2Utd2lkdGg9IjQuMTciIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2YpIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTI4MS4yNSAyMTIuNWE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDEgMC0xMi41IDB6bTUwIDI1YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHptLTc1IDBhNi4yNSA2LjI1IDAgMSAwIDEyLjUgMCA2LjI1IDYuMjUgMCAxIDAtMTIuNSAwem0tNTAgMGE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDEgMC0xMi41IDB6IiBmaWxsPSIjM2E3Y2MzIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjI5NDgzIDAgMCAxLjE0NTU4IDAgLTY4LjY4KSIgbWFzaz0idXJsKCNnKSIvPjxwYXRoIGQ9Im01MTIuNSAxODcuNSAyNSAyNWgxMjVtLTE3NS0yNSAyNS0yNWgxNTBtLTY3NSA1MGgyMDBsMjUtMjVoNDAwIiBzdHJva2U9IiMzYTdjYzMiIHN0cm9rZS13aWR0aD0iNC4xNyIgdHJhbnNmb3JtPSJtYXRyaXgoMS4yOTQ4MyAwIDAgMS4xNDU1OCAwIC02OC42OCkiIG1hc2s9InVybCgjaCkiIGZpbGw9Im5vbmUiLz48cGF0aCBkPSJNNjA2LjI1IDE4Ny41YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHptNTAgMjVhNi4yNSA2LjI1IDAgMSAwIDEyLjUgMCA2LjI1IDYuMjUgMCAxIDAtMTIuNSAwem0wLTUwYTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHoiIGZpbGw9IiMzYTdjYzMiIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2kpIi8+PHBhdGggZD0ibTEzNy41IDE4Ny41IDI1LTI1aDI1bS0xMjUgMjUgMjUtMjVoNTBtMjAwIDAgMjUtMjVoNTBtLTE3NSAyNSAyNS0yNWg3NWwyNS0yNWg3NW0tMjI1IDUwIDI1LTI1bS0yNTAgNTBoMjAwbDI1LTI1aDI1MCIgc3Ryb2tlPSIjZDEzIiBzdHJva2Utd2lkdGg9IjQuMTciIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2opIiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTQ1Ni4yNSAxNjIuNWE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDAgMC0xMi41IDB6bS0yNzUgMGE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDAgMC0xMi41IDB6bS01MCAwYTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMCAwLTEyLjUgMHptMjc1LTI1YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMCAwLTEyLjUgMHptMjUtMjVhNi4yNSA2LjI1IDAgMSAwIDEyLjUgMCA2LjI1IDYuMjUgMCAwIDAtMTIuNSAwem0tMjAwIDI1YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMCAwLTEyLjUgMHoiIGZpbGw9IiNkMTMiIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2spIi8+PHBhdGggZD0ibTI2Mi41IDExMi41IDI1LTI1aDEwMG0tMjc1IDUwIDI1LTI1IDI1LTI1bTI1IDI1IDI1LTI1aDI1bS0yNTAgNzVoMjVsMjUtMjVoMTAwbDI1LTI1aDE1MCIgc3Ryb2tlPSIjM2E3Y2MzIiBzdHJva2Utd2lkdGg9IjQuMTciIHRyYW5zZm9ybT0ibWF0cml4KDEuMjk0ODMgMCAwIDEuMTQ1NTggMCAtNjguNjgpIiBtYXNrPSJ1cmwoI2wpIiBmaWxsPSIjNTAxNjE2Ii8+PHBhdGggZD0iTTMwNi4yNSAxMTIuNWE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDEgMC0xMi41IDB6bTc1LTI1YTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHptLTIyNSAwYTYuMjUgNi4yNSAwIDEgMCAxMi41IDAgNi4yNSA2LjI1IDAgMSAwLTEyLjUgMHptNzUgMGE2LjI1IDYuMjUgMCAxIDAgMTIuNSAwIDYuMjUgNi4yNSAwIDEgMC0xMi41IDB6IiBmaWxsPSIjM2E3Y2MzIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjI5NDgzIDAgMCAxLjE0NTU4IDAgLTY4LjY4KSIgbWFzaz0idXJsKCNtKSIvPjxlbGxpcHNlIGN4PSI4MjkuNjU2IiBjeT0iMjU5Ljk3OSIgcng9IjcuMzQ4IiByeT0iNy4zOSIgZmlsbD0iI2QxMyIvPjxlbGxpcHNlIGN4PSIxMDI0LjI0NyIgY3k9IjIxOS4wNyIgcng9IjcuMzQ4IiByeT0iNy4zOSIgZmlsbD0iI2QxMyIvPjxlbGxpcHNlIGN4PSIxMDI3LjAzMSIgY3k9IjE2Ny41NTQiIHJ4PSI3LjM0OCIgcnk9IjcuMzkiIGZpbGw9IiNkMTMiLz48ZWxsaXBzZSBjeD0iOTM2LjAxNyIgY3k9IjE4NS42MTgiIHJ4PSI3LjM0OCIgcnk9IjcuMzkiIGZpbGw9IiNkMTMiLz48ZWxsaXBzZSBjeD0iNzkwLjI4NiIgY3k9IjIwMy42MjUiIHJ4PSI3LjM0OCIgcnk9IjcuMzkiIGZpbGw9IiNkMTMiLz48ZWxsaXBzZSBjeD0iNjczLjU3NiIgY3k9IjI2MC40OTgiIHJ4PSI3LjM0OCIgcnk9IjcuMzkiIGZpbGw9IiNkMTMiLz48ZWxsaXBzZSBjeD0iNzEzLjk3MiIgY3k9IjIwMi45MzUiIHJ4PSI3LjM0OCIgcnk9IjcuMzkiIGZpbGw9IiNkMTMiLz48L3N2Zz4=")
58
+ `;
59
+
60
+ // src/graphql.js
61
+
62
+ /**
63
+ * Description TODO
64
+ * @constant
65
+ */
66
+ const USERCARD = `
67
+ query getMyUsercard($login: String!) {
68
+ user(login: $login) {
69
+ createdAt
70
+ id
71
+ login
72
+ url
73
+ name
74
+ bio
75
+ avatarUrl
76
+ location
77
+ status {
78
+ message
79
+ }
80
+ websiteUrl
81
+ isGitHubStar
82
+ isHireable
83
+ socialAccounts (first: 10) {
84
+ nodes {
85
+ displayName
86
+ provider
87
+ url
88
+ }
89
+ }
90
+ starredRepositories (first: 10) {
91
+ totalCount
92
+ }
93
+ sponsors (first: 10) {
94
+ totalCount
95
+ }
96
+ }
97
+ }
98
+ `;
99
+
100
+ /**
101
+ * Description TODO
102
+ * @constant
103
+ */
104
+ const STARS = `
105
+ query getMyStars($login: String!) {
106
+ user(login: $login) {
107
+ repositories (first: 50, isFork: false, privacy: PUBLIC) {
108
+ totalCount
109
+ nodes {
110
+ stargazerCount
111
+ }
112
+ }
113
+ }
114
+ }
115
+ `;
116
+
117
+ /**
118
+ * Description TODO
119
+ * @constant
120
+ */
121
+ const GIST_STARS = `
122
+ query getMyGistsStars() {
123
+ viewer {
124
+ gists(first: 100, privacy: PUBLIC, orderBy: {field: CREATED_AT, direction: DESC}) {
125
+ nodes {
126
+ stargazerCount
127
+ }
128
+ }
129
+ }
130
+ }
131
+ `;
132
+
133
+ /**
134
+ * Description TODO
135
+ * @constant
136
+ */
137
+ const FOLLOWERS = `
138
+ query getMyFollowers($login: String!) {
139
+ user(login: $login) {
140
+ followers {
141
+ totalCount
142
+ }
143
+ }
144
+ }
145
+ `;
146
+
147
+ /**
148
+ * Description TODO
149
+ * @constant
150
+ */
151
+ const FOLLOWING = `
152
+ query getMyFollows($login: String!) {
153
+ user(login: $login) {
154
+ following {
155
+ totalCount
156
+ }
157
+ }
158
+ }
159
+ `;
160
+
161
+
162
+ /**
163
+ * Description TODO
164
+ * @constant
165
+ */
166
+ const COMMITS = `
167
+ query getMyCommits($login: String!) {
168
+ user(login: $login) {
169
+ repositories(first: 20, orderBy: {field: NAME, direction: ASC}) {
170
+ nodes {
171
+ defaultBranchRef {
172
+ target {
173
+ ... on Commit {
174
+ history(first: 10, author: {id: "MDQ6VXNlcjcxOTc3MzM"}) {
175
+ totalCount
176
+ }
177
+ }
178
+ }
179
+ }
180
+ }
181
+ pageInfo {
182
+ endCursor
183
+ startCursor
184
+ }
185
+ }
186
+ }
187
+ }
188
+ `;
189
+
190
+ /**
191
+ * Description TODO.
192
+ * @constant
193
+ */
194
+ const CONTRIBUTIONS = `
195
+ query getMyContributions($login: String!) {
196
+ user(login: $login) {
197
+ contributionsCollection {
198
+ contributionCalendar {
199
+ totalContributions
200
+ }
201
+ }
202
+ }
203
+ }
204
+ `;
205
+
206
+ /**
207
+ * Description TODO
208
+ * @constant
209
+ */
210
+ const PRS = `
211
+ query getMyPrs($login: String!) {
212
+ user(login: $login) {
213
+ pullRequests(first: 100, states: CLOSED) {
214
+ totalCount
215
+ }
216
+ }
217
+ }
218
+ `;
219
+
220
+ const yagcStyles = `.gh-card {
221
+ position: relative;
222
+ display: inline-block;
223
+ background: var(--body-bg);
224
+ border-radius: 1rem;
225
+ box-shadow: 0 12px 13px rgba(0,0,0,.16), 0 12px 13px rgba(0,0,0,.16);
226
+ font-family: helvetica, arial, 'system-ui';
227
+ text-align: center;
228
+ padding: 1em 1em;
229
+ margin: 1rem 1rem;
230
+ min-width: 300px;
231
+ transition: all .5s;
232
+ div, h1 {
233
+ margin: 0;
234
+ }
235
+ h1 {
236
+ font-size: 1em;
237
+ }
238
+ .location,
239
+ p {
240
+ color: var(--body-color);
241
+ font-size: 0.9em;
242
+ margin: auto;
243
+ }
244
+ a {
245
+ color: var(--body-color-a);
246
+ text-decoration: none;
247
+
248
+ &:hover {
249
+ filter: drop-shadow(3px 1px 3px #999)
250
+ }
251
+ }
252
+ a.created_at {
253
+ position: relative;
254
+ float: left;
255
+ z-index: 1;
256
+
257
+ img {
258
+ height: 2.5em;
259
+ width: auto;
260
+ }
261
+
262
+ img:hover {
263
+ filter: drop-shadow(3px 1px 3px #999)
264
+ }
265
+ }
266
+ #list-resources {
267
+ list-style: none;
268
+ text-align: left;
269
+ padding: 17px 9px;
270
+ position: absolute;
271
+ float: left;
272
+ z-index: 1;
273
+
274
+ li {
275
+ font-size: 0.8em;
276
+ color: #ffffff;
277
+ padding-bottom: 6px;
278
+ a {
279
+ color: #ffffff;
280
+ }
281
+ span {
282
+ margin-left: 5px;
283
+ vertical-align: super;
284
+ }
285
+ img:hover {
286
+ filter: drop-shadow(3px 1px 3px #999)
287
+ }
288
+ }
289
+ }
290
+ .since {
291
+ color: #FFF;
292
+ font-size: 0.8em;
293
+ margin-left: 3em;
294
+ line-height: 3em;
295
+ position: absolute;
296
+ left: 2em;
297
+ }
298
+
299
+ a.info {
300
+ position: relative;
301
+ float: right;
302
+ z-index: 1;
303
+
304
+ img {
305
+ height: 1.2em;
306
+ width: auto;
307
+ }
308
+
309
+ img:hover {
310
+ filter: drop-shadow(3px 1px 3px #999)
311
+ }
312
+ }
313
+ .cover {
314
+ height: 11rem;
315
+ width: 100%;
316
+ position: absolute;
317
+ left: 0;
318
+ top: 0;
319
+ background-position: bottom;
320
+ background-repeat: round;
321
+ border-radius: 1rem 1rem 0 0;
322
+ }
323
+ .name {
324
+ font-size: 1.5em;
325
+ }
326
+ .login {
327
+ color: var(--body-color);
328
+ margin-bottom: 1rem;
329
+ }
330
+ .avatar {
331
+ position: relative;
332
+ padding: 4rem 0 0 0;
333
+
334
+ img {
335
+ font-size: 2em;
336
+ height: auto;
337
+ width: 5em;
338
+ border-radius: 50%;
339
+ border: 3px solid var(--avatar-border-color);
340
+ filter: drop-shadow(0 0 10px var(--avatar-border-color));
341
+ }
342
+ }
343
+ .stars {
344
+ top: 10em;
345
+ position: absolute;
346
+ width: 4em;
347
+ height: 4em;
348
+ right: 15%;
349
+ display: inline;
350
+ background: no-repeat url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve"><defs></defs><g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(1.4065934065934016 1.4065934065934016) scale(2.81 2.81)" ><path d="M 45 2.024 C 45 2.024 45 2.024 45 2.024 c -1.398 0 -2.649 0.778 -3.268 2.031 L 29.959 27.911 c -0.099 0.2 -0.29 0.338 -0.51 0.37 L 3.122 32.107 c -1.383 0.201 -2.509 1.151 -2.941 2.48 c -0.432 1.329 -0.079 2.76 0.922 3.736 l 19.049 18.569 c 0.16 0.156 0.233 0.38 0.195 0.599 L 15.85 83.71 c -0.236 1.377 0.319 2.743 1.449 3.564 c 1.129 0.821 2.6 0.927 3.839 0.279 l 23.547 -12.381 c 0.098 -0.051 0.206 -0.077 0.314 -0.077 C 51.721 53.905 50.301 28.878 45 2.024 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(255,200,80); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" /><path d="M 45 2.024 C 45 2.024 45 2.024 45 2.024 c 1.398 0 2.649 0.778 3.268 2.031 l 11.773 23.856 c 0.099 0.2 0.29 0.338 0.51 0.37 l 26.326 3.826 c 1.383 0.201 2.509 1.151 2.941 2.48 c 0.432 1.329 0.079 2.76 -0.922 3.736 L 69.847 56.892 c -0.16 0.156 -0.233 0.38 -0.195 0.599 L 74.15 83.71 c 0.236 1.377 -0.319 2.743 -1.449 3.564 c -1.129 0.821 -2.6 0.927 -3.839 0.279 L 45.315 75.172 c -0.098 -0.051 -0.206 -0.077 -0.314 -0.077 C 37.08 54.593 38.849 29.395 45 2.024 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(255,220,100); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" /></g></svg>');
351
+ background-size: 4em;
352
+ filter: drop-shadow(0 0 10px var(--avatar-border-color));
353
+ z-index: 1;
354
+
355
+ span {
356
+ color: var(--stars-color);
357
+ font-size: 1.2em;
358
+ font-weight: bold;
359
+ line-height: 4em;
360
+ text-align: center;
361
+ }
362
+ }
363
+ .footer {
364
+ border-top: 2px solid var(--stats-name-color);
365
+ padding: 1rem 0 0 0;
366
+
367
+ .item {
368
+ color: var(--body-color);
369
+ }
370
+ }
371
+ .grid-3 {
372
+ .item {
373
+ font-size: 1em;
374
+ width: 33%;
375
+ .total {
376
+ font-size: 2.4rem;
377
+ }
378
+ }
379
+ }
380
+ .grid-4 {
381
+ .item {
382
+ font-size: .8em;
383
+ width: 25%;
384
+ .total {
385
+ font-size: 2rem;
386
+ }
387
+ }
388
+ }
389
+ #list-items,
390
+ #list-social {
391
+ display: contents;
392
+ list-style: none;
393
+ padding: 0;
394
+
395
+ li {
396
+ display: inline-block;
397
+ span,
398
+ a {
399
+ font-size: 2em;
400
+ }
401
+ a:hover {
402
+ filter: drop-shadow(1px 1px 4px rgba(0, 0, 0, 1));
403
+ }
404
+ p {
405
+ font-size: 0.7em!important;
406
+ color: var(--stats-name-color);
407
+ }
408
+ }
409
+ li:not(:last-child) {
410
+ margin-right: 2rem;
411
+ }
412
+ }
413
+ }
414
+ #list-items {
415
+ li {
416
+ span {
417
+ color: var(--body-color);;
418
+ }
419
+ }
420
+ }
421
+ #list-social {
422
+ li {
423
+ img {
424
+ filter: var(--svg-color-a);
425
+ }
426
+ }
427
+ }
428
+ @media (min-width:400px) {
429
+ .gh-card {
430
+ .stars {
431
+ right: 25%;
432
+ }
433
+ }
434
+ }
435
+ @media (max-width:468px) {
436
+ .location {
437
+ display: none;
438
+ }
439
+ #list-social {
440
+ li {
441
+ margin-top: 10px;
442
+ }
443
+ }
444
+ }
445
+ @media (min-width:724px) {
446
+ .gh-card {
447
+ max-width: 1200px;
448
+ width: 90%;
449
+ .cover {
450
+ height: 15rem;
451
+ width: 100%;
452
+ }
453
+ .avatar {
454
+ position: relative;
455
+ padding: 4rem 0 0 0;
456
+
457
+ img {
458
+ width: 6em;
459
+ }
460
+ }
461
+ .stars {
462
+ top: 12em;
463
+ background-size: 4em;
464
+ right: 35%;
465
+ z-index: 1;
466
+ }
467
+ #list-social {
468
+ display: block;
469
+ }
470
+ }
471
+ }
472
+
473
+ @media (min-width:1024px) {
474
+ .gh-card {
475
+ .stars {
476
+ right: 39%;
477
+ }
478
+ }
479
+ }`;
480
+
481
+ /* eslint-disable no-restricted-properties */
482
+ function stringFormat(value) {
483
+ if (!(value >= 1000)) return value;
484
+ let newValue = value;
485
+ const suffixes = ['', 'k', 'm', 'b', 't'];
486
+ let suffixNum = 0;
487
+ while (newValue >= 1000) {
488
+ newValue /= 1000;
489
+ suffixNum += 1;
490
+ }
491
+
492
+ newValue = newValue.toPrecision(2);
493
+
494
+ newValue += suffixes[suffixNum];
495
+ return newValue;
496
+ }
497
+
498
+ let apiRequest, dataCollection, datasetLenght, dataName, dataHref, dataValue, responseLenght, shadowRoot, totalStars, userName, yagcTheme;
499
+
500
+ const template = document.createElement('template');
501
+
502
+ const queryMap = {
503
+ commits: COMMITS,
504
+ contributions: CONTRIBUTIONS,
505
+ following: FOLLOWING,
506
+ stars: STARS,
507
+ gist_stars: GIST_STARS,
508
+ prs: PRS,
509
+ usercard: USERCARD
510
+ };
511
+
512
+ const resourceMap = {
513
+ repositories: "https://github.com",
514
+ gists: "https://gist.github.com"
515
+ };
516
+
517
+ const themeMap = {
518
+ cloud: cloud,
519
+ polygon: polygon,
520
+ default: defaultTheme
521
+ };
522
+
523
+ const themeColor = {
524
+ cloud: `filter: invert(41%) sepia(9%) saturate(3861%) hue-rotate(174deg) brightness(92%) contrast(87%)`,
525
+ polygon: `filter: invert(33%) sepia(100%) saturate(785%) hue-rotate(193deg) brightness(97%) contrast(86%)`,
526
+ defaultTheme: `filter: invert(20%) sepia(35%) saturate(718%) hue-rotate(314deg) brightness(94%) contrast(95%)`
527
+ };
528
+
529
+ const faviconMap = {
530
+ generic: `./images/generic.svg`,
531
+ github: `./images/github.svg`,
532
+ helm: `./images/helm.svg`,
533
+ instagram: `./images/instagram.svg`,
534
+ linkedin: `./images/linkedin.svg`,
535
+ npmjs: `./images/npmjs.svg`,
536
+ nuget: `./images/nuget.svg`,
537
+ rubygems: `./images/rubygems.svg`,
538
+ sourceforge: `./images/sourceforge.svg`,
539
+ twitter: `./images/twitter.svg`,
540
+ yarnpkg: `./images/yarnpkg.svg`,
541
+ default: `./images/generic.svg`
542
+ };
543
+
544
+
545
+ template.innerHTML = /*html*/ `
546
+ <!--
547
+ Created using npm package ${NPM_PKG} ${NPM_VER}
548
+ ${NPM_URL}
549
+ -->
550
+ <style>${yagcStyles}</style>
551
+ <div class="gh-card">
552
+ <div class="cover" style=""></div>
553
+ <div class="wrapper">
554
+ <a href="" target="_blank" class="created_at" rel="noopener"><img src="./images/github-logo.png" border="0" alt="Account since"></a><span class="since">Since <slot name="createdAt">{createdAt}</slot></span>
555
+ <a href="${NPM_URL}" target="_blank" class="info" rel="noopener"><img src="./images/info-logo.svg" border="0" alt="${NPM_PKG}"></a><br>
556
+ <ul id="list-resources"></ul>
557
+ <div class="avatar">
558
+ <img src=""/></slot>
559
+ <div class="stars"><span><slot name="stars">{stars}</span></div>
560
+ </div>
561
+ <h1><a class="name" href="" target="_blank" rel="noopener"><slot name="name">{name}</slot></a></h1>
562
+ <div class="location"><slot name="location">{location}</slot></div>
563
+ <p><slot name="bio">{bio}</slot></p>
564
+ <div class="grid-4">
565
+ <ul id="list-social"></ul>
566
+ </div>
567
+ <div class="footer grid-4">
568
+ <ul id="list-items"></ul>
569
+ </div>
570
+ </div>
571
+ </div>
572
+ `;
573
+
574
+ class githubCard extends HTMLElement {
575
+ static get observedAttributes() {
576
+ return ["data-theme", "data-style"];
577
+ }
578
+
579
+ constructor() {
580
+ super();
581
+ const shadow = this.attachShadow({ mode: "open" });
582
+ shadow.appendChild(template.content.cloneNode(true));
583
+ }
584
+
585
+
586
+ connectedCallback() {
587
+ shadowRoot = document.querySelector('github-card').shadowRoot;
588
+
589
+ apiRequest = queryMap['usercard'];
590
+ userName = this.getAttribute('data-user');
591
+ yagcTheme = this.getAttribute('data-style').toString();
592
+
593
+ this.changeStyle(yagcTheme);
594
+
595
+ this.main(apiRequest)
596
+ .then((response) => {
597
+ responseLenght = Object.keys(response.user).length;
598
+ datasetLenght = Object.keys(GH_DEF_COLLECTION).length;
599
+
600
+ for (let i = 0; i < responseLenght; i++) {
601
+ if(response.user.hasOwnProperty(Object.values(GH_DEF_COLLECTION[i]|| {}))) {
602
+ let value = Object.values(GH_DEF_COLLECTION[i]);
603
+
604
+ if (Object.values(GH_DEF_COLLECTION[i]) == "createdAt") {
605
+ shadowRoot.querySelector(`slot[name=${value}`).textContent = response.user[value].substr(0,4);
606
+
607
+ } else {
608
+ shadowRoot.querySelector(`slot[name=${value}`).textContent = response.user[value];
609
+ }
610
+ }
611
+ }
612
+
613
+ shadowRoot.querySelector(".avatar img").setAttribute("src", response.user["avatarUrl"]);
614
+ shadowRoot.querySelector(".gh-card a.created_at").setAttribute("href", response.user["url"]);
615
+ shadowRoot.querySelector(".name").setAttribute("href", response.user["url"]);
616
+
617
+ if (response.user["websiteUrl"]) { this.createListElements("list-social", response.user["websiteUrl"], "blog", null, "link", 30); }
618
+
619
+ if (response.user["socialAccounts"]) {
620
+ responseLenght = Object.keys(response.user.socialAccounts.nodes).length;
621
+
622
+ for (let i = 0; i < responseLenght; i++) {
623
+ this.createListElements("list-social", response.user.socialAccounts.nodes[i].url, response.user.socialAccounts.nodes[i].provider.toLowerCase(), null, "link", 30);
624
+ }
625
+ }
626
+ })
627
+
628
+ .catch((error) => {
629
+ console.log(error);
630
+ });
631
+
632
+ dataCollection = this.getAttribute("data-user-stars").toString();
633
+ if (dataCollection == "true") {
634
+
635
+ this.main(STARS)
636
+ .then((response) => {
637
+
638
+ totalStars = 0;
639
+
640
+ Object.keys(response.user).forEach(key => {
641
+ const childKey = response.user[key];
642
+ this.createListElements("list-resources", `${resourceMap[key]}/${userName}`, key, childKey["totalCount"] + " " + key, "link", 20);
643
+ Object.keys(childKey).forEach(key => {
644
+ const childDescKey = childKey[key];
645
+ Object.keys(childDescKey).forEach(key => {
646
+ totalStars = totalStars += childDescKey[key].stargazerCount;
647
+ });
648
+ });
649
+ });
650
+ shadowRoot.querySelector(`slot[name=stars`).textContent = stringFormat(totalStars);
651
+ })
652
+
653
+ .catch((error) => {
654
+ console.log(error);
655
+ });
656
+ }
657
+
658
+ dataCollection = this.getAttribute("data-user-stats");
659
+ const userCollection = JSON.parse(dataCollection);
660
+ datasetLenght = Object.keys(userCollection).length;
661
+
662
+ for (let i = 0; i < datasetLenght; i++) {
663
+
664
+ apiRequest = queryMap[userCollection[i].name] || FOLLOWERS;
665
+
666
+ this.main(apiRequest)
667
+ .then((response) => {
668
+ dataHref = '';
669
+ dataName = userCollection[i].name;
670
+ dataValue = 0;
671
+ dataValue = this.getStats(response);
672
+ this.createListElements("list-items", dataHref, dataName.toUpperCase(), stringFormat(dataValue), "text", 25);
673
+ })
674
+
675
+ .catch((error) => {
676
+ //console.log(error);
677
+ });
678
+ }
679
+ }
680
+
681
+
682
+ getStats(obj) {
683
+ const processProperty = (property) => {
684
+ if (property.totalCount || property.totalContributions) {
685
+ dataValue += property.totalCount || property.totalContributions;
686
+ } else if (property instanceof Object) {
687
+ Object.keys(property).forEach((key) => {
688
+ processProperty(property[key]);
689
+ });
690
+ }
691
+ };
692
+
693
+ processProperty(obj); // Start processing from the top-level object
694
+ return dataValue;
695
+ }
696
+
697
+
698
+ getRootDomain(url) {
699
+ if (url) {
700
+ const parsedUrl = new URL(url);
701
+ const hostname = parsedUrl.hostname;
702
+ const hostnameParts = hostname.split('.');
703
+
704
+ if (hostnameParts.length < 2) {
705
+ return hostname; // Return the whole hostname if no subdomain
706
+ }
707
+
708
+ if (hostnameParts.length === 3 && hostnameParts[0] === 'www') {
709
+ return hostnameParts[1]; // Root domain is the part before "www"
710
+ }
711
+ // Loop through known domains to check for a match
712
+ for (const domain of Object.keys(faviconMap)) {
713
+ if (hostnameParts.includes(domain)) {
714
+ // If a match is found, return the root domain based on its position
715
+ const rootDomainIndex = hostnameParts.indexOf(domain);
716
+ return hostnameParts[rootDomainIndex - 1];
717
+ } else {
718
+ return hostnameParts[hostnameParts.length - 2];
719
+ }
720
+ }
721
+ return hostnameParts[hostnameParts.length - 2]; // Default root domain (second-to-last element)
722
+ }
723
+ }
724
+
725
+
726
+ async createListElements(parentId, href, name, value = 0, type, size = 16) {
727
+ const shadowRoot = document.querySelector('github-card').shadowRoot;
728
+ const itemNode = document.createElement('li');
729
+ itemNode.classList.add('list-item');
730
+
731
+ let srcImg, listImg, listEle, listChild;
732
+ if (['gists', 'repositories'].includes(name)) {
733
+ srcImg = `./images/${name}.svg`;
734
+ href = href + '?tab=repositories';
735
+ } else if (name === 'blog') {
736
+ const validUrl = await this.urlCheckStatus(`${href}/assets/images/favicon_io/favicon.svg`);
737
+ if (validUrl) {
738
+ srcImg = validUrl;
739
+ } else {
740
+ srcImg = `./images/generic.svg`; // Fallback if URL check fails
741
+ }
742
+ } else {
743
+ const domain = this.getRootDomain(href);
744
+ srcImg = faviconMap[domain] || `./images/generic.svg`; // Default to generic if not found
745
+ }
746
+
747
+ switch (parentId) {
748
+ case 'list-resources':
749
+ case 'list-social':
750
+ listEle = document.createElement('a');
751
+ listEle.textContent = value;
752
+ listEle.setAttribute('alt', name);
753
+ listEle.setAttribute('href', href);
754
+ listEle.setAttribute('target', '_blank');
755
+ listEle.setAttribute('rel', 'noopener');
756
+ listEle.setAttribute('title', href);
757
+ listChild = null;
758
+ break;
759
+ default:
760
+ listEle = document.createElement('span');
761
+ listEle.textContent = value;
762
+ listChild = document.createElement('p');
763
+ listChild.textContent = name;
764
+ itemNode.appendChild(listChild);
765
+ srcImg = `./images/${name.toLowerCase()}.svg`;
766
+ }
767
+
768
+ listImg = document.createElement('img');
769
+ Object.assign(listImg, {
770
+ src: `${srcImg}`,
771
+ height: size,
772
+ width: size,
773
+ alt: name,
774
+ class: themeColor[yagcTheme]
775
+ });
776
+
777
+ listEle.prepend(listImg);
778
+ itemNode.appendChild(listEle);
779
+ if (listChild != null) { itemNode.appendChild(listChild); }
780
+
781
+ const parentElement = shadowRoot.getElementById(parentId);
782
+ if (parentElement) {
783
+ parentElement.appendChild(itemNode);
784
+ } else {
785
+ console.error(`Parent element with id "${parentId}" not found.`);
786
+ }
787
+ }
788
+
789
+
790
+ changeStyle(yagcTheme) {
791
+ const shadowRoot = document.querySelector('github-card').shadowRoot;
792
+ const cover = shadowRoot.querySelector(".cover");
793
+ cover.setAttribute("style", themeMap[yagcTheme] || defaultTheme);
794
+ this.changeStyleColor(yagcTheme);
795
+ }
796
+
797
+
798
+ changeStyleColor(yagcTheme) {
799
+ setTimeout(() => {
800
+ const wrapper = shadowRoot.querySelector("#list-items").querySelectorAll(".list-item");
801
+ const elementsArray = Array.from(wrapper);
802
+
803
+ elementsArray.forEach(listItem => {
804
+ const imgElements = listItem.querySelectorAll("img");
805
+ imgElements.forEach(imgEle => {
806
+ imgEle.setAttribute("style", themeColor[yagcTheme]);
807
+ });
808
+ });
809
+ }, 2000);
810
+ }
811
+
812
+
813
+ attributeChangedCallback(name, oldValue, newValue) {
814
+ console.log(`${name}'s value has been changed from ${oldValue} to ${newValue}`);
815
+ this.changeStyle(newValue);
816
+ }
817
+
818
+
819
+ urlCheckStatus(url) {
820
+ return fetch(url)
821
+ .then((response) => {
822
+ if (response.status == 200) {
823
+ return url;
824
+ } else {
825
+ return null;
826
+ }
827
+ })
828
+ .catch((error) => {
829
+ console.log(error);
830
+ });
831
+ }
832
+
833
+
834
+ async main(graphQLQuery) {
835
+
836
+ const endPoint = API_GQL_URL;
837
+ const variables = {
838
+ login: `${userName}`,
839
+ };
840
+
841
+ try {
842
+ const response = await fetch(endPoint, {
843
+ method: 'POST',
844
+ headers: {
845
+ 'Content-Type': 'application/json',
846
+ },
847
+ body: JSON.stringify({
848
+ query: graphQLQuery,
849
+ variables: variables,
850
+ }),
851
+ });
852
+
853
+ if (!response.ok) {
854
+ throw new Error(`Error en el proxy: ${response.statusText}`);
855
+ }
856
+
857
+ const data = await response.json();
858
+ return data;
859
+
860
+ } catch (error) {
861
+ console.error("Error al obtener datos del backend proxy:", error);
862
+ throw error;
863
+ }
864
+ }
865
+ }
866
+
867
+ customElements.define('github-card', githubCard);