Compare commits

...

464 Commits

Author SHA1 Message Date
dependabot[bot] 7238b21621 Bump terser from 4.8.0 to 4.8.1
Bumps [terser](https://github.com/terser/terser) from 4.8.0 to 4.8.1.
- [Release notes](https://github.com/terser/terser/releases)
- [Changelog](https://github.com/terser/terser/blob/master/CHANGELOG.md)
- [Commits](https://github.com/terser/terser/commits)

---
updated-dependencies:
- dependency-name: terser
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-07-21 15:54:57 +00:00
Rahul Jain 888aff31e1 Merge pull request #568 from rahuldkjain/hotfix/skills
fix: #565
2022-06-28 19:05:03 +05:30
Rahul Jain f4b2f5cf88 fix: #565 2022-06-28 19:00:18 +05:30
Rahul Jain c83a129e01 Merge pull request #564 from rahuldkjain/hotfix/icons
fix: linting errors
2022-06-26 20:13:18 +05:30
Rahul Jain 3461a5b865 fix: linting errors 2022-06-26 20:05:52 +05:30
Rahul Jain c919601f7e Merge pull request #501 from techieeliot/issue-452-hasnode
feature: add hashnode to socials input and preview
2021-11-01 10:16:46 +05:30
Eliot Sanford 5e0cd2e639 docs: add content to readme 2021-10-31 23:34:18 -05:00
Eliot Sanford 9b24ae64c9 fix: change placeholder to include the 'with @' 2021-10-31 23:19:54 -05:00
Eliot Sanford 71d1fafbd6 feature: add hashnode to socials input and preview
closes #452
2021-10-31 23:07:15 -05:00
Rahul Jain 8947cb3641 Merge pull request #500 from rahuldkjain/issue-499
fix: html.jsx linting
2021-10-31 17:03:37 +05:30
Rahul Jain 7898e38f8e improve html.jsx 2021-10-31 17:00:05 +05:30
Rahul Jain b23cab5944 Merge pull request #498 from rahuldkjain/issue-497
fix: issue-497
2021-10-31 16:51:17 +05:30
Rahul Jain 8899046e5e remove files 2021-10-31 16:50:30 +05:30
Rahul Jain a0e34df02d Merge pull request #496 from rahuldkjain/enhancement/issue-495
Enhancement/issue 495
2021-10-31 15:49:44 +05:30
Rahul Jain 9ba8ccff66 fix: eslinting 2021-10-31 15:43:03 +05:30
Rahul Jain 004401a8d1 intial eslint pre-commit setup 2021-10-31 12:51:09 +05:30
Rahul Jain fb6389f569 Merge pull request #493 from rahuldkjain/enhancement/fix-warnings
fix: few ESLint warnings
2021-10-31 12:23:18 +05:30
Rahul Jain d33d139590 make node version 14 2021-10-31 12:18:45 +05:30
Rahul Jain 1bffabd8bb add before script in travis.yml 2021-10-31 12:14:27 +05:30
Rahul Jain 6ff29bcf87 fix node version 2021-10-31 10:51:51 +05:30
Rahul Jain 8c84e917c9 fix: npm version in .yml 2021-10-31 10:48:54 +05:30
Rahul Jain f04dc760e2 fix: few ESLint warnings 2021-10-31 10:36:41 +05:30
Rahul Jain 938a8a9d43 Merge pull request #484 from ajvideira/nextjs-logo-fix
fix: nextjs broken logo url
2021-10-28 13:16:53 +05:30
Jonathan Alba Videira 2109192d72 Fix nextjs broken logo url 2021-10-21 07:43:57 -03:00
Rahul Jain 793513dc21 Merge pull request #465 from chandrikadeb7/kafka-svg-fix
Kafka svg fix
2021-10-21 08:55:14 +05:30
Rahul Jain bf62cec45f Merge pull request #463 from pranansh-s/master
[add]: Nim-Programming language
2021-10-21 08:54:03 +05:30
Rahul Jain 646c0804b9 Merge pull request #464 from mehabhalodiya/patch1
Adds "pandas" and "seaborn" in AI/ML
2021-10-21 08:53:32 +05:30
Rahul Jain b406f4d181 Merge pull request #460 from BerniWittmann/master
feat: add ifttt to automation
2021-10-21 08:50:56 +05:30
Rahul Jain ededb4b8a5 Merge pull request #458 from MrDoomy/feat/better-checkboxes
Using toggle switches instead of checkboxes
2021-10-21 08:49:14 +05:30
Rahul Jain 63347fc8b5 Merge pull request #456 from RetiFier/valdate_json_upload
Add Validation JSON Upload Under Config options
2021-10-21 08:46:58 +05:30
Rahul Jain 1c7bcb7d6b Merge pull request #454 from MrDoomy/feat/backend-development-nestjs
[add]: NestJS Option
2021-10-21 08:46:02 +05:30
Rahul Jain edbaa47c40 Merge pull request #439 from gargipandkar/support-bugfix
Fix #423 - support field not saved/restored
2021-10-21 08:37:43 +05:30
Damien Chazoule e084c9e775 Using redesigned checkboxes on addons section 2021-10-06 19:56:06 +02:00
Chandrika Deb 91bdf52f58 Add files via upload 2021-10-06 22:24:46 +05:30
Chandrika Deb 0823cd43ce Delete kafka.svg 2021-10-06 22:24:03 +05:30
Damien Chazoule 7a93ebeae1 Using redesigned checkboxes rather than toggle switches 2021-10-06 13:18:31 +02:00
mehabhalodiya 46d3751b91 Add pandas and seaborn 2021-10-06 14:38:35 +05:30
Pranansh Singh 6a7a6575b7 Updated icon with a better visibility one 2021-10-06 03:00:16 +05:30
Pranansh Singh 61b8362a55 Added Nim-Programming language 2021-10-06 02:54:21 +05:30
Bernhard Wittmann 68bfa23dff feat: add ifttt to automation 2021-10-04 20:06:34 +02:00
Damien Chazoule f0a9d02f26 Adding unit tests 2021-10-04 10:08:00 +02:00
Damien Chazoule 20b47a9c3d Using toggle switches instead of checkboxes 2021-10-03 23:00:56 +02:00
Damien Chazoule 9432f7d88d Using Devicons SVG + Adding NestJS Link 2021-10-03 21:32:38 +02:00
Reti Fier 15c63a347a Add Validation JSON Upload Under Config options 2021-10-04 01:13:16 +06:30
Damien Chazoule fc1ecf5ab6 Added NestJS Option 2021-10-03 20:04:50 +02:00
Rahul Jain 0194c38eb6 Merge pull request #450 from chandrikadeb7/chandrikadeb7-svg
fix #444: add theme neutral social icons
2021-10-03 09:48:07 +05:30
Chandrika Deb be0234927d SVG social icons added 2021-10-02 16:19:33 +05:30
Rahul Jain 0253d1b5bb Merge pull request #441 from wweverma1/feature/add-kofi-button
issue #424: add Ko-fi donation option
2021-10-02 13:38:17 +05:30
Rahul Jain c7fc859f0c Merge pull request #443 from chandrikadeb7/chandrikadeb7-devlogo
fix #345: dev-dot-to logo
2021-10-02 13:31:49 +05:30
Chandrika Deb f21bbf2af7 Dev logo svg neutral icon added 2021-10-02 13:25:34 +05:30
wweverma1 bbf6cf6018 Added Ko-fi donation option 2021-10-01 17:23:32 +05:30
gargipandkar ccdd09db3f Merge branch 'rahuldkjain:master' into support-bugfix 2021-09-27 14:55:43 +08:00
Rahul Jain 9eb2ab1260 Merge pull request #437 from rahuldkjain/dependabot/npm_and_yarn/color-string-1.6.0
Bump color-string from 1.5.3 to 1.6.0
2021-09-26 20:00:56 +05:30
dependabot[bot] 36076a1fe9 Bump color-string from 1.5.3 to 1.6.0
Bumps [color-string](https://github.com/Qix-/color-string) from 1.5.3 to 1.6.0.
- [Release notes](https://github.com/Qix-/color-string/releases)
- [Changelog](https://github.com/Qix-/color-string/blob/master/CHANGELOG.md)
- [Commits](https://github.com/Qix-/color-string/commits/1.6.0)

---
updated-dependencies:
- dependency-name: color-string
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-26 14:09:31 +00:00
Rahul Jain e92300198d Merge pull request #432 from rahuldkjain/dependabot/npm_and_yarn/tmpl-1.0.5
Bump tmpl from 1.0.4 to 1.0.5
2021-09-26 19:38:04 +05:30
Rahul Jain 25a970c5aa Merge pull request #429 from rahuldkjain/dependabot/npm_and_yarn/object-path-0.11.8
Bump object-path from 0.11.4 to 0.11.8
2021-09-26 19:37:54 +05:30
Rahul Jain 0038d17908 Merge pull request #428 from rahuldkjain/dependabot/npm_and_yarn/prismjs-1.25.0
Bump prismjs from 1.20.0 to 1.25.0
2021-09-26 19:37:44 +05:30
dependabot[bot] 742a7d5d53 Bump tmpl from 1.0.4 to 1.0.5
Bumps [tmpl](https://github.com/daaku/nodejs-tmpl) from 1.0.4 to 1.0.5.
- [Release notes](https://github.com/daaku/nodejs-tmpl/releases)
- [Commits](https://github.com/daaku/nodejs-tmpl/commits/v1.0.5)

---
updated-dependencies:
- dependency-name: tmpl
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-22 08:50:59 +00:00
dependabot[bot] 45f8ca0c9b Bump object-path from 0.11.4 to 0.11.8
Bumps [object-path](https://github.com/mariocasciaro/object-path) from 0.11.4 to 0.11.8.
- [Release notes](https://github.com/mariocasciaro/object-path/releases)
- [Commits](https://github.com/mariocasciaro/object-path/commits)

---
updated-dependencies:
- dependency-name: object-path
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-21 18:10:32 +00:00
dependabot[bot] 131f4b00bf Bump prismjs from 1.20.0 to 1.25.0
Bumps [prismjs](https://github.com/PrismJS/prism) from 1.20.0 to 1.25.0.
- [Release notes](https://github.com/PrismJS/prism/releases)
- [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md)
- [Commits](https://github.com/PrismJS/prism/compare/v1.20.0...v1.25.0)

---
updated-dependencies:
- dependency-name: prismjs
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-20 22:42:50 +00:00
gargipandkar f8b2c5d9d4 Fix save/restore/reset of support fields 2021-08-15 16:08:53 +08:00
Rahul Jain e0c08558d8 [fix]: mssql, matlab icon 2021-06-04 17:08:16 +05:30
Rahul Jain 70d473ca91 Merge pull request #387 from Shrestha7/master
[fix]: social icons url
2021-06-04 09:20:55 +05:30
Rahul Jain 3d2510ac71 Merge pull request #394 from AdrianArtiles/fix-typos
[fix]: readme typos
2021-06-04 09:11:26 +05:30
Adrian Artiles fe35dcea9a docs: fix typos 2021-06-03 15:18:04 -07:00
Savitha Gollamudi 22064237dc Merge pull request #370 from aravindvnair99/typo-fixes
Fixes #369 - incorrect spelling
2021-05-10 12:12:58 +05:30
Savitha Gollamudi 704df3681f Merge pull request #374 from frntnd93/feature/angular-icon-link
Add Angular 2+ icon, link
2021-05-10 12:08:14 +05:30
swastik shrestha d8139bc7e2 fixed social icons 2021-05-10 11:57:33 +05:45
Savitha Gollamudi 6253936f99 Merge pull request #384 from PuneetGopinath/patch-1
Fix social icons base link
2021-05-01 16:29:04 +05:30
Puneet Gopinath a5389b6646 Fix social icons base link 2021-04-26 09:55:03 +03:00
Rahul Jain 4a1846e7df Merge pull request #380 from rahuldkjain/rahul_hotfix_paypal-icon
[fix]: paypal-icon
2021-04-18 12:59:06 +05:30
Rahul Jain 13829db4cb [fix]: paypal-icon 2021-04-18 12:58:01 +05:30
Rahul Jain c4becd7949 Merge pull request #368 from kodumbeats/appwrite
[add]: Appwrite BaaS in Skills
2021-04-18 12:38:55 +05:30
Dzhanik Marupov 9e323b9157 Update src/constants/skills.js
Co-authored-by: Aravind V. Nair <22199259+aravindvnair99@users.noreply.github.com>
2021-03-31 12:51:52 +03:00
Aravind V Nair 29a0db0aad Remove unnecessary spaces
Signed-off-by: Aravind V Nair <22199259+aravindvnair99@users.noreply.github.com>
2021-03-31 12:35:55 +05:30
Aravind V Nair e53c7321b6 Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator into typo-fixes 2021-03-28 14:55:56 +05:30
kodumbeats b7b1fd0a42 Use Appwrite svg 2021-03-24 07:22:21 -04:00
Rahul Jain 04ce080957 Merge pull request #366 from harikanani/harikanani/paypal-icon-fix
[fix]: paypal icon
2021-03-24 11:54:42 +05:30
Dzhanik 49552b7c42 [add] Angular 2+ icon, link 2021-03-03 14:51:11 +03:00
Aravind V Nair fb1b92b0a2 Fix spelling of "regularly"
Signed-off-by: Aravind V Nair <22199259+aravindvnair99@users.noreply.github.com>
2021-03-01 15:59:35 +05:30
kodumbeats 83af4c1839 Add Appwrite BaaS 2021-02-27 15:50:08 -05:00
harikanani d36431ed29 fix paypal icon 2021-02-27 16:49:21 +05:30
rahuldkjain 9cb1b35ac2 [update]: icon-base-url for social 2021-01-31 10:54:16 +05:30
Rahul Jain 2c2cdb30a5 Merge pull request #356 from MaheshBharadwaj/neutral-icons
Added theme neutral icons for some social sites
2021-01-31 10:47:09 +05:30
rahuldkjain db23c74d4f [add]: eslint in package.json 2021-01-15 22:28:08 +05:30
MaheshBharadwaj ebbb1dab5a [ADD] SVG files 2021-01-15 21:27:40 +05:30
Rahul Jain 7603bf41b6 Merge pull request #352 from saitharunsai/patch-1
[fix]: icon cdn links
2021-01-03 18:26:37 +05:30
saitharunsai bbf0836509 update skill.js
changed the c programming link
2021-01-03 16:29:10 +05:30
saitharunsai 901802b9d2 changed the cdn links
changed the cdn links
2021-01-03 15:51:21 +05:30
zolostays 1e338f58f1 [update]: release version 2020-12-04 17:08:35 +05:30
zolostays 9b21412a1a [fix]: github stats placeholder 2020-12-04 17:06:20 +05:30
Rahul Jain c8b8036477 Merge pull request #340 from rahuldkjain/sponsor
[add]: buymeacoffee support
2020-12-04 16:57:07 +05:30
zolostays 5723c38dc9 [update]: jest threshold 2020-12-04 16:43:42 +05:30
zolostays ec78c6ba05 [add]: buymeacoffee support 2020-12-04 16:34:31 +05:30
Rahul Jain d9469f4eda Merge pull request #325 from DenverCoderOne/add-github-streak-stats
[add]: GitHub streak stats
2020-11-29 12:46:17 +05:30
DenverCoder1 c7c7e1c357 Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator into add-github-streak-stats 2020-11-04 04:36:18 +02:00
Rahul Jain 4ffebfb792 Merge pull request #329 from ankurchaudhary627/master
[add]: prettier and eslint config files
2020-10-31 22:12:22 +05:30
Ankur Chaudhary 779ba7827e Added prettier and eslint config files 2020-10-31 21:37:21 +05:30
DenverCoder1 5d542208ca Added highcontrast theme for streak stats 2020-10-30 04:52:31 +02:00
DenverCoder1 96037f3ff5 Merge branch 'master' into add-github-streak-stats
Checks were failing in the previously merged master branch
2020-10-29 13:57:44 +02:00
Kate Dainovich f11ef643bc Merge pull request #311 from emilpalsson/skills-test
Add unit test cases for skills component
2020-10-28 22:39:56 +03:00
Kate Dainovich b3e4a1a0a9 Merge pull request #318 from Tekipeps/master
Add unit test for Social component
2020-10-28 22:36:05 +03:00
Rahul Jain fbbb95f61f Merge pull request #328 from rahuldkjain/improve-readme
[fix]: readme and package.json
2020-10-28 11:34:56 +05:30
zolostays 1d672fe879 [fix]: readme and package.json 2020-10-28 11:32:39 +05:30
emilpalsson ac15f4ae45 Add unit test cases for skills component 2020-10-27 22:43:38 +01:00
Tekena Solomon 55951c9ef5 Merge remote-tracking branch 'upstream/master' into master 2020-10-27 19:23:44 +01:00
Kate Dainovich e29ddc1637 Merge pull request #314 from anusha5695/ISSUE-294 2020-10-27 18:25:01 +03:00
Rahul Jain a18dc59933 Merge pull request #327 from rahuldkjain/new-sponsors
[add]: new sponsors
2020-10-27 11:05:20 +05:30
zolostays 1c259a84ac [add]: new sponsors 2020-10-27 11:03:02 +05:30
Anusha S a93d958944 tech: add more test cases for coverage 2020-10-27 01:50:39 +05:30
Tekena Solomon 07b18b4c8a revert all other changes not related to social component 2020-10-26 20:47:40 +01:00
Jonah Lawrence 050d0b3a04 Merge branch 'master' into add-github-streak-stats 2020-10-26 19:09:34 +02:00
anusha5695 12315be78b Merge branch 'master' into ISSUE-294 2020-10-26 21:31:00 +05:30
Rahul Jain 63a94a3737 Merge pull request #317 from zeaus/markdown-preview-test
[add]: unit test for Markdown Preview
2020-10-26 20:08:16 +05:30
Rahul Jain 8480ef160d Merge pull request #323 from Citrinin/add-ci-test
[add]: CI
2020-10-26 20:04:06 +05:30
Rahul Jain 30675c7c6d Merge pull request #319 from wandersonpsantos/master
[add]: unit test for markdown.js
2020-10-26 20:01:41 +05:30
Anusha S 3d296812e8 tech: use enzyme to json instead of react test renderer 2020-10-26 12:42:37 +05:30
Citrinin d82a367616 fix tests & update config 2020-10-26 12:42:37 +05:30
DenverCoder1 b243675abd Added to features list 2020-10-26 04:49:11 +02:00
DenverCoder1 1ca5906aa9 Added to readme 2020-10-26 04:46:39 +02:00
DenverCoder1 d13c451cc0 Using streak stats options menu 2020-10-26 04:41:24 +02:00
DenverCoder1 12279914f1 Fixed link generator name and theme query string 2020-10-26 04:37:49 +02:00
DenverCoder1 25a1bf4110 Add GitHub Streak Stats 2020-10-26 03:57:34 +02:00
Tekena Solomon 444c84407c Merge remote-tracking branch 'upstream/master' into master 2020-10-26 00:33:31 +01:00
Wanderson pinto dos santos 318b577765 rebase to maste, remove react-test-renderer and use enzyme-to-json 2020-10-25 14:16:23 -03:00
Wanderson pinto dos santos b98fecf05a Merge remote-tracking branch 'upstream/master' 2020-10-25 14:02:08 -03:00
Taha Shahid 40ccef24fd Refactored test cases to use enzyme 2020-10-25 21:40:05 +05:00
Citrinin a7ee36dad0 update test 2020-10-25 17:11:36 +03:00
Citrinin a1bbb7f887 make tests green 2020-10-25 17:06:57 +03:00
Citrinin a7680fb353 add ci 2020-10-25 16:21:22 +03:00
Rahul Jain d7bf06c7be Merge pull request #321 from Citrinin/update-test-and-config
[fix]: tests and project config
2020-10-25 15:43:03 +05:30
Citrinin 2652aea305 Merge branch 'update-test-and-config' of https://github.com/Citrinin/github-profile-readme-generator into update-test-and-config 2020-10-25 12:57:23 +03:00
Citrinin 0df590a045 update tests & config 2020-10-25 12:26:43 +03:00
Citrinin d259921b2e fix tests & update config 2020-10-25 12:25:48 +03:00
Citrinin f3ca29df8b Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator 2020-10-25 11:35:34 +03:00
Wanderson pinto dos santos 705ca572f5 test markdown.js 2020-10-24 15:16:10 -03:00
Tekena Solomon 5803097e9d Add unit test for Social component 2020-10-24 15:13:32 +01:00
Taha Shahid 7a612901e3 Added Test for markdownPreview and its subcomponents 2020-10-24 17:54:47 +05:00
Taha Shahid d81fa46e75 Refactored components in markdownPreview 2020-10-24 17:33:53 +05:00
Anusha S eafa964cb9 tech: add snapshot test for add ons component 2020-10-24 14:18:03 +05:30
Rahul Jain bca0f7a18c Merge pull request #307 from VeenaDesai38/worktest
[add]: unit test cases for work component
2020-10-24 12:56:10 +05:30
rdesai2 3c1e4fee34 fix: rebasing yarn.lock 2020-10-24 12:36:31 +05:30
Rahul Jain e5791fc0ec Merge pull request #312 from Citrinin/add-header-tests
[add]: a unit test for header component
2020-10-24 12:05:14 +05:30
Rahul Jain e32acb6db3 Merge pull request #310 from Citrinin/add-donate-snapshot-test
[add]: a unit test case for donate component
2020-10-24 12:03:24 +05:30
Rahul Jain a933180d34 Merge pull request #306 from ankurchaudhary627/tests/subtitle-unit-test
[add]: a unit test for subtitle component
2020-10-24 12:02:31 +05:30
rdesai2 723cf48bb5 Revert "fix: resolving package issues"
This reverts commit 8a1f60f4a4.
2020-10-24 12:02:15 +05:30
Rahul Jain 4ac9861096 Merge pull request #309 from Citrinin/add-loader-test-snapshot
[add]: a unit test case for loader component
2020-10-24 12:01:19 +05:30
rdesai2 8a1f60f4a4 fix: resolving package issues 2020-10-24 12:00:35 +05:30
Rahul Jain 7091c94801 Merge pull request #304 from carlospatinos/master
[add]: unit test for the footer
2020-10-24 12:00:02 +05:30
Rahul Jain ddb17bc0de Merge pull request #288 from rotem-bar/rotem-bar/285
[fix]: spacing inconsistencies in footer
2020-10-24 11:53:17 +05:30
Rahul Jain c5f50a1a3c Merge pull request #286 from datejer/master
[add]: Discord invite field in Social
2020-10-24 11:50:46 +05:30
rdesai2 94b00fb72e Revert "fix: yarn.lock changes"
This reverts commit 649ae8f797.
2020-10-24 11:42:36 +05:30
rdesai2 d220e82ed1 Revert "fix: fixing build failure"
This reverts commit 865321f39d.
2020-10-24 11:42:16 +05:30
rdesai2 865321f39d fix: fixing build failure 2020-10-24 11:40:28 +05:30
Rahul Jain b0ad615680 Merge pull request #308 from emilpalsson/mssql
[add]: Microsoft SQL Server skill
2020-10-24 11:37:20 +05:30
Citrinin d333ce375a add header test 2020-10-23 23:42:19 +03:00
Citrinin 66561ce2a1 add header tests 2020-10-23 23:40:37 +03:00
Citrinin 18709444c4 add donate snapshot test 2020-10-23 23:11:36 +03:00
Citrinin c8aec7006c add loader test snapshot 2020-10-23 22:40:02 +03:00
emilpalsson 2d5ce3bf77 Add Microsoft SQL Server skill 2020-10-23 20:49:27 +02:00
rdesai2 649ae8f797 fix: yarn.lock changes 2020-10-23 22:30:18 +05:30
rdesai2 6759486a5d fix: issue302 adding unit tests 2020-10-23 22:20:46 +05:30
Ankur Chaudhary 784710be47 Added unit test for subtitle component 2020-10-23 20:52:39 +05:30
Carlos Patino a4ea5ac9e9 Addint test for the footer 2020-10-23 15:02:51 +01:00
Rahul Jain 1c45d54dff Merge pull request #289 from harshcut/fix-duplicate
[fix]: duplicate CoffeeScript key
2020-10-23 17:35:31 +05:30
Rahul Jain e81e39e799 [add]: hacktoberfest label by default 2020-10-23 17:21:19 +05:30
Rahul Jain 42ada6734b add discord server image in template 2020-10-23 16:44:49 +05:30
Rahul Jain 5492605e18 add discord server image in template 2020-10-23 16:44:16 +05:30
Harsh Karande ded717ab76 fix: duplicate coffeescript key 2020-10-21 21:30:10 +05:30
rotem-bar ba7af8cf3f fix(footer): spacing inconsistencies 2020-10-21 16:34:36 +03:00
datejer 4831ee47fe Add Discord invite field 2020-10-20 20:47:46 +02:00
Rahul Jain 1f5b37ce0d Merge pull request #282 from bhavika24/issue-281
[add]: matlab icon
2020-10-19 18:46:37 +05:30
bhavika24 ca8da23ddc added matlab icon 2020-10-18 23:02:36 +05:30
Rahul Jain dc0f39105a Merge pull request #280 from rahuldkjain/issue-278
[fix]: issue #278
2020-10-18 18:10:34 +05:30
zolostays 079fd604ea [fix]: issue #278 2020-10-18 18:03:23 +05:30
Rahul Jain bf7cd6999f Merge pull request #277 from YashKandalkar/code-style-guide
[add]: code style guide
2020-10-18 17:14:21 +05:30
YashKandalkar 9ac50e9ea7 added code style guide 2020-10-18 16:41:53 +05:30
Rahul Jain e6d2cdb5a7 Merge pull request #268 from zenby/do-not-request-data-at-background
[fix]: infinite requests if page is not visible
2020-10-18 08:42:47 +05:30
Rahul Jain 4c12c077a6 Merge pull request #267 from sarbikbetal/srbk/patch
[fix]: Conditional rendering of SectionTitles
2020-10-18 08:41:40 +05:30
Rahul Jain 96c69d554d Merge pull request #266 from Tailine/feat/json-upload
[feat]: option to upload json backup file
2020-10-18 08:37:46 +05:30
Rahul Jain c3582cd225 Merge branch 'master' into feat/json-upload 2020-10-18 08:35:49 +05:30
Rahul Jain f184867d9e Merge pull request #265 from dalmia007/footer-links
[add]: Issues and Pull Requests link to footer [Issue #263]
2020-10-18 08:32:51 +05:30
Tailine Chagas e9a365e619 refactor: unstage other changes from PR that do not relate with feature 2020-10-17 18:12:38 -03:00
Rahul Jain 48e202bb20 Merge pull request #237 from Aditya-ds-1806/master
[add]: add Matlab SVG
2020-10-15 10:09:29 +05:30
Rahul Jain 9ceeeb7d4b Merge pull request #264 from pollyj/feature/responsive_footer
[fix]: footer responsiveness
2020-10-15 10:01:32 +05:30
pollyj dd70212616 fixed font weight of links 2020-10-15 09:47:21 +09:00
Anurag Dalmia 4e6a1a516d added correct labels for issues and pull request links 2020-10-14 12:40:41 +05:30
Aditya DS 4060676ab1 added matlab svg 2020-10-14 12:37:12 +05:30
Aditya DS 4bd2548682 added matlab to the list 2020-10-14 12:36:59 +05:30
Aditya DS 5a7b46357a synced fork with original repo 2020-10-14 12:26:20 +05:30
Aditya DS 64f6f40579 resolved merge conflict 2020-10-14 12:24:34 +05:30
Rahul Jain 4a99f2f599 Merge pull request #269 from harshcut/host-image
[feat]: host skill icons
2020-10-14 11:02:24 +05:30
Harsh Karande 4f0578db39 feat: host skill icons 2020-10-12 20:36:37 +05:30
Aditya DS 8ac19f40c9 Update skills.js 2020-10-12 20:22:32 +05:30
Aditya DS bfec4e29e9 Merge branch 'master' into master 2020-10-12 20:00:17 +05:30
zenby d06ef502d2 fix infinite requests 2020-10-12 15:59:14 +03:00
Sarbik Betal a92167e2d3 [fix]: Conditional rendering of SectionTitles 2020-10-12 14:56:13 +05:30
pollyj 79112d9a95 add margin to links & increase font size 2020-10-12 09:29:02 +09:00
Tailine Chagas 693ac86846 feat: add option to upload json backup file 2020-10-11 16:49:09 -03:00
Anurag Dalmia c5f6923187 matched package-locked.json to original 2020-10-12 00:23:59 +05:30
Anurag Dalmia 2d481ca4df Delete package-lock.json 2020-10-12 00:20:37 +05:30
Anurag Dalmia 7561af7a0a fixed package-lock.json 2020-10-12 00:19:16 +05:30
Anurag Dalmia 66b751ef57 fixed package-lock.json 2020-10-12 00:14:45 +05:30
Anurag Dalmia 02d6cf440e Delete package-lock.json 2020-10-12 00:11:08 +05:30
Anurag Dalmia 224fb7c597 added Issues and Pull Requests link to footer 2020-10-11 19:34:56 +05:30
pollyj 0a6fa01f7d update footer to be responsive 2020-10-11 21:31:21 +09:00
Rahul Jain 5359edb4f1 Merge pull request #259 from BRAVO68WEB/master
[add]: new skills
2020-10-11 17:19:40 +05:30
Rahul Jain 4c2c783d6a Merge branch 'master' into master 2020-10-11 17:15:57 +05:30
Rahul Jain 3625b22266 Merge pull request #254 from cy/customize-github-stats
[add]: feature to customize the GitHub stats and top languages card
2020-10-11 17:11:13 +05:30
Rahul Jain e24ea88773 Merge pull request #245 from msriaz/warning-fix/225
[fix] warning in local environment
2020-10-11 17:07:46 +05:30
Rahul Jain 2eee4b677d Merge pull request #208 from pro-nav/patch-1
[add]: Arduino and Solidworks in skills
2020-10-11 16:58:58 +05:30
Rahul Jain 48b3ed3d02 Merge pull request #239 from j23saw/master
[add]: searchbar for skills
2020-10-11 15:32:13 +05:30
Jyotirmoy Bandyopadhyaya [Bravo68] 22e7a96b7f ADDed new skills
**Added These skills :-** 

  unreal: "https://unrealengine.com/",
  hexo: "hexo.io/",
  heroku: "https://heroku.com",
  zapier: "https://zapier.com",
  elixir: "https://elixir-lang.org",
  travisci: "https://travis-ci.org",
  apachecordova: "https://cordova.apache.org/",
  coffeescript: "https://coffeescript.org/",
  "sqlite": "https://www.sqlite.org/",
  postman: "https://postman.com",
  erlang: "https://www.erlang.org/",
  middleman: "https://middlemanapp.com/"
2020-10-10 12:32:41 +05:30
Muhammad Shoaib Riaz 3691d5c609 removing yarn.lock file 2020-10-09 16:19:20 +05:00
Muhammad Shoaib Riaz a212b40d4d removing changes of yarn.lock 2020-10-09 16:10:47 +05:00
Christine Yu a2d8a661a6 add top lang customize 2020-10-09 05:06:41 -04:00
Aditya DS 0097c3e9b3 Merge branch 'master' into master 2020-10-09 14:32:50 +05:30
Aditya DS 0d012ff70a Revert "fixed error on local environment"
This reverts commit dcd82b4eae.
2020-10-09 14:28:58 +05:30
Christine Yu acaa15dacf add all github stats options 2020-10-08 21:57:47 -04:00
Christine Yu ff65cfbd8c add link-generators util 2020-10-08 21:31:30 -04:00
Christine Yu 65086cbd99 add ability to change github stats theme 2020-10-08 21:16:22 -04:00
Christine Yu ae6ddfb3fd Make customize box logic reusable by pulling up into AddonsItem and creating CustomizeOptions component 2020-10-08 20:27:31 -04:00
j23saw b719553909 indent 2020-10-09 02:02:37 +05:30
j23saw 5e63c400e1 add search fallback 2020-10-09 01:51:17 +05:30
j23saw 43d626f4e1 Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator into master 2020-10-08 23:31:50 +05:30
j23saw e8c11274ea resolve changes 2020-10-08 23:29:00 +05:30
Rahul Jain 8809fb7c43 Merge pull request #241 from Mohitmadhav/Issue-#228
[update] gatsby-plugin-sharp version
2020-10-08 22:36:32 +05:30
Rahul Jain fa1dcf2fd9 Merge pull request #250 from kunaljain0212/cockroachicon
[fix]: broken cockroachdb icon link
2020-10-08 22:24:13 +05:30
Christine Yu 8d4ac6d394 CustomizeOptions component 2020-10-07 20:15:32 -04:00
j23saw c7e0901d11 clean code 2020-10-08 00:16:09 +05:30
j23saw e948dd1148 fix search 4 2020-10-08 00:09:03 +05:30
Kunal Jain ca55d9e02c fixed broken cockroachdb icon link 2020-10-07 23:59:24 +05:30
j23saw 361c52bee0 fix search 3 2020-10-07 23:39:42 +05:30
j23saw d1c1ab4821 Merge branch 'master' of https://github.com/j23saw/github-profile-readme-generator into master 2020-10-07 23:31:59 +05:30
j23saw 21f29343e3 fix search 2 2020-10-07 23:31:52 +05:30
j23saw 4b08b2fe97 fix search 1 2020-10-07 23:31:35 +05:30
j23saw 75eb5878cd fix search 1 2020-10-07 23:18:53 +05:30
j23saw 064b827014 Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator into master 2020-10-07 23:11:06 +05:30
j23saw b83adbc715 fix search 2020-10-07 23:10:22 +05:30
Rahul Jain 0ca556a9de Merge pull request #246 from thauska/master
[update]: footer with new design
2020-10-07 20:20:40 +05:30
j23saw 33ed98add7 Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator into master 2020-10-07 18:18:53 +05:30
Thayana Mamoré 27b01ccf71 [feat]: modify footer as requested 2020-10-06 23:36:53 -03:00
Thayana Mamoré 980f970caa Merge branch 'master' of https://github.com/rahuldkjain/github-profile-readme-generator 2020-10-06 22:53:18 -03:00
Muhammad Shoaib Riaz f59987241f fixing warning in local environment 2020-10-07 01:24:12 +05:00
Rahul Jain cb124b7b19 Merge pull request #226 from Maddoxx88/patch-6
[add]: Twitter Username Validation
2020-10-06 23:35:48 +05:30
Rahul Jain 008f2f818b Merge pull request #244 from rahuldkjain/pr-template
[add]: pr-template
2020-10-06 23:27:32 +05:30
zolostays a1dfb87eaa [fix]: typo in pr-template 2020-10-06 23:26:50 +05:30
zolostays 559949d5f3 [add]: pr-template 2020-10-06 23:24:35 +05:30
Rahul Jain 19b6a99893 Merge pull request #203 from rahuldkjain/all-contributors/add-KKVANONYMOUS
docs: add KKVANONYMOUS as a contributor
2020-10-06 23:05:09 +05:30
Rahul Jain 7c3c64ec8d Merge branch 'master' into all-contributors/add-KKVANONYMOUS 2020-10-06 23:04:13 +05:30
Rahul Jain 25b19432ff Merge pull request #177 from rahuldkjain/all-contributors/add-jaideepghosh
docs: add jaideepghosh as a contributor
2020-10-06 23:01:56 +05:30
Rahul Jain e6fff7627a Merge branch 'master' into all-contributors/add-jaideepghosh 2020-10-06 23:01:37 +05:30
Rahul Jain 85530aad63 Merge pull request #168 from rahuldkjain/all-contributors/add-YashKandalkar
docs: add YashKandalkar as a contributor
2020-10-06 22:59:21 +05:30
Rahul Jain cd3df511e5 Merge branch 'master' into all-contributors/add-YashKandalkar 2020-10-06 22:59:03 +05:30
Rahul Jain 1def3dc501 Merge pull request #161 from rahuldkjain/all-contributors/add-abhijit-hota
docs: add abhijit-hota as a contributor
2020-10-06 22:57:33 +05:30
Rahul Jain 12d94283c3 Merge branch 'master' into all-contributors/add-abhijit-hota 2020-10-06 22:56:54 +05:30
Rahul Jain 756b0942a1 Merge pull request #154 from rahuldkjain/all-contributors/add-Maddoxx88
docs: add Maddoxx88 as a contributor
2020-10-06 22:55:12 +05:30
Rahul Jain 6db2bd9278 Merge branch 'master' into all-contributors/add-Maddoxx88 2020-10-06 22:55:05 +05:30
zolostays 2b99a7e3ed [add]: g-savitha in README 2020-10-06 22:48:26 +05:30
Rahul Jain 5448102770 Merge pull request #134 from rahuldkjain/all-contributors/add-Hardik0307
docs: add Hardik0307 as a contributor
2020-10-06 22:37:18 +05:30
Rahul Jain cbb1dddb8e Merge branch 'master' into all-contributors/add-Hardik0307 2020-10-06 22:37:07 +05:30
Mohit_007 fe0bffbd93 commit 2020-10-06 19:17:37 +05:30
j23saw 5f10777adb add searchbar 2020-10-06 01:49:14 +05:30
Aditya D.S dcd82b4eae fixed error on local environment 2020-10-05 18:31:46 +05:30
Aditya D.S 251ab17595 added matlab svg 2020-10-05 16:21:55 +05:30
Rahul Jain cc962a940a Merge pull request #229 from aaditkamat/add-vuepress
[add]: VuePress as a static site generator
2020-10-04 19:27:02 +05:30
Aadit Kamat fb20ed73ac Add vuepress under skillWebsites 2020-10-04 21:20:40 +08:00
allcontributors[bot] 0bf13cdbb1 docs: update .all-contributorsrc [skip ci] 2020-10-04 12:41:50 +00:00
allcontributors[bot] 10742994b0 docs: update README.md [skip ci] 2020-10-04 12:41:49 +00:00
Sunit Shirke c8102c7f97 Corrected twitter markdown link 2020-10-04 18:05:49 +05:30
Sunit Shirke aeca176f40 Corrected href link 2020-10-04 17:52:31 +05:30
Sunit Shirke 2689fe40cd Corrected href link in markdown 2020-10-04 17:44:43 +05:30
Sunit Shirke 4e5c2b974b Corrected twitter props link in markdown 2020-10-04 17:29:04 +05:30
Sunit Shirke 7e6120dedf Corrected twitter props link in preview 2020-10-04 17:27:19 +05:30
Sunit Shirke a446bbe408 Corrected href link in markdown 2020-10-04 17:25:07 +05:30
Sunit Shirke 7be9b08cd8 Corrected href link in preview 2020-10-04 17:24:05 +05:30
Sunit Shirke cac51acc92 Removed bracket error 2020-10-04 17:15:47 +05:30
Rahul Jain 4a2bd779c4 Merge pull request #204 from Aarush-Goyal/master
[add]: design addons
2020-10-04 17:12:26 +05:30
Rahul Jain 91b1d2f6ea Merge pull request #160 from abhijit-hota/add-unit-tests
[test]: Add unit tests #47
2020-10-04 16:58:10 +05:30
Aadit Kamat 264161c054 Replace with SVG 2020-10-04 15:30:04 +08:00
zolostays 8812ea048f [add]: package.json 2020-10-04 12:49:05 +05:30
Aadit Kamat 656e055cd0 Add VuePress as a static site generator 2020-10-04 15:15:22 +08:00
Rahul Jain 3793bcdad9 Merge pull request #214 from nidhi-bhanushali/master
[add]: Resume field in the work section
2020-10-04 12:37:58 +05:30
Sunit Shirke 4a1e6736ae Updated username validation for Twitter Badge 2020-10-04 12:36:42 +05:30
Sunit Shirke 5b7b83804a Updated on-click links for Twitter Badge in markdown 2020-10-04 12:30:41 +05:30
Nidhi Bhanushali 808d613dc1 Deleted package-lock.json 2020-10-04 12:29:04 +05:30
Sunit Shirke 7e1e742f46 Updated on-click link on Twitter Badge 2020-10-04 12:26:45 +05:30
Rahul Jain 580047ba7a Merge pull request #179 from Darkangeel-hd/add-perl-language
[add]: Perl to Programming Languages
2020-10-04 12:25:52 +05:30
Rahul Jain dd682423db Merge pull request #180 from Darkangeel-hd/add-openrest-backend
[add]: OpenResty to Backend Development
2020-10-04 12:25:07 +05:30
Nidhi Bhanushali ba609c3229 Made changes to package.json 2020-10-04 12:18:19 +05:30
Nidhi Bhanushali 2b35031629 Made changes to package.json 2020-10-04 12:16:10 +05:30
Sunit Shirke cd4451c607 Validation for twitter username updated. 2020-10-04 12:12:58 +05:30
Rahul Jain f38e0dbf0e Merge pull request #197 from vivek32ta/add-static-site-generators
[add]: 11ty, Scully, Sculpin, Sapper under static site generators
2020-10-04 12:01:59 +05:30
Rahul Jain 68b331b56b Merge branch 'master' into add-static-site-generators 2020-10-04 11:56:21 +05:30
Sunit Shirke f4e65fa555 Regex for Twitter Username Validation 2020-10-04 11:52:27 +05:30
Rahul Jain 14e3a7e57d Merge pull request #181 from Darkangeel-hd/add-cockroach-database
[add]: CockroachDB to Database
2020-10-04 11:52:01 +05:30
Rahul Jain 556a08365c Merge pull request #218 from lucid-dreem/master
[design]: add header design
2020-10-04 11:45:15 +05:30
Rahul Jain 9a2416bc5d Merge pull request #202 from sarbikbetal/srbk/dev
[design]: About page design idea.
2020-10-04 11:37:18 +05:30
Rahul Jain b81a30ebd0 Merge pull request #173 from parikshitghosh3/xd
[add]: Abobe XD in Skills
2020-10-04 11:16:36 +05:30
Rahul Jain 26a8c08b92 Merge pull request #147 from YashKandalkar/warnings-resolved
[fix]: warnings
2020-10-04 11:12:29 +05:30
zolostays 7d80d29a8b [fix]: syntax-error 2020-10-04 10:47:53 +05:30
Rahul Jain a4377c1dd6 Merge pull request #162 from Maddoxx88/patch-5
[add]: checkbox for twitterBadge as add-on.
2020-10-04 10:37:53 +05:30
zolostays 77df86a9a6 [fix]: syntax error 2020-10-04 10:21:17 +05:30
Rahul Jain eb7a06f1c0 Merge branch 'master' into patch-5 2020-10-04 10:15:35 +05:30
Rahul Jain 5725fdb018 Merge pull request #157 from Maddoxx88/patch-4
[add]: twitterBadge in const data
2020-10-04 10:05:32 +05:30
Rahul Jain 908cfa095e Merge pull request #209 from YashKandalkar/profile-badge-customization
[add]: Profile badge customization
2020-10-04 09:51:23 +05:30
lucid-dreem 36ce7a68ac add header design
Adding a potential design idea for the header. It rearranges the old elements and makes some slight additions to give a more professional feel.
2020-10-03 12:17:31 +05:30
Nidhi Bhanushali 5305ae1f6e Made changes in markdown.js 2020-10-03 11:15:52 +05:30
Nidhi Bhanushali 7d6dd860aa Made changes in markdownPreview.js 2020-10-03 11:12:22 +05:30
Nidhi Bhanushali 011720885e Added Resume field in the work section 2020-10-03 10:08:21 +05:30
YashKandalkar 5c51edd4eb Resolved merge conflicts 2020-10-03 00:59:18 +05:30
YashKandalkar 080e5f7822 Added check for preview 2020-10-03 00:45:10 +05:30
Pranav Dudhane 32c42c1f4e Added Arduino and Solidworks
#205
2020-10-03 00:28:02 +05:30
Angel e2ed889d5b Merge branch 'master' into add-cockroach-database 2020-10-02 20:35:34 +02:00
Aarush Goyal bbb8ce6bd3 added design addons 2020-10-02 23:51:37 +05:30
allcontributors[bot] 413d279a19 docs: update .all-contributorsrc [skip ci] 2020-10-02 16:34:35 +00:00
allcontributors[bot] 729354b053 docs: update README.md [skip ci] 2020-10-02 16:34:34 +00:00
Sarbik Betal ef55e85dba Added about page redesign. 2020-10-02 20:43:41 +05:30
zolostays 1d814d385d [restore]: images 2020-10-02 20:33:49 +05:30
YashKandalkar e48d9eeac6 Added profile badge customization 2020-10-02 20:28:41 +05:30
Rahul Jain 6f1530dc1b Merge pull request #1 from rahuldkjain/imgbot
[ImgBot] Optimize images
2020-10-02 20:26:33 +05:30
ImgBotApp bd0a35bedc [ImgBot] Optimize images
*Total -- 3,072.02kb -> 2,809.95kb (8.53%)

/src/designs/GPRG Style Guide.png -- 619.53kb -> 419.01kb (32.37%)
/src/images/mdg.png -- 11.20kb -> 8.99kb (19.72%)
/src/images/github-profile-readme-generator.gif -- 2,436.75kb -> 2,377.42kb (2.43%)
/src/images/icons/mysqlworkbench.svg -- 4.54kb -> 4.53kb (0.26%)

Signed-off-by: ImgBotApp <ImgBotHelp@gmail.com>
2020-10-02 14:54:42 +00:00
zolostays 804edf96d3 [add]: design-styleguide 2020-10-02 20:21:55 +05:30
zolostays 31094f8d4e [add]: mysql-workbench icon 2020-10-02 20:20:04 +05:30
zolostays 2f80d2cc8d [add]: design 2020-10-02 20:19:20 +05:30
zolostays 8012eea403 [add]: design folder 2020-10-02 20:17:46 +05:30
Vivek T A a21589381f changed images to svg 2020-10-02 19:47:48 +05:30
Savitha Gollamudi 321ce36eb7 Merge pull request #178 from jaideepghosh/master
feat: Added github trophy.
2020-10-02 18:36:11 +05:30
Savitha Gollamudi 91810816ba Merge pull request #194 from KKVANONYMOUS/master
Created a new category of Game Engines and added Unity to it
2020-10-02 18:27:05 +05:30
Savitha Gollamudi 0d83419d03 Merge pull request #195 from swapneelr09/all-contributors/add-swapneelr09
Added Graphql Skill
2020-10-02 18:13:17 +05:30
Sunit Shirke bff504b498 Updated Twitter Badge Component 2020-10-02 18:07:48 +05:30
Sunit Shirke 97b555e63c Updated Twitter Badge Markdown Preview 2020-10-02 18:01:52 +05:30
Sunit Shirke 3fa08161ce Merge branch 'master' into patch-5 2020-10-02 17:54:18 +05:30
Savitha Gollamudi 314abc7be5 integrate welcome bot 2020-10-02 17:30:38 +05:30
Thayana Correa Mamore a6756d0058 Merge pull request #1 from rahuldkjain/master
updating fork repo
2020-10-02 08:37:43 -03:00
jaideepghosh 2338a7db00 feat(trophy):Added credit link. 2020-10-02 16:37:49 +05:30
Vivek T A 1773c32033 add 11ty, scully, sculpin, sapper 2020-10-02 16:22:29 +05:30
Swapneel Roy d96593fe46 Added Graphql Skill 2020-10-02 15:15:07 +05:30
kkvanonymous 0c23182f4e add-unity 2020-10-02 15:04:13 +05:30
Savitha Gollamudi d91f5d3a45 Merge pull request #155 from shajanjp/fix-title-alignment
fix: #158 aligns titles to the left
2020-10-02 14:04:09 +05:30
Savitha Gollamudi 090001b956 Merge pull request #182 from MuhBayu/master
Added DevOps Skills
2020-10-02 13:07:59 +05:30
MuhBayu e9bc837492 Added DevOps Skills 2020-10-02 10:19:13 +07:00
Darkangeel-hd 3b4f2add83 Added CockroachDB to Database 2020-10-02 01:24:15 +02:00
Darkangeel-hd 5ef270a9f4 Added OpenResty Backend
OpenResty is a full-fledged web platform that integrates our enhanced version of the Nginx core, our enhanced version of LuaJIT.
2020-10-02 01:11:05 +02:00
Darkangeel-hd 7a9a4dcf47 Added Perl to Programming Languages 2020-10-02 00:59:42 +02:00
jaideepghosh 21483d66e0 feat(app):Added github trophy feat. 2020-10-02 02:12:03 +05:30
allcontributors[bot] ca8cea3141 docs: update .all-contributorsrc [skip ci] 2020-10-01 20:07:54 +00:00
allcontributors[bot] a456023b55 docs: update README.md [skip ci] 2020-10-01 20:07:53 +00:00
Parikshit Ghosh fe88af9544 Added XD respect to Issue #149 2020-10-01 17:35:50 +00:00
Savitha Gollamudi e3ed30baa6 Merge pull request #170 from quintenbuis/patch-1
Fix: #169 Remove youtube from README
2020-10-01 22:02:58 +05:30
Quinten Buis e54222ddbf #169 Remove youtube from README 2020-10-01 16:35:20 +02:00
allcontributors[bot] 6f6025fff5 docs: update .all-contributorsrc [skip ci] 2020-10-01 13:58:39 +00:00
allcontributors[bot] 18143686a8 docs: update README.md [skip ci] 2020-10-01 13:58:38 +00:00
Rahul Jain b36e7001b5 Merge pull request #148 from thauska/master
[add]: Quasar framework skill
2020-10-01 19:07:54 +05:30
Rahul Jain 8dd547e88d Merge pull request #144 from YashKandalkar/addon-enhancement
[fix]: text wrapping below checkbox on mobile
2020-10-01 19:07:23 +05:30
Sunit Shirke 1737d02957 Added a checkbox for twitterBadge as add-on 2020-10-01 16:36:07 +05:30
allcontributors[bot] 3e130915cc docs: update .all-contributorsrc [skip ci] 2020-10-01 10:24:25 +00:00
allcontributors[bot] 4789090cff docs: update README.md [skip ci] 2020-10-01 10:24:24 +00:00
abhijitXD 1f5aa89161 Add basic unit test for the Title component 2020-10-01 15:36:24 +05:30
abhijitXD 3f05970642 Add dependencies and configs for unit tests 2020-10-01 15:36:01 +05:30
Rahul Jain a87f7cc2a5 [del]: yarn.lock 2020-10-01 15:15:08 +05:30
Sunit Shirke 33d18f4c8f Update index with twitterBadge in data
Added basic validation during before readme generation
2020-10-01 14:20:50 +05:30
Rahul Jain b1c813540f Merge pull request #156 from kala2/dicord-fix-server-id
[fix]: change discord server-id
2020-10-01 14:00:41 +05:30
kala2 5c7b3ed923 fix: change discord server id 2020-10-01 11:27:28 +03:00
shajanjp 45c6a3a97c fix: aligns titles to the left 2020-10-01 13:53:47 +05:30
allcontributors[bot] 9c79fe1a64 docs: update .all-contributorsrc [skip ci] 2020-10-01 07:51:17 +00:00
allcontributors[bot] e8ebabee8c docs: update README.md [skip ci] 2020-10-01 07:51:16 +00:00
YashKandalkar 5cb817a03e Bug fixes 2020-10-01 13:18:59 +05:30
YashKandalkar 6d0377a6a9 Resolved eslint warnings 2020-10-01 12:34:20 +05:30
Thayana Mamoré 86593cecbd [add]: Added Quasar framework skill 2020-09-30 23:16:40 -03:00
YashKandalkar 0a73c08dcf Moved AddonsItem component to addons.js file 2020-09-27 18:41:45 +05:30
Rahul Jain 19a511d94f Merge pull request #138 from rahuldkjain/all-contributors/add-antonkomarev
docs: add antonkomarev as a contributor
2020-09-27 18:05:17 +05:30
zolostays 06b6537795 [fix]: markdown formatting 2020-09-27 17:57:07 +05:30
YashKandalkar 63f68f3ce7 Added a new component AddonItem, improved text wrapping of an addon on
smaller screens
2020-09-27 01:16:48 +05:30
allcontributors[bot] c345c204d1 docs: update .all-contributorsrc [skip ci] 2020-09-25 16:32:23 +00:00
allcontributors[bot] c963e03c28 docs: update README.md [skip ci] 2020-09-25 16:32:22 +00:00
allcontributors[bot] 13ae1d20ed docs: update .all-contributorsrc [skip ci] 2020-09-25 14:26:11 +00:00
allcontributors[bot] 532867563d docs: update README.md [skip ci] 2020-09-25 14:26:10 +00:00
zolostays 351dfbbde1 [fix]: readme with all-contributors 2020-09-25 18:00:44 +05:30
Rahul Jain a44f36de26 Merge pull request #133 from rahuldkjain/all-contributors/add-sarbikbetal
docs: add sarbikbetal as a contributor
2020-09-25 17:54:58 +05:30
allcontributors[bot] f1e13f4129 docs: create .all-contributorsrc [skip ci] 2020-09-25 12:12:35 +00:00
allcontributors[bot] af05011d9d docs: update README.md [skip ci] 2020-09-25 12:12:34 +00:00
Rahul Jain 43733cdb4b Merge pull request #130 from sarbikbetal/srbk/dev
[fix]: align social and skill icons to the left
2020-09-25 17:29:33 +05:30
Rahul Jain af02bfcab8 Merge pull request #129 from jaideepghosh/master
[fix]: issue #128
2020-09-25 17:29:10 +05:30
Sarbik Betal 894c1ebb1e Code review changes. 2020-09-25 16:55:30 +05:30
Sarbik Betal 8e91804d48 [Fix] Align skills to the left 2020-09-25 16:11:25 +05:30
Rahul Jain 5c2c72706a [add]: opencollective in funding 2020-09-25 16:08:03 +05:30
jaideepghosh 5d72455864 feat(skills):Added websites. 2020-09-25 15:56:50 +05:30
Sarbik Betal 852931e37d [Add] added a sectionTitle element. 2020-09-25 15:53:05 +05:30
jaideepghosh 4918dcdff2 feat(skills):Added links. 2020-09-25 15:46:55 +05:30
Sarbik Betal a74802d33a [Fix] Align social icons to the left 2020-09-25 15:37:39 +05:30
jaideepghosh cdd734be82 feat(markdown):Added option to add anchor tag on skills. 2020-09-25 15:12:43 +05:30
jaideepghosh dc1930144d feat(skills):Added object to store skill's websites. 2020-09-25 15:12:15 +05:30
Rahul Jain f3e7277048 [update]: bug-report template with discord server 2020-09-25 12:40:31 +05:30
Rahul Jain 7aa7bada2e [update]: issue-template with discord server link 2020-09-25 12:39:09 +05:30
Rahul Jain 577a5e7680 Merge pull request #124 from rahuldkjain/donate
[add]: donate below markdown-box
2020-09-23 17:44:17 +05:30
zolostays a8015319a4 [add]: donate below markdown-box 2020-09-23 17:24:18 +05:30
Rahul Jain 8281423b3f Merge pull request #122 from rahuldkjain/fix-readme
[fix]: website link
2020-09-23 15:30:08 +05:30
zolostays 8f3987172a [fix]: website link 2020-09-23 15:29:22 +05:30
Rahul Jain eb9c1fdf9f Merge pull request #121 from MaheshBharadwaj/add-scikit-learn
[add]: scikit-learn under AI/ML
2020-09-23 15:24:54 +05:30
Mahesh Bharadwaj 199a5ee2b3 added scikit-learn under AI/ML 2020-09-22 19:18:00 +05:30
Rahul Jain 8e4618f33c Merge pull request #120 from rahuldkjain/optimize-readme
[optimize]: README
2020-09-21 15:08:17 +05:30
zolostays 6507d5ec45 [add]: emojis in README 2020-09-21 15:05:35 +05:30
zolostays 3188861572 [add]: emojis in README 2020-09-21 15:04:47 +05:30
zolostays a282731b14 [add]: feature checkbox 2020-09-21 14:56:06 +05:30
zolostays 20b3f89e71 [fix]: features-list 2020-09-21 12:56:16 +05:30
zolostays bef0f933ca [add]: tech specs in README 2020-09-21 12:54:35 +05:30
Rahul Jain a7ee16cf14 [add]: CONTRIBUTING.md 2020-09-21 11:49:19 +05:30
Rahul Jain 12f1fa8cc5 [add]: CODE_OF_CONDUCT 2020-09-21 11:45:21 +05:30
Rahul Jain a56ed46aa9 Merge pull request #117 from DenverCoder1/patch-2
[fix]: spelling and grammar in the README
2020-09-17 15:44:11 +05:30
Rahul Jain 411d694d1a Merge pull request #118 from rahuldkjain/issue-112
[fix]: remove border outline from input on focus
2020-09-17 15:42:20 +05:30
zolostays b20c9adccb [fix]: issue #112 2020-09-17 15:40:14 +05:30
Jonah Lawrence 9bdec79d18 Fixed spelling and grammar in the Readme 2020-09-17 12:58:00 +03:00
zolostays 409ed0420e [del]: tl.css 2020-09-17 15:10:06 +05:30
Rahul Jain 58a05e1f91 Merge pull request #114 from rahuldkjain/top-languages
[fix]: issue #90
2020-09-16 12:36:18 +05:30
zolostays 81e4cbb234 [fix]: issue #90 2020-09-16 12:34:45 +05:30
Rahul Jain b0f734d955 Merge pull request #111 from rahuldkjain/display-config
[fix]: display config options
2020-09-16 12:06:20 +05:30
Rahul Jain 00c8f7531e Merge pull request #110 from g-savitha/blogs_from_rss_feed
[add]: blogs from the personal website using RSS feed
2020-09-16 12:01:58 +05:30
Savitha Gollamudi 3b09ef8d07 Support to dynamically add blogs from personal website 2020-09-15 17:42:05 +05:30
zolostays e6d636d5f0 [fix]: display config options 2020-09-15 17:00:05 +05:30
Rahul Jain 3ee5764de2 Merge pull request #108 from g-savitha/prettier
[fix]: code formatting to the whole project
2020-09-15 16:25:38 +05:30
Savitha Gollamudi 3859e77bb3 Merge branch 'master' into prettier 2020-09-13 23:09:46 +05:30
Savitha Gollamudi 8e0a7996ec apply prettier to whole project 2020-09-13 23:02:37 +05:30
rahuldkjain ba80eec908 [add]: discord community server link 2020-09-13 18:59:08 +05:30
rahuldkjain 45a2ea731d [add]: discord community badge 2020-09-13 18:55:29 +05:30
Rahul Jain 014c2da58c Merge pull request #107 from komal7292/master
[fix]: spelling mistake in placeholder
2020-09-13 18:16:58 +05:30
komal 7a95d2b89e spelling correction 2020-09-12 17:21:43 +05:30
Rahul Jain 1da98086ed Merge pull request #102 from g-savitha/fix-dsa-social-links
[fix]: DSA social links
2020-09-10 15:51:25 +05:30
Rahul Jain 91061ebe0e Merge pull request #101 from N00Bmaster2810/satya
[del]: commented code
2020-09-10 15:49:30 +05:30
Rahul Jain 5e8b432217 Merge pull request #92 from MauricioHernanCabrera/skills
[add]: qtk, wt, xw-widgets in skills
2020-09-10 15:47:40 +05:30
Rahul Jain 2c347888a3 Merge branch 'master' into skills 2020-09-10 15:46:51 +05:30
Savitha Gollamudi f7285bb8fb fix dsa social links 2020-09-09 18:09:11 +05:30
Satya Prakash Satyam 067bf32218 commit 2 2020-09-09 12:38:25 +05:30
Satya Prakash Satyam b81f6054f9 removed unnecessary comments 2020-09-09 12:15:52 +05:30
Mauricio Hernan Cabrera 2de2be3af5 selenium updated 2020-09-05 14:20:47 -03:00
Mauricio Hernan Cabrera 8b13bf783a jasmine updated 2020-09-05 14:19:36 -03:00
Mauricio Hernan Cabrera cd38568eff karma updated 2020-09-05 14:19:06 -03:00
Mauricio Hernan Cabrera a794107775 puppeteer updated 2020-09-05 14:18:09 -03:00
Mauricio Hernan Cabrera af9ad29abf cypress updated 2020-09-05 14:15:01 -03:00
Mauricio Hernan Cabrera 1621f8fbb7 jest updated 2020-09-05 14:14:12 -03:00
Mauricio Hernan Cabrera 49b4458efd mocha updated 2020-09-05 14:13:51 -03:00
Mauricio Hernan Cabrera d953b4612b vuetify updated 2020-09-05 14:11:47 -03:00
Mauricio Hernan Cabrera 4027f1e953 svelte updated 2020-09-05 14:05:53 -03:00
Mauricio Hernan Cabrera 8226ba4024 wx-widgets added 2020-09-05 14:03:15 -03:00
Mauricio Hernan Cabrera 87f7f98299 qt added 2020-09-05 14:01:49 -03:00
Mauricio Hernan Cabrera ca54e5ef77 gtk added 2020-09-05 14:01:31 -03:00
rahuldkjain caf68b97ff [add]: BMC in funding.yml 2020-09-05 20:50:56 +05:30
rahuldkjain da238c9084 [fix]: flat() is not a function 2020-09-05 20:47:39 +05:30
rahuldkjain 2aa12a581b [add]: BMC widget 2020-09-05 19:56:18 +05:30
rahuldkjain 9153070f69 [fix]: social css 2020-09-05 17:57:30 +05:30
rahuldkjain 588bb821d6 [add]: tailwind css 2020-09-05 17:25:33 +05:30
Rahul Jain 1b1c1c366f Merge pull request #94 from kathawala/skills-fix
[fix]: CSS change to show names of skills on hover for smaller desktops
2020-09-05 17:14:48 +05:30
Rahul Jain 899c514e30 Merge pull request #88 from simonc/master
[add]: ember in skills
2020-09-05 17:14:04 +05:30
Rahul Jain 8659e03e6e Merge pull request #86 from amruta-kashikar/social-links-addition-3
[add]: social icons
2020-09-05 17:13:24 +05:30
Rahul Jain 455a288d7d Merge pull request #85 from amruta-kashikar/social-links-addition-2
[add]: social icons
2020-09-05 17:12:15 +05:30
Rahul Jain 072319a836 Merge pull request #84 from amruta-kashikar/social-links-addition-1
[add]: social icons
2020-09-05 17:11:47 +05:30
Rahul Jain 85a6558615 Merge pull request #83 from amruta-kashikar/social-links-addition
[add]: social icons
2020-09-05 17:11:13 +05:30
Farhan Kathawala 1b7651d0f5 Minor: CSS change to allow names of skills appearing on hover for smaller desktops 2020-09-03 18:09:13 -05:00
Amruta Kashikar b8d00ca08a Update markdown.js 2020-09-03 15:14:37 +05:30
Simon Courtois 04aa4a3c85 Adding Ember to the Frontend Dev list 2020-08-31 01:40:25 +02:00
Amruta Kashikar 917341f700 Update index.js 2020-08-28 20:44:06 +05:30
Amruta Kashikar ae574055d0 Update markdownPreview.js 2020-08-28 20:43:30 +05:30
Amruta Kashikar 159099ced3 Update markdown.js 2020-08-28 20:38:04 +05:30
Amruta Kashikar d955504e8f Added social links 2020-08-28 20:37:22 +05:30
297 changed files with 76041 additions and 4269 deletions
+97
View File
@@ -0,0 +1,97 @@
{
"files": [
"README.md"
],
"imageSize": 100,
"commit": false,
"contributors": [
{
"login": "sarbikbetal",
"name": "Sarbik Betal",
"avatar_url": "https://avatars2.githubusercontent.com/u/41508422?v=4",
"profile": "https://github.com/sarbikbetal",
"contributions": [
"code"
]
},
{
"login": "Hardik0307",
"name": "Hardik Bagada",
"avatar_url": "https://avatars3.githubusercontent.com/u/41434099?v=4",
"profile": "https://github.com/Hardik0307",
"contributions": [
"code"
]
},
{
"login": "antonkomarev",
"name": "Anton Komarev",
"avatar_url": "https://avatars0.githubusercontent.com/u/1849174?v=4",
"profile": "https://komarev.com",
"contributions": [
"plugin"
]
},
{
"login": "KKVANONYMOUS",
"name": "Kunal Kumar Verma",
"avatar_url": "https://avatars3.githubusercontent.com/u/58628586?v=4",
"profile": "https://kkvanonymous.github.io/",
"contributions": [
"code"
]
},
{
"login": "jaideepghosh",
"name": "Jaideep Ghosh",
"avatar_url": "https://avatars2.githubusercontent.com/u/3909648?v=4",
"profile": "http://jaideepghosh.blogspot.com",
"contributions": [
"code"
]
}
{
"login": "YashKandalkar",
"name": "yash",
"avatar_url": "https://avatars0.githubusercontent.com/u/35102959?v=4",
"profile": "http://yashkandalkar.github.io",
"contributions": [
"code"
]
},
{
"login": "abhijit-hota",
"name": "Abhijit Hota",
"avatar_url": "https://avatars0.githubusercontent.com/u/8116174?v=4",
"profile": "https://github.com/abhijit-hota",
"contributions": [
"code",
"test"
]
},
{
"login": "Maddoxx88",
"name": "Sunit Shirke",
"avatar_url": "https://avatars1.githubusercontent.com/u/34238672?v=4",
"profile": "https://maddoxx88.github.io/",
"contributions": [
"code"
]
}
{
"login": "g-savitha",
"name": "Savitha Gollamudi",
"avatar_url": "https://avatars0.githubusercontent.com/u/31612459?v=4",
"profile": "https://www.gsavitha.in",
"contributions": [
"code"
]
}
],
"contributorsPerLine": 7,
"projectName": "github-profile-readme-generator",
"projectOwner": "rahuldkjain",
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true
}
+1
View File
@@ -0,0 +1 @@
node_modules/**
+19
View File
@@ -0,0 +1,19 @@
{
"env": {
"browser": true,
"es2021": true
},
"extends": ["plugin:react/recommended", "airbnb", "prettier"],
"parserOptions": {
"ecmaFeatures": {
"jsx": true
},
"ecmaVersion": 12,
"sourceType": "module"
},
"plugins": ["react"],
"rules": {
"react/forbid-prop-types": 0
},
"ignorePatterns": ["**/*.test.js"]
}
+3 -2
View File
@@ -2,11 +2,12 @@
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
open_collective: github-profile-readme-generator
ko_fi: rahuldkjain
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://paypal.me/rahuldkjain']
custom:
["https://paypal.me/rahuldkjain", "https://www.buymeacoffee.com/rahuldkjain"]
+18 -8
View File
@@ -4,7 +4,6 @@ about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
@@ -12,6 +11,7 @@ A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
@@ -24,15 +24,25 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.
Join the **Discord Server** for further discussions.
<a href="https://discord.gg/HHMs7Eg">
<img src="https://discord.com/assets/e4923594e694a21542a489471ecffa50.svg" alt="GPRG Discord Server Link" width="300px"/>
</a>
Server Link: https://discord.gg/HHMs7Eg
@@ -2,9 +2,8 @@
name: Feature/Enhancement request
about: Suggest an idea for this project
title: ''
labels: enhancement
labels: enhancement, hacktoberfest
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
@@ -18,3 +17,11 @@ A clear and concise description of any alternative solutions or features you've
**Additional context**
Add any other context or screenshots about the feature request here.
Join the **Discord Server** for further discussions.
<a href="https://discord.gg/HHMs7Eg">
<img src="https://discord.com/assets/e4923594e694a21542a489471ecffa50.svg" alt="GPRG Discord Server Link" width="300px"/>
</a>
Server Link: https://discord.gg/HHMs7Eg
+42
View File
@@ -0,0 +1,42 @@
<!--
For Work In Progress Pull Requests, please use the Draft PR feature,
see https://github.blog/2019-02-14-introducing-draft-pull-requests/ for further details.
For a timely review/response, please avoid force-pushing additional
commits if your PR already received reviews or comments.
Before submitting a Pull Request, please ensure you've done the following:
- 📖 Read the Contributing Guide: https://github.com/rahuldkjain/github-profile-readme-generator/blob/master/CONTRIBUTING.md#create-a-pull-request.
- 📖 Read the Code of Conduct: https://github.com/rahuldkjain/github-profile-readme-generator/blob/master/CODE_OF_CONDUCT.md.
- 👷‍♀️ Create small PRs. In most cases this will be possible.
- ✅ Provide issue number with link.
- 📝 Use descriptive commit messages.
- 📗 Update any related documentation and include any relevant screenshots.
-->
## What type of PR is this? (check all applicable)
- [ ] Refactor
- [ ] Feature
- [ ] Bug Fix
- [ ] Enhancement
- [ ] Documentation Update
## Description
## Related Tickets & Documents
## QA Instructions, Screenshots, Recordings
_Please replace this line with instructions on how to test your changes, as well
as any relevant images for UI changes._
<!-- ## Added tests?
- [ ] yes
- [ ] no, because they aren't needed
- [ ] no, because I need help -->
## Added to documentation?
- [ ] readme
+17
View File
@@ -0,0 +1,17 @@
# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome
# Comment to be posted to on first time issues
newIssueWelcomeComment: >
Thanks for opening your first issue here! Your contribution means alot. 🙌 Join Discord Server (https://discord.gg/HHMs7Eg) for discussing issues, pull-requests, new features, etc.
# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
# Comment to be posted to on PRs from first time contributors in your repository
newPRWelcomeComment: >
Thanks for opening this pull request! Make sure you have assigned an issue to this respective PR 😇
# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge
# Comment to be posted to on pull requests merged by a first time user
firstPRMergeComment: >
Congrats on merging your first pull request🎉! Thanks alot for your contribution. 🙏
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install lint-staged
+7 -2
View File
@@ -1,4 +1,9 @@
{
"arrowParens": "avoid",
"semi": false
"singleQuote": true,
"jsxSingleQuote": false,
"tabWidth": 2,
"printWidth": 120,
"trailingComma": "all",
"semi": true,
"exclude": ["node_modules", "codepipeline"]
}
+6
View File
@@ -0,0 +1,6 @@
language: node_js
node_js:
- "14"
cache:
directories:
- "node_modules"
+76
View File
@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
- Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery and unwelcome sexual attention or
advances
- Trolling, insulting/derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information, such as a physical or electronic
address, without explicit permission
- Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at rahuldkjain@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq
+99
View File
@@ -0,0 +1,99 @@
# Coding Style
## File Layout (`src/components/*.js`)
1. Imports
2. Reusable components needed for the main component
3. Main component (Eg: Addons in addons.js)
4. export default \<MainComponent\>;
## Reusable components
- Do not make a new file for smaller components.
- Smaller, reusable components needed in the main components should be added **above** the main component, **not** inside it.
- Use ES6 arrow functions for defining components.
## Spacing
1. **JS:**
- Use a space after `if`, `for`, `while`, `switch`.
- Do not use a space after the opening `(` and before the closing `)`.
- Use a space before and after destructuring objects.
```js
//good
const { apple, mangoes } = fruits;
//bad
const { apple, mangoes } = fruits;
```
//Same for destructuring props:
//good
const BeautifulComponent = ({ prop1, prop2 }) => {}
//bad
const UglyComponent = ({prop1, prop2}) => {}
```
2. **JSX:**
- Use a space before the forward slash (`/`) of a self-closing tag
```js
//good
<Foo />
//bad
<Foo/>
```
- Do **not** use spaces for JSX curly braces
```js
//good
<Foo bar={baz} />
//bad
<Foo bar={ baz } />
```
## **Props:**
- Use camelCase for prop names, or PascalCase if the prop value is a React component.
- Use new lines when props do not fit on the same line.
```js
//good
<Foo
prop1={value1}
prop2={value2}
prop3={value3}
/>
//bad
<Foo prop1={value1} prop2={value2} prop3={value3} />
```
## **Best practices:**
- **Always** add semicolons after a line.
- Use ES6 arrow functions.
- Keep the indentation in your code correct.
- Use 4 spaces for tabs.
- Don't Repeat Yourself. If you think you're repeating too much code, make a smaller component, or a function.
- **Always** add alt prop to `img` tags.
- Add `rel="noopener"` for `a` tags which has `target="_blank"`.
- Don't do `outline: none` on user input elements. If you do not want outline, give them faint, visible background on focus. This is for accessibility.
### Other things to note
- We are using [octicons](https://primer.style/octicons/) for icons. Use this if you need to add icons. Do **not** add a new library for icons.
- Try to not commit changes in `package.json`, `package-lock.json`.
- Discuss with contributors on discord if you're planning to add/remove a package.
## Further reading:
This guide is based on [airbnb's react guide](https://github.com/airbnb/javascript/tree/master/react). You can read all the best practices there.
+21
View File
@@ -0,0 +1,21 @@
# Contributing
When contributing to this repository, please first discuss the change you wish to make via issue,
email, or any other method with the owners of this repository before making a change.
<a href="https://discord.gg/HHMs7Eg" target="blank">
<img src="https://img.shields.io/discord/735303195105951764?color=%23677BC4&label=Join%20Community&style=flat-square" alt="join discord community of github profile readme generator"/>
</a>
Please note we have a code of conduct, please follow it in all your interactions with the project.
## Pull Request Process
1. Ensure any install or build dependencies are removed before the end of the layer when doing a
build.
2. Update the README.md with details of changes to the interface, this includes new environment
variables, exposed ports, useful file locations and container parameters.
3. Increase the version numbers in any examples files and the README.md to the new version that this
Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/).
4. You may merge the Pull Request once you have the sign-off of two other developers, or if you
do not have permission to do that, you may request the second reviewer merge it for you.
+80 -14
View File
@@ -4,12 +4,12 @@
</a>
</p>
<h1 align="center">
GitHub Profile Readme Generator
GitHub Profile README Generator
</h1>
<p align="center">
<a href="https://github.com/rahuldkjain/github-profile-readme-generator/blob/master/LICENSE" target="blank">
<img src="https://img.shields.io/github/license/rahuldkjain/github-profile-readme-generator?style=flat-square" alt="github-profile-readme-generator licence" />
<img src="https://img.shields.io/github/license/rahuldkjain/github-profile-readme-generator?style=flat-square" alt="github-profile-readme-generator license" />
</a>
<a href="https://github.com/rahuldkjain/github-profile-readme-generator/fork" target="blank">
<img src="https://img.shields.io/github/forks/rahuldkjain/github-profile-readme-generator?style=flat-square" alt="github-profile-readme-generator forks"/>
@@ -23,6 +23,9 @@
<a href="https://github.com/rahuldkjain/github-profile-readme-generator/pulls" target="blank">
<img src="https://img.shields.io/github/issues-pr/rahuldkjain/github-profile-readme-generator?style=flat-square" alt="github-profile-readme-generator pull-requests"/>
</a>
<a href="https://discord.gg/HHMs7Eg" target="blank">
<img src="https://img.shields.io/discord/735303195105951764?label=Join%20Community&logo=discord&style=flat-square" alt="join discord community of github profile readme generator"/>
</a>
</p>
<p align="center"><img src="./src/images/github-profile-readme-generator.gif" alt="github-profile-readme-generator gif" /></p>
@@ -36,55 +39,118 @@
</p>
<p align="center">
<i>Loved the tool? Please consider <a href="https://paypal.me/rahuldkjain">donating</a> 💸 to help it improve!</i>
<i>Loved the tool? Please consider <a href="https://paypal.me/rahuldkjain/10">donating</a> 💸 to help it improve!</i>
</p>
<p align="center">
<a href="https://www.paypal.me/rahuldkjain"><img src="https://img.shields.io/badge/support-PayPal-blue?logo=PayPal&style=flat-square&label=Donate" alt="sponsor github profile readme generator"/>
</a>
<a href='https://ko-fi.com/A0A81XXSX' target='_blank'><img height='23' width="100" src='https://cdn.ko-fi.com/cdn/kofi3.png?v=2' alt='Buy Coffee for rahuldkjain' />
</a>
<a href="https://www.buymeacoffee.com/rahuldkjain" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="23" width="100" style="border-radius:1px" />
</p>
#### Tired of editing GitHub Profile README with new features?
This tool provides an easy way to create github profile readme with latest addons like `visitors count`, `github stats` etc.
#### 🚀 Try it out: [Live demo](https://rahuldkjain.github.io/gh-profile-readme-generator)
This tool provides an easy way to create a GitHub profile readme with the latest add-ons such as `visitors count`, `github stats`, etc.
## 🚀 Demo
<a href="https://rahuldkjain.github.io/gh-profile-readme-generator" target="blank">
<img src="https://img.shields.io/website?url=https%3A%2F%2Frahuldkjain.github.io%2Fgh-profile-readme-generator&logo=github&style=flat-square" />
</a>
Try the tool: [GitHub Profile README Generator](https://rahuldkjain.github.io/gh-profile-readme-generator)
## 🧐 Features
Just fill the details like `Name`, `Tagline`, `Dev Platforms Username`, `Current Work`, `Portfolio`, `Blog` etc. with a minimal UI.
Just fill in the details such as `Name`, `Tagline`, `Dev Platforms Username`, `Current Work`, `Portfolio`, `Blog`, etc. with a minimal UI.
- **Uniform Dev Icons**
- **Uniform Social Icons**
- **Visitors Counter Badge**
- **GitHub Profile Stats Card**
- **GitHub Top Skills**
- **GitHub Streak Stats**
- **Dynamic Dev(.)to Blogs** (GitHub Action)
- **Dynamic Medium Blogs** (GitHub Action)
- **Dynamic Personal Blogs from RSS Feed** (GitHub Action)
- **Wakatime Stats** [contribute](https://github.com/rahuldkjain/github-profile-readme-generator/issues/115)
- **Buy Me A Coffee button**
Click on `Generate README` to get your README in `markdown`.
You can preview the README too.
You can add latest addons like `visitors count`, `shields`, `dev icons`, `github stats` etc to your README in just one click.
## 🛠️ Installation Steps
## Installation Steps
1. Clone the repository
```bash
git clone https://github.com/rahuldkjain/github-profile-readme-generator.git
```
2. Change the working directory
```bash
cd github-profile-readme-generator
```
3. Install dependencies
```bash
npm install
```
4. Run the app
```bash
npm start
```
🌟 You are all set!
## 🍰 Contributing
Please contribute using [GitHub Flow](https://guides.github.com/introduction/flow). Create a branch, add commits, and [open a pull request](https://github.com/rahuldkjain/github-profile-readme-generator/compare).
Please read [`CONTRIBUTING`](CONTRIBUTING.md) for details on our [`CODE OF CONDUCT`](CODE_OF_CONDUCT.md), and the process for submitting pull requests to us.
## 💻 Built with
- [Gatsby](https://www.gatsbyjs.com/)
- [Tailwind CSS](https://tailwindcss.com/): for styling
- [GSAP](https://greensock.com/gsap/): for small SVG Animations
## 🙇 Special Thanks
## Special Thanks 🙇
- [Anurag Hazra](https://github.com/anuraghazra) for amazing [github-readme-stats](https://github.com/anuraghazra/github-readme-stats)
- [Anton Komarev](https://github.com/antonkomarev) for super cool [github-profile-views-counter](https://github.com/antonkomarev/github-profile-views-counter)
- [Gautam Krishna R](https://github.com/gautamkrishnar) for the awesome [blog post workflow](https://github.com/gautamkrishnar/blog-post-workflow)
- [Jonah Lawrence](https://github.com/DenverCoder1) for the incredible [github-readme-streak-stats](https://github.com/DenverCoder1/github-readme-streak-stats)
- [Julien Monty](https://github.com/konpa) for super useful [devicon](https://github.com/konpa/devicon)
- [Eliot Sanford](https://github.com/techieeliot) for adding hashnode as a blog input
## Sponsors 🙇
- [Scott C Wilson](https://github.com/scottcwilson) donated the first ever grant to this tool. A big thanks to him.
- [Max Schmitt](https://github.com/mxschmitt) loved the tool and showed the support with his donation. Thanks a lot.
## 🙇 Sponsors
- [Scott C Wilson](https://github.com/scottcwilson) donated the first-ever grant to this tool. A big thanks to him.
- [Max Schmitt](https://github.com/mxschmitt) loved the tool and showed support with his donation. Thanks a lot.
- [Aadit Kamat](https://github.com/aaditkamat) find the tool useful and showed support with his donation. A big thanks to him.
- [Jean-Michel Fayard](https://github.com/jmfayard) used the generator to create his GitHub Profile README and he loved it. Thanks to him for showing support to the tool with the donation.
## 🙏 Support
## Support 🙏
<p align="left">
<a href="https://www.paypal.me/rahuldkjain"><img src="https://ionicabizau.github.io/badges/paypal.svg" alt="sponsor github profile readme generator"/>
<a href="https://www.paypal.me/rahuldkjain/10"><img src="https://ionicabizau.github.io/badges/paypal.svg" alt="sponsor github profile readme generator"/>
</a>
<a href="https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator">
<img src="https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator" alt="tweet github profile readme generator"/>
+1
View File
@@ -0,0 +1 @@
module.exports = 'test-file-stub';
+19
View File
@@ -0,0 +1,19 @@
/* eslint-disable no-undef */
const React = require('react');
const gatsby = jest.requireActual('gatsby');
module.exports = {
...gatsby,
graphql: jest.fn(),
Link: jest.fn().mockImplementation(
// these props are invalid for an `a` tag
({ activeClassName, activeStyle, getProps, innerRef, partiallyActive, ref, replace, to, ...rest }) =>
React.createElement('a', {
...rest,
href: to,
}),
),
StaticQuery: jest.fn(),
useStaticQuery: jest.fn(),
};
+2 -2
View File
@@ -1,2 +1,2 @@
import "./src/styles/tailwind.css";
require("prismjs/themes/prism-okaidia.css");
import './src/styles/tailwind.css';
require('prismjs/themes/prism-okaidia.css');
+8 -10
View File
@@ -24,10 +24,8 @@ module.exports = {
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
`gatsby-remark-prismjs`,
]
}
plugins: [`gatsby-remark-prismjs`],
},
},
`gatsby-transformer-sharp`,
`gatsby-plugin-sharp`,
@@ -46,7 +44,7 @@ module.exports = {
{
resolve: `gatsby-plugin-google-analytics`,
options: {
trackingId: "UA-168596085-3",
trackingId: 'UA-168596085-3',
// this option places the tracking script into the head of the DOM
head: true,
// other options
@@ -55,8 +53,8 @@ module.exports = {
{
resolve: `gatsby-plugin-postcss`,
options: {
postCssPlugins: [require("tailwindcss")],
}
postCssPlugins: [require('tailwindcss')],
},
},
{
resolve: `gatsby-plugin-purgecss`,
@@ -64,11 +62,11 @@ module.exports = {
printRejected: false,
develop: false,
tailwind: true,
}
},
},
`gatsby-plugin-twitter`
`gatsby-plugin-twitter`,
],
// this (optional) plugin enables Progressive Web App + Offline functionality
// To learn more, visit: https://gatsby.dev/offline
// `gatsby-plugin-offline`,
}
};
+30 -33
View File
@@ -1,39 +1,36 @@
exports.createPages = async ({ actions, graphql, reporter }) => {
const { createPage } = actions
const blogPostTemplate = require.resolve(`./src/templates/blogTemplate.js`)
const result = await graphql(`
{
allMarkdownRemark(
sort: { order: DESC, fields: [frontmatter___date] }
limit: 1000
) {
edges {
node {
frontmatter {
slug
}
const { createPage } = actions;
const blogPostTemplate = require.resolve(`./src/templates/blogTemplate.js`);
const result = await graphql(`
{
allMarkdownRemark(sort: { order: DESC, fields: [frontmatter___date] }, limit: 1000) {
edges {
node {
frontmatter {
slug
}
}
}
}
`)
// Handle errors
if (result.errors) {
reporter.panicOnBuild(`Error while running GraphQL query.`)
return
}
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
createPage({
path: node.frontmatter.slug,
component: blogPostTemplate,
context: {
// additional data can be passed via context
slug: node.frontmatter.slug,
},
})
})
}
`);
// Handle errors
if (result.errors) {
reporter.panicOnBuild(`Error while running GraphQL query.`);
return;
}
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
createPage({
path: node.frontmatter.slug,
component: blogPostTemplate,
context: {
// additional data can be passed via context
slug: node.frontmatter.slug,
},
});
});
};
+5
View File
@@ -0,0 +1,5 @@
const babelOptions = {
presets: ['babel-preset-gatsby'],
};
module.exports = require('babel-jest').createTransformer(babelOptions);
+26
View File
@@ -0,0 +1,26 @@
module.exports = {
transform: {
'^.+\\.jsx?$': `<rootDir>/jest-preprocess.js`,
},
moduleNameMapper: {
'.+\\.(css|styl|less|sass|scss)$': `identity-obj-proxy`,
'.+\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': `<rootDir>/__mocks__/file-mock.js`,
},
testPathIgnorePatterns: [`node_modules`, `\\.cache`, `<rootDir>.*/public`],
transformIgnorePatterns: [`node_modules/(?!(gatsby)/)`],
globals: {
__PATH_PREFIX__: ``,
__BASE_PATH__: ``,
},
setupFiles: [`<rootDir>/loadershim.js`],
setupFilesAfterEnv: ['<rootDir>/setupTests.js'],
snapshotSerializers: ['enzyme-to-json/serializer'],
coverageThreshold: {
global: {
branches: 0,
functions: 75,
lines: 68,
statements: 68,
},
},
};
+3
View File
@@ -0,0 +1,3 @@
global.___loader = {
enqueue: jest.fn(),
};
+50922 -1810
View File
File diff suppressed because it is too large Load Diff
+41 -7
View File
@@ -1,35 +1,69 @@
{
"name": "gh-profile-reamde-generator",
"name": "github-profile-readme-generator",
"private": true,
"description": "A simple react app to generate beautiful github profile readme in md(markdown)",
"version": "0.1.0",
"version": "1.2.0",
"author": "Rahul Jain <rahuldkjain@gmail.com>",
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,jsx}": [
"prettier --write",
"eslint --fix",
"git add"
],
"*.{html,css,less,ejs}": [
"prettier --write",
"git add"
]
},
"dependencies": {
"@primer/octicons-react": "^10.0.0",
"axios": "^0.24.0",
"enzyme": "^3.11.0",
"enzyme-adapter-react-16": "^1.15.5",
"enzyme-to-json": "^3.6.1",
"gatsby": "^2.23.12",
"gatsby-image": "^2.4.9",
"gatsby-plugin-google-analytics": "^2.3.11",
"gatsby-plugin-manifest": "^2.4.14",
"gatsby-plugin-offline": "^3.2.13",
"gatsby-plugin-react-helmet": "^3.3.6",
"gatsby-plugin-sharp": "^2.6.14",
"gatsby-plugin-sharp": "2.6.14",
"gatsby-remark-prismjs": "^3.5.10",
"gatsby-source-filesystem": "^2.3.23",
"gatsby-transformer-remark": "^2.8.27",
"gatsby-transformer-sharp": "^2.5.7",
"gsap": "^3.4.0",
"prismjs": "^1.20.0",
"prismjs": "^1.25.0",
"prop-types": "^15.7.2",
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-helmet": "^6.1.0"
},
"devDependencies": {
"babel-jest": "26.3.0",
"babel-preset-gatsby": "0.5.11",
"eslint": "^7.32.0",
"eslint-config-airbnb": "^18.2.1",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.2",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-react": "^7.26.1",
"eslint-plugin-react-hooks": "^4.2.0",
"gatsby-plugin-postcss": "^2.3.11",
"gatsby-plugin-purgecss": "^5.0.0",
"gatsby-plugin-twitter": "^2.3.10",
"gatsby-remark-embedder": "^3.0.0",
"gh-pages": "^3.1.0",
"husky": "^7.0.4",
"identity-obj-proxy": "3.0.0",
"jest": "26.4.2",
"lint-staged": "^11.2.6",
"prettier": "2.0.5",
"tailwindcss": "^1.7.6"
},
@@ -44,14 +78,14 @@
"start": "npm run develop",
"serve": "gatsby serve",
"clean": "gatsby clean",
"test": "echo \"Write tests! -> https://gatsby.dev/unit-testing\" && exit 1",
"test": "jest -i -u --coverage",
"deploy": "gatsby build --prefix-paths && gh-pages -d public -b master"
},
"repository": {
"type": "git",
"url": "https://github.com/rahuldkjain/gh-profile-readme-generator"
"url": "https://github.com/rahuldkjain/github-profile-readme-generator"
},
"bugs": {
"url": "https://github.com/rahuldkjain/gh-profile-readme-generator/issues"
"url": "https://github.com/rahuldkjain/github-profile-readme-generator/issues"
}
}
+4
View File
@@ -0,0 +1,4 @@
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,101 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Donate renders correctly 1`] = `
<Fragment>
<div
className="text-center text-4xl my-2"
>
Support 
<span
aria-label="praying hand emoji"
role="img"
>
🙏
</span>
</div>
<div
className="flex flex-col sm:flex-row items-start justify-between"
>
<div
className="w-full sm:w-2/3"
>
<div
className="text-2xl mb-2"
>
Are you using the tool and happy with it to create your GitHub Profile?
</div>
<div
className="text-lg"
>
Your kind support keeps open-source tools like this free for others.
</div>
<div
className="mt-4"
>
<a
className="flex items-center justify-start w-20"
href="https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator"
>
<img
alt="tweet github profile readme generator"
className="w-20"
src="https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator"
/>
</a>
Let the world know how you feel using this tool. Share with others on twitter.
</div>
</div>
<div
className="w-full sm:w-1/3 flex flex-col justify-center items-center"
>
<span>
Tip
<span
aria-label="Dollar medal"
role="img"
>
💰
</span>
</span>
<a
className="flex items-center justify-evenly bg-red-500 text-white py-2 px-4 my-2"
href="https://ko-fi.com/A0A81XXSX"
rel="noreferrer"
target="_blank"
>
<img
alt="Buy ko-fi for rahuldkjain"
className="w-6 h-6 mr-2"
src="https://www.vectorlogo.zone/logos/ko-fi/ko-fi-icon.svg"
/>
Buy me a ko-fi
</a>
<a
className="flex items-center justify-evenly bg-white-500 text-white py-2 px-4 my-2 border border-solid"
href="https://www.paypal.me/rahuldkjain/10"
rel="noreferrer"
target="_blank"
>
<img
alt="Donate rahuldkjain via paypal"
className="w-32 h-4"
src="https://cdn.worldvectorlogo.com/logos/paypal-2.svg"
/>
</a>
<a
className="flex items-center justify-evenly bg-orange-500 text-white py-2 px-4 my-2"
href="https://www.buymeacoffee.com/rahuldkjain"
rel="noreferrer"
target="_blank"
>
<img
alt="Buy rahuldkjain A Coffee"
className="w-6 h-6 mr-2"
src="https://www.vectorlogo.zone/logos/buymeacoffee/buymeacoffee-icon.svg"
/>
Buy me a coffee
</a>
</div>
</div>
</Fragment>
`;
@@ -0,0 +1,189 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Footer component renders correctly 1`] = `
<div
className="bg-gray-100 p-4 flex flex-col justify-center items-center shadow-inner mt-2"
>
<div
className="w-full flex flex-col sm:flex-row justify-evenly py-2"
>
<div
className="sm:ml-0 sm:mr-6 order-last sm:order-none flex"
>
<h1
className="text-base font-bold font-title text-xl sm:text-2xl mt-3 sm:mt-0"
>
<div
className="flex sm:flex-col items-start mb-3 sm:mb-0"
>
<img
alt="github profile markdown generator logo"
className="hidden sm:block h-24"
src="test-file-stub"
/>
<div
className="mr-2 sm:mr-0"
>
GitHub Profile
<img
alt="github profile markdown generator logo"
className="inline sm:hidden h-12"
src="test-file-stub"
/>
<span
className="block sm:inline"
>
README Generator
</span>
</div>
</div>
</h1>
</div>
<div
className="text-xl sm:text-base font-light sm:font-normal"
>
<div
className="font-title font-bold mb-4 sm:mb-2"
>
<strong>
Pages
</strong>
</div>
<div
className="ml-2 sm:ml-0"
>
<mockConstructor
activeStyle={
Object {
"color": "#002ead",
}
}
to="/addons"
>
Addons
</mockConstructor>
</div>
<div
className="ml-2 sm:ml-0"
>
<mockConstructor
activeStyle={
Object {
"color": "#002ead",
}
}
to="/support"
>
Support
</mockConstructor>
</div>
<div
className="ml-2 sm:ml-0"
>
<mockConstructor
activeStyle={
Object {
"color": "#002ead",
}
}
to="/about"
>
About
</mockConstructor>
</div>
</div>
<div
className="text-xl sm:text-base font-light sm:font-normal"
>
<div
className="font-title font-bold my-4 sm:my-0 sm:mb-2"
>
<strong>
More
</strong>
</div>
<div
className="ml-2 sm:ml-0"
>
<a
aria-label="Github rahuldkjain/github-profile-readme-generator"
href="https://github.com/rahuldkjain/github-profile-readme-generator"
target="blank"
>
Github
</a>
</div>
<div
className="ml-2 sm:ml-0"
>
<a
aria-label="Releases on Github rahuldkjain/github-profile-readme-generator"
href="https://github.com/rahuldkjain/github-profile-readme-generator/releases"
target="blank"
>
Releases
</a>
</div>
<div
className="ml-2 sm:ml-0"
>
<a
aria-label="Issues in rahuldkjain/github-profile-readme-generator"
href="https://github.com/rahuldkjain/github-profile-readme-generator/issues"
target="blank"
>
Issues
</a>
</div>
<div
className="ml-2 sm:ml-0"
>
<a
aria-label="Pull Requests in rahuldkjain/github-profile-readme-generator"
href="https://github.com/rahuldkjain/github-profile-readme-generator/pulls"
target="blank"
>
Pull Requests
</a>
</div>
</div>
<div>
<div
className="font-title font-bold text-xl sm:text-base my-4 sm:my-0 sm:mb-2"
>
<strong>
Join Community
</strong>
</div>
<div
className="ml-2 sm:ml-0"
>
<a
aria-label="Discord of the community"
href="https://discord.gg/HHMs7Eg"
target="blank"
>
<img
alt="Discord of the community"
className="h-12"
src="test-file-stub"
/>
</a>
</div>
</div>
</div>
<div
className="py-2 mt-2"
>
Developed in India
<span
aria-label="india"
role="img"
>
🇮🇳
</span>
</div>
</div>
`;
@@ -0,0 +1,73 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Header renders correctly 1`] = `
<div
className="shadow flex items-center justify-center flex-col mb-2 py-2"
>
<mockConstructor
to="/"
>
<h1
className="text-base font-bold font-title sm:text-2xl font-medium text-blue-800 flex justify-center items-center flex-col"
>
<img
alt="github profile markdown generator logo"
className="w-12 h-12"
src="test-file-stub"
/>
<div>
heading
</div>
</h1>
</mockConstructor>
<div
className="flex justify-center items-center"
>
<a
aria-label="Star rahuldkjain/github-profile-readme-generator on GitHub"
className="mr-2"
href="https://github.com/rahuldkjain/github-profile-readme-generator"
target="blank"
>
<div
className="text-xxs sm:text-sm border-2 border-solid border-gray-900 bg-gray-100 flex items-center justify-center py-1 px-2"
>
<StarIcon
className="px-1 w-6 star"
id="star-icon"
size={16}
verticalAlign="text-bottom"
/>
Star this repo
<span
className="github-count px-1 sm:px-2"
>
0
</span>
</div>
</a>
<a
aria-label="Fork rahuldkjain/github-profile-readme-generator on GitHub"
href="https://github.com/rahuldkjain/github-profile-readme-generator/fork"
target="blank"
>
<div
className="text-xxs sm:text-sm border-2 border-solid border-gray-900 bg-gray-100 flex items-center justify-center py-1 px-2"
>
<RepoForkedIcon
className="px-1 w-6 fork"
id="fork-icon"
size={16}
verticalAlign="text-bottom"
/>
Fork on GitHub
<span
className="github-count px-1 sm:px-2"
>
0
</span>
</div>
</a>
</div>
</div>
`;
@@ -0,0 +1,23 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Loader renders correctly 1`] = `
<div
className="loader"
>
<span>
</span>
<span>
</span>
<span>
</span>
<span>
</span>
<span>
</span>
</div>
`;
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,601 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`DisplaySocial Preview renders correctly 1`] = `
<a
className="no-underline text-blue-700 m-2"
href="https://codepen.io/dummy"
target="blank"
>
<img
alt="username"
className="w-6 h-6"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
/>
</a>
`;
exports[`DisplaySocial Preview renders correctly with no username 1`] = `""`;
exports[`DisplayWork Preview renders correctly 1`] = `
<div
className="my-2"
>
[object Object]
<a
className="no-underline text-blue-700"
href="https://dummy.com"
target="blank"
>
readme-generator
</a>
</div>
`;
exports[`DisplayWork Preview renders correctly with no link 1`] = `
<div
className="my-2"
>
[object Object]
<b>
readme-generator
</b>
</div>
`;
exports[`DisplayWork Preview renders correctly with no prefix 1`] = `""`;
exports[`DisplayWork Preview renders correctly with no prefix and link 1`] = `""`;
exports[`DisplayWork Preview renders correctly with no prefix, link and project 1`] = `""`;
exports[`DisplayWork Preview renders correctly with no project 1`] = `
<div
className="my-2"
>
[object Object]
<a
className="no-underline text-blue-700"
href="https://dummy.com"
target="blank"
>
https://dummy.com
</a>
</div>
`;
exports[`DisplayWork Preview renders correctly with no project and link 1`] = `""`;
exports[`DisplayWork Preview renders correctly with no project and prefix 1`] = `""`;
exports[`GitHubStats Preview renders correctly 1`] = `""`;
exports[`GitHubStats Preview renders correctly 2`] = `
<div
className="text-center mx-4 mb-4"
>
<img
alt=""
src="https://github-readme-stats.vercel.app/api?username=&show_icons=true&locale=en"
/>
</div>
`;
exports[`GithubProfileTrophy Preview renders correctly 1`] = `""`;
exports[`GithubProfileTrophy Preview renders correctly with show true 1`] = `
<div
className="text-left my-2"
>
<a
href="https://github.com/ryo-ma/github-profile-trophy"
>
<img
alt=""
src="https://github-profile-trophy.vercel.app/?username="
/>
</a>
</div>
`;
exports[`Markdown Preview renders correctly 1`] = `
<div
id="markdown-preview"
>
<TitlePreview
prefix="Hi 👋, I'm"
title="dummy"
/>
<SubTitlePreview
subtitle="A passionate frontend developer from India"
/>
<VisitorsBadgePreview
badgeOptions={
Object {
"badgeColor": "0e75b6",
"badgeLabel": "Profile%20views",
"badgeStyle": "flat",
}
}
github=""
show={false}
/>
<GithubProfileTrophyPreview
github=""
show={false}
/>
<TwitterBadgePreview
show={false}
twitter=""
/>
<WorkPreview
work={
Object {
"data": Object {
"ama": "",
"badgeColor": "0e75b6",
"badgeLabel": "Profile views",
"badgeStyle": "flat",
"collaborateOn": "",
"contact": "",
"currentLearn": "",
"currentWork": "readme-generator",
"devDynamicBlogs": false,
"funFact": "",
"githubProfileTrophy": false,
"githubStats": false,
"githubStatsOptions": Object {
"bgColor": "",
"cacheSeconds": null,
"hideBorder": false,
"locale": "en",
"textColor": "",
"theme": "",
"titleColor": "",
},
"helpWith": "",
"mediumDynamicBlogs": false,
"rssDynamicBlogs": false,
"subtitle": "A passionate frontend developer from India",
"title": "dummy",
"topLanguages": false,
"topLanguagesOptions": Object {
"bgColor": "",
"cacheSeconds": null,
"hideBorder": false,
"locale": "en",
"textColor": "",
"theme": "",
"titleColor": "",
},
"twitterBadge": false,
"visitorsBadge": false,
},
"link": Object {
"blog": "",
"collaborateOn": "",
"currentWork": "https://dummy.com",
"helpWith": "",
"portfolio": "",
"resume": "",
},
"prefix": Object {
"ama": "💬 Ask me about",
"blog": "📝 I regularly write articles on",
"collaborateOn": "👯 Im looking to collaborate on",
"contact": "📫 How to reach me",
"currentLearn": "🌱 Im currently learning",
"currentWork": "🔭 Im currently working on",
"funFact": "⚡ Fun fact",
"helpWith": "🤝 Im looking for help with",
"portfolio": "👨‍💻 All of my projects are available at",
"resume": "📄 Know about my experiences",
"title": "Hi 👋, I'm",
},
"skills": Object {},
"social": Object {
"behance": "",
"codechef": "",
"codeforces": "",
"codepen": "dummy",
"codesandbox": "",
"dev": "",
"discord": "",
"dribbble": "",
"fb": "",
"geeks_for_geeks": "",
"github": "",
"hackerearth": "",
"hackerrank": "",
"instagram": "",
"kaggle": "",
"leetcode": "",
"linkedin": "",
"medium": "",
"rssurl": "",
"stackoverflow": "",
"topcoder": "",
"twitter": "",
"youtube": "",
},
"support": Object {
"buyMeACoffee": "",
},
}
}
/>
<SocialPreview
social={
Object {
"behance": "",
"codechef": "",
"codeforces": "",
"codepen": "dummy",
"codesandbox": "",
"dev": "",
"discord": "",
"dribbble": "",
"fb": "",
"geeks_for_geeks": "",
"github": "",
"hackerearth": "",
"hackerrank": "",
"instagram": "",
"kaggle": "",
"leetcode": "",
"linkedin": "",
"medium": "",
"rssurl": "",
"stackoverflow": "",
"topcoder": "",
"twitter": "",
"youtube": "",
}
}
/>
<SkillsPreview
skills={Object {}}
/>
<SupportPreview
support={
Object {
"buyMeACoffee": "",
}
}
/>
<div
className="block sm:flex sm:justify-center sm:items-start"
>
<TopLanguagesPreview
github=""
options={
Object {
"bgColor": "",
"cacheSeconds": null,
"hideBorder": false,
"locale": "en",
"textColor": "",
"theme": "",
"titleColor": "",
}
}
show={false}
/>
<GitHubStatsPreview
github=""
options={
Object {
"bgColor": "",
"cacheSeconds": null,
"hideBorder": false,
"locale": "en",
"textColor": "",
"theme": "",
"titleColor": "",
}
}
show={false}
/>
<StreakStatsPreview
github=""
options={Object {}}
show={false}
/>
</div>
</div>
`;
exports[`SectionTitle Preview renders correctly 1`] = `
<h3
className="w-full text-lg sm:text-xl"
>
dummy
</h3>
`;
exports[`SectionTitle Preview renders correctly with no label 1`] = `""`;
exports[`SectionTitle Preview renders correctly with visible false 1`] = `""`;
exports[`Skills Preview renders correctly 1`] = `
<div
className="flex flex-wrap justify-start items-center"
>
<SectionTitle
label="Languages and Tools:"
visible={true}
/>
<a
href="https://unity.com/"
key="unity"
rel="noreferrer"
target="_blank"
>
<img
alt="unity"
className="mb-4 mr-4 h-6 w-6 sm:h-10 sm:w-10"
src="https://www.vectorlogo.zone/logos/unity3d/unity3d-icon.svg"
/>
</a>
</div>
`;
exports[`Skills Preview renders correctly with no skills 1`] = `""`;
exports[`Social Preview renders correctly 1`] = `
<div
className="flex justify-start items-end flex-wrap"
>
<SectionTitle
label="Connect with me:"
visible={true}
/>
<DisplaySocial
base="https://codepen.io"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/codepen.svg"
username="dummy"
/>
<DisplaySocial
base="https://dev.to"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/devto.svg"
username=""
/>
<DisplaySocial
base="https://twitter.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/twitter.svg"
username=""
/>
<DisplaySocial
base="https://linkedin.com/in"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/linked-in-alt.svg"
username=""
/>
<DisplaySocial
base="https://stackoverflow.com/users"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/stack-overflow.svg"
username=""
/>
<DisplaySocial
base="https://codesandbox.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/codesandbox.svg"
username=""
/>
<DisplaySocial
base="https://kaggle.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/kaggle.svg"
username=""
/>
<DisplaySocial
base="https://fb.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/facebook.svg"
username=""
/>
<DisplaySocial
base="https://instagram.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/instagram.svg"
username=""
/>
<DisplaySocial
base="https://dribbble.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/dribbble.svg"
username=""
/>
<DisplaySocial
base="https://www.behance.net"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/behance.svg"
username=""
/>
<DisplaySocial
base="https://medium.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/medium.svg"
username=""
/>
<DisplaySocial
base="https://www.youtube.com/c"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/youtube.svg"
username=""
/>
<DisplaySocial
base="https://www.codechef.com/users"
icon="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codechef.svg"
username=""
/>
<DisplaySocial
base="https://www.hackerrank.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/hackerrank.svg"
username=""
/>
<DisplaySocial
base="https://codeforces.com/profile"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/codeforces.svg"
username=""
/>
<DisplaySocial
base="https://www.leetcode.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/leet-code.svg"
username=""
/>
<DisplaySocial
base="https://www.hackerearth.com"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/hackerearth.svg"
username=""
/>
<DisplaySocial
base="https://auth.geeksforgeeks.org/user"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/geeks-for-geeks.svg"
username=""
/>
<DisplaySocial
base="https://www.topcoder.com/members"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/topcoder.svg"
username=""
/>
<DisplaySocial
base="https://discord.gg"
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/discord.svg"
username=""
/>
<DisplaySocial
base=""
icon="https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/rss.svg"
username=""
/>
</div>
`;
exports[`SubTitle Preview renders correctly 1`] = `
<h3
className="text-center font-medium"
>
A passionate frontend developer from India
</h3>
`;
exports[`SubTitle Preview renders correctly with no subtitle 1`] = `""`;
exports[`Title Preview renders correctly 1`] = `
<h1
className="text-center text-xl font-bold"
>
Hi 👋, I'm dummy
</h1>
`;
exports[`Title Preview renders correctly with no prefix 1`] = `""`;
exports[`Title Preview renders correctly with no title 1`] = `""`;
exports[`Title Preview renders correctly with no title and prefix 1`] = `""`;
exports[`TopLanguages Preview renders correctly 1`] = `
<div
className="text-center mx-4 mb-4"
>
 
</div>
`;
exports[`TopLanguages Preview renders correctly with show true 1`] = `
<div
className="text-center mx-4 mb-4"
>
<img
alt=""
src="https://github-readme-stats.vercel.app/api/top-langs?username=&show_icons=true&locale=en&layout=compact"
/>
</div>
`;
exports[`TwitterBadgePreview Preview renders correctly 1`] = `""`;
exports[`TwitterBadgePreview Preview renders correctly with show true 1`] = `
<div
className="text-left my-2"
>
<a
href="https://twitter.com/"
rel="noreferrer"
target="_blank"
>
<img
alt=""
className="h-4 sm:h-6"
src="https://img.shields.io/twitter/follow/?logo=twitter&style=for-the-badge"
/>
</a>
</div>
`;
exports[`VisitorsBadge Preview renders correctly 1`] = `""`;
exports[`VisitorsBadge Preview renders correctly with show true 1`] = `
<div
className="text-left my-2"
>
<img
alt=""
className="h-4 sm:h-6"
src="https://komarev.com/ghpvc/?username=&label=Profile%20views&color=0e75b6&style=flat"
/>
</div>
`;
exports[`Work Preview renders correctly 1`] = `
<Fragment>
<DisplayWork
link="https://dummy.com"
prefix="🔭 Im currently working on"
project="readme-generator"
/>
<DisplayWork
link=""
prefix="🌱 Im currently learning"
project=""
/>
<DisplayWork
link=""
prefix="🤝 Im looking for help with"
project=""
/>
<DisplayWork
link=""
prefix="👯 Im looking to collaborate on"
project=""
/>
<DisplayWork
link=""
prefix="💬 Ask me about"
project=""
/>
<DisplayWork
link=""
prefix="👨‍💻 All of my projects are available at"
project=""
/>
<DisplayWork
link=""
prefix="📝 I regularly write articles on"
project=""
/>
<DisplayWork
link=""
prefix="📄 Know about my experiences"
project=""
/>
<DisplayWork
link=""
prefix="📫 How to reach me"
project=""
/>
<DisplayWork
link=""
prefix="⚡ Fun fact"
project=""
/>
</Fragment>
`;
@@ -0,0 +1,156 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Skills renders correctly 1`] = `
<div
className="px-2 sm:px-6 mb-10 "
>
<div
className="text-xl sm:text-2xl font-bold font-title mt-2 mb-4 flex justify-between"
>
Skills
<div
className="relative flex"
>
<input
className="leading:none text-xs my-0 py-1 px-2 pr-8 sm:text-xl border-2 border-gray-900 focus:border-blue-700 placeholder-gray-700"
onChange={[Function]}
placeholder="Search Skills"
type="text"
/>
<span
className="absolute"
style={
Object {
"right": "10px",
}
}
>
<SearchIcon
className="mb-1 transform scale-100 md:scale-125"
size={16}
verticalAlign="text-bottom"
/>
</span>
</div>
</div>
<div
className="divide-y divide-gray-500"
key="language"
>
<div
className="text-sm sm:text-xl text-gray-900 text-left py-1"
>
Programming Languages
</div>
<div
className="flex justify-start items-center flex-wrap w-full mb-6 pl-4 sm:pl-10"
>
<div
className="w-1/3 sm:w-1/4 my-6"
key="javascript"
>
<label
className="checkbox-label flex items-center justify-start"
htmlFor="javascript"
>
<input
checked={true}
className="checkbox-label__input"
id="javascript"
onChange={[Function]}
type="checkbox"
/>
<span
className="checkbox-label__control"
/>
<img
alt="javascript"
className="ml-4 w-8 h-8 sm:w-10 sm:h-10"
src="javascript.svg"
/>
<span
className="tooltiptext"
>
javascript
</span>
</label>
</div>
</div>
</div>
<div
className="divide-y divide-gray-500"
key="frontend_dev"
>
<div
className="text-sm sm:text-xl text-gray-900 text-left py-1"
>
Frontend Development
</div>
<div
className="flex justify-start items-center flex-wrap w-full mb-6 pl-4 sm:pl-10"
>
<div
className="w-1/3 sm:w-1/4 my-6"
key="react"
>
<label
className="checkbox-label flex items-center justify-start"
htmlFor="react"
>
<input
className="checkbox-label__input"
id="react"
onChange={[Function]}
type="checkbox"
/>
<span
className="checkbox-label__control"
/>
<img
alt="react"
className="ml-4 w-8 h-8 sm:w-10 sm:h-10"
src="react.svg"
/>
<span
className="tooltiptext"
>
react
</span>
</label>
</div>
<div
className="w-1/3 sm:w-1/4 my-6"
key="svelte"
>
<label
className="checkbox-label flex items-center justify-start"
htmlFor="svelte"
>
<input
className="checkbox-label__input"
id="svelte"
onChange={[Function]}
type="checkbox"
/>
<span
className="checkbox-label__control"
/>
<img
alt="svelte"
className="ml-4 w-8 h-8 sm:w-10 sm:h-10"
src="svelte.svg"
/>
<span
className="tooltiptext"
>
svelte
</span>
</label>
</div>
</div>
</div>
<span
className="flex justify-center text-gray-900"
/>
</div>
`;
@@ -0,0 +1,383 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Social renders correctly 1`] = `
<div
className="px-2 sm:px-6 mb-4"
>
<div
className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2"
>
Social
</div>
<div
className="flex flex-wrap justify-center items-center"
>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="github"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/github.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-1 sm:px-2 focus:border-blue-700"
id="github"
onChange={[Function]}
placeholder="github username"
value="github "
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="twitter"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/twitter.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="twitter"
onChange={[Function]}
placeholder="twitter username"
value="twitter"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="dev.to"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dev-dot-to.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="dev"
onChange={[Function]}
placeholder="dev.to username"
value="dev"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="codepen"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="codepen"
onChange={[Function]}
placeholder="codepen username"
value="codepen"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="codesandbox"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codesandbox.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="codesandbox"
onChange={[Function]}
placeholder="codesandbox username"
value="codesandbodx"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="stackoverflow"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/stackoverflow.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="stackoverflow"
onChange={[Function]}
placeholder="stackoverflow user ID"
value="stackoverflow"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="linkedin"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="linkedin"
onChange={[Function]}
placeholder="linkedin username"
value="linkedin"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="kaggle"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/kaggle.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="kaggle"
onChange={[Function]}
placeholder="kaggle username"
value="kaggle"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="facebook"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/facebook.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="fb"
onChange={[Function]}
placeholder="facebook username"
value="fb"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="instagram"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="instagram"
onChange={[Function]}
placeholder="instagram username"
value="instagram"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="dribbble"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/dribbble.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="dribbble"
onChange={[Function]}
placeholder="dribbble username"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="behance"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/behance.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="behance"
onChange={[Function]}
placeholder="behance username"
value="behance"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="medium"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/medium.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="medium"
onChange={[Function]}
placeholder="medium username (with @)"
value="medium"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="youtube"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/youtube.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="youtube"
onChange={[Function]}
placeholder="youtube channel name"
value="youtube"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="codechef"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codechef.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="codechef"
onChange={[Function]}
placeholder="codechef username"
value="codechef"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="hackerrank"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/hackerrank.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="hackerrank"
onChange={[Function]}
placeholder="hackerrank username"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="codeforces"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codeforces.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="codeforces"
onChange={[Function]}
placeholder="codeforces username"
value="codeforces"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="leetcode"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/leetcode.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="leetcode"
onChange={[Function]}
placeholder="leetcode username"
value="leetcode"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="topcoder"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/topcoder.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="topcoder"
onChange={[Function]}
placeholder="topcoder username"
value="topcoder"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="hackerearth"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/hackerearth.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="hackerearth"
onChange={[Function]}
placeholder="hackerearth user (with @)"
value="@hackerearth"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="geeksforgeeks"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/geeksforgeeks.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="geeksforgeeks"
onChange={[Function]}
placeholder="GFG (<username>/profile)"
value="geeks_for_geeks"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="discord"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/discord.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="discord"
onChange={[Function]}
placeholder="discord invite (only code)"
value="discord"
/>
</div>
<div
className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0"
>
<img
alt="rssfeed"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/rss.svg"
/>
<input
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="rssurl"
onChange={[Function]}
placeholder="RSS feed URL"
value="rssurl"
/>
</div>
</div>
</div>
`;
@@ -0,0 +1,19 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Subtitle renders correctly 1`] = `
<div
className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10"
>
<div
className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2"
>
Subtitle
</div>
<input
className="outline-none w-full text-xs sm:text-lg sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="subtitle"
onChange={[Function]}
value="A frontend developer"
/>
</div>
`;
@@ -0,0 +1,30 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Title renders title component correctly 1`] = `
<div
className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10"
>
<div
className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2"
>
Title
</div>
<div
className="flex justify-start items-center w-full text-regular text-xs sm:text-lg"
>
<input
className="outline-none w-24 sm:w-40 mr-10 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700 prefix"
id="title-prefix"
onChange={[Function]}
value="test_title"
/>
<input
className="outline-none placeholder-gray-700 w-1/2 sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="title-name"
onChange={[Function]}
placeholder="name"
value="test_data"
/>
</div>
</div>
`;
@@ -0,0 +1,184 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`Work renders work component correctly 1`] = `
<div
className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10"
>
<div
className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2"
>
Work
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="currentWork-prefix"
onChange={[Function]}
placeholder="Hi, I'm "
value="test_currentwork"
/>
<input
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="currentWork"
onChange={[Function]}
placeholder="project name"
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="currentWork-link"
onChange={[Function]}
placeholder="project link"
value="test_currentwork"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="collaborateOn-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="collaborateOn"
onChange={[Function]}
placeholder="project name"
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="collaborateOn-link"
onChange={[Function]}
placeholder="project link"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="helpWith-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="helpWith"
onChange={[Function]}
placeholder="project name"
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="helpWith-link"
onChange={[Function]}
placeholder="project link"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="currentLearn-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="currentLearn"
onChange={[Function]}
placeholder="Frameworks, courses etc."
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="ama-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="ama"
onChange={[Function]}
placeholder="react, vue and gsap"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="contact-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="contact"
onChange={[Function]}
placeholder="example@gmail.com"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="portfolio-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="portfolio"
onChange={[Function]}
placeholder="portfolio link"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="blog-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="blog"
onChange={[Function]}
placeholder="blog link"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="resume-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="resume"
onChange={[Function]}
placeholder="resume link"
/>
</div>
<div
className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0"
>
<input
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="funFact-prefix"
onChange={[Function]}
/>
<input
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
id="funFact"
onChange={[Function]}
placeholder="I think I am funny"
/>
</div>
</div>
`;
+806
View File
@@ -0,0 +1,806 @@
import React from 'react';
import toJson from 'enzyme-to-json';
import { shallow, mount } from 'enzyme';
import Addons from '../addons';
jest.useFakeTimers();
describe('Addons', () => {
const dataInput = {
title: '',
subtitle: 'A passionate frontend developer from India',
currentWork: '',
currentLearn: '',
collaborateOn: '',
helpWith: '',
ama: '',
contact: '',
funFact: '',
twitterBadge: false,
visitorsBadge: false,
badgeStyle: 'flat',
badgeColor: '0e75b6',
badgeLabel: 'Profile views',
githubProfileTrophy: false,
githubStats: false,
githubStatsOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
topLanguages: false,
topLanguagesOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
devDynamicBlogs: false,
mediumDynamicBlogs: false,
rssDynamicBlogs: false,
};
const socialInput = {
github: '',
dev: '',
linkedin: '',
codepen: '',
stackoverflow: '',
kaggle: '',
codesandbox: '',
fb: '',
instagram: '',
twitter: '',
dribbble: '',
behance: '',
medium: '',
youtube: '',
codechef: '',
hackerrank: '',
codeforces: '',
leetcode: '',
topcoder: '',
hackerearth: '',
geeks_for_geeks: '',
discord: '',
rssurl: '',
};
let mockHandleCheckChange;
let mockHandleDataChange;
beforeEach(() => {
mockHandleCheckChange = jest.fn();
mockHandleDataChange = jest.fn();
});
afterEach(() => {
jest.clearAllMocks();
});
it('renders correctly', () => {
const addOnComponent = shallow(
<Addons
data={dataInput}
social={socialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
expect(toJson(addOnComponent)).toMatchSnapshot();
});
it('should render Customize Badges', () => {
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#visitors-count-open-btn').simulate('click', {});
expect(addOnComponent).toMatchSnapshot();
});
it('should handle data change when badge style is changed', () => {
const mockEvent = { target: { value: 'style-new' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'title-abcd',
textColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#visitors-count-open-btn').simulate('click', {});
addOnComponent.find('#badge-style').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('badgeStyle', { target: { value: 'style-new' } });
});
it('should handle data change when badge color is changed', () => {
const mockEvent = { target: { value: 'new-color-abcd' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#visitors-count-open-btn').simulate('click', {});
addOnComponent.find('#badge-color').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('badgeColor', { target: { value: 'new-color-abcd' } });
});
it('should handle data change when badge-label-text is changed', () => {
const mockEvent = { target: { value: 'label-abcd-random' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#visitors-count-open-btn').simulate('click', {});
addOnComponent.find('#badge-label-text').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('badgeLabel', { target: { value: 'label-abcd-random' } });
});
it('should render Customize Github stats card', () => {
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
expect(addOnComponent).toMatchSnapshot();
});
it('should handle data change when stats theme is changed', () => {
const mockEvent = { target: { value: 'new-theme-for-stats' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
titleColor: 'title-abcd',
textColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-theme').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'title-abcd',
textColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should handle data change when stats title color is changed', () => {
const mockEvent = { target: { value: 'red-color' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
textColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-title-color').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'red-color',
textColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should handle data change when stats bg color is changed', () => {
const mockEvent = { target: { value: 'random-color' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-bg-color').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should handle data change when stats cache seconds is changed', () => {
const mockEvent = { target: { value: 1900 } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-cache-seconds').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: 1900,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should handle data change when stats text color is changed', () => {
const mockEvent = { target: { value: 'black-color' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'some-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-text-color').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'black-color',
bgColor: 'abcd',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should handle data change when stats local is changed', () => {
const mockEvent = { target: { value: 'uk' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-locale').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'uk',
},
},
});
});
it('should handle data change when stats local is changed', () => {
const mockEvent = { target: { checked: true } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
githubStatsOptions: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: false,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#github-stats-open-btn').simulate('click', {});
addOnComponent.find('#stats-hide-border').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('githubStatsOptions', {
target: {
value: {
theme: 'theme-1',
titleColor: 'some-color',
textColor: 'abcd',
bgColor: 'random-color',
hideBorder: true,
cacheSeconds: null,
theme: 'new-theme-for-stats',
locale: 'en',
},
},
});
});
it('should render Customize Top Skills Card', () => {
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#top-languages-open-btn').simulate('click', {});
expect(addOnComponent).toMatchSnapshot();
});
it('should handle data change when top skills theme is changed', () => {
const mockEvent = { target: { value: 'theme-xyz' } };
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
topLanguagesOptions: {
theme: 'theme-2',
titleColor: 'title-abcd-new',
textColor: 'random-some-color',
bgColor: '1234',
hideBorder: false,
cacheSeconds: null,
theme: 'theme-xyz',
locale: 'us',
},
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = mount(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#top-languages-open-btn').simulate('click', {});
addOnComponent.find('#top-lang-theme').simulate('change', mockEvent);
jest.runAllTimers();
expect(mockHandleDataChange).toHaveBeenCalledTimes(1);
expect(mockHandleDataChange).toHaveBeenCalledWith('topLanguagesOptions', {
target: {
value: {
theme: 'theme-2',
titleColor: 'title-abcd-new',
textColor: 'random-some-color',
bgColor: '1234',
hideBorder: false,
cacheSeconds: null,
theme: 'theme-xyz',
locale: 'us',
},
},
});
});
it('should handle check change when add on item inputs are changed', () => {
const mockEvent = { target: { value: 'This is a mock event' } };
const addOnComponent = mount(
<Addons
data={dataInput}
social={socialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#visitors-count').simulate('change', mockEvent);
addOnComponent.find('#github-profile-trophy').simulate('change', mockEvent);
addOnComponent.find('#github-stats').simulate('change', mockEvent);
addOnComponent.find('#top-languages').simulate('change', mockEvent);
addOnComponent.find('#twitter-badge').simulate('change', mockEvent);
addOnComponent.find('#dev-dynamic-blogs').simulate('change', mockEvent);
addOnComponent.find('#rss-dynamic-blogs').simulate('change', mockEvent);
addOnComponent.find('#medium-dynamic-blogs').simulate('change', mockEvent);
expect(mockHandleCheckChange).toHaveBeenCalledTimes(8);
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(1, 'visitorsBadge');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(2, 'githubProfileTrophy');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(3, 'githubStats');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(4, 'topLanguages');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(5, 'twitterBadge');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(6, 'devDynamicBlogs');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(7, 'rssDynamicBlogs');
expect(mockHandleCheckChange).toHaveBeenNthCalledWith(8, 'mediumDynamicBlogs');
});
it('should display workflow details if devDynamicBlogs and dev social data are available', () => {
const newDataInput = {
...dataInput,
devDynamicBlogs: 'some-value',
};
const newSocialInput = {
dev: 'some-value-123',
};
const addOnComponent = shallow(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
const workflowElement = addOnComponent.find('.workflow');
expect(workflowElement).toMatchSnapshot();
});
it('should display workflow details if rssDynamicBlogs and rss url data are available', () => {
const newDataInput = {
...dataInput,
rssDynamicBlogs: 'some-rss-value',
};
const newSocialInput = {
rssurl: 'url-random',
};
const addOnComponent = shallow(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
const workflowElement = addOnComponent.find('.workflow');
expect(workflowElement).toMatchSnapshot();
});
it('should display workflow details if mediumDynamicBlogs, medium social data are available', () => {
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = shallow(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
const workflowElement = addOnComponent.find('.workflow');
expect(workflowElement).toMatchSnapshot();
});
it('should call document create element when blog post workflow is clicked', () => {
let someElement = document.createElement('abcd');
document.createElement = jest.fn().mockReturnValueOnce(someElement);
const newDataInput = {
...dataInput,
mediumDynamicBlogs: 'some-medium-blogs-value',
};
const newSocialInput = {
medium: '@abcd',
};
const addOnComponent = shallow(
<Addons
data={newDataInput}
social={newSocialInput}
handleCheckChange={mockHandleCheckChange}
handleDataChange={mockHandleDataChange}
/>,
);
addOnComponent.find('#blog-post-worklow-span').simulate('click', {});
expect(document.createElement).toHaveBeenCalledTimes(1);
});
});
+11
View File
@@ -0,0 +1,11 @@
import React from 'react';
import toJson from 'enzyme-to-json';
import { shallow } from 'enzyme';
import Donate from '../donate';
describe('Donate', () => {
it('renders correctly', () => {
const component = shallow(<Donate />);
expect(toJson(component)).toMatchSnapshot();
});
});
+13
View File
@@ -0,0 +1,13 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Footer from '../footer';
describe('Footer component', () => {
const component = shallow(<Footer />);
it('renders correctly', () => {
expect(toJson(component)).toMatchSnapshot();
});
});
+13
View File
@@ -0,0 +1,13 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Header from '../header';
describe('Header', () => {
const component = shallow(<Header heading="heading" />);
it('renders correctly', () => {
expect(toJson(component)).toMatchSnapshot();
});
});
+13
View File
@@ -0,0 +1,13 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Loader from '../loader';
describe('Loader', () => {
const component = shallow(<Loader />);
it('renders correctly', () => {
expect(toJson(component)).toMatchSnapshot();
});
});
+214
View File
@@ -0,0 +1,214 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Markdown from '../markdown';
describe('Markdown', () => {
const props = {
data: {
ama: '',
badgeColor: '0e75b6',
badgeLabel: 'Profile views',
badgeStyle: 'flat',
collaborateOn: '',
contact: '',
currentLearn: '',
currentWork: 'currentWork',
devDynamicBlogs: false,
funFact: '',
githubProfileTrophy: false,
githubStats: false,
githubStatsOptions: {
bgColor: '',
cacheSeconds: null,
hideBorder: false,
locale: 'en',
textColor: '',
theme: '',
titleColor: '',
},
helpWith: '',
mediumDynamicBlogs: false,
rssDynamicBlogs: false,
subtitle: 'A passionate frontend developer from India',
title: 'title',
topLanguages: false,
topLanguagesOptions: {
bgColor: '',
cacheSeconds: null,
hideBorder: false,
locale: 'en',
textColor: '',
theme: '',
titleColor: '',
},
twitterBadge: false,
visitorsBadge: false,
},
link: {
blog: 'blog',
collaborateOn: 'collaborateOn',
currentWork: 'currentWork',
helpWith: 'helpWith',
portfolio: 'portfolio',
resume: 'resume',
},
prefix: {
ama: '💬 Ask me about',
blog: '📝 I regularly write articles on',
collaborateOn: '👯 Im looking to collaborate on',
contact: '📫 How to reach me',
currentLearn: '🌱 Im currently learning',
currentWork: '🔭 Im currently working on',
funFact: '⚡ Fun fact',
helpWith: '🤝 Im looking for help with',
portfolio: '👨‍💻 All of my projects are available at',
resume: '📄 Know about my experiences',
title: "Hi 👋, I'm",
},
skills: {
javascript: true,
express: false,
},
social: {
dev: 'dev',
codechef: '',
},
};
it('renders without subtitle', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
subtitle: '',
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders without prefix.title and data.title', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
title: '',
}}
prefix={{
...props.prefix,
title: '',
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders topLanguages is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
topLanguages: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders topLanguages is true and githubStats is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
topLanguages: true,
githubStats: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders devDynamicBlogs is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
devDynamicBlogs: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders without link.currentWork', () => {
const component = shallow(
<Markdown
{...props}
link={{
...props.data,
currentWork: '',
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders visitorsBadge is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
visitorsBadge: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders twitterBadge is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
twitterBadge: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders githubProfileTrophy is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
githubProfileTrophy: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
it('renders githubProfileTrophy is true', () => {
const component = shallow(
<Markdown
{...props}
data={{
...props.data,
githubProfileTrophy: true,
}}
/>,
);
expect(toJson(component)).toMatchSnapshot();
});
});
@@ -0,0 +1,404 @@
import React from 'react';
import { shallow, configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import MarkdownPreview, {
GithubProfileTrophyPreview,
GitHubStatsPreview,
SkillsPreview,
SocialPreview,
SubTitlePreview,
TitlePreview,
TopLanguagesPreview,
TwitterBadgePreview,
VisitorsBadgePreview,
WorkPreview,
SectionTitle,
DisplayWork,
DisplaySocial,
} from '../markdownPreview';
configure({ adapter: new Adapter() });
const DEFAULT_PREFIX = {
title: "Hi 👋, I'm",
currentWork: '🔭 Im currently working on',
currentLearn: '🌱 Im currently learning',
collaborateOn: '👯 Im looking to collaborate on',
helpWith: '🤝 Im looking for help with',
ama: '💬 Ask me about',
contact: '📫 How to reach me',
resume: '📄 Know about my experiences',
funFact: '⚡ Fun fact',
portfolio: '👨‍💻 All of my projects are available at',
blog: '📝 I regularly write articles on',
};
const DEFAULT_DATA = {
title: 'dummy',
subtitle: 'A passionate frontend developer from India',
currentWork: 'readme-generator',
currentLearn: '',
collaborateOn: '',
helpWith: '',
ama: '',
contact: '',
funFact: '',
twitterBadge: false,
visitorsBadge: false,
badgeStyle: 'flat',
badgeColor: '0e75b6',
badgeLabel: 'Profile views',
githubProfileTrophy: false,
githubStats: false,
githubStatsOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
topLanguages: false,
topLanguagesOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
devDynamicBlogs: false,
mediumDynamicBlogs: false,
rssDynamicBlogs: false,
};
const DEFAULT_LINK = {
currentWork: 'https://dummy.com',
collaborateOn: '',
helpWith: '',
portfolio: '',
blog: '',
resume: '',
};
const DEFAULT_SOCIAL = {
github: '',
dev: '',
linkedin: '',
codepen: 'dummy',
stackoverflow: '',
kaggle: '',
codesandbox: '',
fb: '',
instagram: '',
twitter: '',
dribbble: '',
behance: '',
medium: '',
youtube: '',
codechef: '',
hackerrank: '',
codeforces: '',
leetcode: '',
topcoder: '',
hackerearth: '',
geeks_for_geeks: '',
discord: '',
rssurl: '',
};
const DUMMY_SKILLS = {
skills: {
unity: true,
android: false,
angularjs: false,
apachecordova: false,
},
};
describe('Markdown Preview', () => {
it('renders correctly', () => {
let prefix = DEFAULT_PREFIX;
let data = DEFAULT_DATA;
let link = DEFAULT_LINK;
let social = DEFAULT_SOCIAL;
let skills = {};
const tree = shallow(<MarkdownPreview prefix={prefix} data={data} link={link} social={social} skills={skills} />);
expect(tree).toMatchSnapshot();
});
});
describe('Title Preview', () => {
it('renders correctly', () => {
let prefix = DEFAULT_PREFIX;
let data = DEFAULT_DATA;
const tree = shallow(<TitlePreview prefix={prefix.title} title={data.title} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no prefix', () => {
let prefix = DEFAULT_PREFIX;
const tree = shallow(<TitlePreview prefix={prefix.title} title={''} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no title', () => {
let data = DEFAULT_DATA;
const tree = shallow(<TitlePreview title={data.title} prefix={''} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no title and prefix', () => {
const tree = shallow(<TitlePreview />);
expect(tree).toMatchSnapshot();
});
});
describe('SubTitle Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
const tree = shallow(<SubTitlePreview subtitle={data.subtitle} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no subtitle', () => {
const tree = shallow(<SubTitlePreview subtitle={''} />);
expect(tree).toMatchSnapshot();
});
});
describe('SectionTitle Preview', () => {
it('renders correctly', () => {
const tree = shallow(<SectionTitle visible={true} label={'dummy'} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no label', () => {
const tree = shallow(<SectionTitle visible={true} label={''} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with visible false', () => {
const tree = shallow(<SectionTitle visible={false} label={'dummy'} />);
expect(tree).toMatchSnapshot();
});
});
describe('DisplayWork Preview', () => {
it('renders correctly', () => {
let prefix = DEFAULT_PREFIX;
let data = DEFAULT_DATA;
let link = DEFAULT_LINK;
const tree = shallow(<DisplayWork prefix={prefix} project={data.currentWork} link={link.currentWork} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no prefix, link and project', () => {
const tree = shallow(<DisplayWork prefix={undefined} project={undefined} link={undefined} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no prefix', () => {
let data = DEFAULT_DATA;
let link = DEFAULT_LINK;
const tree = shallow(<DisplayWork prefix={undefined} project={data.currentWork} link={link.currentWork} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no project', () => {
let prefix = DEFAULT_PREFIX;
let link = DEFAULT_LINK;
const tree = shallow(<DisplayWork prefix={prefix} project={undefined} link={link.currentWork} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no link', () => {
let prefix = DEFAULT_PREFIX;
let data = DEFAULT_DATA;
const tree = shallow(<DisplayWork prefix={prefix} project={data.currentWork} link={undefined} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no prefix and link', () => {
let data = DEFAULT_DATA;
const tree = shallow(<DisplayWork project={data.currentWork} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no project and link', () => {
let prefix = DEFAULT_PREFIX;
const tree = shallow(<DisplayWork prefix={prefix} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no project and prefix', () => {
let link = DEFAULT_LINK;
const tree = shallow(<DisplayWork link={link.currentWork} />);
expect(tree).toMatchSnapshot();
});
});
describe('DisplaySocial Preview', () => {
it('renders correctly', () => {
let social = DEFAULT_SOCIAL;
const tree = shallow(
<DisplaySocial
base="https://codepen.io"
icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
username={social.codepen}
/>,
);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no username', () => {
const tree = shallow(
<DisplaySocial
base="https://codepen.io"
icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
username={''}
/>,
);
expect(tree).toMatchSnapshot();
});
});
describe('VisitorsBadge Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(
<VisitorsBadgePreview
show={data.visitorsBadge}
github={social.github}
badgeOptions={{
badgeLabel: encodeURI(data.badgeLabel),
badgeColor: data.badgeColor,
badgeStyle: data.badgeStyle,
}}
/>,
);
expect(tree).toMatchSnapshot();
});
it('renders correctly with show true', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(
<VisitorsBadgePreview
show={true}
github={social.github}
badgeOptions={{
badgeLabel: encodeURI(data.badgeLabel),
badgeColor: data.badgeColor,
badgeStyle: data.badgeStyle,
}}
/>,
);
expect(tree).toMatchSnapshot();
});
});
describe('GithubProfileTrophy Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<GithubProfileTrophyPreview show={data.githubProfileTrophy} github={social.github} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with show true', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<GithubProfileTrophyPreview show={true} github={social.github} />);
expect(tree).toMatchSnapshot();
});
});
describe('TwitterBadgePreview Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<TwitterBadgePreview show={data.twitterBadge} twitter={social.twitter} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with show true', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<TwitterBadgePreview show={true} twitter={social.twitter} />);
expect(tree).toMatchSnapshot();
});
});
describe('Work Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let prefix = DEFAULT_PREFIX;
let link = DEFAULT_LINK;
let props = { data: data, prefix: prefix, link: link };
const tree = shallow(<WorkPreview work={props} />);
expect(tree).toMatchSnapshot();
});
});
describe('Social Preview', () => {
it('renders correctly', () => {
let social = DEFAULT_SOCIAL;
const tree = shallow(<SocialPreview social={social} />);
expect(tree).toMatchSnapshot();
});
});
describe('Skills Preview', () => {
it('renders correctly', () => {
let skills = DUMMY_SKILLS.skills;
const tree = shallow(<SkillsPreview skills={skills} />);
expect(tree).toMatchSnapshot();
});
it('renders correctly with no skills', () => {
let skills = {};
const tree = shallow(<SkillsPreview skills={skills} />);
expect(tree).toMatchSnapshot();
});
});
describe('TopLanguages Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(
<TopLanguagesPreview show={data.topLanguages} github={social.github} options={data.topLanguagesOptions} />,
);
expect(tree).toMatchSnapshot();
});
it('renders correctly with show true', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<TopLanguagesPreview show={true} github={social.github} options={data.topLanguagesOptions} />);
expect(tree).toMatchSnapshot();
});
});
describe('GitHubStats Preview', () => {
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(
<GitHubStatsPreview show={data.githubStats} github={social.github} options={data.githubStatsOptions} />,
);
expect(tree).toMatchSnapshot();
});
it('renders correctly', () => {
let data = DEFAULT_DATA;
let social = DEFAULT_SOCIAL;
const tree = shallow(<GitHubStatsPreview show={true} github={social.github} options={data.githubStatsOptions} />);
expect(tree).toMatchSnapshot();
});
});
+40
View File
@@ -0,0 +1,40 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Skills from '../skills';
jest.mock('../../constants/skills', () => ({
__esModule: true,
categorizedSkills: {
language: {
title: 'Programming Languages',
skills: ['javascript'],
},
frontend_dev: {
title: 'Frontend Development',
skills: ['react', 'svelte'],
},
},
icons: {
javascript: 'javascript.svg',
react: 'react.svg',
svelte: 'svelte.svg',
},
}));
describe('Skills', () => {
it('renders correctly', () => {
const component = shallow(<Skills skills={{ javascript: true }} />);
expect(toJson(component)).toMatchSnapshot();
});
it('calls handleSkillsChange prop when a skill is clicked', () => {
const mockFn = jest.fn();
const component = shallow(<Skills skills={{ javascript: true }} handleSkillsChange={mockFn} />);
component.find('#javascript').simulate('change');
expect(mockFn).toHaveBeenCalledTimes(1);
});
});
+44
View File
@@ -0,0 +1,44 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Social from '../social';
describe('Social', () => {
const mockEvent = { target: { value: 'This is a mock event' } };
const props = {
social: {
github: 'github ',
twitter: 'twitter',
dev: 'dev',
codepen: 'codepen',
codesandbox: 'codesandbodx',
stackoverflow: 'stackoverflow',
linkedin: 'linkedin',
kaggle: 'kaggle',
fb: 'fb',
instagram: 'instagram',
dribble: 'dribble',
behance: 'behance',
medium: 'medium',
youtube: 'youtube',
codechef: 'codechef',
hackerrack: 'hackerranck',
codeforces: 'codeforces',
leetcode: 'leetcode',
topcoder: 'topcoder',
hackerearth: '@hackerearth',
geeks_for_geeks: 'geeks_for_geeks',
discord: 'discord',
rssurl: 'rssurl',
},
handleSocialChange: jest.fn().mockReturnValue({}),
};
it('renders correctly', () => {
const component = shallow(<Social {...props} />);
for (let i = 0; i < component.find('input').length; i++) {
component.find('input').at(i).simulate('change', mockEvent);
}
expect(toJson(component)).toMatchSnapshot();
});
});
+26
View File
@@ -0,0 +1,26 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Subtitle from '../subtitle';
describe('Subtitle', () => {
const mockEvent = { target: { value: 'This is a mock event' } };
const props = {
data: {
subtitle: 'A frontend developer',
},
handleDataChange: jest.fn().mockReturnValue({}),
};
const component = shallow(<Subtitle {...props} />);
it('renders correctly', () => {
expect(toJson(component)).toMatchSnapshot();
});
it('calls onChange', () => {
component.find('input').at(0).simulate('change', mockEvent);
expect(props.handleDataChange).toBeCalledWith('subtitle', mockEvent);
});
});
+27
View File
@@ -0,0 +1,27 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Title from '../title';
describe('Title', () => {
const mockEvent = { target: { value: 'This is a mock event' } };
const props = {
prefix: {
title: 'test_title',
currentWork: 'test_currentwork',
},
data: { title: 'test_data' },
link: { currentWork: 'test_currentwork' },
handlePrefixChange: jest.fn().mockReturnValue({}),
handleLinkChange: jest.fn().mockReturnValue({}),
handleDataChange: jest.fn().mockReturnValue({}),
};
it('renders title component correctly', () => {
const component = shallow(<Title {...props} />);
component.find('input').at(0).simulate('change', mockEvent);
component.find('input').at(1).simulate('change', mockEvent);
expect(toJson(component)).toMatchSnapshot();
});
});
+28
View File
@@ -0,0 +1,28 @@
import React from 'react';
import { shallow } from 'enzyme';
import toJson from 'enzyme-to-json';
import Work from '../work';
describe('Work', () => {
const mockEvent = { target: { value: 'This is a mock event' } };
const props = {
prefix: {
title: 'test_title',
currentWork: 'test_currentwork',
},
data: { title: 'test_data' },
link: { currentWork: 'test_currentwork' },
handlePrefixChange: jest.fn().mockReturnValue({}),
handleLinkChange: jest.fn().mockReturnValue({}),
handleDataChange: jest.fn().mockReturnValue({}),
};
it('renders work component correctly', () => {
const component = shallow(<Work {...props} />);
for (let i = 0; i < component.find('input').length; i++) {
component.find('input').at(i).simulate('change', mockEvent);
}
expect(toJson(component)).toMatchSnapshot();
});
});
-73
View File
@@ -1,73 +0,0 @@
import React from "react"
import { withPrefix } from 'gatsby'
import { latestBlogs } from "../utils/workflows"
import links from "../constants/page-links"
import { isMediumUsernameValid } from "../utils/validation"
const Addons = (props) => {
const blogPostPorkflow = () => {
let payload = {
dev: {
show: props.data.devDynamicBlogs,
username: props.social.dev,
},
medium: {
show: props.data.mediumDynamicBlogs,
username: props.social.medium,
}
}
var actionContent = latestBlogs(payload);
var tempElement = document.createElement('a');
tempElement.setAttribute('href', 'data:text/yaml;charset=utf-8,' + encodeURIComponent(actionContent));
tempElement.setAttribute('download', 'blog-post-workflow.yml');
tempElement.style.display = 'none';
document.body.appendChild(tempElement);
tempElement.click();
document.body.removeChild(tempElement);
}
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Add-ons</div>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor="visitors-count" className="cursor-pointer">
<input type="checkbox" id="visitors-count" checked={props.data.visitorsBadge}
onChange={event => props.handleCheckChange('visitorsBadge')} />&nbsp; display visitors count badge
</label>
</div>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor="github-stats" className="cursor-pointer">
<input id="github-stats" type="checkbox" checked={props.data.githubStats}
onChange={event => props.handleCheckChange('githubStats')} />&nbsp; display github profile stats card
</label>
</div>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor="top-languages" className="cursor-pointer">
<input id="top-languages" type="checkbox" checked={props.data.topLanguages}
onChange={event => props.handleCheckChange('topLanguages')} />&nbsp; display top skills
</label>
</div>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor="dev-dynamic-blogs" className="cursor-pointer">
<input id="dev-dynamic-blogs" type="checkbox" checked={props.data.devDynamicBlogs}
onChange={event => props.handleCheckChange('devDynamicBlogs')} />&nbsp; display latest dev.to blogs dynamically (GitHub Action)
</label>
</div>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor="medium-dynamic-blogs" className="cursor-pointer">
<input id="medium-dynamic-blogs" type="checkbox" checked={props.data.mediumDynamicBlogs}
onChange={event => props.handleCheckChange('mediumDynamicBlogs')} />&nbsp; display latest medium blogs dynamically (GitHub Action)
</label>
</div>
{(props.data.devDynamicBlogs && props.social.dev) || (props.data.mediumDynamicBlogs && props.social.medium && isMediumUsernameValid(props.social.medium)) ?
<div className="workflow">
<div>
download
<span onClick={blogPostPorkflow} role="button" tabIndex="0" style={{ cursor: 'pointer', color: '#002ead' }}> blog-post-workflow.yml</span> file(learn
<a href={withPrefix(links.addons)} target="blank" style={{ color: '#002ead' }}> how to setup</a>)
</div>
</div> : ''}
</div>
)
}
export default Addons;
+482
View File
@@ -0,0 +1,482 @@
import React, { useState, useEffect } from 'react';
import PropTypes from 'prop-types';
import { withPrefix } from 'gatsby';
import { ToolsIcon, XCircleIcon } from '@primer/octicons-react';
import latestBlogs from '../utils/workflows';
import links from '../constants/page-links';
import { isMediumUsernameValid, isGitHubUsernameValid } from '../utils/validation';
const AddonsItem = (props) => {
const { inputId, inputChecked, onInputChange, Options, children } = props;
const [open, setOpen] = useState(false);
const Icon = open ? XCircleIcon : ToolsIcon;
return (
<>
<div className="py-2 flex justify-start items-center text-sm sm:text-lg">
<label htmlFor={inputId} className="checkbox-label flex items-center">
<input
id={inputId}
type="checkbox"
className="checkbox-label__input"
checked={inputChecked}
onChange={onInputChange}
/>
<span className="checkbox-label__control" />
<span className="pl-4">{children}</span>
</label>
{Options && (
<button
type="button"
id={`${inputId}-open-btn`}
onClick={() => setOpen(!open)}
className="flex ml-3 focus:bg-gray-400"
style={{ outline: 'none' }}
>
<Icon className="transform scale-100 md:scale-125" />
</button>
)}
</div>
{Options && open && Options}
</>
);
};
AddonsItem.propTypes = {
inputId: PropTypes.string.isRequired,
inputChecked: PropTypes.bool.isRequired,
onInputChange: PropTypes.func.isRequired,
Options: PropTypes.element.isRequired,
children: PropTypes.element.isRequired,
};
const CustomizeOptions = ({ title, CustomizationOptions }) => (
<div className="border-2 border-solid border-gray-900 bg-gray-100 p-2 ml-8" style={{ maxWidth: '21rem' }}>
<header className="text-base sm:text-lg">{title}</header>
<hr className="border-gray-500" />
<div className="text-sm sm:text-lg flex flex-col mt-2 ml-0 md:ml-4">{CustomizationOptions}</div>
</div>
);
CustomizeOptions.propTypes = {
title: PropTypes.string.isRequired,
CustomizationOptions: PropTypes.element.isRequired,
};
const CustomizeBadge = ({ githubName, badgeOptions, onBadgeUpdate }) => (
<>
<label htmlFor="badge-style">
Style:&nbsp;
<select
id="badge-style"
onChange={(e) => onBadgeUpdate('badgeStyle', e.target.value)}
value={badgeOptions.badgeStyle}
>
<option value="flat">Flat</option>
<option value="flat-square">Flat Square</option>
<option value="plastic">Plastic</option>
</select>
</label>
<label htmlFor="badge-color">
Color:&nbsp;
<input
type="color"
id="badge-color"
defaultValue={`#${badgeOptions.badgeColor}`}
className="w-6"
onChange={(e) => onBadgeUpdate('badgeColor', e.target.value.replace('#', ''))}
/>
</label>
<label htmlFor="badge-label-text">
Label Text:&nbsp;
<input
type="text"
id="badge-label-text"
placeholder="Profile views"
className="w-2/4 bg-gray-300 pl-2"
onChange={(e) => onBadgeUpdate('badgeLabel', e.target.value.trim())}
defaultValue={badgeOptions.badgeLabel}
/>
</label>
<span className="mt-2 flex items-center">
Preview:&nbsp;
{isGitHubUsernameValid(githubName) ? (
<img
src={`https://komarev.com/ghpvc/?username=${githubName}&label=${encodeURI(badgeOptions.badgeLabel)}&color=${
badgeOptions.badgeColor
}&style=${badgeOptions.badgeStyle}`}
alt="profile-visitors-count"
/>
) : (
<span className="text-xxs md:text-sm text-red-600">Invalid GitHub username</span>
)}
</span>
</>
);
CustomizeBadge.propTypes = {
githubName: PropTypes.string.isRequired,
badgeOptions: PropTypes.object.isRequired,
onBadgeUpdate: PropTypes.func.isRequired,
};
const CustomizeGithubStatsBase = ({ prefix, options, onUpdate }) => (
<>
<label htmlFor={`${prefix}-theme`}>
Theme:&nbsp;
<select
id={`${prefix}-theme`}
onChange={({ target: { value } }) => onUpdate('theme', value)}
defaultValue={options.theme}
>
<option value="none">none</option>
<option value="dark">Dark</option>
<option value="radical">Radical</option>
<option value="merko">Merko</option>
<option value="gruvbox">Gruvbox</option>
<option value="tokyonight">Tokyonight</option>
<option value="onedark">Onedark</option>
<option value="cobalt">Cobalt</option>
<option value="synthwave">Synthwave</option>
<option value="highcontrast">Highcontrast</option>
<option value="dracula">Dracula</option>
</select>
</label>
<label htmlFor={`${prefix}-title-color`}>
Title Color:&nbsp;
<input
type="color"
id={`${prefix}-title-color`}
defaultValue={`#${options.titleColor}`}
className="w-6"
onChange={(e) => onUpdate('titleColor', e.target.value.replace('#', ''))}
/>
</label>
<label htmlFor={`${prefix}-text-color`}>
Text Color:&nbsp;
<input
type="color"
id={`${prefix}-text-color`}
defaultValue={`#${options.textColor}`}
className="w-6"
onChange={(e) => onUpdate('textColor', e.target.value.replace('#', ''))}
/>
</label>
<label htmlFor={`${prefix}-bg-color`}>
Background Color:&nbsp;
<input
type="color"
id={`${prefix}-bg-color`}
defaultValue={`#${options.bgColor}`}
className="w-6"
onChange={(e) => onUpdate('bgColor', e.target.value.replace('#', ''))}
/>
</label>
<label htmlFor={`${prefix}-hide-border`} className="checkbox-label">
Hide border:&nbsp;
<input
id={`${prefix}-hide-border`}
type="checkbox"
className="checkbox-label__input"
checked={options.hideBorder}
onChange={(e) => onUpdate('hideBorder', e.target.checked)}
/>
<span className="checkbox-label__control" />
</label>
<label htmlFor={`${prefix}-cache-seconds`}>
Cache Seconds:&nbsp;
<input
id={`${prefix}-cache-seconds`}
type="number"
min={1800}
max={86400}
placeholder={1800}
defaultValue={options.cacheSeconds}
onChange={(e) => onUpdate('cacheSeconds', e.target.value)}
/>
</label>
<label htmlFor={`${prefix}-locale`}>
Locale:&nbsp;
<input
id={`${prefix}-locale`}
type="text"
placeholder="en"
defaultValue={options.locale}
onChange={(e) => onUpdate('locale', e.target.value)}
size="2"
/>
</label>
</>
);
CustomizeGithubStatsBase.propTypes = {
prefix: PropTypes.string.isRequired,
options: PropTypes.object.isRequired,
onUpdate: PropTypes.func.isRequired,
};
const CustomizeStreakStats = ({ prefix, options, onUpdate }) => (
<>
<label htmlFor={`${prefix}-theme`}>
Theme:&nbsp;
<select
id={`${prefix}-theme`}
onChange={({ target: { value } }) => onUpdate('theme', value)}
defaultValue={options.theme}
>
<option value="default">default</option>
<option value="dark">dark</option>
<option value="highcontrast">highcontrast</option>
</select>
</label>
</>
);
CustomizeStreakStats.propTypes = {
prefix: PropTypes.string.isRequired,
options: PropTypes.object.isRequired,
onUpdate: PropTypes.func.isRequired,
};
const Addons = (props) => {
const { data, social, handleDataChange, handleCheckChange } = props;
const [debounce, setDebounce] = useState(undefined);
const [badgeOptions, setBadgeOptions] = useState({
badgeStyle: data.badgeStyle,
badgeColor: data.badgeColor,
badgeLabel: data.badgeLabel,
});
useEffect(() => {
setBadgeOptions({
badgeStyle: data.badgeStyle,
badgeColor: data.badgeColor,
badgeLabel: data.badgeLabel,
});
}, [data.badgeStyle, data.badgeColor, data.badgeLabel]);
const [githubStatsOptions, setGithubStatsOptions] = useState({
...data.githubStatsOptions,
});
useEffect(() => {
setGithubStatsOptions({
...data.githubStatsOptions,
});
}, [data.githubStatsOptions]);
const [topLanguagesOptions, setTopLanguagesOptions] = useState({
...data.topLanguagesOptions,
});
useEffect(() => {
setTopLanguagesOptions({
...data.topLanguagesOptions,
});
}, [data.topLanguagesOptions]);
const [streakStatsOptions, setStreakStatsOptions] = useState({
...data.streakStatsOptions,
});
useEffect(() => {
setStreakStatsOptions({
...data.streakStatsOptions,
});
}, [data.streakStatsOptions]);
const blogPostPorkflow = () => {
const payload = {
dev: {
show: data.devDynamicBlogs,
username: social.dev,
},
medium: {
show: data.mediumDynamicBlogs,
username: social.medium,
},
rssurl: {
show: data.rssDynamicBlogs,
username: social.rssurl,
},
};
const actionContent = latestBlogs(payload);
const tempElement = document.createElement('a');
tempElement.setAttribute('href', `data:text/yaml;charset=utf-8,${encodeURIComponent(actionContent)}`);
tempElement.setAttribute('download', 'blog-post-workflow.yml');
tempElement.style.display = 'none';
document.body.appendChild(tempElement);
tempElement.click();
document.body.removeChild(tempElement);
};
const onBadgeUpdate = (option, value) => {
const callback = () => {
const newVal = option === 'badgeLabel' && value === '' ? 'Profile views' : value;
setBadgeOptions({ ...badgeOptions, [option]: newVal });
handleDataChange(option, { target: { value: newVal } });
};
clearTimeout(debounce);
setDebounce(setTimeout(callback, 300));
};
const onStatsUpdate = (option, value) => {
const newStatsOptions = { ...githubStatsOptions, [option]: value };
setGithubStatsOptions(newStatsOptions);
handleDataChange('githubStatsOptions', {
target: { value: newStatsOptions },
});
};
const onTopLangUpdate = (option, value) => {
const newLangOptions = { ...topLanguagesOptions, [option]: value };
setTopLanguagesOptions(newLangOptions);
handleDataChange('topLanguagesOptions', {
target: { value: newLangOptions },
});
};
const onStreakStatsUpdate = (option, value) => {
const newStreakStatsOptions = { ...streakStatsOptions, [option]: value };
setStreakStatsOptions(newStreakStatsOptions);
handleDataChange('streakStatsOptions', {
target: { value: newStreakStatsOptions },
});
};
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Add-ons</div>
<AddonsItem
inputId="visitors-count"
inputChecked={data.visitorsBadge}
onInputChange={() => handleCheckChange('visitorsBadge')}
Options={
<CustomizeOptions
title="Customize Badge"
CustomizationOptions={
<CustomizeBadge githubName={social.github} badgeOptions={badgeOptions} onBadgeUpdate={onBadgeUpdate} />
}
/>
}
>
display visitors count badge
</AddonsItem>
<AddonsItem
inputId="github-profile-trophy"
inputChecked={data.githubProfileTrophy}
onInputChange={() => handleCheckChange('githubProfileTrophy')}
>
display github trophy
</AddonsItem>
<AddonsItem
inputId="github-stats"
inputChecked={data.githubStats}
onInputChange={() => handleCheckChange('githubStats')}
Options={
<CustomizeOptions
title="Customize Github Stats Card"
CustomizationOptions={
<CustomizeGithubStatsBase prefix="stats" options={githubStatsOptions} onUpdate={onStatsUpdate} />
}
/>
}
>
display github profile stats card
</AddonsItem>
<AddonsItem
inputId="top-languages"
inputChecked={data.topLanguages}
onInputChange={() => handleCheckChange('topLanguages')}
Options={
<CustomizeOptions
title="Customize Top Skills Card"
CustomizationOptions={
<CustomizeGithubStatsBase prefix="top-lang" options={topLanguagesOptions} onUpdate={onTopLangUpdate} />
}
/>
}
>
display top skills
</AddonsItem>
<AddonsItem
inputId="streak-stats"
inputChecked={data.streakStats}
onInputChange={() => handleCheckChange('streakStats')}
Options={
<CustomizeOptions
title="Customize Streak Stats Card"
CustomizationOptions={
<CustomizeStreakStats prefix="streak-stats" options={streakStatsOptions} onUpdate={onStreakStatsUpdate} />
}
/>
}
>
display github streak stats
</AddonsItem>
<AddonsItem
inputId="twitter-badge"
inputChecked={data.twitterBadge}
onInputChange={() => handleCheckChange('twitterBadge')}
>
display twitter badge
</AddonsItem>
<AddonsItem
inputId="dev-dynamic-blogs"
inputChecked={data.devDynamicBlogs}
onInputChange={() => handleCheckChange('devDynamicBlogs')}
>
display latest dev.to blogs dynamically (GitHub Action)
</AddonsItem>
<AddonsItem
inputId="medium-dynamic-blogs"
inputChecked={data.mediumDynamicBlogs}
onInputChange={() => handleCheckChange('mediumDynamicBlogs')}
>
display latest medium blogs dynamically (GitHub Action)
</AddonsItem>
<AddonsItem
inputId="rss-dynamic-blogs"
inputChecked={data.rssDynamicBlogs}
onInputChange={() => handleCheckChange('rssDynamicBlogs')}
>
display latest blogs from your personal blog dynamically (GitHub Action)
</AddonsItem>
{(data.devDynamicBlogs && social.dev) ||
(data.rssDynamicBlogs && social.rssurl) ||
(data.mediumDynamicBlogs && social.medium && isMediumUsernameValid(social.medium)) ? (
<div className="workflow">
<div>
download
<span
id="blog-post-worklow-span"
onClick={blogPostPorkflow}
onKeyDown={(e) => e.keyCode === 13 && blogPostPorkflow()}
role="button"
tabIndex="0"
style={{ cursor: 'pointer', color: '#002ead' }}
>
{' '}
blog-post-workflow.yml
</span>{' '}
file(learn
<a href={withPrefix(links.addons)} target="blank" style={{ color: '#002ead' }}>
{' '}
how to setup
</a>
)
</div>
</div>
) : (
''
)}
</div>
);
};
export default Addons;
Addons.propTypes = {
data: PropTypes.object.isRequired,
social: PropTypes.object.isRequired,
handleDataChange: PropTypes.func.isRequired,
handleCheckChange: PropTypes.func.isRequired,
};
+88
View File
@@ -0,0 +1,88 @@
import React from 'react';
const Donate = () => (
<>
<div className="text-center text-4xl my-2">
Support&nbsp;
<span role="img" aria-label="praying hand emoji">
🙏
</span>
</div>
<div className="flex flex-col sm:flex-row items-start justify-between">
<div className="w-full sm:w-2/3">
<div className="text-2xl mb-2">Are you using the tool and happy with it to create your GitHub Profile?</div>
<div className="text-lg">Your kind support keeps open-source tools like this free for others.</div>
<div className="mt-4">
<a
className="flex items-center justify-start w-20"
href="https://twitter.com/intent/tweet?text=Wow:&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator"
>
<img
className="w-20"
src="https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Frahuldkjain.github.io%2Fgithub-profile-readme-generator"
alt="tweet github profile readme generator"
/>
</a>
Let the world know how you feel using this tool. Share with others on twitter.
</div>
</div>
<div className="w-full sm:w-1/3 flex flex-col justify-center items-center">
<span>
Tip
<span role="img" aria-label="Dollar medal">
💰
</span>
</span>
{/* Ko-Fi */}
<a
href="https://ko-fi.com/A0A81XXSX"
className="flex items-center justify-evenly bg-red-500 text-white py-2 px-4 my-2"
target="_blank"
rel="noreferrer"
>
<img
className="w-6 h-6 mr-2"
src="https://www.vectorlogo.zone/logos/ko-fi/ko-fi-icon.svg"
alt="Buy ko-fi for rahuldkjain"
/>
Buy me a ko-fi
</a>
{/* Paypal */}
<a
href="https://www.paypal.me/rahuldkjain/10"
className="flex items-center justify-evenly bg-white-500 text-white py-2 px-4 my-2 border border-solid"
target="_blank"
rel="noreferrer"
>
<img
className="w-32 h-4"
src="https://cdn.worldvectorlogo.com/logos/paypal-2.svg"
alt="Donate rahuldkjain via paypal"
/>
{/* <img
className="w-6 h-6 mr-2"
src="https://www.vectorlogo.zone/logos/paypal/paypal-ar21.svg"
alt="Donate rahuldkjain via paypal"
/>
Paypal */}
</a>
{/* BuyMeACoffee */}
<a
href="https://www.buymeacoffee.com/rahuldkjain"
className="flex items-center justify-evenly bg-orange-500 text-white py-2 px-4 my-2"
target="_blank"
rel="noreferrer"
>
<img
className="w-6 h-6 mr-2"
src="https://www.vectorlogo.zone/logos/buymeacoffee/buymeacoffee-icon.svg"
alt="Buy rahuldkjain A Coffee"
/>
Buy me a coffee
</a>
</div>
</div>
</>
);
export default Donate;
-30
View File
@@ -1,30 +0,0 @@
import React from 'react';
import links from '../constants/page-links'
import { Link } from 'gatsby'
const Footer = () => {
return (
<div className="bg-gray-100 p-4 flex flex-col justify-center items-center shadow-inner mt-2">
<div className="w-full flex justify-evenly items-center py-2 text-orange-500">
<div>
<Link to={links.about} activeStyle={{ color: "#002ead" }}>
About
</Link>
</div>
<div>
<Link to={links.addons} activeStyle={{ color: "#002ead" }}>
Addons
</Link>
</div>
<div>
<Link to={links.support} activeStyle={{ color: "#002ead" }}>
Support
</Link>
</div>
</div>
<div className="py-2">
Developed in India <span role="img" aria-label="india"> 🇮🇳</span>
</div>
</div>
)
}
export default Footer;
+103
View File
@@ -0,0 +1,103 @@
import React from 'react';
import { Link } from 'gatsby';
import links from '../constants/page-links';
import logo from '../images/mdg.png';
import discord from '../images/Discord-Logo.png';
const Footer = () => (
<div className="bg-gray-100 p-4 flex flex-col justify-center items-center shadow-inner mt-2">
<div className="w-full flex flex-col sm:flex-row justify-evenly py-2">
<div className="sm:ml-0 sm:mr-6 order-last sm:order-none flex">
<h1 className="text-base font-bold font-title text-xl sm:text-2xl mt-3 sm:mt-0">
<div className="flex sm:flex-col items-start mb-3 sm:mb-0">
<img src={logo} className="hidden sm:block h-24" alt="github profile markdown generator logo" />
<div className="mr-2 sm:mr-0">
GitHub Profile{' '}
<img src={logo} className="inline sm:hidden h-12" alt="github profile markdown generator logo" />
<span className="block sm:inline">README Generator</span>
</div>
</div>
</h1>
</div>
<div className="text-xl sm:text-base font-light sm:font-normal">
<div className="font-title font-bold mb-4 sm:mb-2">
<strong>Pages</strong>
</div>
<div className="ml-2 sm:ml-0">
<Link to={links.addons} activeStyle={{ color: '#002ead' }}>
Addons
</Link>
</div>
<div className="ml-2 sm:ml-0">
<Link to={links.support} activeStyle={{ color: '#002ead' }}>
Support
</Link>
</div>
<div className="ml-2 sm:ml-0">
<Link to={links.about} activeStyle={{ color: '#002ead' }}>
About
</Link>
</div>
</div>
<div className="text-xl sm:text-base font-light sm:font-normal">
<div className="font-title font-bold my-4 sm:my-0 sm:mb-2">
<strong>More</strong>
</div>
<div className="ml-2 sm:ml-0">
<a
href="https://github.com/rahuldkjain/github-profile-readme-generator"
aria-label="Github rahuldkjain/github-profile-readme-generator"
target="blank"
>
Github
</a>
</div>
<div className="ml-2 sm:ml-0">
<a
href="https://github.com/rahuldkjain/github-profile-readme-generator/releases"
aria-label="Releases on Github rahuldkjain/github-profile-readme-generator"
target="blank"
>
Releases
</a>
</div>
<div className="ml-2 sm:ml-0">
<a
href="https://github.com/rahuldkjain/github-profile-readme-generator/issues"
aria-label="Issues in rahuldkjain/github-profile-readme-generator"
target="blank"
>
Issues
</a>
</div>
<div className="ml-2 sm:ml-0">
<a
href="https://github.com/rahuldkjain/github-profile-readme-generator/pulls"
aria-label="Pull Requests in rahuldkjain/github-profile-readme-generator"
target="blank"
>
Pull Requests
</a>
</div>
</div>
<div>
<div className="font-title font-bold text-xl sm:text-base my-4 sm:my-0 sm:mb-2">
<strong>Join Community</strong>
</div>
<div className="ml-2 sm:ml-0">
<a href="https://discord.gg/HHMs7Eg" aria-label="Discord of the community" target="blank">
<img src={discord} className="h-12" alt="Discord of the community" />
</a>
</div>
</div>
</div>
<div className="py-2 mt-2">
Developed in India{' '}
<span role="img" aria-label="india">
{' '}
🇮🇳
</span>
</div>
</div>
);
export default Footer;
@@ -1,56 +1,63 @@
import React, { useEffect, useState } from "react"
import { StarIcon, RepoForkedIcon } from "@primer/octicons-react"
import logo from "../images/mdg.png"
import links from "../constants/page-links"
import gsap from "gsap"
import axios from "axios"
import { Link } from "gatsby"
const Header = props => {
const fetchData = async () => {
var response = await axios.get(
"https://api.github.com/repos/rahuldkjain/github-profile-readme-generator"
)
const { stargazers_count, forks_count } = response.data
setstats({
starsCount: stargazers_count,
forksCount: forks_count,
})
}
import React, { useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import { StarIcon, RepoForkedIcon } from '@primer/octicons-react';
import gsap from 'gsap';
import axios from 'axios';
import { Link } from 'gatsby';
import { act } from 'react-dom/test-utils';
import links from '../constants/page-links';
import logo from '../images/mdg.png';
const Header = (props) => {
const { heading } = props;
const [stats, setstats] = useState({
starsCount: 0,
forksCount: 0,
})
});
const shouldRequestStats = () => {
const isFirstRequest = stats.starsCount === 0;
const isVisible = window.document.visibilityState === 'visible';
const hasFocus = window.document.hasFocus();
return isFirstRequest || (isVisible && hasFocus);
};
const fetchData = async () => {
if (shouldRequestStats()) {
const response = await axios.get('https://api.github.com/repos/rahuldkjain/github-profile-readme-generator');
const { stargazers_count: stargazersCount, forks_count: forksCount } = response.data;
act(() =>
setstats({
starsCount: stargazersCount,
forksCount,
}),
);
}
};
useEffect(() => {
fetchData()
setInterval(fetchData, 60000)
fetchData();
setInterval(fetchData, 60000);
gsap.set(".star, .fork", {
transformOrigin: "center",
})
gsap.to(".star, .fork", {
rotateZ: "360",
gsap.set('.star, .fork', {
transformOrigin: 'center',
});
gsap.to('.star, .fork', {
rotateZ: '360',
duration: 2,
ease: "elastic.inOut",
ease: 'elastic.inOut',
repeat: -1,
yoyo: true,
})
}, [])
});
}, []);
return (
<div className="shadow flex items-center justify-center flex-col mb-2 py-2">
<Link to={links.home}>
<h1 className="text-base font-bold font-title sm:text-2xl font-medium text-blue-800 flex justify-center items-center flex-col">
<img
src={logo}
className="w-12 h-12"
alt="github profile markdown generator logo"
/>
<div>{props.heading}</div>
<img src={logo} className="w-12 h-12" alt="github profile markdown generator logo" />
<div>{heading}</div>
</h1>
</Link>
<div className="flex justify-center items-center">
@@ -61,7 +68,8 @@ const Header = props => {
className="mr-2"
>
<div className="text-xxs sm:text-sm border-2 border-solid border-gray-900 bg-gray-100 flex items-center justify-center py-1 px-2">
<StarIcon size={16} id="star-icon" className="px-1 w-6 star" />Star this repo
<StarIcon size={16} id="star-icon" className="px-1 w-6 star" />
Star this repo
<span className="github-count px-1 sm:px-2">{stats.starsCount}</span>
</div>
</a>
@@ -71,13 +79,17 @@ const Header = props => {
target="blank"
>
<div className="text-xxs sm:text-sm border-2 border-solid border-gray-900 bg-gray-100 flex items-center justify-center py-1 px-2">
<RepoForkedIcon size={16} id="fork-icon" className="px-1 w-6 fork" />Fork on GitHub
<RepoForkedIcon size={16} id="fork-icon" className="px-1 w-6 fork" />
Fork on GitHub
<span className="github-count px-1 sm:px-2">{stats.forksCount}</span>
</div>
</a>
</div>
</div>
)
}
);
};
export default Header
export default Header;
Header.propTypes = {
heading: PropTypes.string.isRequired,
};
-21
View File
@@ -1,21 +0,0 @@
import React from "react";
import Header from "./header";
import Footer from "./footer";
const Layout = ({children}) => {
return (
<div className="flex flex-col min-h-screen">
<header>
<Header heading="GitHub Profile README Generator" />
</header>
<main className="flex-grow">
{children}
</main>
<footer>
<Footer />
</footer>
</div>
)
};
export default Layout;
+25
View File
@@ -0,0 +1,25 @@
import React from 'react';
import PropTypes from 'prop-types';
import Header from './header';
import Footer from './footer';
const Layout = ({ children }) => (
<div className="flex flex-col min-h-screen">
<header>
<Header heading="GitHub Profile README Generator" />
</header>
<main className="flex-grow">{children}</main>
<footer>
<Footer />
</footer>
</div>
);
export default Layout;
Layout.defaultProps = {
children: '',
};
Layout.propTypes = {
children: PropTypes.element,
};
-40
View File
@@ -1,40 +0,0 @@
import React, { useRef, useEffect } from 'react';
import gsap from 'gsap';
const Loader = () => {
let arrow = useRef([]);
useEffect(() => {
var tl = new gsap.timeline({repeat: -1});
tl.fromTo(arrow.current, {
y: 0,
color: '#3b3b4f',
}, {
y: -50,
color: '#d0d0d5',
stagger: 0.1,
duration: 0.5,
ease: 'Linear.easeNone'
});
tl.add('cp')
tl.fromTo(arrow.current, {
y: -50,
color: '#d0d0d5',
}, {
y: 0,
color: '#3b3b4f',
stagger: 0.1,
duration: 0.5,
ease: 'Linear.easeNone'
}, 'cp-=0.3');
});
return (
<div className="loader">
<span ref={el => (arrow.current[0] = el)}></span>
<span ref={el => (arrow.current[1] = el)}></span>
<span ref={el => (arrow.current[2] = el)}></span>
<span ref={el => (arrow.current[3] = el)}></span>
<span ref={el => (arrow.current[4] = el)}></span>
</div>
)
}
export default Loader;
+80
View File
@@ -0,0 +1,80 @@
import React, { useRef, useEffect } from 'react';
import gsap from 'gsap';
const Loader = () => {
const arrow = useRef([]);
useEffect(() => {
const tl = gsap.timeline({ repeat: -1 });
tl.fromTo(
arrow.current,
{
y: 0,
color: '#3b3b4f',
},
{
y: -50,
color: '#d0d0d5',
stagger: 0.1,
duration: 0.5,
ease: 'Linear.easeNone',
},
);
tl.add('cp');
tl.fromTo(
arrow.current,
{
y: -50,
color: '#d0d0d5',
},
{
y: 0,
color: '#3b3b4f',
stagger: 0.1,
duration: 0.5,
ease: 'Linear.easeNone',
},
'cp-=0.3',
);
});
return (
<div className="loader">
<span
ref={(el) => {
arrow.current[0] = el;
}}
>
</span>
<span
ref={(el) => {
arrow.current[1] = el;
}}
>
</span>
<span
ref={(el) => {
arrow.current[2] = el;
}}
>
</span>
<span
ref={(el) => {
arrow.current[3] = el;
}}
>
</span>
<span
ref={(el) => {
arrow.current[4] = el;
}}
>
</span>
</div>
);
};
export default Loader;
-148
View File
@@ -1,148 +0,0 @@
import React from 'react';
import { isMediumUsernameValid } from '../utils/validation'
import { icons, skills } from '../constants/skills';
const Markdown = (props) => {
const Title = (props) => {
if (props.prefix && props.title) {
return (
<>
{`<h1 align="center">${props.prefix + ' ' + props.title}</h1>`}
<br />
</>
);
}
return '';
}
const SubTitle = (props) => {
if (props.subtitle) {
return (
<>
{`<h3 align="center">${props.subtitle}</h3>`}
<br />
<br />
</>
);
}
return '';
}
const DisplayWork = (props) => {
if (props.prefix && props.project) {
if (props.link) {
return (<>{`- ${props.prefix} [${props.project}](${props.link})`}<br /><br /></>);
} else {
return (<>{`- ${props.prefix} **${props.project}**`}<br /><br /></>);
}
}
if (props.prefix && props.link) {
return (<>{`- ${props.prefix} [${props.link}](${props.link})`}<br /><br /></>);
}
return '';
}
const DisplaySocial = (props) => {
if (props.username) {
return (<>{`<a href="${props.base}/${props.username}" target="blank"><img align="center" src="${props.icon}" alt="${props.username}" height="30" width="30" /></a>`}<br /></>);
}
return '';
}
const VisitorsBadge = (props) => {
let link = "https://komarev.com/ghpvc/?username=" + props.github
if (props.show) {
return (<>{`<p align="left"> <img src="${link}" alt="${props.github}" /> </p>`}<br /><br /></>);
}
return '';
}
const GitHubStats = (props) => {
let link = "https://github-readme-stats.vercel.app/api?username=" + props.github + "&show_icons=true"
if (props.show) {
return (<>{`<p>&nbsp;<img align="center" src="${link}" alt="${props.github}" /></p>`}<br /><br /></>);
}
return '';
}
const isSocial = (social) => {
return (social.dev || social.twitter || social.codepen || social.codesandbox || social.stackoverflow
|| social.linkedin || social.kaggle || social.instagram || social.fb || social.dribbble || social.behance || social.medium || social.youtube);
}
const DisplaySkills = (props) => {
const listChosenSkills = [];
skills.forEach(skill => {
if (props.skills[skill]) {
listChosenSkills.push(`<img src="${icons[skill]}" alt="${skill}" width="40" height="40"/>`);
}
});
return listChosenSkills.length > 0 ? (<>{`<p align="left">${listChosenSkills.join(' ')}</p>`}<br/><br/></>) : '';
}
const DisplayDynamicBlogs = (props) => {
if (props.show) {
return (<>{`### Blogs posts`}
<br />
{`<!-- BLOG-POST-LIST:START -->`}
<br />
{`<!-- BLOG-POST-LIST:END -->`}<br /> <br /></>)
}
return '';
}
const DisplayTopLanguages = (props) => {
let link = "https://github-readme-stats.vercel.app/api/top-langs/?username=" + props.github + "&layout=compact&hide=html"
if (props.show) {
if (!props.showStats) {
return (<>{`<p><img align="center" src="${link}" alt="${props.github}" /></p>`}<br /><br /></>);
}
return (<>{`<p><img align="left" src="${link}" alt="${props.github}" /></p>`}<br /><br /></>);
}
return '';
}
return (
<div id="markdown-content" className="break-words">
<><Title prefix={props.prefix.title} title={props.data.title} /></>
<><SubTitle subtitle={props.data.subtitle} /></>
<><VisitorsBadge show={props.data.visitorsBadge} github={props.social.github} /></>
<><DisplayWork prefix={props.prefix.currentWork} project={props.data.currentWork} link={props.link.currentWork} /></>
<><DisplayWork prefix={props.prefix.currentLearn} project={props.data.currentLearn} /></>
<><DisplayWork prefix={props.prefix.collaborateOn} project={props.data.collaborateOn} link={props.link.collaborateOn} /></>
<><DisplayWork prefix={props.prefix.helpWith} project={props.data.helpWith} link={props.link.helpWith} /></>
<><DisplayWork prefix={props.prefix.portfolio} link={props.link.portfolio} /></>
<><DisplayWork prefix={props.prefix.blog} link={props.link.blog} /></>
<><DisplayWork prefix={props.prefix.ama} project={props.data.ama} /></>
<><DisplayWork prefix={props.prefix.contact} project={props.data.contact} /></>
<><DisplayWork prefix={props.prefix.funFact} project={props.data.funFact} /></>
<><DisplayDynamicBlogs show={(props.data.devDynamicBlogs && props.social.dev) ||
(props.data.mediumDynamicBlogs && props.social.medium && isMediumUsernameValid(props.social.medium))} /></>
<><DisplaySkills skills={props.skills} /></>
<><DisplayTopLanguages show={props.data.topLanguages} showStats={props.data.githubStats} github={props.social.github} /></>
<><GitHubStats show={props.data.githubStats} github={props.social.github} /></>
{isSocial(props.social) ? `<p align="center">` : ''} <br />
<><DisplaySocial base='https://codepen.io' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg'
username={props.social.codepen} /></>
<><DisplaySocial base='https://dev.to' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dev-dot-to.svg'
username={props.social.dev} /></>
<><DisplaySocial base='https://twitter.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/twitter.svg'
username={props.social.twitter} /></>
<><DisplaySocial base='https://linkedin.com/in' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg'
username={props.social.linkedin} /></>
<><DisplaySocial base='https://stackoverflow.com/users'
icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/stackoverflow.svg' username={props.social.stackoverflow} /></>
<><DisplaySocial base='https://codesandbox.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codesandbox.svg'
username={props.social.codesandbox} /></>
<><DisplaySocial base='https://kaggle.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/kaggle.svg'
username={props.social.kaggle} /></>
<><DisplaySocial base='https://fb.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/facebook.svg'
username={props.social.fb} /></>
<><DisplaySocial base='https://instagram.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg'
username={props.social.instagram} /></>
<><DisplaySocial base='https://dribbble.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dribbble.svg'
username={props.social.dribbble} /></>
<><DisplaySocial base='https://www.behance.net' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/behance.svg'
username={props.social.behance} /></>
<><DisplaySocial base='https://medium.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/medium.svg'
username={props.social.medium} /></>
<><DisplaySocial base='https://www.youtube.com/c' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/youtube.svg'
username={props.social.youtube} /></>
{isSocial(props.social) ? `</p>` : ''}
</div>
);
};
export default Markdown;
+744
View File
@@ -0,0 +1,744 @@
import React from 'react';
import PropTypes from 'prop-types';
import { isMediumUsernameValid } from '../utils/validation';
import { icons, skills as SKILLS, skillWebsites } from '../constants/skills';
import {
githubStatsLinkGenerator,
topLanguagesLinkGenerator,
streakStatsLinkGenerator,
} from '../utils/link-generators';
import { DEFAULT_DATA, DEFAULT_LINK, DEFAULT_PREFIX, DEFAULT_SOCIAL, DEFAULT_SUPPORT } from '../constants/defaults';
const Title = (props) => {
const { prefix, title } = props;
if (prefix && title) {
return (
<>
{`<h1 align="center">${`${prefix} ${title}`}</h1>`}
<br />
</>
);
}
return '';
};
Title.propTypes = {
prefix: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
};
const SubTitle = (props) => {
const { subtitle } = props;
if (subtitle) {
return (
<>
{`<h3 align="center">${subtitle}</h3>`}
<br />
<br />
</>
);
}
return '';
};
SubTitle.propTypes = {
subtitle: PropTypes.string.isRequired,
};
const SectionTitle = (props) => {
const { label } = props;
if (label) {
return (
<>
{`<h3 align="left">${label}</h3>`}
<br />
</>
);
}
return '';
};
SectionTitle.propTypes = {
label: PropTypes.string.isRequired,
};
const DisplayWork = (props) => {
const { prefix, project, link } = props;
if (prefix && project) {
if (link) {
return (
<>
{`- ${prefix} [${project}](${link})`}
<br />
<br />
</>
);
}
return (
<>
{`- ${prefix} **${project}**`}
<br />
<br />
</>
);
}
if (prefix && link) {
return (
<>
{`- ${prefix} [${link}](${link})`}
<br />
<br />
</>
);
}
return '';
};
DisplayWork.defaultProps = {
prefix: '',
project: '',
link: '',
};
DisplayWork.propTypes = {
prefix: PropTypes.string,
project: PropTypes.string,
link: PropTypes.string,
};
const DisplaySocial = (props) => {
const { username, base, icon } = props;
if (username) {
return (
<>
{`<a href="${base}/${username}" target="blank"><img align="center" src="${icon}" alt="${username}" height="30" width="40" /></a>`}
<br />
</>
);
}
return '';
};
DisplaySocial.propTypes = {
username: PropTypes.string.isRequired,
base: PropTypes.string.isRequired,
icon: PropTypes.string.isRequired,
};
const VisitorsBadge = (props) => {
const { github, badgeOptions, show } = props;
const link = `https://komarev.com/ghpvc/?username=${github}&label=${badgeOptions.badgeLabel}&color=${badgeOptions.badgeColor}&style=${badgeOptions.badgeStyle}`;
if (show) {
return (
<>
{`<p align="left"> <img src="${link}" alt="${github}" /> </p>`}
<br />
<br />
</>
);
}
return '';
};
VisitorsBadge.defaultProps = {
badgeOptions: {
badgeLabel: '',
badgeColor: '',
badgeStyle: '',
},
};
VisitorsBadge.propTypes = {
github: PropTypes.string.isRequired,
badgeOptions: {
badgeLabel: PropTypes.string.isRequired,
badgeColor: PropTypes.string.isRequired,
badgeStyle: PropTypes.string.isRequired,
},
show: PropTypes.bool.isRequired,
};
const TwitterBadge = (props) => {
const { twitter, show, base } = props;
const link = `https://img.shields.io/twitter/follow/${twitter}?logo=twitter&style=for-the-badge`;
if (show) {
return (
<>
{`<p align="left"> <a href="${base}/${twitter}" target="blank"><img src="${link}" alt="${twitter}" /></a> </p>`}
<br />
<br />
</>
);
}
return '';
};
TwitterBadge.propTypes = {
twitter: PropTypes.string.isRequired,
base: PropTypes.string.isRequired,
show: PropTypes.bool.isRequired,
};
const GithubProfileTrophy = (props) => {
const { show, github } = props;
const link = `https://github-profile-trophy.vercel.app/?username=${github}`;
if (show) {
return (
<>
{`<p align="left"> <a href="https://github.com/ryo-ma/github-profile-trophy"><img src="${link}" alt="${github}" /></a> </p>`}
<br />
<br />
</>
);
}
return '';
};
GithubProfileTrophy.propTypes = {
github: PropTypes.string.isRequired,
show: PropTypes.bool.isRequired,
};
const GitHubStats = (props) => {
const { show, github, options } = props;
if (show) {
return (
<>
{`<p>&nbsp;<img align="center" src="${githubStatsLinkGenerator({
github,
options,
})}" alt="${github}" /></p>`}
<br />
<br />
</>
);
}
return '';
};
GitHubStats.defaultProps = {
options: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: '',
cacheSeconds: 0,
locale: '',
},
};
GitHubStats.propTypes = {
github: PropTypes.string.isRequired,
options: {
theme: PropTypes.string,
titleColor: PropTypes.string,
textColor: PropTypes.string,
bgColor: PropTypes.string,
hideBorder: PropTypes.string,
cacheSeconds: PropTypes.number,
locale: PropTypes.string,
},
show: PropTypes.bool.isRequired,
};
const isSocial = (social) => {
let status = false;
const SOCIAL_KEYS = Object.keys(DEFAULT_SOCIAL);
Object.keys(social).forEach((key) => {
if (SOCIAL_KEYS.includes(key)) {
status = true;
}
});
return status;
};
const DisplaySkills = (props) => {
const { skills } = props;
const listChosenSkills = [];
SKILLS.forEach((skill) => {
if (skills[skill]) {
listChosenSkills.push(
`
<a href="${skillWebsites[skill]}" target="_blank" rel="noreferrer">
<img src="${icons[skill]}" alt="${skill}" width="40" height="40"/>
</a>
`,
);
}
});
return listChosenSkills.length > 0 ? (
<>
<SectionTitle label="Languages and Tools:" />
{`<p align="left">${listChosenSkills.join(' ')}</p>`}
<br />
<br />
</>
) : (
''
);
};
DisplaySkills.defaultProps = {
skills: [],
};
DisplaySkills.propTypes = {
skills: [],
};
const DisplayDynamicBlogs = (props) => {
const { show } = props;
if (show) {
return (
<>
### Blogs posts
<br />
{'<!-- BLOG-POST-LIST:START -->'}
<br />
{'<!-- BLOG-POST-LIST:END -->'}
<br />
<br />
</>
);
}
return '';
};
DisplayDynamicBlogs.defaultProps = {
show: false,
};
DisplayDynamicBlogs.propTypes = {
show: PropTypes.bool,
};
const DisplayTopLanguages = (props) => {
const { show, showStats, github, options } = props;
if (show) {
if (!showStats) {
return (
<>
{`<p><img align="center" src="${topLanguagesLinkGenerator({
github,
options,
})}" alt="${github}" /></p>`}
<br />
<br />
</>
);
}
return (
<>
{`<p><img align="left" src="${topLanguagesLinkGenerator({
github,
options,
})}" alt="${github}" /></p>`}
<br />
<br />
</>
);
}
return '';
};
DisplayTopLanguages.defaultProps = {
options: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: '',
cacheSeconds: '',
locale: '',
},
};
DisplayTopLanguages.propTypes = {
github: PropTypes.string.isRequired,
options: {
theme: PropTypes.string,
titleColor: PropTypes.string,
textColor: PropTypes.string,
bgColor: PropTypes.string,
hideBorder: PropTypes.string,
cacheSeconds: PropTypes.number,
locale: PropTypes.string,
},
show: PropTypes.bool.isRequired,
showStats: PropTypes.bool.isRequired,
};
const DisplayStreakStats = (props) => {
const { show, github, options } = props;
if (show) {
return (
<>
{`<p><img align="center" src="${streakStatsLinkGenerator({
github,
options,
})}" alt="${github}" /></p>`}
<br />
<br />
</>
);
}
return '';
};
DisplayStreakStats.defaultProps = {
options: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: '',
cacheSeconds: '',
locale: '',
},
};
DisplayStreakStats.propTypes = {
github: PropTypes.string.isRequired,
options: {
theme: PropTypes.string,
titleColor: PropTypes.string,
textColor: PropTypes.string,
bgColor: PropTypes.string,
hideBorder: PropTypes.string,
cacheSeconds: PropTypes.number,
locale: PropTypes.string,
},
show: PropTypes.bool.isRequired,
};
const DisplaySupport = (props) => {
const { support } = props;
let viewSupport = false;
Object.keys(support).forEach((key) => {
if (support[key]) {
viewSupport = true;
}
});
return viewSupport ? (
<div>
<SectionTitle label="Support:" />
{'<p>'}
{support.buyMeACoffee &&
`<a href="https://www.buymeacoffee.com/${support.buyMeACoffee}">
<img align="left" src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" height="50" width="210" alt="${support.buyMeACoffee}" /></a>`}
{support.buyMeAKofi &&
`<a href="https://ko-fi.com/${support.buyMeAKofi}">
<img align="left" src="https://cdn.ko-fi.com/cdn/kofi3.png?v=3" height="50" width="210" alt="${support.buyMeAKofi}" /></a>`}
{'</p><br><br>'}
<br />
<br />
</div>
) : (
''
);
};
DisplaySupport.defaultProps = {
support: {
buyMeACoffee: '',
buyMeAKofi: '',
},
};
DisplaySupport.propTypes = {
support: {
buyMeACoffee: PropTypes.string,
buyMeAKofi: PropTypes.string,
},
};
const Markdown = (props) => {
const { prefix, data, link, social, skills, support } = props;
const iconBaseUrl =
'https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/';
return (
<div id="markdown-content" className="break-words">
<>
<Title prefix={prefix.title} title={data.title} />
</>
<>
<SubTitle subtitle={data.subtitle} />
</>
<>
<VisitorsBadge
show={data.visitorsBadge}
github={social.github}
badgeOptions={{
badgeLabel: encodeURI(data.badgeLabel),
badgeColor: data.badgeColor,
badgeStyle: data.badgeStyle,
}}
/>
</>
<>
<GithubProfileTrophy show={data.githubProfileTrophy} github={social.github} />
<TwitterBadge base="https://twitter.com" show={data.twitterBadge} twitter={social.twitter} />
</>
<>
<DisplayWork prefix={prefix.currentWork} project={data.currentWork} link={link.currentWork} />
</>
<>
<DisplayWork prefix={prefix.currentLearn} project={data.currentLearn} />
</>
<>
<DisplayWork prefix={prefix.collaborateOn} project={data.collaborateOn} link={link.collaborateOn} />
</>
<>
<DisplayWork prefix={prefix.helpWith} project={data.helpWith} link={link.helpWith} />
</>
<>
<DisplayWork prefix={prefix.portfolio} link={link.portfolio} />
</>
<>
<DisplayWork prefix={prefix.blog} link={link.blog} />
</>
<>
<DisplayWork prefix={prefix.ama} project={data.ama} />
</>
<>
<DisplayWork prefix={prefix.contact} project={data.contact} />
</>
<>
<DisplayWork prefix={prefix.resume} link={link.resume} />
</>
<>
<DisplayWork prefix={prefix.funFact} project={data.funFact} />
</>
<>
<DisplayDynamicBlogs
show={
(data.devDynamicBlogs && social.dev) ||
(data.rssDynamicBlogs && social.rssurl) ||
(data.mediumDynamicBlogs && social.medium && isMediumUsernameValid(social.medium))
}
/>
</>
{isSocial(social) ? (
<>
<SectionTitle label="Connect with me:" />
{'<p align="left">'}
</>
) : (
''
)}
<br />
<>
<DisplaySocial base="https://codepen.io" icon={`${iconBaseUrl}codepen.svg`} username={social.codepen} />
</>
<>
<DisplaySocial base="https://dev.to" icon={`${iconBaseUrl}devto.svg`} username={social.dev} />
</>
<>
<DisplaySocial base="https://twitter.com" icon={`${iconBaseUrl}twitter.svg`} username={social.twitter} />
</>
<>
<DisplaySocial
base="https://linkedin.com/in"
icon={`${iconBaseUrl}linked-in-alt.svg`}
username={social.linkedin}
/>
</>
<>
<DisplaySocial
base="https://stackoverflow.com/users"
icon={`${iconBaseUrl}stack-overflow.svg`}
username={social.stackoverflow}
/>
</>
<>
<DisplaySocial
base="https://codesandbox.com"
icon={`${iconBaseUrl}codesandbox.svg`}
username={social.codesandbox}
/>
</>
<>
<DisplaySocial base="https://kaggle.com" icon={`${iconBaseUrl}kaggle.svg`} username={social.kaggle} />
</>
<>
<DisplaySocial base="https://fb.com" icon={`${iconBaseUrl}facebook.svg`} username={social.fb} />
</>
<>
<DisplaySocial base="https://instagram.com" icon={`${iconBaseUrl}instagram.svg`} username={social.instagram} />
</>
<>
<DisplaySocial base="https://dribbble.com" icon={`${iconBaseUrl}dribbble.svg`} username={social.dribbble} />
</>
<>
<DisplaySocial base="https://www.behance.net" icon={`${iconBaseUrl}behance.svg`} username={social.behance} />
</>
<>
<DisplaySocial base="https://hashnode.com" icon={`${iconBaseUrl}hashnode.svg`} username={social.hashnode} />
</>
<>
<DisplaySocial base="https://medium.com" icon={`${iconBaseUrl}medium.svg`} username={social.medium} />
</>
<>
<DisplaySocial base="https://www.youtube.com/c" icon={`${iconBaseUrl}youtube.svg`} username={social.youtube} />
</>
<>
<DisplaySocial
base="https://www.codechef.com/users"
icon="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codechef.svg"
username={social.codechef}
/>
</>
<>
<DisplaySocial
base="https://www.hackerrank.com"
icon={`${iconBaseUrl}hackerrank.svg`}
username={social.hackerrank}
/>
</>
<>
<DisplaySocial
base="https://codeforces.com/profile"
icon={`${iconBaseUrl}codeforces.svg`}
username={social.codeforces}
/>
</>
<>
<DisplaySocial
base="https://www.leetcode.com"
icon={`${iconBaseUrl}leet-code.svg`}
username={social.leetcode}
/>
</>
<>
<DisplaySocial
base="https://www.hackerearth.com"
icon={`${iconBaseUrl}hackerearth.svg`}
username={social.hackerearth}
/>
</>
<>
<DisplaySocial
base="https://auth.geeksforgeeks.org/user"
icon={`${iconBaseUrl}geeks-for-geeks.svg`}
username={social.geeks_for_geeks}
/>
</>
<>
<DisplaySocial
base="https://www.topcoder.com/members"
icon={`${iconBaseUrl}topcoder.svg`}
username={social.topcoder}
/>
</>
<>
<DisplaySocial base="https://discord.gg" icon={`${iconBaseUrl}discord.svg`} username={social.discord} />
</>
<>
<DisplaySocial base="" icon={`${iconBaseUrl}rss.svg`} username={social.rssurl} />
</>
{isSocial(social) ? (
<>
{'</p>'}
<br />
<br />
</>
) : (
''
)}
<>
<DisplaySkills skills={skills} />
</>
<>
<DisplaySupport support={support} />
</>
<>
<DisplayTopLanguages
show={data.topLanguages}
showStats={data.githubStats}
github={social.github}
options={data.topLanguagesOptions}
/>
</>
<>
<GitHubStats show={data.githubStats} github={social.github} options={data.githubStatsOptions} />
</>
<>
<DisplayStreakStats show={data.streakStats} github={social.github} options={data.streakStatsOptions} />
</>
</div>
);
};
export default Markdown;
Markdown.defaultProps = {
prefix: DEFAULT_PREFIX,
data: DEFAULT_DATA,
link: DEFAULT_LINK,
social: DEFAULT_SOCIAL,
support: DEFAULT_SUPPORT,
skills: [],
};
Markdown.propTypes = {
prefix: {
title: PropTypes.string,
currentWork: PropTypes.string,
currentLearn: PropTypes.string,
collaborateOn: PropTypes.string,
helpWith: PropTypes.string,
ama: PropTypes.string,
contact: PropTypes.string,
resume: PropTypes.string,
funFact: PropTypes.string,
portfolio: PropTypes.string,
blog: PropTypes.string,
},
data: {
title: PropTypes.string,
subtitle: PropTypes.string,
currentWork: PropTypes.string,
currentLearn: PropTypes.string,
collaborateOn: PropTypes.string,
helpWith: PropTypes.string,
ama: PropTypes.string,
contact: PropTypes.string,
funFact: PropTypes.string,
twitterBadge: false,
visitorsBadge: false,
badgeStyle: PropTypes.string,
badgeColor: PropTypes.string,
badgeLabel: PropTypes.string,
githubProfileTrophy: false,
githubStats: false,
githubStatsOptions: {
theme: PropTypes.string,
titleColor: PropTypes.string,
textColor: PropTypes.string,
bgColor: PropTypes.string,
hideBorder: false,
cacheSeconds: null,
locale: PropTypes.string,
},
topLanguages: false,
topLanguagesOptions: {
theme: PropTypes.string,
titleColor: PropTypes.string,
textColor: PropTypes.string,
bgColor: PropTypes.string,
hideBorder: false,
cacheSeconds: null,
locale: PropTypes.string,
},
streakStats: false,
streakStatsOptions: {
theme: PropTypes.string,
},
devDynamicBlogs: false,
mediumDynamicBlogs: false,
rssDynamicBlogs: false,
},
link: {},
social: {},
skills: {},
support: {},
};
-132
View File
@@ -1,132 +0,0 @@
import React from 'react';
import { icons, skills } from '../constants/skills';
const MarkdownPreview = (props) => {
const TitlePreview = (props) => {
if (props.prefix && props.title) {
return (
<h1 className="text-center text-xl font-bold">{props.prefix + ' ' + props.title}</h1>
)
}
return null;
}
const SubTitlePreview = (props) => {
if (props.subtitle) {
return (
<h3 className="text-center font-medium">{props.subtitle}</h3>
)
}
return null;
}
const DisplayWork = (props) => {
if (props.prefix && props.project) {
if (props.link) {
return (
<div className="my-2">
{props.prefix + ' '}<a href={props.link} className="no-underline text-blue-700" target="blank">{props.project}</a>
</div>
);
} else {
return (<div className="my-2">{props.prefix + ' '}<b>{props.project}</b></div>);
}
}
if (props.prefix && props.link) {
return (
<div className="my-2">
{props.prefix + ' '}<a href={props.link} className="no-underline text-blue-700" target="blank">{props.link}</a>
</div>
);
}
return null;
}
const WorkPreview = (props) => {
const prefix = props.work.prefix
const data = props.work.data
const link = props.work.link
return (
<>
<DisplayWork prefix={prefix.currentWork} project={data.currentWork} link={link.currentWork} />
<DisplayWork prefix={prefix.currentLearn} project={data.currentLearn} />
<DisplayWork prefix={prefix.helpWith} project={data.helpWith} link={link.helpWith} />
<DisplayWork prefix={prefix.collaborateOn} project={data.collaborateOn}
link={link.collaborateOn} />
<DisplayWork prefix={prefix.ama} project={data.ama} />
<DisplayWork prefix={prefix.portfolio} link={link.portfolio} />
<DisplayWork prefix={prefix.blog} link={link.blog} />
<DisplayWork prefix={prefix.contact} project={data.contact} />
<DisplayWork prefix={prefix.funFact} project={data.funFact} />
</>
)
}
const DisplaySocial = (props) => {
if (props.username) {
return (<a className="no-underline text-blue-700 m-2" href={props.base + '/' + props.username} target="blank"><img className="w-6 h-6" src={props.icon} alt="props.username" /></a>)
}
return null;
}
const SocialPreview = (props) => {
return (
<div className="flex justify-center items-end">
<DisplaySocial base="https://codepen.io" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg" username={props.social.codepen} />
<DisplaySocial base="https://dev.to" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dev-dot-to.svg" username={props.social.dev} />
<DisplaySocial base="https://twitter.com" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/twitter.svg" username={props.social.twitter} />
<DisplaySocial base="https://linkedin.com/in" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg" username={props.social.linkedin} />
<DisplaySocial base="https://stackoverflow.com/users" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/stackoverflow.svg" username={props.social.stackoverflow} />
<DisplaySocial base="https://codesandbox.com" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codesandbox.svg" username={props.social.codesandbox} />
<DisplaySocial base="https://kaggle.com" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/kaggle.svg" username={props.social.kaggle} />
<DisplaySocial base="https://fb.com" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/facebook.svg" username={props.social.fb} />
<DisplaySocial base="https://instagram.com" icon="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg" username={props.social.instagram} />
<DisplaySocial base='https://dribbble.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dribbble.svg' username={props.social.dribbble} />
<DisplaySocial base='https://www.behance.net' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/behance.svg' username={props.social.behance} />
<DisplaySocial base='https://medium.com' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/medium.svg' username={props.social.medium} />
<DisplaySocial base='https://www.youtube.com/c' icon='https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/youtube.svg' username={props.social.youtube} />
</div>
)
}
const VisitorsBadgePreview = (props) => {
let link = "https://komarev.com/ghpvc/?username=" + props.github
if (props.show) {
return (<div className="text-left my-2"> <img className="h-4 sm:h-6" src={link} alt={props.github} /> </div>)
}
return null;
}
const GitHubStatsPreview = (props) => {
let link = "https://github-readme-stats.vercel.app/api?username=" + props.github + "&show_icons=true"
if (props.show) {
return (<div className="text-center mx-4 mb-4"><img src={link} alt={props.github} /></div>)
}
return null;
}
const TopLanguagesPreview = (props) => {
let link = "https://github-readme-stats.vercel.app/api/top-langs/?username=" + props.github + "&layout=compact&hide=html"
if (props.show) {
return (<div className="text-center mx-4 mb-4"><img src={link} alt={props.github} /></div>)
}
return <div className="text-center mx-4 mb-4"> &nbsp;</div>;
}
const SkillsPreview = (props) => {
var listSkills = []
skills.forEach((skill) => {
if (props.skills[skill]) {
listSkills.push(<img className="my-4 mx-4 h-6 w-6 sm:h-10 sm:w-10" key={skill} src={icons[skill]} alt={skill} />)
}
});
return listSkills.length > 0 ? <div className='flex flex-wrap justify-start items-center'>{listSkills}</div> : ''
}
return (
<div id="markdown-preview">
<TitlePreview prefix={props.prefix.title} title={props.data.title} />
<SubTitlePreview subtitle={props.data.subtitle} />
<VisitorsBadgePreview show={props.data.visitorsBadge} github={props.social.github} />
<WorkPreview work={props} />
<SkillsPreview skills={props.skills} />
<div className="block sm:flex sm:justify-center sm:items-start">
<TopLanguagesPreview show={props.data.topLanguages} github={props.social.github} />
<GitHubStatsPreview show={props.data.githubStats} github={props.social.github} />
</div>
<SocialPreview social={props.social} />
</div>
)
}
export default MarkdownPreview;
+510
View File
@@ -0,0 +1,510 @@
import React from 'react';
import PropTypes from 'prop-types';
import { icons, skills as SKILLS, skillWebsites } from '../constants/skills';
import {
githubStatsLinkGenerator,
topLanguagesLinkGenerator,
streakStatsLinkGenerator,
} from '../utils/link-generators';
import { DEFAULT_DATA, DEFAULT_PREFIX, DEFAULT_SOCIAL, DEFAULT_SUPPORT } from '../constants/defaults';
export const TitlePreview = (props) => {
const { prefix, title } = props;
if (prefix && title) {
return <h1 className="text-center text-xl font-bold">{`${prefix} ${title}`}</h1>;
}
return null;
};
TitlePreview.propTypes = {
prefix: PropTypes.string.isRequired,
title: PropTypes.string.isRequired,
};
export const SubTitlePreview = (props) => {
const { subtitle } = props;
if (subtitle) {
return <h3 className="text-center font-medium">{subtitle}</h3>;
}
return null;
};
SubTitlePreview.propTypes = {
subtitle: PropTypes.string.isRequired,
};
export const SectionTitle = (props) => {
const { visible, label } = props;
if (!visible) return null;
if (label) {
return <h3 className="w-full text-lg sm:text-xl">{label}</h3>;
}
return null;
};
SectionTitle.defaultProps = {
visible: false,
};
SectionTitle.propTypes = {
visible: PropTypes.bool,
label: PropTypes.string.isRequired,
};
export const DisplayWork = (props) => {
const { prefix, project, link } = props;
if (prefix && project) {
if (link) {
return (
<div className="my-2">
{`${prefix} `}
<a href={link} className="no-underline text-blue-700" target="blank">
{project}
</a>
</div>
);
}
return (
<div className="my-2">
{`${prefix} `}
<b>{project}</b>
</div>
);
}
if (prefix && link) {
return (
<div className="my-2">
{`${prefix} `}
<a href={link} className="no-underline text-blue-700" target="blank">
{link}
</a>
</div>
);
}
return null;
};
DisplayWork.defaultProps = {
prefix: '',
project: '',
link: '',
};
DisplayWork.propTypes = {
prefix: PropTypes.string,
project: PropTypes.string,
link: PropTypes.string,
};
export const WorkPreview = (props) => {
const { work } = props;
const { prefix, data, link } = work;
return (
<>
<DisplayWork prefix={prefix.currentWork} project={data.currentWork} link={link.currentWork} />
<DisplayWork prefix={prefix.currentLearn} project={data.currentLearn} />
<DisplayWork prefix={prefix.helpWith} project={data.helpWith} link={link.helpWith} />
<DisplayWork prefix={prefix.collaborateOn} project={data.collaborateOn} link={link.collaborateOn} />
<DisplayWork prefix={prefix.ama} project={data.ama} />
<DisplayWork prefix={prefix.portfolio} link={link.portfolio} />
<DisplayWork prefix={prefix.blog} link={link.blog} />
<DisplayWork prefix={prefix.resume} link={link.resume} />
<DisplayWork prefix={prefix.contact} project={data.contact} />
<DisplayWork prefix={prefix.funFact} project={data.funFact} />
</>
);
};
WorkPreview.propTypes = {
work: PropTypes.object.isRequired,
};
export const DisplaySocial = (props) => {
const { username, base, icon } = props;
if (username) {
return (
<a className="no-underline text-blue-700 m-2" href={`${base}/${username}`} target="blank">
<img className="w-6 h-6" src={icon} alt="username" />
</a>
);
}
return null;
};
DisplaySocial.defaultProps = {
username: '',
base: '',
icon: '',
};
DisplaySocial.propTypes = {
username: PropTypes.string,
base: PropTypes.string,
icon: PropTypes.string,
};
export const SocialPreview = (props) => {
const { social } = props;
let viewSocial = false;
const iconBaseUrl =
'https://raw.githubusercontent.com/rahuldkjain/github-profile-readme-generator/master/src/images/icons/Social/';
Object.keys(social).forEach((key) => {
if (social[key] && key !== 'github') viewSocial = true;
});
return (
<div className="flex justify-start items-end flex-wrap">
<SectionTitle label="Connect with me:" visible={viewSocial} />
<>
<DisplaySocial base="https://codepen.io" icon={`${iconBaseUrl}codepen.svg`} username={social.codepen} />
</>
<>
<DisplaySocial base="https://dev.to" icon={`${iconBaseUrl}devto.svg`} username={social.dev} />
</>
<>
<DisplaySocial base="https://twitter.com" icon={`${iconBaseUrl}twitter.svg`} username={social.twitter} />
</>
<>
<DisplaySocial
base="https://linkedin.com/in"
icon={`${iconBaseUrl}linked-in-alt.svg`}
username={social.linkedin}
/>
</>
<>
<DisplaySocial
base="https://stackoverflow.com/users"
icon={`${iconBaseUrl}stack-overflow.svg`}
username={social.stackoverflow}
/>
</>
<>
<DisplaySocial
base="https://codesandbox.com"
icon={`${iconBaseUrl}codesandbox.svg`}
username={social.codesandbox}
/>
</>
<>
<DisplaySocial base="https://kaggle.com" icon={`${iconBaseUrl}kaggle.svg`} username={social.kaggle} />
</>
<>
<DisplaySocial base="https://fb.com" icon={`${iconBaseUrl}facebook.svg`} username={social.fb} />
</>
<>
<DisplaySocial base="https://instagram.com" icon={`${iconBaseUrl}instagram.svg`} username={social.instagram} />
</>
<>
<DisplaySocial base="https://dribbble.com" icon={`${iconBaseUrl}dribbble.svg`} username={social.dribbble} />
</>
<>
<DisplaySocial base="https://www.behance.net" icon={`${iconBaseUrl}behance.svg`} username={social.behance} />
</>
<>
<DisplaySocial base="https://hashnode.com" icon={`${iconBaseUrl}hashnode.svg`} username={social.hashnode} />
</>
<>
<DisplaySocial base="https://medium.com" icon={`${iconBaseUrl}medium.svg`} username={social.medium} />
</>
<>
<DisplaySocial base="https://www.youtube.com/c" icon={`${iconBaseUrl}youtube.svg`} username={social.youtube} />
</>
<>
<DisplaySocial
base="https://www.codechef.com/users"
icon="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codechef.svg"
username={social.codechef}
/>
</>
<>
<DisplaySocial
base="https://www.hackerrank.com"
icon={`${iconBaseUrl}hackerrank.svg`}
username={social.hackerrank}
/>
</>
<>
<DisplaySocial
base="https://codeforces.com/profile"
icon={`${iconBaseUrl}codeforces.svg`}
username={social.codeforces}
/>
</>
<>
<DisplaySocial
base="https://www.leetcode.com"
icon={`${iconBaseUrl}leet-code.svg`}
username={social.leetcode}
/>
</>
<>
<DisplaySocial
base="https://www.hackerearth.com"
icon={`${iconBaseUrl}hackerearth.svg`}
username={social.hackerearth}
/>
</>
<>
<DisplaySocial
base="https://auth.geeksforgeeks.org/user"
icon={`${iconBaseUrl}geeks-for-geeks.svg`}
username={social.geeks_for_geeks}
/>
</>
<>
<DisplaySocial
base="https://www.topcoder.com/members"
icon={`${iconBaseUrl}topcoder.svg`}
username={social.topcoder}
/>
</>
<>
<DisplaySocial base="https://discord.gg" icon={`${iconBaseUrl}discord.svg`} username={social.discord} />
</>
<>
<DisplaySocial base="" icon={`${iconBaseUrl}rss.svg`} username={social.rssurl} />
</>
</div>
);
};
SocialPreview.propTypes = {
social: PropTypes.object.isRequired,
};
export const VisitorsBadgePreview = (props) => {
const { github, show, badgeOptions } = props;
const link = `https://komarev.com/ghpvc/?username=${github}&label=${badgeOptions.badgeLabel}&color=${badgeOptions.badgeColor}&style=${badgeOptions.badgeStyle}`;
if (show) {
return (
<div className="text-left my-2">
{' '}
<img className="h-4 sm:h-6" src={link} alt={github} />{' '}
</div>
);
}
return null;
};
VisitorsBadgePreview.defaultProps = {
github: '',
show: false,
badgeOptions: {},
};
VisitorsBadgePreview.propTypes = {
github: PropTypes.string,
show: PropTypes.bool,
badgeOptions: PropTypes.object,
};
export const TwitterBadgePreview = (props) => {
const { twitter, show } = props;
const link = `https://img.shields.io/twitter/follow/${twitter}?logo=twitter&style=for-the-badge`;
if (show) {
return (
<div className="text-left my-2">
{' '}
<a href={`https://twitter.com/${twitter}`} target="_blank" rel="noreferrer">
<img className="h-4 sm:h-6" src={link} alt={twitter} />
</a>{' '}
</div>
);
}
return null;
};
TwitterBadgePreview.defaultProps = {
twitter: '',
show: false,
};
TwitterBadgePreview.propTypes = {
twitter: PropTypes.string,
show: PropTypes.bool,
};
export const GithubProfileTrophyPreview = (props) => {
const { github, show } = props;
const link = `https://github-profile-trophy.vercel.app/?username=${github}`;
if (show) {
return (
<div className="text-left my-2">
{' '}
<a href="https://github.com/ryo-ma/github-profile-trophy">
<img src={link} alt={github} />
</a>{' '}
</div>
);
}
return null;
};
GithubProfileTrophyPreview.defaultProps = {
github: '',
show: false,
};
GithubProfileTrophyPreview.propTypes = {
github: PropTypes.string,
show: PropTypes.bool,
};
export const GitHubStatsPreview = ({ github, options, show }) => {
if (show) {
return (
<div className="text-center mx-4 mb-4">
<img src={githubStatsLinkGenerator({ github, options })} alt={github} />
</div>
);
}
return null;
};
GitHubStatsPreview.defaultProps = {
github: '',
options: {},
show: false,
};
GitHubStatsPreview.propTypes = {
github: PropTypes.string,
options: PropTypes.object,
show: PropTypes.bool,
};
export const TopLanguagesPreview = ({ github, options, show }) => {
if (show) {
return (
<div className="text-center mx-4 mb-4">
<img src={topLanguagesLinkGenerator({ github, options })} alt={github} />
</div>
);
}
return <div className="text-center mx-4 mb-4"> &nbsp;</div>;
};
TopLanguagesPreview.defaultProps = {
github: '',
options: {},
show: false,
};
TopLanguagesPreview.propTypes = {
github: PropTypes.string,
options: PropTypes.object,
show: PropTypes.bool,
};
export const StreakStatsPreview = ({ github, options, show }) => {
if (show) {
return (
<div className="text-center mx-4 mb-4">
<img src={streakStatsLinkGenerator({ github, options })} alt={github} />
</div>
);
}
return null;
};
StreakStatsPreview.defaultProps = {
github: '',
options: {},
show: false,
};
StreakStatsPreview.propTypes = {
github: PropTypes.string,
options: PropTypes.object,
show: PropTypes.bool,
};
export const SkillsPreview = (props) => {
const { skills } = props;
const listSkills = [];
SKILLS.forEach((skill) => {
if (skills[skill]) {
listSkills.push(
<a href={skillWebsites[skill]} key={skill} target="_blank" rel="noreferrer">
<img className="mb-4 mr-4 h-6 w-6 sm:h-10 sm:w-10" src={icons[skill]} alt={skill} />
</a>,
);
}
});
return listSkills.length > 0 ? (
<div className="flex flex-wrap justify-start items-center">
<SectionTitle label="Languages and Tools:" visible />
{listSkills}
</div>
) : (
''
);
};
SkillsPreview.propTypes = {
skills: PropTypes.array.isRequired,
};
export const SupportPreview = (props) => {
const { support } = props;
let viewSupport = false;
Object.keys(support).forEach((key) => {
if (support[key]) {
viewSupport = true;
}
});
return support.buyMeACoffee || support.buyMeAKofi ? (
<div className="flex flex-wrap justify-start items-center">
<SectionTitle label="Support:" visible={viewSupport} />
{support.buyMeACoffee && (
<a href={`https://www.buymeacoffee.com/${support.buyMeACoffee}`} target="_blank" rel="noreferrer">
<img
src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png"
alt="Buy Me A Coffee"
className="mb-4 mr-4 w-36 h-8 sm:w-52 sm:h-12"
/>
</a>
)}
{support.buyMeAKofi && (
<a href={`https://ko-fi.com/${support.buyMeAKofi}`} target="_blank" rel="noreferrer">
<img
src="https://cdn.ko-fi.com/cdn/kofi3.png?v=3"
alt="Buy Me A Ko-fi"
className="mb-4 mr-4 w-36 h-8 sm:w-52 sm:h-12"
/>
</a>
)}
</div>
) : (
''
);
};
SupportPreview.propTypes = {
support: PropTypes.object.isRequired,
};
const MarkdownPreview = (props) => {
const { prefix, data, social, skills, support } = props;
return (
<div id="markdown-preview">
<TitlePreview prefix={prefix.title} title={data.title} />
<SubTitlePreview subtitle={data.subtitle} />
<VisitorsBadgePreview
show={data.visitorsBadge}
github={social.github}
badgeOptions={{
badgeLabel: encodeURI(data.badgeLabel),
badgeColor: data.badgeColor,
badgeStyle: data.badgeStyle,
}}
/>
<GithubProfileTrophyPreview show={data.githubProfileTrophy} github={social.github} />
<TwitterBadgePreview show={data.twitterBadge} twitter={social.twitter} />
<WorkPreview work={props} />
<SocialPreview social={social} />
<SkillsPreview skills={skills} />
<SupportPreview support={support} />
<div className="block sm:flex sm:justify-center sm:items-start">
<TopLanguagesPreview show={data.topLanguages} github={social.github} options={data.topLanguagesOptions} />
<GitHubStatsPreview show={data.githubStats} github={social.github} options={data.githubStatsOptions} />
<StreakStatsPreview show={data.streakStats} github={social.github} options={data.streakStatsOptions} />
</div>
</div>
);
};
export default MarkdownPreview;
MarkdownPreview.defaultProps = {
prefix: DEFAULT_PREFIX,
data: DEFAULT_DATA,
social: DEFAULT_SOCIAL,
support: DEFAULT_SUPPORT,
skills: [],
};
MarkdownPreview.propTypes = {
prefix: PropTypes.object,
data: PropTypes.object,
social: PropTypes.object,
skills: PropTypes.object,
support: PropTypes.object,
};
@@ -5,10 +5,10 @@
* See: https://www.gatsbyjs.org/docs/use-static-query/
*/
import React from "react"
import PropTypes from "prop-types"
import { Helmet } from "react-helmet"
import { useStaticQuery, graphql } from "gatsby"
import React from 'react';
import PropTypes from 'prop-types';
import { Helmet } from 'react-helmet';
import { useStaticQuery, graphql } from 'gatsby';
function SEO({ description, lang, meta, title }) {
const { site } = useStaticQuery(
@@ -22,10 +22,10 @@ function SEO({ description, lang, meta, title }) {
}
}
}
`
)
`,
);
const metaDescription = description || site.siteMetadata.description
const metaDescription = description || site.siteMetadata.description;
return (
<Helmet
@@ -69,20 +69,20 @@ function SEO({ description, lang, meta, title }) {
},
].concat(meta)}
/>
)
);
}
SEO.defaultProps = {
lang: `en`,
meta: [],
description: ``,
}
};
SEO.propTypes = {
description: PropTypes.string,
lang: PropTypes.string,
meta: PropTypes.arrayOf(PropTypes.object),
title: PropTypes.string.isRequired,
}
};
export default SEO
export default SEO;
-40
View File
@@ -1,40 +0,0 @@
import React from "react"
import { icons, categorizedSkills } from "../constants/skills"
const Skills = props => {
const createSkill = skill => {
return (
<div className="w-1/3 sm:w-1/4 my-6" key={skill}>
<label htmlFor={skill} className="skillCheckboxLabel cursor-pointer flex items-center justify-start">
<input
id={skill}
type="checkbox"
checked={props.skills[skill]}
onChange={(event) => props.handleSkillsChange(skill)}
/>
<img className="ml-4 w-8 h-8 sm:w-10 sm:h-10" src={icons[skill]} alt={skill} />
<span className="tooltiptext">{skill}</span>
</label>
</div>
)
}
return (
<div className="px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Skills</div>
{Object.keys(categorizedSkills).map(key => (
<div key={key}>
<h4 className="text-sm sm:text-xl text-gray-900 text-center">
{categorizedSkills[key].title}
</h4>
<div className="flex justify-start items-center flex-wrap w-full mb-6 pl-4 sm:pl-10">
{categorizedSkills[key].skills.map(skill => createSkill(skill))}
</div>
</div>
))}
</div>
)
}
export default Skills
+99
View File
@@ -0,0 +1,99 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import { SearchIcon, XIcon } from '@primer/octicons-react';
import { icons, categorizedSkills } from '../constants/skills';
const Skills = (props) => {
const { skills, handleSkillsChange } = props;
const [search, setSearch] = useState('');
const [debounce, setDebounce] = useState(undefined);
const inputRef = React.createRef();
const createSkill = (skill) => (
<div className="w-1/3 sm:w-1/4 my-6" key={skill}>
<label htmlFor={skill} className="checkbox-label flex items-center justify-start">
<input
id={skill}
type="checkbox"
className="checkbox-label__input"
checked={skills[skill]}
onChange={() => handleSkillsChange(skill)}
/>
<span className="checkbox-label__control" />
<img className="ml-4 w-8 h-8 sm:w-10 sm:h-10" src={icons[skill]} alt={skill} />
<span className="tooltiptext">{skill}</span>
</label>
</div>
);
const onSearchChange = (value) => {
const callback = () => {
setSearch(value);
};
clearTimeout(debounce);
setDebounce(setTimeout(callback, 50));
};
return (
<div className="px-2 sm:px-6 mb-10 ">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-4 flex justify-between">
Skills
<div className="relative flex">
<input
type="text"
onChange={(e) => onSearchChange(e.target.value)}
className="leading:none text-xs my-0 py-1 px-2 pr-8 sm:text-xl border-2 border-gray-900 focus:border-blue-700 placeholder-gray-700"
placeholder="Search Skills"
ref={inputRef}
/>
<span className="absolute" style={{ right: '10px' }}>
{search !== '' ? (
<button
type="button"
className="focus:outline-none"
onClick={() => {
setSearch('');
inputRef.current.value = '';
}}
>
<XIcon size={16} className="mb-1 transform scale-100 md:scale-125" />
</button>
) : (
<SearchIcon size={16} className="mb-1 transform scale-100 md:scale-125" />
)}
</span>
</div>
</div>
{Object.keys(categorizedSkills)
.filter((key) => {
const filtered = categorizedSkills[key].skills.filter((skill) => skill.includes(search.toLowerCase()));
return filtered.length !== 0;
})
.map((key) => (
<div key={key} className="divide-y divide-gray-500">
<div className="text-sm sm:text-xl text-gray-900 text-left py-1">{categorizedSkills[key].title}</div>
<div className="flex justify-start items-center flex-wrap w-full mb-6 pl-4 sm:pl-10">
{categorizedSkills[key].skills
.filter((skill) => skill.includes(search.toLowerCase()))
.map((skill) => createSkill(skill))}
</div>
</div>
))}
<span className="flex justify-center text-gray-900">
{Object.keys(categorizedSkills).filter((key) => {
const filtered = categorizedSkills[key].skills.filter((skill) => skill.includes(search.toLowerCase()));
return filtered.length !== 0;
}).length === 0
? 'No Results Found'
: ''}
</span>
</div>
);
};
export default Skills;
Skills.propTypes = {
skills: PropTypes.array.isRequired,
handleSkillsChange: PropTypes.func.isRequired,
};
-99
View File
@@ -1,99 +0,0 @@
import React from 'react';
const Social = (props) => {
return (
<div className="px-2 sm:px-6 mb-4">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Social</div>
<div className="flex flex-wrap justify-center items-center">
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/github.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="github" />
<input id="github" placeholder="github username"
className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-1 sm:px-2 focus:border-blue-700"
value={props.social.github} onChange={event => props.handleSocialChange('github', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/twitter.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="twitter" />
<input id="twitter" placeholder="twitter username"
className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.twitter} onChange={event => props.handleSocialChange('twitter', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dev-dot-to.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="dev.to" />
<input id="dev" placeholder="dev.to username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.dev} onChange={event => props.handleSocialChange('dev', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="codepen" />
<input id="codepen" placeholder="codepen username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.codepen} onChange={event => props.handleSocialChange('codepen', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codesandbox.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="codesandbox" />
<input id="codesandbox" placeholder="codesandbox username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.codesandbox} onChange={event => props.handleSocialChange('codesandbox', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/stackoverflow.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="stackoverflow" />
<input id="stackoverflow" placeholder="stackoverflow user ID" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.stackoverflow} onChange={event => props.handleSocialChange('stackoverflow', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="linkedin" />
<input id="linkedin" placeholder="linkedin username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.linkedin} onChange={event => props.handleSocialChange('linkedin', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/kaggle.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="kaggle" />
<input id="kaggle" placeholder="kaggle username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.kaggle} onChange={event => props.handleSocialChange('kaggle', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/facebook.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="facebook" />
<input id="fb" placeholder="facebook username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.fb} onChange={event => props.handleSocialChange('fb', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="instagram" />
<input id="instagram" placeholder="instagram username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.instagram} onChange={event => props.handleSocialChange('instagram', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/dribbble.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="dribbble" />
<input id="dribbble" placeholder="dribbble username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.dribbble} onChange={event => props.handleSocialChange('dribbble', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/behance.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="behance" />
<input id="behance" placeholder="behance username" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.behance} onChange={event => props.handleSocialChange('behance', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/medium.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="medium" />
<input id="medium" placeholder="medium username (with @)" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.medium} onChange={event => props.handleSocialChange('medium', event)} />
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/youtube.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4" alt="youtube" />
<input id="youtube" placeholder="youtube channel name" className="placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.social.youtube} onChange={event => props.handleSocialChange('youtube', event)} />
</div>
</div>
</div>
);
}
export default Social;
+355
View File
@@ -0,0 +1,355 @@
import React from 'react';
import PropTypes from 'prop-types';
const Social = (props) => {
const { social, handleSocialChange } = props;
return (
<div className="px-2 sm:px-6 mb-4">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Social</div>
<div className="flex flex-wrap justify-center items-center">
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/github.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="github"
/>
<input
id="github"
placeholder="github username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-1 sm:px-2 focus:border-blue-700"
value={social.github}
onChange={(event) => handleSocialChange('github', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@v3/icons/twitter.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="twitter"
/>
<input
id="twitter"
placeholder="twitter username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.twitter}
onChange={(event) => handleSocialChange('twitter', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/dev-dot-to.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="dev.to"
/>
<input
id="dev"
placeholder="dev.to username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.dev}
onChange={(event) => handleSocialChange('dev', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codepen.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="codepen"
/>
<input
id="codepen"
placeholder="codepen username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.codepen}
onChange={(event) => handleSocialChange('codepen', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/codesandbox.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="codesandbox"
/>
<input
id="codesandbox"
placeholder="codesandbox username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.codesandbox}
onChange={(event) => handleSocialChange('codesandbox', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/stackoverflow.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="stackoverflow"
/>
<input
id="stackoverflow"
placeholder="stackoverflow user ID"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.stackoverflow}
onChange={(event) => handleSocialChange('stackoverflow', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/linkedin.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="linkedin"
/>
<input
id="linkedin"
placeholder="linkedin username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.linkedin}
onChange={(event) => handleSocialChange('linkedin', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/kaggle.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="kaggle"
/>
<input
id="kaggle"
placeholder="kaggle username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.kaggle}
onChange={(event) => handleSocialChange('kaggle', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/facebook.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="facebook"
/>
<input
id="fb"
placeholder="facebook username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.fb}
onChange={(event) => handleSocialChange('fb', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/instagram.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="instagram"
/>
<input
id="instagram"
placeholder="instagram username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.instagram}
onChange={(event) => handleSocialChange('instagram', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/dribbble.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="dribbble"
/>
<input
id="dribbble"
placeholder="dribbble username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.dribbble}
onChange={(event) => handleSocialChange('dribbble', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/behance.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="behance"
/>
<input
id="behance"
placeholder="behance username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.behance}
onChange={(event) => handleSocialChange('behance', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.0.1/icons/hashnode.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="hashnode"
/>
<input
id="hashnode"
placeholder="hashnode username (with @)"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.hashnode}
onChange={(event) => handleSocialChange('hashnode', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/medium.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="medium"
/>
<input
id="medium"
placeholder="medium username (with @)"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.medium}
onChange={(event) => handleSocialChange('medium', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/youtube.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="youtube"
/>
<input
id="youtube"
placeholder="youtube channel name"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.youtube}
onChange={(event) => handleSocialChange('youtube', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codechef.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="codechef"
/>
<input
id="codechef"
placeholder="codechef username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.codechef}
onChange={(event) => handleSocialChange('codechef', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/hackerrank.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="hackerrank"
/>
<input
id="hackerrank"
placeholder="hackerrank username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.hackerrank}
onChange={(event) => handleSocialChange('hackerrank', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/codeforces.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="codeforces"
/>
<input
id="codeforces"
placeholder="codeforces username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.codeforces}
onChange={(event) => handleSocialChange('codeforces', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/leetcode.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="leetcode"
/>
<input
id="leetcode"
placeholder="leetcode username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.leetcode}
onChange={(event) => handleSocialChange('leetcode', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/topcoder.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="topcoder"
/>
<input
id="topcoder"
placeholder="topcoder username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.topcoder}
onChange={(event) => handleSocialChange('topcoder', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/hackerearth.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="hackerearth"
/>
<input
id="hackerearth"
placeholder="hackerearth user (with @)"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.hackerearth}
onChange={(event) => handleSocialChange('hackerearth', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/geeksforgeeks.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="geeksforgeeks"
/>
<input
id="geeksforgeeks"
placeholder="GFG (<username>/profile)"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.geeks_for_geeks}
onChange={(event) => handleSocialChange('geeks_for_geeks', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/discord.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="discord"
/>
<input
id="discord"
placeholder="discord invite (only code)"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.discord}
onChange={(event) => handleSocialChange('discord', event)}
/>
</div>
<div className="w-1/2 flex justify-center items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.jsdelivr.net/npm/simple-icons@3.1.0/icons/rss.svg"
className="w-6 h-6 sm:w-8 sm:h-8 mr-1 sm:mr-4"
alt="rssfeed"
/>
<input
id="rssurl"
placeholder="RSS feed URL"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={social.rssurl}
onChange={(event) => handleSocialChange('rssurl', event)}
/>
</div>
</div>
</div>
);
};
export default Social;
Social.propTypes = {
social: PropTypes.object.isRequired,
handleSocialChange: PropTypes.func.isRequired,
};
-13
View File
@@ -1,13 +0,0 @@
import React from 'react';
const Subtitle = (props) => {
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Subtitle</div>
<input id="subtitle" className="w-full text-xs sm:text-lg sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700" value={props.data.subtitle}
onChange={event => props.handleDataChange('subtitle', event)} />
</div>
);
}
export default Subtitle;
+23
View File
@@ -0,0 +1,23 @@
import React from 'react';
import PropTypes from 'prop-types';
const Subtitle = (props) => {
const { data, handleDataChange } = props;
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Subtitle</div>
<input
id="subtitle"
className="outline-none w-full text-xs sm:text-lg sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.subtitle}
onChange={(event) => handleDataChange('subtitle', event)}
/>
</div>
);
};
export default Subtitle;
Subtitle.propTypes = {
data: PropTypes.object.isRequired,
handleDataChange: PropTypes.func.isRequired,
};
+47
View File
@@ -0,0 +1,47 @@
import React from 'react';
import PropTypes from 'prop-types';
const Support = (props) => {
const { support, handleSupportChange } = props;
return (
<div className="px-2 sm:px-6 mb-4">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Support</div>
<div className="flex flex-wrap justify-start items-center">
<div className="w-1/2 flex justify-start items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png"
className="w-36 h-8 sm:w-52 sm:h-12 mr-1 sm:mr-4"
alt="buymeacoffee"
/>
<input
id="buy-me-a-coffee"
placeholder="buymeacoffee username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-1 focus:border-blue-700"
value={support.buyMeACoffee || ''}
onChange={(event) => handleSupportChange('buyMeACoffee', event)}
/>
</div>
<div className="w-1/2 flex justify-start items-center text-xxs sm:text-lg py-4 pr-2 sm:pr-0">
<img
src="https://cdn.ko-fi.com/cdn/kofi3.png?v=3"
className="w-36 h-8 sm:w-52 sm:h-12 mr-1 sm:mr-4"
alt="buymeakofi"
/>
<input
id="buy-me-a-kofi"
placeholder="Ko-fi username"
className="outline-none placeholder-gray-700 w-32 sm:w-1/2 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-1 sm:px-2 ml-2 sm:ml-0 focus:border-blue-700"
value={support.buyMeAKofi || ''}
onChange={(event) => handleSupportChange('buyMeAKofi', event)}
/>
</div>
</div>
</div>
);
};
export default Support;
Support.propTypes = {
support: PropTypes.object.isRequired,
handleSupportChange: PropTypes.func.isRequired,
};
-19
View File
@@ -1,19 +0,0 @@
import React from 'react';
const Title = (props) => {
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Title</div>
<div className="flex justify-start items-center w-full text-regular text-xs sm:text-lg">
<input id="title-prefix"
className="w-24 sm:w-40 mr-10 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700 prefix"
value={props.prefix.title} onChange={event => props.handlePrefixChange('title', event)} />
<input id="title-name" placeholder="name" className="placeholder-gray-700 w-1/2 sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.title}
onChange={event => props.handleDataChange('title', event)} />
</div>
</div>
);
}
export default Title;
+34
View File
@@ -0,0 +1,34 @@
import React from 'react';
import PropTypes from 'prop-types';
const Title = (props) => {
const { data, prefix, handlePrefixChange, handleDataChange } = props;
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Title</div>
<div className="flex justify-start items-center w-full text-regular text-xs sm:text-lg">
<input
id="title-prefix"
className="outline-none w-24 sm:w-40 mr-10 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700 prefix"
value={prefix.title}
onChange={(event) => handlePrefixChange('title', event)}
/>
<input
id="title-name"
placeholder="name"
className="outline-none placeholder-gray-700 w-1/2 sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.title}
onChange={(event) => handleDataChange('title', event)}
/>
</div>
</div>
);
};
export default Title;
Title.propTypes = {
prefix: PropTypes.object.isRequired,
data: PropTypes.object.isRequired,
handlePrefixChange: PropTypes.func.isRequired,
handleDataChange: PropTypes.func.isRequired,
};
-173
View File
@@ -1,173 +0,0 @@
import React from "react"
const Work = props => {
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">
Work
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="currentWork-prefix"
placeholder="Hi, I'm "
className="placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.currentWork}
onChange={event => props.handlePrefixChange("currentWork", event)}
/>
<input
id="currentWork"
placeholder="project name"
className="placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.currentWork}
onChange={event => props.handleDataChange("currentWork", event)}
/>
<input
id="currentWork-link"
placeholder="project link"
className="placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.link.currentWork}
onChange={event => props.handleLinkChange("currentWork", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="collaborateOn-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.collaborateOn}
onChange={event => props.handlePrefixChange("collaborateOn", event)}
/>
<input
id="collaborateOn"
placeholder="project name"
className="placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.collaborateOn}
onChange={event => props.handleDataChange("collaborateOn", event)}
/>
<input
id="collaborateOn-link"
placeholder="project link"
className="placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.link.collaborateOn}
onChange={event => props.handleLinkChange("collaborateOn", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="helpWith-prefix"
className="placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.helpWith}
onChange={event => props.handlePrefixChange("helpWith", event)}
/>
<input
id="helpWith"
placeholder="project name"
className="placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.helpWith}
onChange={event => props.handleDataChange("helpWith", event)}
/>
<input
id="helpWith-link"
placeholder="project link"
className="placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.link.helpWith}
onChange={event => props.handleLinkChange("helpWith", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="currentLearn-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.currentLearn}
onChange={event => props.handlePrefixChange("currentLearn", event)}
/>
<input
id="currentLearn"
placeholder="Frameworks, courses etc."
className="placeholder-gray-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.currentLearn}
onChange={event => props.handleDataChange("currentLearn", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="ama-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.ama}
onChange={event => props.handlePrefixChange("ama", event)}
/>
<input
id="ama"
placeholder="react, vue and gsap"
className="placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.ama}
onChange={event => props.handleDataChange("ama", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="contact-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.contact}
onChange={event => props.handlePrefixChange("contact", event)}
/>
<input
id="contact"
placeholder="example@gmail.com"
className="placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.contact}
onChange={event => props.handleDataChange("contact", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="portfolio-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.portfolio}
onChange={event => props.handlePrefixChange("portfolio", event)}
/>
<input
id="portfolio"
placeholder="portfolio link"
className="placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.link.portfolio}
onChange={event => props.handleLinkChange("portfolio", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="blog-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.blog}
onChange={event => props.handlePrefixChange("blog", event)}
/>
<input
id="blog"
placeholder="blog link"
className="placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.link.blog}
onChange={event => props.handleLinkChange("blog", event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="funFact-prefix"
className="mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.prefix.funFact}
onChange={event => props.handlePrefixChange("funFact", event)}
/>
<input
id="funFact"
placeholder="Chai over Coffee"
className="placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={props.data.funFact}
onChange={event => props.handleDataChange("funFact", event)}
/>
</div>
</div>
)
}
export default Work
+197
View File
@@ -0,0 +1,197 @@
import React from 'react';
import PropTypes from 'prop-types';
const Work = (props) => {
const { prefix, handlePrefixChange, data, handleDataChange, link, handleLinkChange } = props;
return (
<div className="flex justify-center items-start flex-col w-full px-2 sm:px-6 mb-10">
<div className="text-xl sm:text-2xl font-bold font-title mt-2 mb-2">Work</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="currentWork-prefix"
placeholder="Hi, I'm "
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.currentWork}
onChange={(event) => handlePrefixChange('currentWork', event)}
/>
<input
id="currentWork"
placeholder="project name"
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.currentWork}
onChange={(event) => handleDataChange('currentWork', event)}
/>
<input
id="currentWork-link"
placeholder="project link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.currentWork}
onChange={(event) => handleLinkChange('currentWork', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="collaborateOn-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.collaborateOn}
onChange={(event) => handlePrefixChange('collaborateOn', event)}
/>
<input
id="collaborateOn"
placeholder="project name"
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.collaborateOn}
onChange={(event) => handleDataChange('collaborateOn', event)}
/>
<input
id="collaborateOn-link"
placeholder="project link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.collaborateOn}
onChange={(event) => handleLinkChange('collaborateOn', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="helpWith-prefix"
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.helpWith}
onChange={(event) => handlePrefixChange('helpWith', event)}
/>
<input
id="helpWith"
placeholder="project name"
className="outline-none placeholder-gray-700 mr-8 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.helpWith}
onChange={(event) => handleDataChange('helpWith', event)}
/>
<input
id="helpWith-link"
placeholder="project link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/4 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.helpWith}
onChange={(event) => handleLinkChange('helpWith', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="currentLearn-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.currentLearn}
onChange={(event) => handlePrefixChange('currentLearn', event)}
/>
<input
id="currentLearn"
placeholder="Frameworks, courses etc."
className="outline-none placeholder-gray-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.currentLearn}
onChange={(event) => handleDataChange('currentLearn', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="ama-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.ama}
onChange={(event) => handlePrefixChange('ama', event)}
/>
<input
id="ama"
placeholder="react, vue and gsap"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.ama}
onChange={(event) => handleDataChange('ama', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="contact-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.contact}
onChange={(event) => handlePrefixChange('contact', event)}
/>
<input
id="contact"
placeholder="example@gmail.com"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.contact}
onChange={(event) => handleDataChange('contact', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="portfolio-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.portfolio}
onChange={(event) => handlePrefixChange('portfolio', event)}
/>
<input
id="portfolio"
placeholder="portfolio link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.portfolio}
onChange={(event) => handleLinkChange('portfolio', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="blog-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.blog}
onChange={(event) => handlePrefixChange('blog', event)}
/>
<input
id="blog"
placeholder="blog link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.blog}
onChange={(event) => handleLinkChange('blog', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="resume-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.resume}
onChange={(event) => handlePrefixChange('resume', event)}
/>
<input
id="resume"
placeholder="resume link"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 text-blue-700 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={link.resume}
onChange={(event) => handleLinkChange('resume', event)}
/>
</div>
<div className="text-xs sm:text-lg flex flex-col sm:flex-row mb-10 justify-center sm:justify-start items-center sm:items-start w-full px-4 sm:px-0">
<input
id="funFact-prefix"
className="outline-none mr-8 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={prefix.funFact}
onChange={(event) => handlePrefixChange('funFact', event)}
/>
<input
id="funFact"
placeholder="I think I am funny"
className="outline-none placeholder-gray-700 mr-8 sm:mr-0 w-full sm:w-1/3 border-t-0 border-l-0 border-r-0 border solid border-gray-900 py-1 px-2 focus:border-blue-700"
value={data.funFact}
onChange={(event) => handleDataChange('funFact', event)}
/>
</div>
</div>
);
};
export default Work;
Work.propTypes = {
prefix: PropTypes.object.isRequired,
data: PropTypes.object.isRequired,
link: PropTypes.object.isRequired,
handlePrefixChange: PropTypes.func.isRequired,
handleDataChange: PropTypes.func.isRequired,
handleLinkChange: PropTypes.func.isRequired,
};
+97
View File
@@ -0,0 +1,97 @@
export const DEFAULT_PREFIX = {
title: "Hi 👋, I'm",
currentWork: '🔭 Im currently working on',
currentLearn: '🌱 Im currently learning',
collaborateOn: '👯 Im looking to collaborate on',
helpWith: '🤝 Im looking for help with',
ama: '💬 Ask me about',
contact: '📫 How to reach me',
resume: '📄 Know about my experiences',
funFact: '⚡ Fun fact',
portfolio: '👨‍💻 All of my projects are available at',
blog: '📝 I regularly write articles on',
};
export const DEFAULT_DATA = {
title: '',
subtitle: 'A passionate frontend developer from India',
currentWork: '',
currentLearn: '',
collaborateOn: '',
helpWith: '',
ama: '',
contact: '',
funFact: '',
twitterBadge: false,
visitorsBadge: false,
badgeStyle: 'flat',
badgeColor: '0e75b6',
badgeLabel: 'Profile views',
githubProfileTrophy: false,
githubStats: false,
githubStatsOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
topLanguages: false,
topLanguagesOptions: {
theme: '',
titleColor: '',
textColor: '',
bgColor: '',
hideBorder: false,
cacheSeconds: null,
locale: 'en',
},
streakStats: false,
streakStatsOptions: {
theme: '',
},
devDynamicBlogs: false,
mediumDynamicBlogs: false,
rssDynamicBlogs: false,
};
export const DEFAULT_LINK = {
currentWork: '',
collaborateOn: '',
helpWith: '',
portfolio: '',
blog: '',
resume: '',
};
export const DEFAULT_SOCIAL = {
github: '',
dev: '',
linkedin: '',
codepen: '',
stackoverflow: '',
kaggle: '',
codesandbox: '',
fb: '',
instagram: '',
twitter: '',
dribbble: '',
behance: '',
medium: '',
youtube: '',
codechef: '',
hackerrank: '',
codeforces: '',
leetcode: '',
topcoder: '',
hackerearth: '',
geeks_for_geeks: '',
discord: '',
rssurl: '',
};
export const DEFAULT_SUPPORT = {
buyMeACoffee: '',
};
+6 -6
View File
@@ -1,7 +1,7 @@
const links = {
home: '/',
about: '/about',
addons: '/addons',
support: '/support'
}
export default links
home: '/',
about: '/about',
addons: '/addons',
support: '/support',
};
export default links;
+449 -290
View File
@@ -1,361 +1,520 @@
//const baseURL = 'https://devicons.github.io/devicon/devicon.git/icons/';
const categorizedSkills = {
language: {
title: "Programming Languages",
title: 'Programming Languages',
skills: [
"c",
"cplusplus",
"csharp",
"go",
"java",
"javascript",
"typescript",
"php",
"ruby",
"scala",
"python",
"swift",
"objectivec",
"clojure",
"rust",
"haskell",
'c',
'cplusplus',
'csharp',
'go',
'java',
'javascript',
'typescript',
'php',
'perl',
'ruby',
'scala',
'python',
'swift',
'objectivec',
'clojure',
'rust',
'haskell',
'coffeescript',
'elixir',
'erlang',
'nim',
],
},
frontend_dev: {
title: "Frontend Development",
title: 'Frontend Development',
skills: [
"vuejs",
"react",
"svelte",
"angularjs",
"backbonejs",
"bootstrap",
"vuetify",
"css3",
"html5",
"pug",
"gulp",
"sass",
"redux",
"webpack",
"babel",
"tailwind",
"materialize",
"bulma",
'vuejs',
'react',
'svelte',
'angularjs',
'angular',
'backbonejs',
'bootstrap',
'vuetify',
'css3',
'html5',
'pug',
'gulp',
'sass',
'redux',
'webpack',
'babel',
'tailwind',
'materialize',
'bulma',
'gtk',
'qt',
'wx_widgets',
'ember',
],
},
backend_dev: {
title: "Backend Development",
title: 'Backend Development',
skills: [
"nodejs",
"spring",
"express",
"kafka",
"solr",
"rabbitMQ",
"hadoop",
"nginx",
'nodejs',
'spring',
'express',
'graphql',
'kafka',
'solr',
'rabbitMQ',
'hadoop',
'nginx',
'openresty',
'nestjs',
],
},
mobile_dev: {
title: "Mobile App Development",
title: 'Mobile App Development',
skills: [
"android",
"flutter",
"dart",
"kotlin",
"nativescript",
"xamarin",
"reactnative",
"ionic",
'android',
'flutter',
'dart',
'kotlin',
'nativescript',
'xamarin',
'reactnative',
'ionic',
'apachecordova',
],
},
ai: {
title: "AI/ML",
skills: ["tensorflow", "pytorch", "opencv"],
title: 'AI/ML',
skills: ['tensorflow', 'pytorch', 'pandas', 'seaborn', 'opencv', 'scikit_learn'],
},
database: {
title: "Database",
title: 'Database',
skills: [
"mongodb",
"mysql",
"postgresql",
"redis",
"oracle",
"cassandra",
"couchdb",
"hive",
"realm",
"mariadb",
'mongodb',
'mysql',
'postgresql',
'redis',
'oracle',
'cassandra',
'couchdb',
'hive',
'realm',
'mariadb',
'cockroachdb',
'elasticsearch',
'sqlite',
'mssql',
],
},
data_visualization: {
title: "Data Visualization",
skills: ["d3js", "chartjs", "canvasjs"],
title: 'Data Visualization',
skills: ['d3js', 'chartjs', 'canvasjs', 'kibana', 'grafana'],
},
devops: {
title: "Devops",
skills: [
"aws",
"docker",
"jenkins",
"gcp",
"kubernetes",
"bash",
"azure",
"vagrant",
],
title: 'Devops',
skills: ['aws', 'docker', 'jenkins', 'gcp', 'kubernetes', 'bash', 'azure', 'vagrant', 'circleci', 'travisci'],
},
baas: {
title: "Backend as a Service(BaaS)",
skills: ["firebase", "amplify"],
title: 'Backend as a Service(BaaS)',
skills: ['firebase', 'appwrite', 'amplify', 'heroku'],
},
framework: {
title: "Framework",
skills: [
"django",
"dotnet",
"electron",
"symfony",
"laravel",
"codeigniter",
"rails",
"flask",
],
title: 'Framework',
skills: ['django', 'dotnet', 'electron', 'symfony', 'laravel', 'codeigniter', 'rails', 'flask', 'quasar'],
},
testing: {
title: "Testing",
skills: [
"cypress",
"selenium",
"jest",
"mocha",
"puppeteer",
"karma",
"jasmine",
],
title: 'Testing',
skills: ['cypress', 'selenium', 'jest', 'mocha', 'puppeteer', 'karma', 'jasmine'],
},
software: {
title: "Software",
skills: [
"illustrator",
"photoshop",
"figma",
"blender",
"sketch",
"invision",
"framer",
],
title: 'Software',
skills: ['illustrator', 'photoshop', 'xd', 'figma', 'blender', 'sketch', 'invision', 'framer', 'matlab', 'postman'],
},
static_site_generator: {
title: "Static Site Generators",
skills: ["gatsby", "gridsome", "hugo", "jekyll", "nextjs", "nuxtjs"],
title: 'Static Site Generators',
skills: [
'gatsby',
'gridsome',
'hugo',
'jekyll',
'nextjs',
'nuxtjs',
'11ty',
'scully',
'sculpin',
'sapper',
'vuepress',
'hexo',
'middleman',
],
},
game_engines: {
title: 'Game Engines',
skills: ['unity', 'unreal'],
},
automation: {
title: 'Automation',
skills: ['zapier', 'ifttt'],
},
other: {
title: "Other",
skills: ["linux", "git"],
title: 'Other',
skills: ['linux', 'git', 'arduino'],
},
}
};
const icons = {
vuejs:
"https://devicons.github.io/devicon/devicon.git/icons/vuejs/vuejs-original-wordmark.svg",
react:
"https://devicons.github.io/devicon/devicon.git/icons/react/react-original-wordmark.svg",
vuejs: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/vuejs/vuejs-original-wordmark.svg',
react: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/react/react-original-wordmark.svg',
angularjs:
"https://devicons.github.io/devicon/devicon.git/icons/angularjs/angularjs-original.svg",
'https://raw.githubusercontent.com/devicons/devicon/master/icons/angularjs/angularjs-original-wordmark.svg',
angular: 'https://angular.io/assets/images/logos/angular/angular.svg',
aws:
"https://devicons.github.io/devicon/devicon.git/icons/amazonwebservices/amazonwebservices-original-wordmark.svg",
android:
"https://devicons.github.io/devicon/devicon.git/icons/android/android-original-wordmark.svg",
'https://raw.githubusercontent.com/devicons/devicon/master/icons/amazonwebservices/amazonwebservices-original-wordmark.svg',
android: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/android/android-original-wordmark.svg',
arduino: 'https://cdn.worldvectorlogo.com/logos/arduino-1.svg',
backbonejs:
"https://devicons.github.io/devicon/devicon.git/icons/backbonejs/backbonejs-original-wordmark.svg",
bootstrap:
"https://devicons.github.io/devicon/devicon.git/icons/bootstrap/bootstrap-plain.svg",
c: "https://devicons.github.io/devicon/devicon.git/icons/c/c-original.svg",
canvasjs:
"https://raw.githubusercontent.com/Hardik0307/Hardik0307/master/assets/canvasjs-charts.svg",
'https://raw.githubusercontent.com/devicons/devicon/master/icons/backbonejs/backbonejs-original-wordmark.svg',
bootstrap: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/bootstrap/bootstrap-plain-wordmark.svg',
c: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/c/c-original.svg',
canvasjs: 'https://raw.githubusercontent.com/Hardik0307/Hardik0307/master/assets/canvasjs-charts.svg',
coffeescript:
"https://devicons.github.io/devicon/devicon.git/icons/coffeescript/coffeescript-original-wordmark.svg",
codeigniter: "https://cdn.worldvectorlogo.com/logos/codeigniter.svg",
cplusplus:
"https://devicons.github.io/devicon/devicon.git/icons/cplusplus/cplusplus-original.svg",
css3:
"https://devicons.github.io/devicon/devicon.git/icons/css3/css3-original-wordmark.svg",
csharp:
"https://devicons.github.io/devicon/devicon.git/icons/csharp/csharp-original.svg",
d3js:
"https://devicons.github.io/devicon/devicon.git/icons/d3js/d3js-original.svg",
django:
"https://devicons.github.io/devicon/devicon.git/icons/django/django-original.svg",
docker:
"https://devicons.github.io/devicon/devicon.git/icons/docker/docker-original-wordmark.svg",
dotnet:
"https://devicons.github.io/devicon/devicon.git/icons/dot-net/dot-net-original-wordmark.svg",
electron:
"https://devicons.github.io/devicon/devicon.git/icons/electron/electron-original.svg",
express:
"https://devicons.github.io/devicon/devicon.git/icons/express/express-original-wordmark.svg",
go: "https://devicons.github.io/devicon/devicon.git/icons/go/go-original.svg",
gulp:
"https://devicons.github.io/devicon/devicon.git/icons/gulp/gulp-plain.svg",
html5:
"https://devicons.github.io/devicon/devicon.git/icons/html5/html5-original-wordmark.svg",
hugo: "https://api.iconify.design/logos-hugo.svg",
java:
"https://devicons.github.io/devicon/devicon.git/icons/java/java-original-wordmark.svg",
javascript:
"https://devicons.github.io/devicon/devicon.git/icons/javascript/javascript-original.svg",
ionic: "https://upload.wikimedia.org/wikipedia/commons/d/d1/Ionic_Logo.svg",
laravel:
"https://devicons.github.io/devicon/devicon.git/icons/laravel/laravel-plain-wordmark.svg",
meteor:
"https://devicons.github.io/devicon/devicon.git/icons/meteor/meteor-original-wordmark.svg",
mongodb:
"https://devicons.github.io/devicon/devicon.git/icons/mongodb/mongodb-original-wordmark.svg",
mysql:
"https://devicons.github.io/devicon/devicon.git/icons/mysql/mysql-original-wordmark.svg",
nginx:
"https://devicons.github.io/devicon/devicon.git/icons/nginx/nginx-original.svg",
nodejs:
"https://devicons.github.io/devicon/devicon.git/icons/nodejs/nodejs-original-wordmark.svg",
oracle:
"https://devicons.github.io/devicon/devicon.git/icons/oracle/oracle-original.svg",
photoshop:
"https://devicons.github.io/devicon/devicon.git/icons/photoshop/photoshop-plain.svg",
php:
"https://devicons.github.io/devicon/devicon.git/icons/php/php-original.svg",
'https://raw.githubusercontent.com/devicons/devicon/master/icons/coffeescript/coffeescript-original-wordmark.svg',
codeigniter: 'https://cdn.worldvectorlogo.com/logos/codeigniter.svg',
cplusplus: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/cplusplus/cplusplus-original.svg',
css3: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/css3/css3-original-wordmark.svg',
csharp: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/csharp/csharp-original.svg',
d3js: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/d3js/d3js-original.svg',
django: 'https://cdn.worldvectorlogo.com/logos/django.svg',
docker: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/docker/docker-original-wordmark.svg',
dotnet: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/dot-net/dot-net-original-wordmark.svg',
electron: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/electron/electron-original.svg',
express: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/express/express-original-wordmark.svg',
go: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/go/go-original.svg',
graphql: 'https://www.vectorlogo.zone/logos/graphql/graphql-icon.svg',
gulp: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/gulp/gulp-plain.svg',
html5: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/html5/html5-original-wordmark.svg',
hugo: 'https://api.iconify.design/logos-hugo.svg',
java: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/java/java-original.svg',
javascript: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/javascript/javascript-original.svg',
ionic: 'https://upload.wikimedia.org/wikipedia/commons/d/d1/Ionic_Logo.svg',
laravel: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/laravel/laravel-plain-wordmark.svg',
meteor: 'https://devicons.github.io/devicon/devicon.git/icons/meteor/meteor-original-wordmark.svg',
mongodb: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/mongodb/mongodb-original-wordmark.svg',
mysql: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/mysql/mysql-original-wordmark.svg',
nestjs: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/nestjs/nestjs-plain.svg',
nginx: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/nginx/nginx-original.svg',
nodejs: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/nodejs/nodejs-original-wordmark.svg',
openresty: 'https://openresty.org/images/logo.png',
oracle: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/oracle/oracle-original.svg',
photoshop: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/photoshop/photoshop-line.svg',
xd: 'https://cdn.worldvectorlogo.com/logos/adobe-xd.svg',
php: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/php/php-original.svg',
perl: 'https://api.iconify.design/logos-perl.svg',
postgresql:
"https://devicons.github.io/devicon/devicon.git/icons/postgresql/postgresql-original-wordmark.svg",
python:
"https://devicons.github.io/devicon/devicon.git/icons/python/python-original.svg",
rails:
"https://devicons.github.io/devicon/devicon.git/icons/rails/rails-original-wordmark.svg",
redis:
"https://devicons.github.io/devicon/devicon.git/icons/redis/redis-original-wordmark.svg",
ruby:
"https://devicons.github.io/devicon/devicon.git/icons/ruby/ruby-original-wordmark.svg",
rust:
"https://devicons.github.io/devicon/devicon.git/icons/rust/rust-plain.svg",
sass:
"https://devicons.github.io/devicon/devicon.git/icons/sass/sass-original.svg",
scala:
"https://devicons.github.io/devicon/devicon.git/icons/scala/scala-original-wordmark.svg",
symfony: "https://symfony.com/logos/symfony_black_03.svg",
spring: "https://www.vectorlogo.zone/logos/springio/springio-icon.svg",
swift:
"https://devicons.github.io/devicon/devicon.git/icons/swift/swift-original-wordmark.svg",
typescript:
"https://devicons.github.io/devicon/devicon.git/icons/typescript/typescript-original.svg",
linux:
"https://devicons.github.io/devicon/devicon.git/icons/linux/linux-original.svg",
redux:
"https://devicons.github.io/devicon/devicon.git/icons/redux/redux-original.svg",
'https://raw.githubusercontent.com/devicons/devicon/master/icons/postgresql/postgresql-original-wordmark.svg',
python: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/python/python-original.svg',
rails: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/rails/rails-original-wordmark.svg',
redis: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/redis/redis-original-wordmark.svg',
ruby: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/ruby/ruby-original.svg',
rust: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/rust/rust-plain.svg',
sass: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/sass/sass-original.svg',
scala: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/scala/scala-original.svg',
solidworks: 'https://cdn.worldvectorlogo.com/logos/solidworks.svg',
symfony: 'https://symfony.com/logos/symfony_black_03.svg',
spring: 'https://www.vectorlogo.zone/logos/springio/springio-icon.svg',
swift: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/swift/swift-original.svg',
typescript: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/typescript/typescript-original.svg',
linux: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/linux/linux-original.svg',
redux: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/redux/redux-original.svg',
webpack:
"https://devicons.github.io/devicon/devicon.git/icons/webpack/webpack-original.svg",
flutter: "https://www.vectorlogo.zone/logos/flutterio/flutterio-icon.svg",
dart: "https://www.vectorlogo.zone/logos/dartlang/dartlang-icon.svg",
kotlin: "https://www.vectorlogo.zone/logos/kotlinlang/kotlinlang-icon.svg",
tensorflow:
"https://www.vectorlogo.zone/logos/tensorflow/tensorflow-icon.svg",
chartjs: "https://www.chartjs.org/media/logo-title.svg",
jenkins: "https://www.vectorlogo.zone/logos/jenkins/jenkins-icon.svg",
gcp: "https://www.vectorlogo.zone/logos/google_cloud/google_cloud-icon.svg",
kubernetes:
"https://www.vectorlogo.zone/logos/kubernetes/kubernetes-icon.svg",
azure:
"https://www.vectorlogo.zone/logos/microsoft_azure/microsoft_azure-icon.svg",
git: "https://www.vectorlogo.zone/logos/git-scm/git-scm-icon.svg",
kafka: "https://www.vectorlogo.zone/logos/apache_kafka/apache_kafka-icon.svg",
solr: "https://www.vectorlogo.zone/logos/apache_solr/apache_solr-icon.svg",
cassandra:
"https://www.vectorlogo.zone/logos/apache_cassandra/apache_cassandra-icon.svg",
rabbitMQ: "https://www.vectorlogo.zone/logos/rabbitmq/rabbitmq-icon.svg",
hadoop:
"https://www.vectorlogo.zone/logos/apache_hadoop/apache_hadoop-icon.svg",
bash: "https://www.vectorlogo.zone/logos/gnu_bash/gnu_bash-icon.svg",
pytorch: "https://www.vectorlogo.zone/logos/pytorch/pytorch-icon.svg",
opencv: "https://www.vectorlogo.zone/logos/opencv/opencv-icon.svg",
illustrator:
"https://www.vectorlogo.zone/logos/adobe_illustrator/adobe_illustrator-icon.svg",
figma: "https://www.vectorlogo.zone/logos/figma/figma-icon.svg",
blender:
"https://download.blender.org/branding/community/blender_community_badge_white.svg",
babel: "https://www.vectorlogo.zone/logos/babeljs/babeljs-icon.svg",
sketch: "https://www.vectorlogo.zone/logos/sketchapp/sketchapp-icon.svg",
flask: "https://www.vectorlogo.zone/logos/pocoo_flask/pocoo_flask-icon.svg",
'https://raw.githubusercontent.com/devicons/devicon/d00d0969292a6569d45b06d3f350f463a0107b0d/icons/webpack/webpack-original-wordmark.svg',
flutter: 'https://www.vectorlogo.zone/logos/flutterio/flutterio-icon.svg',
dart: 'https://www.vectorlogo.zone/logos/dartlang/dartlang-icon.svg',
kotlin: 'https://www.vectorlogo.zone/logos/kotlinlang/kotlinlang-icon.svg',
tensorflow: 'https://www.vectorlogo.zone/logos/tensorflow/tensorflow-icon.svg',
chartjs: 'https://www.chartjs.org/media/logo-title.svg',
jenkins: 'https://www.vectorlogo.zone/logos/jenkins/jenkins-icon.svg',
gcp: 'https://www.vectorlogo.zone/logos/google_cloud/google_cloud-icon.svg',
kubernetes: 'https://www.vectorlogo.zone/logos/kubernetes/kubernetes-icon.svg',
azure: 'https://www.vectorlogo.zone/logos/microsoft_azure/microsoft_azure-icon.svg',
git: 'https://www.vectorlogo.zone/logos/git-scm/git-scm-icon.svg',
kafka: 'https://www.vectorlogo.zone/logos/apache_kafka/apache_kafka-icon.svg',
solr: 'https://www.vectorlogo.zone/logos/apache_solr/apache_solr-icon.svg',
cassandra: 'https://www.vectorlogo.zone/logos/apache_cassandra/apache_cassandra-icon.svg',
rabbitMQ: 'https://www.vectorlogo.zone/logos/rabbitmq/rabbitmq-icon.svg',
hadoop: 'https://www.vectorlogo.zone/logos/apache_hadoop/apache_hadoop-icon.svg',
bash: 'https://www.vectorlogo.zone/logos/gnu_bash/gnu_bash-icon.svg',
pytorch: 'https://www.vectorlogo.zone/logos/pytorch/pytorch-icon.svg',
pandas:
'https://raw.githubusercontent.com/devicons/devicon/2ae2a900d2f041da66e950e4d48052658d850630/icons/pandas/pandas-original.svg',
seaborn: 'https://seaborn.pydata.org/_images/logo-mark-lightbg.svg',
opencv: 'https://www.vectorlogo.zone/logos/opencv/opencv-icon.svg',
illustrator: 'https://www.vectorlogo.zone/logos/adobe_illustrator/adobe_illustrator-icon.svg',
figma: 'https://www.vectorlogo.zone/logos/figma/figma-icon.svg',
blender: 'https://download.blender.org/branding/community/blender_community_badge_white.svg',
babel: 'https://www.vectorlogo.zone/logos/babeljs/babeljs-icon.svg',
sketch: 'https://www.vectorlogo.zone/logos/sketchapp/sketchapp-icon.svg',
flask: 'https://www.vectorlogo.zone/logos/pocoo_flask/pocoo_flask-icon.svg',
nativescript:
"https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/nativescript.svg",
'https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/nativescript.svg',
xamarin:
"https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/xamarin.svg",
vagrant: "https://www.vectorlogo.zone/logos/vagrantup/vagrantup-icon.svg",
tailwind:
"https://www.vectorlogo.zone/logos/tailwindcss/tailwindcss-icon.svg",
'https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/xamarin.svg',
vagrant: 'https://www.vectorlogo.zone/logos/vagrantup/vagrantup-icon.svg',
tailwind: 'https://www.vectorlogo.zone/logos/tailwindcss/tailwindcss-icon.svg',
materialize:
"https://raw.githubusercontent.com/prplx/svg-logos/5585531d45d294869c4eaab4d7cf2e9c167710a9/svg/materialize.svg",
invision:
"https://www.vectorlogo.zone/logos/invisionapp/invisionapp-icon.svg",
framer: "https://www.vectorlogo.zone/logos/framer/framer-icon.svg",
bulma:
"https://raw.githubusercontent.com/gilbarbara/logos/804dc257b59e144eaca5bc6ffd16949752c6f789/logos/bulma.svg",
'https://raw.githubusercontent.com/prplx/svg-logos/5585531d45d294869c4eaab4d7cf2e9c167710a9/svg/materialize.svg',
invision: 'https://www.vectorlogo.zone/logos/invisionapp/invisionapp-icon.svg',
framer: 'https://www.vectorlogo.zone/logos/framer/framer-icon.svg',
bulma: 'https://raw.githubusercontent.com/gilbarbara/logos/804dc257b59e144eaca5bc6ffd16949752c6f789/logos/bulma.svg',
couchdb:
"https://raw.githubusercontent.com/devicons/devicon/0d6c64dbbf311879f7d563bfc3ccf559f9ed111c/icons/couchdb/couchdb-original.svg",
firebase: "https://www.vectorlogo.zone/logos/firebase/firebase-icon.svg",
amplify: "https://docs.amplify.aws/assets/logo-dark.svg",
hive: "https://www.vectorlogo.zone/logos/apache_hive/apache_hive-icon.svg",
'https://raw.githubusercontent.com/devicons/devicon/0d6c64dbbf311879f7d563bfc3ccf559f9ed111c/icons/couchdb/couchdb-original.svg',
firebase: 'https://www.vectorlogo.zone/logos/firebase/firebase-icon.svg',
amplify: 'https://docs.amplify.aws/assets/logo-dark.svg',
hive: 'https://www.vectorlogo.zone/logos/apache_hive/apache_hive-icon.svg',
realm:
"https://raw.githubusercontent.com/bestofjs/bestofjs-webui/8665e8c267a0215f3159df28b33c365198101df5/public/logos/realm.svg",
gatsby: "https://www.vectorlogo.zone/logos/gatsbyjs/gatsbyjs-icon.svg",
gridsome: "https://www.vectorlogo.zone/logos/gridsome/gridsome-icon.svg",
nuxtjs: "https://www.vectorlogo.zone/logos/nuxtjs/nuxtjs-icon.svg",
jekyll: "https://www.vectorlogo.zone/logos/jekyllrb/jekyllrb-icon.svg",
nextjs: "https://cdn.worldvectorlogo.com/logos/nextjs-3.svg",
reactnative: "https://reactnative.dev/img/header_logo.svg",
mariadb: "https://www.vectorlogo.zone/logos/mariadb/mariadb-icon.svg",
'https://raw.githubusercontent.com/bestofjs/bestofjs-webui/8665e8c267a0215f3159df28b33c365198101df5/public/logos/realm.svg',
gatsby: 'https://www.vectorlogo.zone/logos/gatsbyjs/gatsbyjs-icon.svg',
gridsome: 'https://www.vectorlogo.zone/logos/gridsome/gridsome-icon.svg',
nuxtjs: 'https://www.vectorlogo.zone/logos/nuxtjs/nuxtjs-icon.svg',
jekyll: 'https://www.vectorlogo.zone/logos/jekyllrb/jekyllrb-icon.svg',
nextjs: 'https://cdn.worldvectorlogo.com/logos/nextjs-2.svg',
reactnative: 'https://reactnative.dev/img/header_logo.svg',
mariadb: 'https://www.vectorlogo.zone/logos/mariadb/mariadb-icon.svg',
cockroachdb: 'https://cdn.worldvectorlogo.com/logos/cockroachdb.svg',
objectivec: 'https://www.vectorlogo.zone/logos/apple_objectivec/apple_objectivec-icon.svg',
clojure: 'https://upload.wikimedia.org/wikipedia/commons/5/5d/Clojure_logo.svg',
haskell: 'https://upload.wikimedia.org/wikipedia/commons/1/1c/Haskell-Logo.svg',
svelte: 'https://upload.wikimedia.org/wikipedia/commons/1/1b/Svelte_Logo.svg',
vuetify: 'https://bestofjs.org/logos/vuetify.svg',
pug: 'https://cdn.worldvectorlogo.com/logos/pug.svg',
mocha: 'https://www.vectorlogo.zone/logos/mochajs/mochajs-icon.svg',
jest: 'https://www.vectorlogo.zone/logos/jestjsio/jestjsio-icon.svg',
cypress:
'https://raw.githubusercontent.com/simple-icons/simple-icons/6e46ec1fc23b60c8fd0d2f2ff46db82e16dbd75f/icons/cypress.svg',
selenium:
'https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/selenium-logo.svg',
puppeteer: 'https://www.vectorlogo.zone/logos/pptrdev/pptrdev-official.svg',
karma: 'https://raw.githubusercontent.com/detain/svg-logos/780f25886640cef088af994181646db2f6b1a3f8/svg/karma.svg',
jasmine: 'https://www.vectorlogo.zone/logos/jasmine/jasmine-icon.svg',
gtk: 'https://upload.wikimedia.org/wikipedia/commons/7/71/GTK_logo.svg',
qt: 'https://upload.wikimedia.org/wikipedia/commons/0/0b/Qt_logo_2016.svg',
wx_widgets: 'https://upload.wikimedia.org/wikipedia/commons/b/bb/WxWidgets.svg',
ember: 'https://raw.githubusercontent.com/devicons/devicon/master/icons/ember/ember-original-wordmark.svg',
scikit_learn: 'https://upload.wikimedia.org/wikipedia/commons/0/05/Scikit_learn_logo_small.svg',
quasar: 'https://cdn.quasar.dev/logo/svg/quasar-logo.svg',
kibana: 'https://www.vectorlogo.zone/logos/elasticco_kibana/elasticco_kibana-icon.svg',
grafana: 'https://www.vectorlogo.zone/logos/grafana/grafana-icon.svg',
elasticsearch: 'https://www.vectorlogo.zone/logos/elastic/elastic-icon.svg',
circleci: 'https://www.vectorlogo.zone/logos/circleci/circleci-icon.svg',
scully: 'https://raw.githubusercontent.com/scullyio/scully/main/assets/logos/SVG/scullyio-icon.svg',
'11ty':
'https://gist.githubusercontent.com/vivek32ta/c7f7bf583c1fb1c58d89301ea40f37fd/raw/f4c85cce5790758286b8f155ef9a177710b995df/11ty.svg',
sculpin:
'https://gist.githubusercontent.com/vivek32ta/c7f7bf583c1fb1c58d89301ea40f37fd/raw/1782aef8672484698c0dd407f900c4a329ed5bc4/sculpin.svg',
sapper: 'https://raw.githubusercontent.com/bestofjs/bestofjs-webui/master/public/logos/sapper.svg',
vuepress:
'https://raw.githubusercontent.com/AliasIO/wappalyzer/master/src/drivers/webextension/images/icons/VuePress.svg',
unity: 'https://www.vectorlogo.zone/logos/unity3d/unity3d-icon.svg',
unreal:
'https://raw.githubusercontent.com/kenangundogan/fontisto/036b7eca71aab1bef8e6a0518f7329f13ed62f6b/icons/svg/brand/unreal-engine.svg',
elixir: 'https://www.vectorlogo.zone/logos/elixir-lang/elixir-lang-icon.svg',
heroku: 'https://www.vectorlogo.zone/logos/heroku/heroku-icon.svg',
appwrite: 'https://www.vectorlogo.zone/logos/appwriteio/appwriteio-icon.svg',
hexo: 'https://www.vectorlogo.zone/logos/hexoio/hexoio-icon.svg',
travisci: 'https://www.vectorlogo.zone/logos/travis-ci/travis-ci-icon.svg',
apachecordova: 'https://www.vectorlogo.zone/logos/apache_cordova/apache_cordova-icon.svg',
zapier: 'https://www.vectorlogo.zone/logos/zapier/zapier-icon.svg',
ifttt: 'https://www.vectorlogo.zone/logos/ifttt/ifttt-ar21.svg',
postman: 'https://www.vectorlogo.zone/logos/getpostman/getpostman-icon.svg',
erlang: 'https://www.vectorlogo.zone/logos/erlang/erlang-official.svg',
nim: 'https://www.vectorlogo.zone/logos/nim-lang/nim-lang-icon.svg',
sqlite: 'https://www.vectorlogo.zone/logos/sqlite/sqlite-icon.svg',
mssql: 'https://www.svgrepo.com/show/303229/microsoft-sql-server-logo.svg',
middleman:
'https://raw.githubusercontent.com/leungwensen/svg-icon/b84b3f3a3da329b7c1d02346865f8e98beb05413/dist/svg/logos/middleman.svg',
matlab: 'https://upload.wikimedia.org/wikipedia/commons/2/21/Matlab_Logo.png',
};
const skillWebsites = {
arduino: 'https://www.arduino.cc/',
solidworks: 'https://www.solidworks.com/',
vuejs: 'https://vuejs.org/',
react: 'https://reactjs.org/',
angularjs: 'https://angular.io',
angular: 'https://angular.io',
aws: 'https://aws.amazon.com',
android: 'https://developer.android.com',
backbonejs: 'https://backbonejs.org',
bootstrap: 'https://getbootstrap.com',
c: 'https://www.cprogramming.com/',
canvasjs: 'https://canvasjs.com',
coffeescript: 'https://offeescript.org',
codeigniter: 'https://codeigniter.com',
cplusplus: 'https://www.w3schools.com/cpp/',
css3: 'https://www.w3schools.com/css/',
csharp: 'https://www.w3schools.com/cs/',
d3js: 'https://d3js.org/',
django: 'https://www.djangoproject.com/',
docker: 'https://www.docker.com/',
dotnet: 'https://dotnet.microsoft.com/',
electron: 'https://www.electronjs.org',
express: 'https://expressjs.com',
go: 'https://golang.org',
graphql: 'https://graphql.org',
gulp: 'https://gulpjs.com',
html5: 'https://www.w3.org/html/',
hugo: 'https://gohugo.io/',
java: 'https://www.java.com',
javascript: 'https://developer.mozilla.org/en-US/docs/Web/JavaScript',
ionic: 'https://ionicframework.com',
laravel: 'https://laravel.com/',
matlab: 'https://www.mathworks.com/',
meteor: 'https://www.meteor.com/',
mongodb: 'https://www.mongodb.com/',
mysql: 'https://www.mysql.com/',
nestjs: 'https://nestjs.com/',
nginx: 'https://www.nginx.com',
nodejs: 'https://nodejs.org',
openresty: 'https://openresty.org/',
oracle: 'https://www.oracle.com/',
photoshop: 'https://www.photoshop.com/en',
xd: 'https://www.adobe.com/products/xd.html',
php: 'https://www.php.net',
perl: 'https://www.perl.org/',
postgresql: 'https://www.postgresql.org',
python: 'https://www.python.org',
rails: 'https://rubyonrails.org',
redis: 'https://redis.io',
ruby: 'https://www.ruby-lang.org/en/',
rust: 'https://www.rust-lang.org',
sass: 'https://sass-lang.com',
scala: 'https://www.scala-lang.org',
symfony: 'https://symfony.com',
spring: 'https://spring.io/',
swift: 'https://developer.apple.com/swift/',
typescript: 'https://www.typescriptlang.org/',
linux: 'https://www.linux.org/',
redux: 'https://redux.js.org',
webpack: 'https://webpack.js.org',
flutter: 'https://flutter.dev',
dart: 'https://dart.dev',
kotlin: 'https://kotlinlang.org',
tensorflow: 'https://www.tensorflow.org',
chartjs: 'https://www.chartjs.org',
jenkins: 'https://www.jenkins.io',
gcp: 'https://cloud.google.com',
kubernetes: 'https://kubernetes.io',
azure: 'https://azure.microsoft.com/en-in/',
git: 'https://git-scm.com/',
kafka: 'https://kafka.apache.org/',
solr: 'https://lucene.apache.org/solr/',
cassandra: 'https://cassandra.apache.org/',
rabbitMQ: 'https://www.rabbitmq.com',
hadoop: 'https://hadoop.apache.org/',
bash: 'https://www.gnu.org/software/bash/',
pytorch: 'https://pytorch.org/',
pandas: 'https://pandas.pydata.org/',
seaborn: 'https://seaborn.pydata.org/',
opencv: 'https://opencv.org/',
illustrator: 'https://www.adobe.com/in/products/illustrator.html',
figma: 'https://www.figma.com/',
blender: 'https://www.blender.org/',
babel: 'https://babeljs.io/',
sketch: 'https://www.sketch.com/',
flask: 'https://flask.palletsprojects.com/',
nativescript: 'https://nativescript.org/',
xamarin: 'https://dotnet.microsoft.com/apps/xamarin',
vagrant: 'https://www.vagrantup.com/',
tailwind: 'https://tailwindcss.com/',
materialize: 'https://materializecss.com/',
invision: 'https://www.invisionapp.com/',
framer: 'https://www.framer.com/',
bulma: 'https://bulma.io/',
couchdb: 'https://couchdb.apache.org/',
firebase: 'https://firebase.google.com/',
amplify: 'https://aws.amazon.com/amplify/',
hive: 'https://hive.apache.org/',
realm: 'https://realm.io/',
gatsby: 'https://www.gatsbyjs.com/',
gridsome: 'https://gridsome.org/',
nuxtjs: 'https://nuxtjs.org/',
jekyll: 'https://jekyllrb.com/',
nextjs: 'https://nextjs.org/',
reactnative: 'https://reactnative.dev/',
mariadb: 'https://mariadb.org/',
cockroachdb: 'https://www.cockroachlabs.com/product/cockroachdb/',
objectivec:
"https://www.vectorlogo.zone/logos/apple_objectivec/apple_objectivec-icon.svg",
clojure:
"https://upload.wikimedia.org/wikipedia/commons/5/5d/Clojure_logo.svg",
haskell:
"https://upload.wikimedia.org/wikipedia/commons/1/1c/Haskell-Logo.svg",
svelte:
"https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Svelte_Logo.svg/498px-Svelte_Logo.svg.png",
vuetify:
"https://seeklogo.com/images/V/vuetify-logo-3BCF73C928-seeklogo.com.png",
pug: "https://cdn.worldvectorlogo.com/logos/pug.svg",
mocha: "https://i.ibb.co/0MCw42Q/mocha.png",
jest: "https://i.ibb.co/Yj6p14L/jest.png",
cypress: "https://i.ibb.co/CWQq8gw/cypress.webp",
selenium: "https://i.ibb.co/9T29DD0/selenium.png",
puppeteer: "https://i.ibb.co/Qk299CX/puppeteer.png",
karma: "https://i.ibb.co/dbgh2DH/jasmine.png",
jasmine: "https://i.ibb.co/55txF2S/karma.png",
}
'https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html',
clojure: 'https://clojure.org/',
haskell: 'https://www.haskell.org/',
svelte: 'https://svelte.dev',
vuetify: 'https://vuetifyjs.com/en/',
pug: 'https://pugjs.org',
mocha: 'https://mochajs.org',
jest: 'https://jestjs.io',
cypress: 'https://www.cypress.io',
selenium: 'https://www.selenium.dev',
puppeteer: 'https://github.com/puppeteer/puppeteer',
karma: 'https://karma-runner.github.io/latest/index.html',
jasmine: 'https://jasmine.github.io/',
gtk: 'https://www.gtk.org/',
qt: 'https://www.qt.io/',
wx_widgets: 'https://www.wxwidgets.org/',
ember: 'https://emberjs.com/',
scikit_learn: 'https://scikit-learn.org/',
quasar: 'https://quasar.dev/',
kibana: 'https://www.elastic.co/kibana',
grafana: 'https://grafana.com',
elasticsearch: 'https://www.elastic.co',
circleci: 'https://circleci.com',
scully: 'https://scully.io/',
sculpin: 'https://sculpin.io/',
'11ty': 'https://www.11ty.dev/',
sapper: 'https://sapper.svelte.dev/',
vuepress: 'https://vuepress.vuejs.org/',
unity: 'https://unity.com/',
unreal: 'https://unrealengine.com/',
hexo: 'hexo.io/',
heroku: 'https://heroku.com',
appwrite: 'https://appwrite.io',
zapier: 'https://zapier.com',
ifttt: 'https://ifttt.com/',
elixir: 'https://elixir-lang.org',
travisci: 'https://travis-ci.org',
apachecordova: 'https://cordova.apache.org/',
sqlite: 'https://www.sqlite.org/',
mssql: 'https://www.microsoft.com/en-us/sql-server',
postman: 'https://postman.com',
erlang: 'https://www.erlang.org/',
nim: 'https://nim-lang.org/',
middleman: 'https://middlemanapp.com/',
};
const initialSkillState = {}
const initialSkillState = {};
const skills = Object.keys(categorizedSkills)
.map(key => categorizedSkills[key].skills)
.flat()
.sort()
const skillsArray = Object.keys(categorizedSkills).map((key) => categorizedSkills[key].skills);
// eslint-disable-next-line prefer-spread
const skills = [].concat.apply([], skillsArray).sort();
skills.forEach(skill => {
initialSkillState[skill] = false
})
skills.forEach((skill) => {
initialSkillState[skill] = false;
});
const categories = Object.keys(categorizedSkills)
const categories = Object.keys(categorizedSkills);
export { initialSkillState, icons, skills, categorizedSkills, categories }
export { initialSkillState, icons, skills, skillWebsites, categorizedSkills, categories };
Binary file not shown.

After

Width:  |  Height:  |  Size: 419 KiB

-37
View File
@@ -1,37 +0,0 @@
import React from "react"
import PropTypes from "prop-types"
export default function HTML(props) {
return (
<html {...props.htmlAttributes}>
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
{props.headComponents}
<script data-name="BMC-Widget" src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js" data-id="rahuldkjain" data-description="Support me on Buy me a coffee!" data-message="Thank you for visiting. You can now buy me a coffee!" data-color="#FF813F" data-position="" data-x_margin="18" data-y_margin="18"></script>
</head>
<body {...props.bodyAttributes}>
{props.preBodyComponents}
<div
key={`body`}
id="___gatsby"
dangerouslySetInnerHTML={{ __html: props.body }}
/>
{props.postBodyComponents}
</body>
</html>
)
}
HTML.propTypes = {
htmlAttributes: PropTypes.object,
headComponents: PropTypes.array,
bodyAttributes: PropTypes.object,
preBodyComponents: PropTypes.array,
body: PropTypes.string,
postBodyComponents: PropTypes.array,
}
+42
View File
@@ -0,0 +1,42 @@
/* eslint-disable react/jsx-props-no-spreading */
import React from 'react';
import PropTypes from 'prop-types';
export default function HTML(props) {
const { htmlAttributes, headComponents, bodyAttributes, preBodyComponents, postBodyComponents, body } = props;
return (
<html {...htmlAttributes} lang="en">
<head>
<meta charSet="utf-8" />
<meta httpEquiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
{headComponents}
<script
data-name="BMC-Widget"
src="https://cdnjs.buymeacoffee.com/1.0.0/widget.prod.min.js"
data-id="rahuldkjain"
data-description="Support me on Buy me a coffee!"
data-message="Loved the tool🚀. Buy me a coffee to support the work!"
data-color="#FF813F"
data-position=""
data-x_margin="18"
data-y_margin="18"
/>
</head>
<body {...bodyAttributes}>
{preBodyComponents}
<div key="body" id="___gatsby" dangerouslySetInnerHTML={{ __html: body }} />
{postBodyComponents}
</body>
</html>
);
}
HTML.propTypes = {
htmlAttributes: PropTypes.object.isRequired,
headComponents: PropTypes.array.isRequired,
bodyAttributes: PropTypes.object.isRequired,
preBodyComponents: PropTypes.array.isRequired,
body: PropTypes.string.isRequired,
postBodyComponents: PropTypes.array.isRequired,
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 48 48" height="64" width="64"><defs><path d="M-69.65 120.638a139.301 139.301 120 1 1 139.301 0L27.71 47.993a55.418 55.418 120 1 0-55.418 0z" id="A"/></defs><g transform="matrix(1.275322 0 0 1.275322 -38.047246 -14.965624)"><use transform="matrix(.063405 0 0 .063405 29.66229 12.95855)" y="140" x="298" xlink:href="#A" fill="#ff0101"/><use transform="matrix(-.063405 0 0 -.063405 87.614835 65.58504)" y="415" x="457" xlink:href="#A" fill="#0101ff"/><use transform="matrix(-.031703 -.054911 .054911 -.031703 20.379704 60.225737)" y="415" x="142" xlink:href="#A" fill="#01ff01"/></g></svg>

After

Width:  |  Height:  |  Size: 682 B

+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#EE4C2C;}
</style>
<g transform="matrix(2.21262 0 0 2.21262 -39.453867 -1.770085)">
<path class="st0" d="M35,7.2l-1.6,1.6c2.6,2.6,2.6,6.9,0,9.5c-2.6,2.6-6.9,2.6-9.5,0s-2.6-6.9,0-9.5l4.2-4.2L28.7,4V0.8l-6.4,6.4
c-3.5,3.5-3.5,9.1-0.1,12.6c0,0,0,0,0.1,0.1c3.5,3.5,9.1,3.5,12.6,0.1c0,0,0,0,0.1-0.1C38.6,16.3,38.6,10.6,35,7.2z"/>
<circle class="st0" cx="31.9" cy="5.5" r="1.2"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 770 B

+1
View File
@@ -0,0 +1 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" x="0" y="0" viewBox="0 0 48 48" xml:space="preserve"><style>.st2{fill:#010101}</style><g id="g3" transform="translate(-120.60861 -220.26017)"><path id="path5" d="M157.4 253.3c5.9-5.9 6.8-14.4 2.2-19.1-4.7-4.7-13.2-3.7-19.1 2.2-5.9 5.9-4.2 17.1-2.2 19.1 1.7 1.6 13.3 3.7 19.1-2.2z" fill="#f89939"/><path id="path7" d="M133.4 244.8c-3.4-3.4-8.4-4-11.1-1.3-2.7 2.7-2.1 7.7 1.3 11.1 3.4 3.4 9.9 2.4 11.1 1.3.9-.9 2.1-7.7-1.3-11.1z" fill="#3499cd"/></g><g id="g9" transform="translate(-120.60861 -220.26017)"><g id="g11"><path id="path13" class="st2" d="M145.1 251.9c-.6.6-1.1 1-1.6 1.2-.5.3-.9.4-1.3.4-.5 0-.9-.2-1.1-.6-.3-.4-.4-.9-.4-1.5 0-.9.2-2 .6-3.3.4-1.3.9-2.5 1.5-3.6l1.7-.6h.1c.1 0 .2.1.3.3.1.2.1.4.1.8 0 .9-.2 1.8-.6 2.6-.4.8-1.1 1.7-1.9 2.7 0 .5-.1.8-.1.9 0 .4.1.7.2.9.1.2.3.3.6.3.2 0 .5-.1.8-.3.3-.2.7-.5 1.2-1.1l-.1.9zm-2.5-2.6c.6-.6 1-1.3 1.4-2.1.3-.8.5-1.4.5-2 0-.2 0-.3-.1-.4 0-.1-.1-.1-.2-.1-.2 0-.4.4-.7 1.2-.3.8-.6 1.9-.9 3.4z"/><path id="path15" class="st2" d="M150.1 251.9c-.6.6-1.1 1-1.5 1.2-.4.3-.9.4-1.5.4s-1.1-.2-1.5-.6c-.4-.4-.6-.9-.6-1.5 0-.9.3-1.8 1-2.5.6-.8 1.4-1.1 2.2-1.1.4 0 .7.1 1 .3.2.2.4.5.4.8 0 .9-1 1.7-2.9 2.2.2.9.6 1.3 1.4 1.3.3 0 .6-.1.8-.2.3-.2.7-.5 1.2-1v.7zm-3.5-1.2c1.1-.3 1.7-.9 1.7-1.8 0-.4-.2-.6-.5-.6s-.6.2-.8.7c-.3.4-.4.9-.4 1.7z"/><path id="path17" class="st2" d="M157.1 251.9c-.7.7-1.2 1.1-1.5 1.3-.3.2-.6.3-.9.3-.7 0-1-.6-1-1.8-.4.6-.8 1.1-1.2 1.4-.4.3-.8.5-1.2.5-.4 0-.7-.2-1-.5s-.4-.8-.4-1.3c0-.7.2-1.3.5-1.9.4-.6.8-1.1 1.4-1.5.6-.4 1.1-.6 1.5-.6.6 0 .9.3 1.2.8l1.4-.7h.4l-.6 1.9c-.3 1-.5 1.6-.5 2 0 .4.1.6.4.6.2 0 .4-.1.6-.3.2-.2.5-.5.9-.8v.6zm-4.8.3c.4 0 .9-.4 1.3-1.1.4-.8.6-1.4.6-2.1 0-.2-.1-.4-.2-.6-.1-.1-.3-.2-.4-.2-.4 0-.9.4-1.3 1.1-.4.8-.6 1.4-.6 2.1 0 .2.1.4.2.6.1.2.2.2.4.2z"/><path id="path19" class="st2" d="M162.1 251.9c-1.1 1.1-2 1.6-2.6 1.6-.3 0-.5-.1-.7-.3-.2-.2-.3-.5-.3-.8 0-.6.3-1.5 1-2.5-.3.2-.7.3-1.1.4-.3.5-.7 1.1-1.4 1.7v-.6c.3-.4.7-.7.9-1.2-.4-.2-.6-.4-.6-.7 0-.3.1-.7.3-1.1.2-.4.6-.6 1-.6.3 0 .5.2.5.5s-.1.7-.3 1.2c.7-.1 1.4-.6 1.9-1.7h.6l-.6 1.7c-.3.7-.4 1.2-.5 1.5-.1.3-.1.5-.1.7 0 .2 0 .3.1.4.1.1.2.2.3.2.2 0 .3-.1.5-.2.1-.1.5-.4 1-.9l.1.7z"/><path id="path21" class="st2" d="M168.6 251.9c-1 1.1-1.9 1.6-2.6 1.6-.3 0-.5-.1-.7-.3-.2-.2-.3-.5-.3-.8 0-.5.2-1.2.6-2.2.2-.5.3-.9.3-1 0-.1-.1-.2-.2-.2s-.1 0-.2.1-.2.1-.3.3l-.4.4c-.1.1-.2.3-.4.4l-.4.4c-.2.2-.3.4-.3.6-.1.4-.1.7-.1 1v.9l-1.5.3c0-.6-.1-1-.1-1.3 0-.7.1-1.4.2-2 .2-.6.4-1.4.8-2.1l1.6-.3c-.3.9-.6 1.6-.7 2.2.7-.8 1.3-1.4 1.7-1.7.4-.3.8-.5 1.1-.5.2 0 .4.1.6.3.2.2.2.4.2.6 0 .4-.2 1.1-.6 2.1-.3.7-.4 1.1-.4 1.3 0 .3.1.4.3.4.3 0 .8-.4 1.6-1.3v.8z"/></g></g><text id="text25" transform="translate(26.54 25.2403)" font-size="3.9947" font-family="HelveticaNeue-BlackExt" fill="#fff">scikit</text></svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#F6BD3A;}
.st1{fill:#EB8C23;}
.st2{fill:#E35A2B;}
</style>
<g>
<path class="st0" d="M20.8,25.9l6.5-3.8l6.4,3.8l-6.4,3.7L20.8,25.9L20.8,25.9z M1.3,14.7L27.3,0l19.3,10.9L40.2,22l-12.9-7.3
l-19.4,11L1.3,14.7z"/>
<path class="st1" d="M20.8,40.6v-7.4l6.4-3.7l6.5-3.7v7.4l-6.4,3.7v7.4L20.8,48V40.6z M20.8,25.9l-6.5-3.7l-6.5,3.6v-7.3L27.3,7.3
V22L20.8,25.9z M40.1,18.4v-3.7l6.4-3.8l0.1,7.4L40.1,22L40.1,18.4z"/>
<path class="st2" d="M14.3,44.1v-22l6.4-3.6l0.1,7.3l6.5,3.6v7.4l-6.5-3.5V48L14.3,44.1z M4.6,23.8l-3.2-2v-7.2l6.4,3.7v7.4
L4.6,23.8z M27.3,14.7V7.3l12.8,7.3l0.1,7.4L27.3,14.7L27.3,14.7z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 996 B

+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 24 12" style="enable-background:new 0 0 24 12;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FF4A00;}
</style>
<path d="M.837 2.756h6.488v4.062H.837z" fill="#09f"/><path d="M.837 6.818H4.9v2.427H.837z" fill="#f1422a"/><path d="M4.9 6.818h2.427v2.427H4.9z" fill="#333"/><path d="M8.168 3.96h1.298v4.08H8.168zm7.418 0H13.36v1.298h.927V8.04h1.298V5.258h.927V3.96zm3.524 0h-2.226v1.298h.927V8.04H19.1V5.258h.927V3.96zm3.524 0h-2.226v1.298h.927V8.04h1.298V5.258h.927V3.96zM13 5.258V3.96h-2.967v4.08h1.298V6.927h1.113V5.63H11.32v-.37z" fill="#09f"/>
</svg>

After

Width:  |  Height:  |  Size: 839 B

+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FF4A00;}
</style>
<path class="st0" d="M47.6,19.8H33.4l10-10c-0.8-1.2-1.5-1.9-2.3-3.1C40,5.9,38.9,5,38,4.1L28,14V0.2c-1.3-0.3-2.5-0.4-3.8-0.4
c-1.3-0.1-2.6,0-3.8,0.4v14.2L10,4.1C8.8,4.7,7.8,5.6,6.9,6.7C6.2,7.9,5,8.7,4.2,9.8l10,10H0.4L0,23.6c-0.1,1.3,0,2.6,0.4,3.8h14.2
L4.2,37.8c1.5,2.3,3.5,4.2,5.8,5.8l10-10v14.2c1.3,0.3,2.5,0.4,3.8,0.4c1.3,0.1,2.6,0,3.8-0.4V33.6l10,10c1.2-0.7,2.2-1.6,3.1-2.7
c1-0.9,1.9-2,2.7-3.1l-10-10h14.2c0.3-1.3,0.4-2.5,0.4-3.8C48.1,22.6,47.9,21.2,47.6,19.8L47.6,19.8z M29.9,23.6
c0,1.7-0.3,3.4-0.8,5c-1.6,0.6-3.3,0.9-5,0.8c-1.7,0-3.4-0.3-5-0.8c-0.6-1.6-0.9-3.3-0.8-5c0-1.7,0.3-3.4,0.8-5
c1.6-0.6,3.3-0.9,5-0.8c1.7,0,3.4,0.3,5,0.8C29.6,20.3,29.9,21.9,29.9,23.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:url(#Fill-1_1_);}
</style>
<desc>Created with Sketch.</desc>
<g id="Page-1">
<linearGradient id="Fill-1_1_" gradientUnits="userSpaceOnUse" x1="-266.2616" y1="433.4901" x2="-267.2616" y2="432.9336" gradientTransform="matrix(48 0 0 -35.8095 12831 15540.3857)">
<stop offset="0" style="stop-color:#FF9900"/>
<stop offset="1" style="stop-color:#FFC300"/>
</linearGradient>
<path id="Fill-1" class="st0" d="M10.4,35.8H24l3.5,6.1h-0.1H0l9.6-16.7l4-7l3.5,6L10.4,35.8z M15.5,15.1l3.3-5.8l18.8,32.6H31
L15.5,15.1z M20.7,6.1h6.7L48,41.9h-6.7L20.7,6.1z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 951 B

+17
View File
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFA000;}
.st1{fill:#F57F17;}
.st2{fill:#FFCA28;}
</style>
<g>
<path class="st0" d="M29.4,17.3l-4.8,4.5l-4.5-9l2.3-5.2c0.6-1,1.5-1,2.1,0L29.4,17.3z"/>
<path class="st1" d="M20.2,12.8l4.5,9l-18,16.7L20.2,12.8z"/>
<path class="st2" d="M34.7,10.5c0.9-0.8,1.7-0.5,2,0.6l4.7,27.2l-15.5,9.3c-0.5,0.3-2,0.4-2,0.4s-1.3-0.2-1.8-0.4L6.7,38.5
L34.7,10.5z"/>
<path class="st0" d="M20.2,12.8L6.7,38.5l6-37.6c0.2-1.2,0.9-1.3,1.5-0.3L20.2,12.8z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 833 B

+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 5.1 5.1" style="enable-background:new 0 0 5.1 5.1;" xml:space="preserve">
<style type="text/css">
.st0{fill:#6762A6;}
.st1{fill:#FFFFFF;}
</style>
<path class="st0" d="M4.1,5.1H1c-0.3,0-0.5-0.2-0.5-0.5V0.5C0.5,0.2,0.7,0,1,0h3.2c0.3,0,0.5,0.2,0.5,0.5v4.1
C4.6,4.9,4.4,5.1,4.1,5.1z"/>
<path class="st1" d="M3,4.4v-2c0,0,0.1-0.5-1.6,0.2c0,0,0-1.9,0-1.9l0.6,0v1.2c0,0,1.6-0.6,1.6,0.5v2L3,4.4L3,4.4z M3.3,1.4H2.7
c0.2-0.3,0.4-0.7,0.4-0.7h0.6C3.8,0.7,3.7,1,3.3,1.4L3.3,1.4z M1.4,4.4V3.3l0.6,0.6L1.4,4.4L1.4,4.4z"/>
</svg>

After

Width:  |  Height:  |  Size: 795 B

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<path d="M48,37.2c-1.7,0.4-2.8,0-3.8-1.4l-6.9-9.5l-1-1.3l-8,10.9c-0.9,1.3-1.9,1.9-3.6,1.4L35,23.4l-9.6-12.5
c1.6-0.3,2.8-0.2,3.8,1.3l7.1,9.7l7.2-9.6c0.9-1.3,1.9-1.8,3.6-1.3l-3.7,4.9l-5,6.6c-0.6,0.8-0.5,1.3,0,2L48,37.2z M0,23.1L0.9,19
C3.1,10.8,12.6,7.4,19,12.5c3.8,3,4.7,7.2,4.5,11.9H2.2C1.9,32.9,8,38,15.8,35.4c2.7-0.9,4.4-3.1,5.2-5.7c0.4-1.3,1.1-1.6,2.4-1.2
c-0.6,3.4-2.1,6.2-5.2,7.9C13.6,39,7,38.2,3.6,34.5c-2.1-2.1-2.9-4.8-3.3-7.7c-0.1-0.5-0.2-0.9-0.3-1.4C0,24.7,0,23.9,0,23.1L0,23.1
z M2.3,22.6h19.3c-0.1-6.1-4-10.5-9.2-10.6C6.6,12,2.5,16.2,2.3,22.6z"/>
</svg>

After

Width:  |  Height:  |  Size: 915 B

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#E10098;}
</style>
<g>
<path class="st0" d="M6.5,36.6l-1.8-1l19.6-34l1.8,1L6.5,36.6z"/>
<path class="st0" d="M4.4,32.8h39.3v2H4.4V32.8z"/>
<path class="st0" d="M24.8,45.3L5.1,34l1-1.8l19.6,11.3L24.8,45.3z M41.8,15.8L22.2,4.4l1-1.8L42.9,14L41.8,15.8z"/>
<path class="st0" d="M6.2,15.8l-1-1.8L24.8,2.7l1,1.8L6.2,15.8z"/>
<path class="st0" d="M41.5,36.6l-19.6-34l1.8-1l19.6,34L41.5,36.6z M5.9,12.7h2v22.7h-2V12.7z M40,12.7h2v22.7h-2V12.7z"/>
<path class="st0" d="M24.4,44.5l-0.9-1.5l17.1-9.9l0.9,1.5L24.4,44.5z"/>
<path class="st0" d="M44.8,36c-1.2,2-3.8,2.7-5.8,1.6c-2-1.2-2.7-3.8-1.6-5.8c1.2-2,3.8-2.7,5.8-1.6C45.3,31.3,46,34,44.8,36
M10.6,16.3c-1.2,2-3.8,2.7-5.8,1.6C2.7,16.7,2,14,3.2,12c1.2-2,3.8-2.7,5.8-1.6C11.1,11.6,11.8,14.2,10.6,16.3 M3.2,36
c-1.2-2-0.5-4.7,1.6-5.8c2-1.2,4.7-0.5,5.8,1.6c1.2,2,0.5,4.7-1.6,5.8C7,38.7,4.4,38,3.2,36 M37.4,16.3c-1.2-2-0.5-4.7,1.6-5.8
c2-1.2,4.7-0.5,5.8,1.6c1.2,2,0.5,4.7-1.6,5.8C41.2,19,38.6,18.3,37.4,16.3 M24,48c-2.4,0-4.3-1.9-4.3-4.3c0-2.4,1.9-4.3,4.3-4.3
s4.3,1.9,4.3,4.3c0,0,0,0,0,0C28.3,46.1,26.4,48,24,48 M24,8.6c-2.4,0-4.3-1.9-4.3-4.3c0,0,0,0,0,0C19.7,1.9,21.6,0,24,0
s4.3,1.9,4.3,4.3C28.3,6.6,26.4,8.6,24,8.6C24,8.6,24,8.6,24,8.6"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

@@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFF00;}
.st1{fill:#FFFFCC;}
.st2{fill:#CCCC00;}
</style>
<path class="st0" d="M17.7,13.9l-3.2,0.5l-2.9,1.3l-2.5,1.6l-2.4,2.9l-1.3,1.4L4.1,22l-0.3-0.8l0.6-0.9l0.1-1.2l0.4,0l0.4,0.4
l-0.1-1.2l-0.5-0.3l0-0.5l-1.1,0.6l-1,1.2l-0.2,1.1l0.4,0.9l0.4,1.5l0.8,0.4l0.9,0l0.8-0.5l-0.6,2.8l0.6,3.2l-0.6,1.5l-2,2.2
l0.4,1.3l1,1.5l1.8,1.3l1,0.1l1.1,0l-0.7,2.7l2.4,1l3,0.4l1-0.7l0.1-1.8l1.2-1.9l0.1-1.5l2.8,0.2l2.6-0.2l-2.6,1.6l0.4,1.9l1.6,2.6
l1.6,0.7l1.3-0.5l0.5-1l2.7-2l0.5,0.4l4.2,0.2l0.8-0.7l0.1-1.2l-0.3-0.5l-0.2-3.2l-1.4-2.8l0.2-1.2l0.8,0.4l2.4,2.2l1.2,0.1l1.3-0.5
l1.3-1l0.6-2.1l3.7,0.2l2.3-0.9l1.8-1.7l1.3-2.5l0.3-2.9l-0.3-3.4l-0.7-3l-0.7-1l-1-0.3l-1.8,1.9l-1.6,0.6l-1.4-2.3l-1.4-1.3
l-0.8-0.5l-3-2.5l-2.4-1.3l-2.4-0.2l-2.8,0.5l-2.5,0.9l-1.7,1.4l-1.4,1.6l-1.4,0.4L17.7,13.9"/>
<path class="st1" d="M8.4,21.1c-2.7,3.2-2.1,7.1-1.4,10.8c-0.4-1-0.8-2-1.2-3.1L5.4,26c0-1,0.1-1.9,0.1-2.9l1.1-2.7l1.7-2.6l2.7-2.2
l2.9-1.2l3.4-0.4l-3.2,3.6C11.7,18.4,10.2,19,8.4,21.1"/>
<path class="st1" d="M21.3,11.4c-1.9,1.9-2.9,3.3-4.1,5.4c-0.9,1.6-1.8,3-2.7,4.6c-0.5,0.8-0.5,1.4-0.6,2.3l-1.3-1.6
c0.2-0.6,0.4-1.3,0.6-1.9l2.2-3.9l4.6-4.5C20.3,11.6,20.8,11.5,21.3,11.4 M30.7,6.8c-1.5,0.6-4,0.8-4.2,2.5
c-0.1,1.2,0.1,1.9,0.8,3.2c-1.8-1.9-2.3-1.6-5.9-1L23,9.3l2.7-1.7l3.4-0.8L30.7,6.8"/>
<path class="st2" d="M34.9,30.4c0.5,0.3,0.5,0.5,0.4,0.8c0.4-0.2,0.8-0.3,1.2-0.5l0.8-1l0.6-1.5l-0.7-0.6L33.9,28
c-0.1,0.2-0.2,0.4-0.2,0.7c0,0.3,0,0.6,0.1,0.9c0.1,0.2,0.2,0.4,0.3,0.5c0.2,0.1,0.3,0.2,0.5,0.2C34.6,30.4,34.8,30.4,34.9,30.4
M34.6,24.9c-1.6,0.5-1.6,0.6-2.1,2.2C33.1,26.1,33.6,25.6,34.6,24.9 M45.3,12.9c-0.3,0.1-0.6,0.2-0.7,0.5c-0.4,0.6-0.7,1-1.4,1.4
c-0.3,0.2-0.7,0.3-1,0.4c-0.3,0.1-0.5,0-0.7,0.2c0.1,0,0.3,0,0.4,0.1h0.9l1.2-0.7l0.7-0.7L45.3,12.9 M19.6,16.5
c-0.6,1.7-1.2,3.2-2.2,4.8c1.2-1.3,2-2.5,2.7-4c0.3-0.6,0.3-1.3,1.1-1c0,0.6,0.2,1.2,0.2,1.7c0.4-3,1.6-4.2,4.3-5.3L23.4,13
l-2.2,0.5L20.2,15L19.6,16.5 M24.8,16.4c0.6,2.7,1.4,5.4,1.8,8.2c0.2,1.8,0.3,2.7-0.6,4.2c-1-0.1-1.6,0-2.6,0.4
c-3.8,1.3-6,3.1-8.6-0.6l2.5,1.2c0.6-0.1,1.2-0.2,1.8-0.3c1-0.6,2.1-1.2,3.1-1.8l2.4-0.5l0.8-3.3l-0.6-4.4c0-0.7,0-1.4-0.1-2.1
C24.8,17.1,24.8,16.7,24.8,16.4 M31.5,33.4c-0.3,2.2,0.7,3.4,0.3,4c-0.1,0.2-0.3,0.5-0.5,0.6c-0.7,0.3-1.6-0.1-1.7,0.1h-2.2
l-0.9-0.4l1.4-1.6c0.4-1,0.9-1.9,1.3-2.9l0.9-2.9h0.4L31.5,33.4"/>
<path class="st2" d="M27.7,26.9c0.2,1,0.5,1.3,1,2.2c-0.3,1.6-0.8,3.5-1.4,4.9c-0.3,0.6-0.5,0.9-0.9,1.4c-0.8,0.8-1.5,1.5-2.4,2.1
c-0.6,0.5-1.1,0.2-1.8,0.1c-0.3,0.6-0.4,0.9-1,1.2c-0.9,0.5-1.8-0.5-2.5-1.1c0.5,0.8,1.1,1.7,1.6,2.5c0.4,0.3,0.7,0.7,1.1,1l0.9,0.1
l1.2-0.8c0.2-0.4,0.4-0.8,0.7-1.2c0.5-0.3,0.9-0.7,1.4-1c0.6-0.5,1.1-1,1.7-1.4l1.1-1.5l1-1.8c0.4-1.2,0.8-2.5,1.2-3.7
c0-0.5,0.1-0.9,0.1-1.4c-0.5-0.2-1-0.5-1.5-0.7C28.5,27.6,28.1,27.3,27.7,26.9 M15.4,34.1c1.7,0,3.6-0.1,5.1-0.8
c0.4-0.7,0.9-1.2,1.4-1.8c-0.5,0.9-0.7,1.5-0.8,2.5l-0.5,0.8c-1.3,0-2.6,0.1-3.9,0.1c-0.4,0-0.8-0.1-1.3-0.1c0,0-0.1-0.1-0.1-0.1
C15.4,34.4,15.4,34.2,15.4,34.1 M15.2,32.9L15,31.6c-0.3,1.8-0.2,3-1,4.6c-0.6,0.7-1.4,1.4-2.2,1.7c0.1,0.4,0.1,0.7,0.1,1
c-0.2,1.2-2.5,0.6-3.4,0.6l4.6,1.2l1-0.4c0.1-0.7,0.2-1.3,0.3-2l1-1.8l0.2-1.1L15.2,32.9 M12.6,22.8c0,0.9-0.1,1.2,0.3,2
c0.5,1,1.1,1.9,1.6,2.8l0.2-1.9C14,24.8,13.3,23.8,12.6,22.8 M5.6,29.3c-0.1,0.3-0.3,0.6-0.4,0.9c0.4,1.4,0.8,2.2,1.5,3.4
c-0.1,0.5-0.2,0.7-0.5,1.1c-0.7-0.1-1.3-0.1-2-0.1c0.8,0.6,1.5,1.2,2.3,1.8c0.4-0.1,0.8-0.1,1.1-0.2l1.1-1.1l-1.6-2.5
C6.6,31.5,6.1,30.4,5.6,29.3 M45.3,12.4c0.5,2.1,1.1,4,1,6.2c-0.1,2.6-0.6,6-3,7.5c-2.7,1.8-5.9,0.9-8.9,0.2l3.7,1.5
c1.1,0.1,2.3,0.1,3.4,0.2c0.8-0.2,1.6-0.5,2.3-0.7c0.6-0.5,1.2-1,1.8-1.5L47,23l0.5-3.3c-0.1-1.1-0.3-2.2-0.4-3.3l-0.8-3.2
C46,12.9,45.7,12.7,45.3,12.4 M4.5,18.7c-1.2,0.8-1.7,1.2-1.6,2.7l0.4,1.3l0.5,0.4l0.6,0.2L5.7,23c0.2-0.6,0.4-1.2,0.6-1.9l-1.7,0.8
H4.2c-0.1-0.2-0.3-0.4-0.4-0.7l0.5-0.8L4.6,19c0.1,0,0.2,0.1,0.4,0.1c0.1,0.1,0.3,0.2,0.4,0.3l-0.1-0.8L5,18.2
C4.9,18.1,4.8,18,4.7,18L4.5,18.7 M32.4,6.9c1.1,1,2.5,1.9,3.3,3.2c0.3,0.5,0.7,0.7,0,1.4c0.8-0.2,1.1-0.2,1.7-0.1
c1.1,0.1,2.2,1.7,2.2,2.9c0,0.1-0.3,0.3-1.2,0.6c0,0-0.5-0.1-0.5,0c0.1,0.2,0.2,0.3,0.4,0.4c0,0.3,0.1,0.7,0.3,1
c0.5,0,1.1,0,1.6,0.2c0.2,0.3,0.2,0.6,0.1,0.9l0.6-0.1c-0.1-0.5-0.1-0.9-0.2-1.4c0.2-0.3,0.4-0.6,0.5-0.9L40.5,13
c-0.5-0.5-1-1-1.5-1.4l-0.1,0c-0.6-0.3-1.1-0.7-1.7-1l-2.8-2.3L32.4,6.9 M34.2,15.3c-0.1,0.1-0.1,0.3-0.3,0.4
c0.5,0.4,0.7,0.7,0.8,1.3c-0.5,0.3-1,0.5-1.6,0.8l-1.3,1.3c-0.6-0.3-0.7-0.5-1-1.1C30.6,18,30.3,18.1,30,18c0.2,0,0.3,0,0.4-0.1
l0.8-0.9c0.5-0.4,1-0.7,1.5-1.1l1-0.3C33.9,15.5,34.1,15.4,34.2,15.3"/>
<path class="st2" d="M35.7,16.9c-1.6,0.9-3.2,1.8-4.1,3.5C31.6,18.2,33.7,17.3,35.7,16.9 M31.3,12.7c-1.2,0.8-2.1,2.5-2,4.2
c-0.4-1.4-0.3-2.8,1-3.7c0.2-0.1,0.4-0.2,0.6-0.3C31,12.7,31.1,12.7,31.3,12.7"/>
<path d="M47.7,16.6c-0.2-1.4-0.6-2.8-1.1-3.7c-0.1-0.1-0.2-0.2-0.3-0.4c-0.3-0.3-0.6-0.5-1-0.6c-0.4-0.1-0.8-0.2-1.2,0
c-0.1,0-0.2,0.1-0.2,0.2c-0.2,0.2-0.4,0.5-0.6,0.8c-0.2,0.3-0.4,0.6-0.7,0.8c-0.3,0.2-0.7,0.4-1,0.5c-0.1-0.4-0.3-0.7-0.5-1
c-0.2-0.4-0.5-0.7-0.8-1.1c-0.2-0.3-0.5-0.5-0.7-0.7c-0.3-0.2-0.5-0.4-0.8-0.5c-0.8-0.5-1.5-1.1-2.2-1.7c-0.3-0.3-0.6-0.6-1-0.8
c-1.7-1.4-3.3-2.1-4.9-2.2C29,6,27.2,6.5,25.1,7.3c-1,0.4-1.7,0.9-2.4,1.5c-0.6,0.6-1.1,1.2-1.7,2c-0.3,0-0.6,0.1-0.9,0.2
c-0.3,0.1-0.7,0.4-1.1,0.7c-0.3,0.2-0.6,0.5-0.8,0.8c-0.2,0.2-0.5,0.5-0.7,0.7c-1.9,0.3-3.4,0.6-4.8,1.2c-1.4,0.5-2.7,1.3-3.9,2.4
c-0.5,0.4-1,0.9-1.4,1.5c-0.4,0.5-0.7,1-1,1.6c-0.3,0.3-0.5,0.6-0.8,0.8c-0.3,0.2-0.6,0.4-0.9,0.6l0,0c-0.2,0.1-0.3,0.1-0.3,0.1
c0,0,0,0,0-0.1c0.5-0.4,0.5-1.1,0.6-1.7C5,19.7,5,19.8,5.1,19.9c0.1,0.1,0.1,0.2,0.2,0.3l0.3,0.4l0.1-0.5c0.1-0.4,0.2-1,0.1-1.4
c-0.1-0.3-0.2-0.6-0.5-0.8c0-0.1,0-0.1,0.1-0.2c0.1-0.2,0.2-0.4,0.2-0.6l0.1-0.4l-0.4,0.1c-0.5,0.1-1.7,0.7-2.5,1.6
c-0.3,0.3-0.6,0.7-0.7,1c-0.2,0.4-0.3,0.8-0.2,1.2c0.1,0.3,0.2,0.7,0.6,1c0.1,0.2,0.1,0.4,0.2,0.6c0.1,0.2,0.1,0.4,0.2,0.6
c0.2,0.5,0.6,0.8,1.1,0.9c0.4,0.1,0.7,0.1,1.1,0c-0.1,0.5-0.1,0.9-0.1,1.4c0,0.6,0,1.4,0.1,2.2c0,0.2,0,0.4,0.1,0.6
C5,28,5,28.2,5.1,28.4C5,28.6,4.9,28.8,4.9,29l-0.3,0.9l-0.7,0.7c-0.2,0.2-0.5,0.5-0.7,0.7c0,0-0.1,0.1-0.2,0.2
c-0.5,0.4-0.6,0.5-0.4,1.3c0.1,0.5,0.2,1,0.5,1.4c0.2,0.4,0.5,0.9,0.9,1.2c0.5,0.5,1.3,1.1,2.1,1.4c0.5,0.2,1,0.3,1.4,0.2
c0,0.1,0,0.1-0.1,0.2c-0.1,0.2-0.2,0.4-0.2,0.6c-0.6,1.2,0,1.9,0.9,2.3c0.5,0.2,1,0.3,1.5,0.5c0.1,0,0.2,0.1,0.3,0.1
c0.6,0.2,1.6,0.5,2.6,0.5c1,0.1,1.9-0.1,2.2-1.1c0.1-0.4,0.2-0.6,0.2-0.9c0-0.3,0-0.5,0-0.8c0.3-0.6,0.4-0.8,0.6-1.1
c0-0.1,0.1-0.1,0.1-0.2c0.2-0.3,0.3-0.6,0.4-0.9c0-0.3,0-0.5,0-0.9c0,0,0-0.1,0-0.2c0.6,0.1,1.2,0.1,1.8,0.1c0.3,0,0.6,0,0.9,0
c-0.1,0-0.2,0.1-0.2,0.1l-0.1,0.1c-0.8,0.4-0.8,1.2-0.6,2c0.2,0.7,0.7,1.4,1,1.9c0.6,0.9,1.2,1.7,1.9,2.2c0.7,0.5,1.6,0.5,2.7-0.1
c0.6-0.3,0.7-0.6,1-1c0.1-0.1,0.2-0.3,0.2-0.4c0.2-0.2,0.8-0.6,1.4-1.1c0.2-0.2,0.4-0.3,0.6-0.5c0.1,0.1,0.3,0.2,0.5,0.2
c0.3,0.1,0.6,0.1,1,0.1c0.3,0,1.3,0,1.9,0c0.2,0,0.4,0,0.5,0c0.6,0,1.2,0,1.6-0.3c0.4-0.2,0.7-0.7,0.7-1.4c0-0.3,0-0.5,0-0.8
c0-0.2-0.1-0.4-0.3-0.6c0-0.3,0-0.7,0-1c0-0.3,0-0.7,0-1c0-0.4-0.1-0.7-0.1-1.1c-0.1-0.3-0.2-0.6-0.4-1c-0.1-0.2-0.2-0.5-0.3-0.7
l-0.2,0.1l0,0l0.2-0.1v0c-0.1-0.4-0.3-0.7-0.5-1.1c0-0.1,0-0.2,0-0.2l0.4,0.3l0.5,0.5c0.4,0.4,0.8,0.7,1.2,1c0.5,0.3,1,0.4,1.6,0.4
c0.7,0,1.4-0.3,2-0.8c0.6-0.4,1.1-1,1.3-1.7l0.2-0.6l0.1-0.4c1,0.2,2,0.2,3,0.1c1-0.1,1.9-0.3,2.7-0.8c1.2-0.6,2.1-1.6,2.7-2.7h0
c0.7-1.2,1.1-2.7,1.3-4.2C48.1,19.8,48,18.1,47.7,16.6z M35.2,26.6c-0.6-0.2-0.9-0.5-1.4-0.8c0.1,0.6,0.2,1.2,0,1.8
c-0.3,0.9-0.7,2.5,0.6,2.8c0.5,0.1,0.7,0.1,1.4-0.3c-0.6,0.1-0.8,0.1-1.2,0c-0.3-0.1-0.5-0.3-0.6-0.5c0.1,0.1,0.3,0.1,0.7,0.2
c1,0.2,1.9-0.2,2-0.9c0.1-0.4,0.1-0.6,0.3-1.1c0.2,0.1,0.4,0.1,0.6,0.2l-0.4,1.2c-0.3,1-1.5,1.8-2.6,1.8c-1,0-1.6-0.6-2.3-1.2
c-0.5-0.4-0.9-0.8-1.4-1.2c-1.2-0.4-2.2-0.8-3.3-1.7c0.8,0.9,1.3,1.5,2.5,1.9c-0.2,1.7-0.7,2.9-1.2,4.5c-0.2,0.7-2,3.6-2.5,3.9
c-0.3,0.2-2.5,2-2.9,2.3c-0.3,0.4-0.6,1-1,1.2c-1.4,0.7-2.3-0.7-3-1.9c-0.3-0.5-1.3-2.1-0.5-2.5c0.8-0.4,1.2-0.7,2-1.2
c0.1,0.2,0.3,0.4,0.4,0.6l-0.1-0.7c-0.1-0.4-0.1-0.8,0-1.2c0-0.4,0.1-0.8,0.1-1.2c-0.1,0.4-0.4,0.8-0.5,1.3c0,0.2-0.1,0.3-0.1,0.4
c-1.8,0.4-3.6,0.4-5.4,0.1c-0.1-0.7-0.3-1.4-0.4-1.9c0,0.6,0,2.1,0,3c0,0.7,0,0.9-0.4,1.5c-0.3,0.5-0.5,0.7-0.9,1.5
c0,0.6,0,0.9-0.1,1.5c-0.2,0.9-2.8,0.2-3.4,0c-0.8-0.2-2.5-0.6-2.1-1.6c0.4-1,0.6-2,0.8-3.3c-1.5-2.2-2.9-5.1-3.2-7.7
c-0.2-2-0.1-3.3,0.4-4.5c0.7-2,1.7-3.7,3.2-5.1c2.1-1.9,4.1-2.6,7.2-3.1c-0.7,0.8-1.5,1.7-2.3,2.7c-0.8,1-1.3,1.9-1.8,3
c-0.7,1.4-0.7,2,0.2,3.3c0.8,1.1,1.3,1.6,1.6,2.7c-0.3,0.6-0.4,1.1-0.5,1.9c1,1.1,1.7,1.8,2.7,2.1c0.9,0.2,1.7,0.2,2.6-0.3
c1.9-1,3.6-2.2,5.8-2.3c1-2.4,0.9-4.4,0.4-6.8c-0.3-1.6-0.5-3.1-0.6-4.7c-0.4,1.7-0.5,3.2-0.2,4.8c0.4,2,0.6,4.2-0.4,6
c-1.9,0.1-3.6,1.3-5.3,2.2c-0.7,0.4-1.4,0.4-2.2,0.2c-0.7-0.2-1.2-0.7-2-1.6c0-0.9,0.2-1.3,0.6-2.1c0.7-1.3,1.4-2.5,2.2-3.8
c-1,1.2-1.9,2.2-2.7,3.4c-0.3-0.8-0.7-1.3-1.4-2.2c-0.7-0.9-0.8-1.3-0.2-2.4c0.5-1.1,0.9-2,1.8-3c1.5-1.6,2.9-3.4,4.5-5
c0.9-0.9,1.3-0.8,2.4-1c1.1-0.2,2.1-0.4,3.2-0.6c-1.1,0.1-2.1,0.1-3.1,0.2l0,0c1-1.3,1.6-2,3.2-2.7c4-1.8,6.6-1.9,9.8,0.7
c0.8,0.7,1.5,1.4,2.4,2c-0.3,0-0.6,0.1-0.9,0.2c0.4-0.1,0.9,0,1.3,0.1c0.1,0.1,0.2,0.2,0.4,0.2c0.6,0.3,0.9,0.5,1.3,1.1
c0.4,0.6,0.8,1.2,1.1,1.8c-0.2-0.1-0.4-0.1-0.5-0.2c-0.3-0.2-0.7-0.1-1.1,0.1l0,0c-0.3,0.2-0.8,0.3-1.2,0.4c0.2,0.1,0.6,0.1,0.7,0
c0,0,0,0,0.1,0c-0.1,0.1-0.1,0.3-0.2,0.5c0,0.2,0,0.4,0.1,0.6l0,0c0,0.1,0.1,0.1,0.1,0.2c-0.2,0.1-0.3,0.1-0.5,0.2
c0.8-0.1,1.4-0.1,2.2,0c0,0.2,0.1,0.5,0.1,0.7l-0.3,0c0,0,0,0,0,0c-0.3-0.3-0.7-0.2-1.3-0.1c-1.6,0.4-1.2,1.3-2,2.6
c0.8-0.9,0.7-1.9,2-2.2c0.3-0.1,0.5-0.2,0.7-0.1c-0.4,0.2-0.7,0.5-0.8,0.8c-0.3,1-0.1,1.8-0.5,2.7c0.5-0.8,0.5-1.6,0.9-2.5
c0.2-0.3,0.7-0.8,1.1-0.8l0.3,0c0.1,0.5,0.1,1.1,0.1,1.5c-0.1,0.8-0.3,2-0.4,2.5c0.4-0.5,0.6-1.7,0.8-2.5c0.2-0.8,0.1-1.9,0-2.8
c-0.2-1.2,1.1-1,1.8-1.6c0.5-0.4,0.9-1.1,1.4-1.6c0.5-0.5,1.3,0.2,1.5,0.7c0.9,2.1,1.2,5.3,1,7.4c-0.3,2.3-1.4,4.9-3.4,6
C40.9,28.4,37.8,27.5,35.2,26.6L35.2,26.6z M31.5,37c-0.1,1-0.4,1-1.3,1c-0.4,0-1.9,0-2.3,0c-0.5,0-0.9-0.1-1-0.2
c0.9-0.6,2.3-3.2,2.6-4.1c0.3-0.9,0.6-1.8,0.9-2.7c0.1,0.4,0.2,0.7,0.4,1.1c0.3,0.7,0.4,1.1,0.4,1.7l0.1,2.2
C31.5,36.4,31.6,36.5,31.5,37L31.5,37z M5.6,29.7c0.5,1.9,1.5,3.7,2.5,5.3v0c-0.1,0.3-0.1,0.5-0.3,0.7c-0.7,1-2.6-0.5-3.2-1
c-0.6-0.6-1-1.3-1.1-2c-0.1-0.5,0-0.5,0.3-0.9l1.4-1.4C5.3,30.5,5.6,29.7,5.6,29.7z M4.6,17.8c-0.1,0.3-0.2,0.5-0.3,0.8
c-0.3,1,0.1,1.9-0.8,2.7c0.4,0.9,0.4,1.2,1.4,0.8c0.4-0.2,0.7-0.4,1-0.6c-0.1,0.4-0.3,0.7-0.4,1.1c0,0.1,0,0.1-0.1,0.2
c-0.7,0.3-1.7,0.5-2-0.3c-0.2-0.4-0.3-0.7-0.4-1.2C1.8,20,3.6,18.4,4.6,17.8z M5.2,19.1C5,19,4.9,18.9,4.7,18.9c0-0.1,0-0.2,0.1-0.4
c0-0.1,0-0.1,0-0.2C5.1,18.5,5.1,18.8,5.2,19.1L5.2,19.1z M40.8,14.5c0,0.1,0.1,0.2,0.1,0.3c0,0-0.1,0.1-0.1,0.1
c-0.1-0.1-0.1-0.3-0.2-0.4C40.6,14.5,40.7,14.5,40.8,14.5L40.8,14.5z M6.5,20.1L6.5,20.1L6.5,20.1L6.5,20.1z M15.6,35L15.6,35
L15.6,35z M26.3,38.2L26.3,38.2L26.3,38.2z M30.7,29.9L30.7,29.9L30.7,29.9L30.7,29.9z M4.7,21.6L4.7,21.6L4.7,21.6L4.7,21.6
L4.7,21.6z M46.5,25L46.5,25L46.5,25z M0.5,21.3c0.2-2.1,0.6-3.1,2.1-4.7C0.7,17.9,0.3,18.6,0.5,21.3"/>
<path d="M0,19.5c0.2-1,0.4-1.3,1-2.1C0.1,18.1-0.1,18.4,0,19.5 M22.4,6.1c-1.1,0.3-1.4,0.5-1.7,1.6C21.2,6.9,21.5,6.6,22.4,6.1"/>
<path d="M24.2,5.9c-2.3,0.6-2.9,1-3.7,3.6C21.5,7.6,22.2,6.9,24.2,5.9 M29.1,15.5c0.2-1.1,0.7-2.1,2.3-2.9
C29.2,13.2,28.8,14.1,29.1,15.5 M43.1,15.6c1.3-0.5,1.9-1.5,2.2-2.7c-0.5,1-1.3,1.9-2.4,2.4c-0.6,0.3-0.9,0.2-1.6,0.1
C42,15.6,42.4,15.8,43.1,15.6 M34.2,16.6c-0.2-0.4-0.5-0.6-0.8-0.8c0.3-0.2,0.6-0.4,0.9-0.6c-0.7,0.3-1.6,0.3-2.2,0.7
c-0.5,0.4-1.3,1.5-1.8,2c0.4-0.2,0.8-0.4,1.1-0.7c0,0.5,0.3,1,0.8,1.3c-0.2,0.3-0.4,0.6-0.5,0.9c1-1.2,2.6-2.2,4-2.6
c-0.4,0-0.9,0.1-1.4,0.2C34.3,16.9,34.3,16.8,34.2,16.6 M32.7,26c-0.1,0.3-0.1,0.7-0.2,1c0.1-0.4,0.3-0.8,0.5-1.1
c0.2-0.4,0.3-0.4,0.6-0.6c0.3-0.1,0.7-0.3,1-0.5c-0.3,0-0.7,0.1-1,0.2C32.9,25.2,32.8,25.4,32.7,26 M20.8,13.6
c-0.8,0.8-1.6,3.5-1.8,4.6c0.4-0.9,1.4-3.5,2.1-4.1c0.2-0.2,0.4-0.3,0.5-0.4c-0.5,0.9-0.5,1.1-0.3,2.4c0.2-1.2,0.6-1.7,1.3-2.6
c0.8-0.2,1.5-0.4,2.3-0.7c-0.9,0.1-1.8,0.2-2.7,0.3C21.5,13.1,21.3,13.1,20.8,13.6"/>
<path class="st1" d="M31.8,18.3c-0.1-0.3,0-0.7,0.3-0.8c0.3-0.1,0.7,0,0.8,0.3c0,0,0,0.1,0,0.1c-0.3,0.2-0.6,0.5-0.8,0.8
C32,18.5,31.9,18.4,31.8,18.3 M38.7,15.6c0-0.3,0.2-0.4,0.5-0.4c0.3,0,0.4,0.3,0.4,0.5c0,0.1,0,0.1,0,0.2c-0.2,0-0.5,0.1-0.7,0.2
C38.8,15.9,38.7,15.7,38.7,15.6"/>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 20 KiB

@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><path fill="#DF234F" d="M75.4.3c-.9 0-1.8.2-2.6.5 1.7 1.1 2.6 2.6 3.1 4.3 0 .2.1.4.1.6 0 .2.1.4.1.6.1 2.9-.8 3.3-1.4 5-1 2.2-.7 4.6.5 6.5.1.2.2.5.4.7-1.3-8.4 5.7-9.6 7-12.2.1-2.3-1.8-3.8-3.3-4.9C77.8.5 76.6.3 75.4.3zm10.5 1.8c-.1.8 0 .6-.1 1 0 .3 0 .6-.1.9-.1.3-.1.5-.2.8-.1.3-.2.5-.3.8-.1.2-.2.4-.3.7-.1.1-.2.3-.3.4-.1.1-.1.2-.2.3-.2.2-.3.5-.5.7l-.6.6c-.2.2-.4.4-.6.5-.7.5-1.5.9-2.2 1.4-.2.2-.5.3-.7.5-.2.2-.4.3-.6.5l-.6.6c-.2.2-.4.4-.5.7-.2.2-.3.5-.5.7-.1.3-.2.5-.4.8-.1.3-.2.5-.3.8-.1.3-.2.6-.2.8 0 .1 0 .3-.1.4 0 .1 0 .3-.1.4v1.4c0 .3 0 .5.1.8 0 .3.1.5.2.8.1.3.2.5.3.8.1.2.2.3.2.5l-7.6-2.9c-1.3-.4-2.5-.7-3.8-1-.7-.2-1.4-.3-2.1-.5-2-.4-4-.7-6-.9h-.2c-2-.2-3.9-.3-5.9-.3-1.5 0-2.9.1-4.3.2-2 .1-4 .4-6 .7l-1.5.3c-1 .2-2 .4-3 .7-.5.1-1 .3-1.5.4-.5.2-1 .4-1.4.6-.4.2-.7.3-1.1.5-.1 0-.1 0-.2.1-.3.2-.6.3-.9.5-.1 0-.2.1-.2.1-.4.2-.7.4-1 .5-.2.1-.5.2-.7.3-.1.1-.2.1-.3.2-.3.2-.6.3-.9.5-.3.2-.6.3-.8.5-.2.2-.5.3-.7.5 0 0-.1 0-.1.1-.2.1-.4.3-.6.5l-.1.1c-.2.1-.3.3-.5.4-.1 0-.1.1-.2.1-.2.1-.3.3-.5.4 0 .1-.1.1-.1.1l-.6.6-.1.1-.6.6s0 .1-.1.1l-.5.5c-.1.1-.2.1-.2.2l-.6.6c0 .1-.1.1-.1.2l-.8.8-.1.1c-.5.6-1.1 1.1-1.7 1.6-.6.5-1.2 1-1.9 1.5s-1.3.9-2 1.3-1.4.7-2.1 1c-.7.3-1.4.6-2.1.8-1.4.3-2.8.9-4 1 0-.5-.3-.4-.6-.4-.3.1-.6.1-.8.2-.3.1-.5.2-.8.3-.3.1-.5.2-.8.4-.2.2-.5.3-.7.5-.2.2-.5.4-.7.6-.2.2-.5.4-.7.6-.2.2-.4.4-.6.7-.2.3-.4.5-.5.8-.2.2-.3.5-.5.8-.1.3-.3.6-.4.9l-.3.9c-.1.3-.1.5-.2.8v.1c-.1.3-.1.7-.1.9.1-.1.1.1.1.3v.4c0 .2.1.4.1.6.1.2.1.4.2.6.1.2.2.4.4.6.1.2.3.4.4.6.2.2.4.4.6.5.2.2.4.4.6.5.8.7 1 .9 2 1.5.2.1.3.2.5.3h.1v.2c0 .3.1.5.2.8.1.3.2.6.3.8l.3.6c0 .1.1.1.1.2.1.3.3.5.4.7.2.2.3.5.5.7l.6.6.6.6H8c.2.2.4.3.6.5.2.2.5.3.7.4.2.1.5.3.8.4.2.1.4.2.7.2 0 0 .1 0 .1.1.1 0 .3.1.4.1-.1 1.8-.1 3.5.1 4.1.3.7 1.8-1.4 3.2-3.7-.2 2.3-.3 5 0 5.8.4.8 2.3-1.8 4.1-4.6 23.4-5.4 44.8 10.8 47.1 33.7-.4-3.6-4.8-5.6-6.9-5.1-1 2.4-2.7 5.6-5.4 7.5.2-2.2.1-4.4-.3-6.6-.7 3-2.1 5.9-4.1 8.3-3.1.2-6.3-1.3-7.9-3.6-.1-.1-.2-.3-.3-.4-.1-.2-.2-.5-.3-.7-.1-.2-.2-.5-.2-.7v-.7-.5c0-.2.1-.5.2-.7.1-.2.1-.5.2-.7.1-.2.2-.5.4-.7.6-1.6.6-2.9-.5-3.6l-.6-.3c-.1 0-.3-.1-.4-.1-.1 0-.2-.1-.3-.1-.2-.1-.5-.1-.7-.2-.2-.1-.5-.1-.7-.1-.2 0-.5-.1-.7-.1h-.5c-.3 0-.5 0-.7.1-.2 0-.5.1-.7.1-.2.1-.5.1-.7.2-.2.1-.4.2-.7.3l-.6.3c-7.7 5-3.1 16.8 2.1 20.2-2 .4-4 .8-4.6 1.2l-.1.1c1.4.9 2.9 1.6 4.5 2.2 2.1.7 4.4 1.3 5.4 1.6 2.7.6 5.5.8 8.3.6 14.6-1 26.6-12.2 28.8-26.8.1.3.1.6.2.9.1.6.2 1.2.3 1.9.1.3.1.6.1.9v.1c0 .3.1.6.1.9 0 .4.1.7.1 1.1V91.6c0 .3-.1.5-.1.8v.3c0 .3-.1.6-.1 1-.1.3-.1.6-.2.9v.1c-.1.3-.1.6-.2.9v.1c-.1.3-.1.6-.2.9v.1l-.3.9v.1c-.1.3-.2.7-.3 1-.1.3-.2.6-.4 1-.1.3-.2.7-.4 1-.1.3-.3.6-.4 1-.1.3-.3.6-.4.9 0 .1-.1.2-.1.2s0 .1-.1.1c-2.1 4.3-5.3 8.1-9.3 11.1-.3.2-.5.4-.8.6-.1.1-.2.1-.2.2-.2.2-.5.3-.7.5l.1.2c.5-.1.9-.1 1.4-.2.9-.1 1.7-.3 2.6-.5.2 0 .5-.1.7-.2.2 0 .3-.1.5-.1s.5-.1.7-.1c.2-.1.4-.1.6-.2 3.3-.8 6.5-1.9 9.6-3.2-5.3 7.2-12.3 13-20.5 16.8 3.8-.3 7.6-.9 11.3-2 13.3-3.9 24.5-12.9 31.2-25-1.4 7.6-4.4 14.9-8.9 21.3 3.2-2.1 6.1-4.6 8.8-7.3 7.4-7.7 12.3-17.6 13.9-28.1 1.1 5.2 1.5 10.6 1 15.9 23.9-33.3 2-67.8-7.2-76.9 0-.1-.1-.1-.1-.2v0c0 .4 0 .8-.1 1.2-.1.8-.2 1.5-.3 2.2-.2.7-.4 1.5-.6 2.2-.2.7-.5 1.4-.8 2.1-.3.7-.6 1.4-1 2-.4.6-.8 1.3-1.2 1.9-.4.6-.9 1.2-1.4 1.8-.5.6-1 1.1-1.6 1.7-.3.3-.6.6-1 .8-.3.2-.5.4-.8.7-.6.5-1.2.9-1.9 1.3-.6.4-1.3.8-2 1.1l-2.1.9c-.7.3-1.4.5-2.1.7-.7.2-1.5.4-2.2.5-.8.1-1.5.2-2.2.3-.5 0-1.1.1-1.6.1-.8 0-1.5-.1-2.2-.1-.8-.1-1.5-.2-2.2-.3-.8-.1-1.5-.3-2.2-.6.7-.1 1.5-.1 2.2-.3.8-.1 1.5-.3 2.2-.5.7-.2 1.5-.4 2.1-.7l2.1-.9c.7-.3 1.3-.7 2-1.1.6-.4 1.3-.9 1.9-1.3.6-.5 1.2-1 1.7-1.5.6-.5 1.1-1.1 1.6-1.6.5-.6 1-1.2 1.4-1.8.1-.1.1-.2.2-.3.3-.5.7-1.1 1-1.6.4-.7.7-1.3 1-2 .3-.7.6-1.4.8-2.1l.6-2.1c.1-.8.3-1.5.3-2.2.1-.8.1-1.5.1-2.2 0-.5 0-1.1-.1-1.6-.1-.8-.2-1.5-.3-2.2-.1-.8-.3-1.5-.5-2.2-.2-.7-.5-1.4-.7-2.1-.3-.7-.6-1.4-.9-2-.4-.7-.7-1.3-1.1-2-.4-.6-.9-1.2-1.3-1.8-.5-.6-1-1.1-1.5-1.7-.3-.3-.6-.6-.9-.8-1.5-1.2-3-2.2-4.6-3.2-.2-.1-.4-.2-.7-.3-1.3-1.1-2.3-1.4-3.3-1.8z"/></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#009438;}
.st1{fill:#FEFEFE;}
</style>
<path class="st0" d="M3,24V12.6c0-0.4,0.2-0.8,0.6-1L23.3,0.2c0.4-0.2,0.8-0.3,1.1,0l19.8,11.5c0.3,0.2,0.6,0.6,0.5,1v22.9
c0,0.4-0.2,0.8-0.5,1l-17.1,9.9c-0.9,0.5-1.8,1.1-2.7,1.6c-0.4,0.2-0.8,0.2-1.2,0L3.5,36.4C3.2,36.2,3,35.9,3,35.5V24L3,24z"/>
<path class="st1" d="M17.2,19.8v13.4c0,1.5-1.2,2.8-2.8,2.8c-1,0-1.7-0.4-2.2-1.3c-0.3-0.4-0.4-0.8-0.4-1.3V14.8
c0-1.2,0.8-2.1,1.7-2.5s2-0.3,2.9,0c0.9,0.3,1.6,0.8,2.2,1.6L30.5,28c0,0,0.1,0.1,0.2,0.2V14.7c0-1.4,1-2.5,2.4-2.7
c1.7-0.2,2.9,1,3.1,2.3v18.9c0,1.1-0.5,1.8-1.4,2.3c-0.7,0.4-1.4,0.4-2.1,0.4c-1.1-0.1-2.1-0.5-2.9-1.2c-0.4-0.4-0.8-0.9-1.2-1.3
L17.2,19.9C17.2,19.9,17.2,19.8,17.2,19.8L17.2,19.8z"/>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill:#539E43;}
</style>
<g>
<path class="st0" d="M24,47.9c-0.7,0-1.3-0.2-1.8-0.5l-5.9-3.5c-0.9-0.5-0.4-0.7-0.2-0.7c1.2-0.4,1.4-0.5,2.6-1.2
c0.1-0.1,0.3,0,0.4,0l4.5,2.7c0.2,0.1,0.4,0.1,0.5,0l17.6-10.2c0.2-0.1,0.3-0.3,0.3-0.5V13.8c0-0.2-0.1-0.4-0.3-0.5L24.2,3.2
c-0.2-0.1-0.4-0.1-0.5,0L6.1,13.3c-0.2,0.1-0.3,0.3-0.3,0.5v20.3c0,0.2,0.1,0.4,0.3,0.5l4.8,2.8c2.6,1.3,4.2-0.2,4.2-1.8v-20
c0-0.3,0.2-0.5,0.5-0.5h2.2c0.3,0,0.5,0.2,0.5,0.5v20c0,3.5-1.9,5.5-5.2,5.5c-1,0-1.8,0-4-1.1l-4.6-2.6c-1.1-0.7-1.8-1.9-1.8-3.2
V13.8c0-1.3,0.7-2.6,1.8-3.2L22.2,0.5c1.1-0.6,2.6-0.6,3.7,0l17.6,10.2c1.1,0.7,1.8,1.9,1.8,3.2v20.3c0,1.3-0.7,2.6-1.8,3.2
L25.8,47.5C25.3,47.8,24.6,47.9,24,47.9L24,47.9z M29.4,34c-7.7,0-9.3-3.5-9.3-6.5c0-0.3,0.2-0.5,0.5-0.5h2.3
c0.3,0,0.5,0.2,0.5,0.4c0.4,2.3,1.4,3.5,6,3.5c3.7,0,5.3-0.8,5.3-2.8c0-1.1-0.4-2-6.2-2.6c-4.8-0.5-7.8-1.5-7.8-5.4
c0-3.6,3-5.7,8-5.7c5.6,0,8.4,1.9,8.8,6.2c0,0.1,0,0.3-0.1,0.4c-0.1,0.1-0.2,0.2-0.4,0.2h-2.3c-0.2,0-0.4-0.2-0.5-0.4
c-0.5-2.4-1.9-3.2-5.5-3.2c-4,0-4.5,1.4-4.5,2.5c0,1.3,0.6,1.7,6,2.4c5.4,0.7,8,1.7,8,5.5C38.2,31.8,35,34,29.4,34L29.4,34z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 24.3.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 48 48" style="enable-background:new 0 0 48 48;" xml:space="preserve">
<style type="text/css">
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#B1DB9E;stroke:#B1DB9E;stroke-width:0.5;stroke-linecap:round;}
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#85CB65;stroke:#85CB65;stroke-width:0.5;stroke-linecap:round;}
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:#75B35B;stroke:#75B35B;stroke-width:0.5;stroke-linecap:round;}
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#6FB950;stroke:#6FB950;stroke-width:0.5;stroke-linecap:round;}
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:#6FB850;stroke:#6FB850;stroke-width:0.5;stroke-linecap:round;}
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:#77C656;stroke:#77C656;stroke-width:0.5;stroke-linecap:round;}
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
</style>
<symbol id="A" viewBox="-45.2 -46.2 90.5 92.5">
<g>
<path class="st0" d="M-40.4-0.6c12.6,0.3,17,0.9,26.3,1.8C-9,11.6-9.2,9.4-7,21.7c-8.3-9.5-20.9-19.5-33.8-22.3"/>
<path class="st1" d="M-39-46c11.1,5.7,38.8,24.2,46.4,27.9c4-1,9.8-3.6,17.8-0.5C16.3-17.6,8.7-7.7-0.2-0.9
c-8-20.3-21.4-32-27.2-38.3"/>
<path class="st2" d="M-44.8-19.4c15.4,3.1,20.6,4.9,31.7,8C-6,3.5-8,10.5-9.5,19.9C-16.7,2.7-29.8-13.2-45-19.4"/>
<path class="st3" d="M-38.8-45.9c8.9,5.2,20.7,21,25.6,34c1.8,5.2,4.5,17.7,3.6,31.8C-8,28.7,3.4,54.3,28.8,43.3
c-12.9,0-19.2-4.9-25.9-15.9C2.5,27.2-3.8,8.9-0.2-0.9C-8.7-29.1-32.1-42.9-39-46"/>
<path class="st0" d="M24.3,36.6c10.3,0,18.5-7,20.5-18.2c0.1-0.7,1.6,8.3-8.2,19.3c-0.7,0.7-6.7,1.6-12.1-1"/>
</g>
<g>
<path class="st4" d="M31.5-3c2.2,1.6,3.6,2.9,4.9,4.4c1.3,1-0.9-3.6-1.3-4.2c0.7-3.4-1.4-8.5-1.7-8.6c-1.6-1.6-30,9.4-20.2,35.4
C12.3,2.2,22.5-2,31.5-3L31.5-3z"/>
<path class="st5" d="M28.8,43.3c3.1-1.3,5.1-3.6,7.8-5.7c0.1-0.1-18.1,2.5-23.4-13.7c-1.8-2.9-8.3-26.7,20.1-35.5
c-1.3-2.9-6.7-6.6-8.1-7.1c-8.9,1-19,6.1-25.2,17.2C-5,7.5-2.4,45.1,28.8,43.3L28.8,43.3z"/>
</g>
<ellipse class="st6" cx="31" cy="-8.8" rx="1.3" ry="1.6"/>
</symbol>
<use xlink:href="#A" width="90.5" height="92.5" x="-45.2" y="-46.2" transform="matrix(0.5162 0 0 0.5162 24.004 24.0041)" style="overflow:visible;"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

Some files were not shown because too many files have changed in this diff Show More