From cd4749714fe1f13c291d9b284975310ccee700b0 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sun, 6 Aug 2023 19:06:01 +0530 Subject: [PATCH 01/79] created new file and added basic content --- pages/financialSummary.js | 62 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 pages/financialSummary.js diff --git a/pages/financialSummary.js b/pages/financialSummary.js new file mode 100644 index 000000000000..8c52303f6040 --- /dev/null +++ b/pages/financialSummary.js @@ -0,0 +1,62 @@ +import GenericLayout from "../components/layout/GenericLayout" +import Heading from "../components/typography/Heading" +import Container from '../components/layout/Container' +import Paragraph from '../components/typography/Paragraph' +import Button from '../components/buttons/Button' + +function AsyncAPISummary() { + return ( + +
+
+ AsyncAPI Finance Summary + + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for + the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub + Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, + while Linux Foundation Crowdfunding operates separately. + +
+
+
+
+
+
+ Ways to Support Us? +
+
+ + The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, + they may involve greater effort. Contribute
monetarily using the following channels. +
+
+
+ ); + } + + + +function FinancialSummary() { + const title="AsyncAPI Finance Summary"; + const description = "Financial Summary of AsyncAPI"; + const image = "/"; + return ( + + + + + + + ) +} + +export default FinancialSummary From cbb9d71b318757a1847d3949cacf8f50404677df Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sun, 6 Aug 2023 23:53:11 +0530 Subject: [PATCH 02/79] completed till other forms of support --- pages/financialSummary.js | 109 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 3 deletions(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 8c52303f6040..564491439c7d 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -34,11 +34,112 @@ function AsyncAPISummary() { they may involve greater effort. Contribute
monetarily using the following channels. + {/* images are remaining to add*/} ); - } - - +} + +function SponsorshipTiers() { + return ( + +
+
+ Sponsorship Tiers + + AsyncAPI offers various sponsorship tiers, each with its own set + of benefits and privileges. These tiers include Bronze, Silver, + Gold, and Platinum. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 + hours of support per month. Support will be remote with the + option of a shared screen or via private chat. Support hours do not + accumulate.
+
+
+
+ ); +} + +function OtherFormsOfFinancialSupport() { + return ( + +
+
+ Image 1 + Image 2 + Image 3 +
+ + +
+
+ Other forms of financial support +
+ +
+ Employee involvement + + Assign your employees to contribute to projects under the AsyncAPI Initiative + on a regular basis, and we'll welcome them as new maintainers. You can + also provide direct assistance to a member of the Technical Steering Committee + (TSC) through contracts or employment for specific tasks. + +
+ +
+ Event organization + + Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI + brand at your provided venue. + +
+ +
+ Service provision + + AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your + organization can provide services such as hosting or storage to support our efforts. + +
+
+
+
+ ); +} + + + + function FinancialSummary() { const title="AsyncAPI Finance Summary"; @@ -53,6 +154,8 @@ function FinancialSummary() { > + + From 997f6b79a6c8e865b7f3c74f14d58dac373b8060 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 7 Aug 2023 00:09:44 +0530 Subject: [PATCH 03/79] improved table design --- pages/financialSummary.js | 57 ++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 564491439c7d..5b4d203476ec 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -40,44 +40,45 @@ function AsyncAPISummary() { } function SponsorshipTiers() { - return ( - -
-
- Sponsorship Tiers - - AsyncAPI offers various sponsorship tiers, each with its own set - of benefits and privileges. These tiers include Bronze, Silver, - Gold, and Platinum. - + return ( + +
+
+ Sponsorship Tiers + + AsyncAPI offers various sponsorship tiers, each with its own set + of benefits and privileges. These tiers include Bronze, Silver, + Gold, and Platinum. + +
- - - + + + - - - + + + - - - + + + - - - + + + - - - + + @@ -86,10 +87,12 @@ function SponsorshipTiers() {
TiersBenefitsAmountsTiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHubBronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.comSilver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.comGold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 + Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 hours of support per month. Support will be remote with the option of a shared screen or via private chat. Support hours do not accumulate.
- - ); +
+
+ ); } + function OtherFormsOfFinancialSupport() { return ( From ddc4ff92746876c6f9ef86380a5f293e572ee5b7 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 7 Aug 2023 17:18:00 +0530 Subject: [PATCH 04/79] made design more responsive --- pages/financialSummary.js | 181 ++++++++++++++++++++++---------------- 1 file changed, 103 insertions(+), 78 deletions(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 5b4d203476ec..3ac800b61b5c 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -5,38 +5,42 @@ import Paragraph from '../components/typography/Paragraph' import Button from '../components/buttons/Button' function AsyncAPISummary() { - return ( - -
-
- AsyncAPI Finance Summary - - To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for - the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub + return ( + +
+
+ AsyncAPI Finance Summary + + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for + the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, - while Linux Foundation Crowdfunding operates separately. - -
-
-
-
-
-
- Ways to Support Us? -
-
- - The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, - they may involve greater effort. Contribute
monetarily using the following channels. + while Linux Foundation Crowdfunding operates separately.
- {/* images are remaining to add*/} -
- ); +
+
+
+
+
+ Ways to Support Us? +
+
+ + The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, + they may involve greater effort. Contribute
monetarily using the following channels. +
+
+
+ Image 1 + Image 1 + Image 1 +
+ + ); } function SponsorshipTiers() { @@ -44,47 +48,71 @@ function SponsorshipTiers() {
- Sponsorship Tiers - + Sponsorship Tiers + AsyncAPI offers various sponsorship tiers, each with its own set of benefits and privileges. These tiers include Bronze, Silver, Gold, and Platinum.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 - hours of support per month. Support will be remote with the - option of a shared screen or via private chat. Support hours do not - accumulate.
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 + hours of support per month. Support will be remote with the + option of a shared screen or via private chat. Support hours do not + accumulate.
+
+
@@ -97,10 +125,10 @@ function OtherFormsOfFinancialSupport() { return (
-
- Image 1 - Image 2 - Image 3 +
+ Image 1 + Image 2 + Image 3
@@ -141,11 +169,8 @@ function OtherFormsOfFinancialSupport() { } - - - function FinancialSummary() { - const title="AsyncAPI Finance Summary"; + const title = "AsyncAPI Finance Summary"; const description = "Financial Summary of AsyncAPI"; const image = "/"; return ( @@ -155,11 +180,11 @@ function FinancialSummary() { image={image} wide > - - - - - + + + + + ) From 3f1b1eeb80cd90ead0760b4171ae49f5ae464ecf Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 7 Aug 2023 17:48:14 +0530 Subject: [PATCH 05/79] added Expense breakdown component --- pages/financialSummary.js | 68 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 3ac800b61b5c..6c03b3673255 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -4,6 +4,49 @@ import Container from '../components/layout/Container' import Paragraph from '../components/typography/Paragraph' import Button from '../components/buttons/Button' +const cardsData = [ + { + title: "Card 1", + body: "This is the content of card 1. is the content of card 2 is the content of card 2", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "Card 2", + body: "This is the content of card 2. is the content of card 2 is the content of card 2 is the content of card 2", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "Card 3", + body: "This is the content of card 3. is the content of card 2 is the content of card 2", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "Card 4", + body: "This is the content of card 4. is the content of card 2 is the content of card 2 is the content of card 2", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "Card 5", + body: "This is the content of card 5. is the content of card 2 is the content of card 2", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "Card 6", + body: "This is the content of card 6.", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, +]; + +function Card({ title, body, image }) { + return ( +
+ {image && {title}} +

{title}

+

{body}

+
+ ); +} + function AsyncAPISummary() { return ( @@ -125,7 +168,7 @@ function OtherFormsOfFinancialSupport() { return (
-
+
Image 1 Image 2 Image 3 @@ -168,6 +211,28 @@ function OtherFormsOfFinancialSupport() { ); } +function ExpenseBreakdown() { + return ( + +
+
+ Expense Breakdown + + Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open + Collective account. We maintain transparency in all expenses, and the TSC approves + anticipated expenses. + +
+ {cardsData.map((card, index) => ( + + ))} +
+
+
+
+ ) +} + function FinancialSummary() { const title = "AsyncAPI Finance Summary"; @@ -184,6 +249,7 @@ function FinancialSummary() { + From e2352e1457680be9d0a597d57af65717044e818d Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 7 Aug 2023 18:12:20 +0530 Subject: [PATCH 06/79] added succes stories component --- pages/financialSummary.js | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 6c03b3673255..d42ddb1778cf 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -233,6 +233,47 @@ function ExpenseBreakdown() { ) } +function SuccessStories() { + return ( + +
+
+ Success Stories + + Thanks to financial support we can already see many success stories in + the project. + +
+
+ Community Manager + With the addition of a dedicated Community + Manager, we now have a monthly newsletter, + regular status updates, an active social + media presence, and the ability to drive + initiatives such as event organization. +
+
+ AsyncAPI Mentorship + The 2022 mentorship program yielded + significant achievements: Kafka support in + Glee, a centralized platform for sharing + AsyncAPI tools, and a versatile error + handling library for multiple projects. +
+
+ AsyncAPI Conference + Every year we organize a conference that + attracts many participants. Only last year + the conference generated . We + plan to do a series of events in different + locations every year. +
+
+
+
+
+ ) +} function FinancialSummary() { const title = "AsyncAPI Finance Summary"; @@ -250,6 +291,7 @@ function FinancialSummary() { + From 31a019c6fe204a1917c58962c7479cb4a7631c84 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 7 Aug 2023 18:23:13 +0530 Subject: [PATCH 07/79] added Contact Us component --- pages/financialSummary.js | 47 +++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index d42ddb1778cf..02ed123fe52c 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -6,33 +6,33 @@ import Button from '../components/buttons/Button' const cardsData = [ { - title: "Card 1", - body: "This is the content of card 1. is the content of card 2 is the content of card 2", + title: "fffef", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "Card 2", - body: "This is the content of card 2. is the content of card 2 is the content of card 2 is the content of card 2", + title: "fwfwfc", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "Card 3", - body: "This is the content of card 3. is the content of card 2 is the content of card 2", + title: "khjhb", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "Card 4", - body: "This is the content of card 4. is the content of card 2 is the content of card 2 is the content of card 2", + title: "fugv", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "Card 5", - body: "This is the content of card 5. is the content of card 2 is the content of card 2", + title: "veuvei", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "Card 6", - body: "This is the content of card 6.", + title: "egef", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, ]; @@ -275,6 +275,28 @@ function SuccessStories() { ) } +function ContactUs() { + return ( + +
+
+ Interested in getting in touch? + + Feel free to contact us if you need more explanation. We are happy to hop on a call and help with + onboarding to the project as a sponsor. Write email to info@asyncapi.io. + +
+
+
+
+
+ ) +} + function FinancialSummary() { const title = "AsyncAPI Finance Summary"; const description = "Financial Summary of AsyncAPI"; @@ -292,6 +314,7 @@ function FinancialSummary() { + From fe9a006449677dad701230a528a05dcc185307fd Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 12:25:30 +0530 Subject: [PATCH 08/79] graph added --- package-lock.json | 379 ++++++++++++++++++++++++++++++++++++++ package.json | 1 + pages/financialSummary.js | 154 +++++++++++++++- 3 files changed, 531 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index c68c92943e47..b4ec9fe3ae1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,6 +59,7 @@ "react-typing-animation": "^1.6.2", "react-youtube-embed": "^1.0.3", "reading-time": "^1.2.0", + "recharts": "^2.7.2", "remark-frontmatter": "^2.0.0", "remark-gemoji-to-emoji": "^1.1.0", "remark-heading-id": "^1.0.0", @@ -2218,6 +2219,60 @@ "@types/estree": "*" } }, + "node_modules/@types/d3-array": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz", + "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==" + }, + "node_modules/@types/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", + "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", + "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-shape": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", + "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", + "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" + }, "node_modules/@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -3808,6 +3863,11 @@ "node": ">=0.10.0" } }, + "node_modules/css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -4509,6 +4569,11 @@ } } }, + "node_modules/decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -4736,6 +4801,14 @@ "esutils": "^2.0.2" } }, + "node_modules/dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "dependencies": { + "@babel/runtime": "^7.1.2" + } + }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -10784,6 +10857,23 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-resize-detector": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", + "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", + "dependencies": { + "lodash": "^4.17.21" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/react-scrollspy": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/react-scrollspy/-/react-scrollspy-3.4.3.tgz", @@ -10794,6 +10884,28 @@ "prop-types": "^15.5.10" } }, + "node_modules/react-smooth": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", + "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", + "dependencies": { + "fast-equals": "^5.0.0", + "react-transition-group": "2.9.0" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-smooth/node_modules/fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/react-syntax-highlighter": { "version": "12.2.1", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz", @@ -10817,6 +10929,21 @@ "prop-types": "^15.5.7" } }, + "node_modules/react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "dependencies": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + }, + "peerDependencies": { + "react": ">=15.0.0", + "react-dom": ">=15.0.0" + } + }, "node_modules/react-twitter-embed": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/react-twitter-embed/-/react-twitter-embed-4.0.4.tgz", @@ -10926,6 +11053,43 @@ "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, + "node_modules/recharts": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.2.tgz", + "integrity": "sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==", + "dependencies": { + "classnames": "^2.2.5", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-is": "^16.10.2", + "react-resize-detector": "^8.0.4", + "react-smooth": "^2.0.2", + "recharts-scale": "^0.4.4", + "reduce-css-calc": "^2.1.8", + "victory-vendor": "^36.6.8" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "prop-types": "^15.6.0", + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "dependencies": { + "decimal.js-light": "^2.4.1" + } + }, + "node_modules/recharts/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, "node_modules/redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", @@ -10947,6 +11111,20 @@ "node": ">=4" } }, + "node_modules/reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dependencies": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, "node_modules/refractor": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", @@ -12858,6 +13036,27 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/victory-vendor": { + "version": "36.6.11", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz", + "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==", + "dependencies": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -14591,6 +14790,60 @@ "@types/estree": "*" } }, + "@types/d3-array": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.5.tgz", + "integrity": "sha512-Qk7fpJ6qFp+26VeQ47WY0mkwXaiq8+76RJcncDEfMc2ocRzXLO67bLFRNI4OX1aGBoPzsM5Y2T+/m1pldOgD+A==" + }, + "@types/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-HKuicPHJuvPgCD+np6Se9MQvS6OCbJmOjGvylzMJRlDwUXjKTTXs6Pwgk79O09Vj/ho3u1ofXnhFOaEWWPrlwA==" + }, + "@types/d3-ease": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.0.tgz", + "integrity": "sha512-aMo4eaAOijJjA6uU+GIeW018dvy9+oH5Y2VPPzjjfxevvGQ/oRDs+tfYC9b50Q4BygRR8yE2QCLsrT0WtAVseA==" + }, + "@types/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-jx5leotSeac3jr0RePOH1KdR9rISG91QIE4Q2PYTu4OymLTZfA3SrnURSLzKH48HmXVUru50b8nje4E79oQSQw==", + "requires": { + "@types/d3-color": "*" + } + }, + "@types/d3-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.0.tgz", + "integrity": "sha512-0g/A+mZXgFkQxN3HniRDbXMN79K3CdTpLsevj+PXiTcb2hVyvkZUBg37StmgCQkaD84cUJ4uaDAWq7UJOQy2Tg==" + }, + "@types/d3-scale": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.3.tgz", + "integrity": "sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ==", + "requires": { + "@types/d3-time": "*" + } + }, + "@types/d3-shape": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.1.tgz", + "integrity": "sha512-6Uh86YFF7LGg4PQkuO2oG6EMBRLuW9cbavUW46zkIO5kuS2PfTqo2o9SkgtQzguBHbLgNnU90UNsITpsX1My+A==", + "requires": { + "@types/d3-path": "*" + } + }, + "@types/d3-time": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.0.tgz", + "integrity": "sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg==" + }, + "@types/d3-timer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz", + "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g==" + }, "@types/debug": { "version": "4.1.8", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", @@ -15944,6 +16197,11 @@ } } }, + "css-unit-converter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -16460,6 +16718,11 @@ "ms": "2.1.2" } }, + "decimal.js-light": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.1.tgz", + "integrity": "sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg==" + }, "decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -16638,6 +16901,14 @@ "esutils": "^2.0.2" } }, + "dom-helpers": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", + "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "requires": { + "@babel/runtime": "^7.1.2" + } + }, "dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -21444,6 +21715,19 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-resize-detector": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", + "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", + "requires": { + "lodash": "^4.17.21" + } + }, "react-scrollspy": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/react-scrollspy/-/react-scrollspy-3.4.3.tgz", @@ -21454,6 +21738,22 @@ "prop-types": "^15.5.10" } }, + "react-smooth": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", + "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", + "requires": { + "fast-equals": "^5.0.0", + "react-transition-group": "2.9.0" + }, + "dependencies": { + "fast-equals": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==" + } + } + }, "react-syntax-highlighter": { "version": "12.2.1", "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-12.2.1.tgz", @@ -21474,6 +21774,17 @@ "prop-types": "^15.5.7" } }, + "react-transition-group": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", + "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "requires": { + "dom-helpers": "^3.4.0", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + }, "react-twitter-embed": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/react-twitter-embed/-/react-twitter-embed-4.0.4.tgz", @@ -21577,6 +21888,37 @@ "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, + "recharts": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.2.tgz", + "integrity": "sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==", + "requires": { + "classnames": "^2.2.5", + "eventemitter3": "^4.0.1", + "lodash": "^4.17.19", + "react-is": "^16.10.2", + "react-resize-detector": "^8.0.4", + "react-smooth": "^2.0.2", + "recharts-scale": "^0.4.4", + "reduce-css-calc": "^2.1.8", + "victory-vendor": "^36.6.8" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + } + } + }, + "recharts-scale": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.5.tgz", + "integrity": "sha512-kivNFO+0OcUNu7jQquLXAxz1FIwZj8nrj+YkOKc5694NbjCvcT6aSZiIzNzd2Kul4o4rTto8QVR9lMNtxD4G1w==", + "requires": { + "decimal.js-light": "^2.4.1" + } + }, "redis-errors": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/redis-errors/-/redis-errors-1.2.0.tgz", @@ -21592,6 +21934,22 @@ "redis-errors": "^1.0.0" } }, + "reduce-css-calc": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", + "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, "refractor": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", @@ -23101,6 +23459,27 @@ "unist-util-stringify-position": "^3.0.0" } }, + "victory-vendor": { + "version": "36.6.11", + "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz", + "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==", + "requires": { + "@types/d3-array": "^3.0.3", + "@types/d3-ease": "^3.0.0", + "@types/d3-interpolate": "^3.0.1", + "@types/d3-scale": "^4.0.2", + "@types/d3-shape": "^3.1.0", + "@types/d3-time": "^3.0.0", + "@types/d3-timer": "^3.0.0", + "d3-array": "^3.1.6", + "d3-ease": "^3.0.1", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-shape": "^3.1.0", + "d3-time": "^3.0.0", + "d3-timer": "^3.0.1" + } + }, "void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", diff --git a/package.json b/package.json index 8f4c9a8dd8e1..dfbb15941b3a 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "react-typing-animation": "^1.6.2", "react-youtube-embed": "^1.0.3", "reading-time": "^1.2.0", + "recharts": "^2.7.2", "remark-frontmatter": "^2.0.0", "remark-gemoji-to-emoji": "^1.1.0", "remark-heading-id": "^1.0.0", diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 02ed123fe52c..004c0f451860 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -3,6 +3,153 @@ import Heading from "../components/typography/Heading" import Container from '../components/layout/Container' import Paragraph from '../components/typography/Paragraph' import Button from '../components/buttons/Button' +import React, { useState, useEffect } from 'react' +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' +import style from "react-syntax-highlighter/dist/esm/styles/hljs/a11y-dark" + +const Expenses = [{ + Link: "https://opencollective.com/asyncapi/expenses/116776", + Category: "AsyncAPI Ambassador", + Month: "January", + Quater: "Q1", + Amount: "68.95" +}, { + Link: "https://opencollective.com/asyncapi/expenses/118171", + Category: "Google Season of Docs 2022", + Month: "May", + Quater: "Q2", + Amount: "2000" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "Google Season of Docs 2022", + Month: "July", + Quater: "Q3", + Amount: "1666.67" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "AsyncAPI Bounty", + Month: "July", + Quater: "Q3", + Amount: "1639" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "AsyncAPI Bounty", + Month: "August", + Quater: "Q3", + Amount: "1639" +} +] + + +const BarChartComponent = ({ data }) => { + // State for selected filters + const [selectedCategory, setSelectedCategory] = useState(null); + const [selectedYearQuarter, setSelectedYearQuarter] = useState(null); + + // Prepare data for chart + const categoryOptions = [...new Set(data.map((item) => item.Category))]; + + // Generate all yearly quarters (Q1, Q2, Q3, Q4) based on data + const yearQuarterOptions = []; + data.forEach((item) => { + const yearQuarter = `${item.Month} - ${item.Quater}`; + if (!yearQuarterOptions.includes(yearQuarter)) { + yearQuarterOptions.push(yearQuarter); + } + }); + + // Filter data based on selected filters + const filteredData = data.filter( + (item) => + (!selectedCategory || item.Category === selectedCategory) && + (!selectedYearQuarter || `${item.Month} - ${item.Quater}` === selectedYearQuarter) + ); + + // Calculate total expenses for each category + const totalExpensesByCategory = {}; + filteredData.forEach((item) => { + totalExpensesByCategory[item.Category] = + (totalExpensesByCategory[item.Category] || 0) + parseFloat(item.Amount); + }); + + // Prepare data for chart + const chartData = Object.keys(totalExpensesByCategory).map((category) => ({ + Category: category, + Amount: totalExpensesByCategory[category], + })); + + const totalExpenses = Object.values(totalExpensesByCategory).reduce( + (total, expense) => total + expense, + 0 + ); + + const [windowWidth, setWindowWidth] = useState(null); + + const handleResize = () => { + setWindowWidth(window.innerWidth); + }; + + useEffect(() => { + handleResize(); + window.addEventListener('resize', handleResize); + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + const barWidth = windowWidth < 900 ? 300 : 800; + const barHeight = windowWidth < 900 ? 200 : 400; + + return ( +
+
+
+

Budget Analysis

+

Gain insights into the allocation of funds across different categories through our Budget Analysis

+

Total Expenses: ${totalExpenses.toFixed(2)}

+ {/* Select for category filter */} + + + {/* Select for year/quarter filter */} + +
+ {/* Recharts BarChart */} + + + + + + + + +
+
+ ); +}; const cardsData = [ { @@ -278,12 +425,12 @@ function SuccessStories() { function ContactUs() { return ( -
+
Interested in getting in touch? Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io. + onboarding to the project as a sponsor. Write email to info@asyncapi.io.
@@ -314,7 +461,8 @@ function FinancialSummary() { - + + From c5473cb0ab66efeff2d9737a7f1eda526a238bb0 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 12:32:00 +0530 Subject: [PATCH 09/79] graph added and removed some bugs --- pages/financialSummary.js | 1 - 1 file changed, 1 deletion(-) diff --git a/pages/financialSummary.js b/pages/financialSummary.js index 004c0f451860..b72104ec4b0c 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -5,7 +5,6 @@ import Paragraph from '../components/typography/Paragraph' import Button from '../components/buttons/Button' import React, { useState, useEffect } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' -import style from "react-syntax-highlighter/dist/esm/styles/hljs/a11y-dark" const Expenses = [{ Link: "https://opencollective.com/asyncapi/expenses/116776", From 9a6634c0a8d8263c8f9d69e4e28293149e3c78f6 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 13:37:09 +0530 Subject: [PATCH 10/79] made separate files for components --- .../FinancialSummary/AsyncAPISummary.js | 45 ++ .../FinancialSummary/BarChartComponent.js | 114 +++++ components/FinancialSummary/ContactUs.js | 28 ++ .../FinancialSummary/ExpenseBreakdown.js | 71 +++ components/FinancialSummary/ExpenseObject.js | 34 ++ .../OtherFormsOfFinancialSupport.js | 52 ++ .../FinancialSummary/SponsorshipTiers.js | 82 ++++ components/FinancialSummary/SuccessStories.js | 47 ++ pages/financialSummary.js | 450 +----------------- 9 files changed, 481 insertions(+), 442 deletions(-) create mode 100644 components/FinancialSummary/AsyncAPISummary.js create mode 100644 components/FinancialSummary/BarChartComponent.js create mode 100644 components/FinancialSummary/ContactUs.js create mode 100644 components/FinancialSummary/ExpenseBreakdown.js create mode 100644 components/FinancialSummary/ExpenseObject.js create mode 100644 components/FinancialSummary/OtherFormsOfFinancialSupport.js create mode 100644 components/FinancialSummary/SponsorshipTiers.js create mode 100644 components/FinancialSummary/SuccessStories.js diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js new file mode 100644 index 000000000000..9711e105e039 --- /dev/null +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -0,0 +1,45 @@ +import Button from '../buttons/Button' +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + +function AsyncAPISummary() { + return ( + +
+
+ AsyncAPI Finance Summary + + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for + the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub + Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, + while Linux Foundation Crowdfunding operates separately. + +
+
+
+
+
+
+ Ways to Support Us? +
+
+ + The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, + they may involve greater effort. Contribute
monetarily using the following channels. +
+
+
+ Image 1 + Image 1 + Image 1 +
+
+ ); +} + +export default AsyncAPISummary \ No newline at end of file diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js new file mode 100644 index 000000000000..1a225f693b5c --- /dev/null +++ b/components/FinancialSummary/BarChartComponent.js @@ -0,0 +1,114 @@ +import React, { useState, useEffect } from 'react' +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' + +const BarChartComponent = ({ data }) => { + // State for selected filters + const [selectedCategory, setSelectedCategory] = useState(null); + const [selectedYearQuarter, setSelectedYearQuarter] = useState(null); + + // Prepare data for chart + const categoryOptions = [...new Set(data.map((item) => item.Category))]; + + // Generate all yearly quarters (Q1, Q2, Q3, Q4) based on data + const yearQuarterOptions = []; + data.forEach((item) => { + const yearQuarter = `${item.Month} - ${item.Quater}`; + if (!yearQuarterOptions.includes(yearQuarter)) { + yearQuarterOptions.push(yearQuarter); + } + }); + + // Filter data based on selected filters + const filteredData = data.filter( + (item) => + (!selectedCategory || item.Category === selectedCategory) && + (!selectedYearQuarter || `${item.Month} - ${item.Quater}` === selectedYearQuarter) + ); + + // Calculate total expenses for each category + const totalExpensesByCategory = {}; + filteredData.forEach((item) => { + totalExpensesByCategory[item.Category] = + (totalExpensesByCategory[item.Category] || 0) + parseFloat(item.Amount); + }); + + // Prepare data for chart + const chartData = Object.keys(totalExpensesByCategory).map((category) => ({ + Category: category, + Amount: totalExpensesByCategory[category], + })); + + const totalExpenses = Object.values(totalExpensesByCategory).reduce( + (total, expense) => total + expense, + 0 + ); + + const [windowWidth, setWindowWidth] = useState(null); + + const handleResize = () => { + setWindowWidth(window.innerWidth); + }; + + useEffect(() => { + handleResize(); + window.addEventListener('resize', handleResize); + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + + const barWidth = windowWidth < 900 ? 300 : 800; + const barHeight = windowWidth < 900 ? 200 : 400; + + return ( +
+
+
+

Budget Analysis

+

Gain insights into the allocation of funds across different categories through our Budget Analysis

+

Total Expenses: ${totalExpenses.toFixed(2)}

+ {/* Select for category filter */} + + + {/* Select for year/quarter filter */} + +
+ {/* Recharts BarChart */} + + + {windowWidth > 900 ? : null} + + + + + +
+
+ ); +}; + +export default BarChartComponent \ No newline at end of file diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js new file mode 100644 index 000000000000..147728d7e901 --- /dev/null +++ b/components/FinancialSummary/ContactUs.js @@ -0,0 +1,28 @@ +import Button from '../buttons/Button' +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + +function ContactUs() { + return ( + +
+
+ Interested in getting in touch? + + Feel free to contact us if you need more explanation. We are happy to hop on a call and help with + onboarding to the project as a sponsor. Write email to info@asyncapi.io. + +
+
+
+
+
+ ) +} + +export default ContactUs \ No newline at end of file diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js new file mode 100644 index 000000000000..5bedc57c462f --- /dev/null +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -0,0 +1,71 @@ +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + + +const cardsData = [ + { + title: "fffef", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "fwfwfc", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "khjhb", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "fugv", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "veuvei", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, + { + title: "egef", + body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + }, +]; + +function Card({ title, body, image }) { + return ( +
+ {image && {title}} +

{title}

+

{body}

+
+ ); +} + +function ExpenseBreakdown() { + return ( + +
+
+ Expense Breakdown + + Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open + Collective account. We maintain transparency in all expenses, and the TSC approves + anticipated expenses. + +
+ {cardsData.map((card, index) => ( + + ))} +
+
+
+
+ ) +} + +export default ExpenseBreakdown \ No newline at end of file diff --git a/components/FinancialSummary/ExpenseObject.js b/components/FinancialSummary/ExpenseObject.js new file mode 100644 index 000000000000..8f52aed1f86a --- /dev/null +++ b/components/FinancialSummary/ExpenseObject.js @@ -0,0 +1,34 @@ +const Expenses = [{ + Link: "https://opencollective.com/asyncapi/expenses/116776", + Category: "AsyncAPI Ambassador", + Month: "January", + Quater: "Q1", + Amount: "68.95" +}, { + Link: "https://opencollective.com/asyncapi/expenses/118171", + Category: "Google Season of Docs 2022", + Month: "May", + Quater: "Q2", + Amount: "2000" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "Google Season of Docs 2022", + Month: "July", + Quater: "Q3", + Amount: "1666.67" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "AsyncAPI Bounty", + Month: "July", + Quater: "Q3", + Amount: "1639" +}, { + Link: "https://opencollective.com/asyncapi/expenses/18495", + Category: "AsyncAPI Bounty", + Month: "August", + Quater: "Q3", + Amount: "1639" +} +] + +export default Expenses \ No newline at end of file diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js new file mode 100644 index 000000000000..3e0ef5c5fe2b --- /dev/null +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -0,0 +1,52 @@ +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + +function OtherFormsOfFinancialSupport() { + return ( + +
+
+ Image 1 + Image 2 + Image 3 +
+ + +
+
+ Other forms of financial support +
+ +
+ Employee involvement + + Assign your employees to contribute to projects under the AsyncAPI Initiative + on a regular basis, and we'll welcome them as new maintainers. You can + also provide direct assistance to a member of the Technical Steering Committee + (TSC) through contracts or employment for specific tasks. + +
+ +
+ Event organization + + Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI + brand at your provided venue. + +
+ +
+ Service provision + + AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your + organization can provide services such as hosting or storage to support our efforts. + +
+
+
+
+ ); +} + +export default OtherFormsOfFinancialSupport \ No newline at end of file diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js new file mode 100644 index 000000000000..432d38cc2e6e --- /dev/null +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -0,0 +1,82 @@ +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + +function SponsorshipTiers() { + return ( + +
+
+ Sponsorship Tiers + + AsyncAPI offers various sponsorship tiers, each with its own set + of benefits and privileges. These tiers include Bronze, Silver, + Gold, and Platinum. + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 + hours of support per month. Support will be remote with the + option of a shared screen or via private chat. Support hours do not + accumulate.
+
+ +
+
+
+
+ ); +} + +export default SponsorshipTiers \ No newline at end of file diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js new file mode 100644 index 000000000000..c8319c95f273 --- /dev/null +++ b/components/FinancialSummary/SuccessStories.js @@ -0,0 +1,47 @@ +import Container from '../layout/Container' +import Heading from "../typography/Heading" +import Paragraph from '../typography/Paragraph' + +function SuccessStories() { + return ( + +
+
+ Success Stories + + Thanks to financial support we can already see many success stories in + the project. + +
+
+ Community Manager + With the addition of a dedicated Community + Manager, we now have a monthly newsletter, + regular status updates, an active social + media presence, and the ability to drive + initiatives such as event organization. +
+
+ AsyncAPI Mentorship + The 2022 mentorship program yielded + significant achievements: Kafka support in + Glee, a centralized platform for sharing + AsyncAPI tools, and a versatile error + handling library for multiple projects. +
+
+ AsyncAPI Conference + Every year we organize a conference that + attracts many participants. Only last year + the conference generated . We + plan to do a series of events in different + locations every year. +
+
+
+
+
+ ) +} + +export default SuccessStories \ No newline at end of file diff --git a/pages/financialSummary.js b/pages/financialSummary.js index b72104ec4b0c..348f09e268bc 100644 --- a/pages/financialSummary.js +++ b/pages/financialSummary.js @@ -1,447 +1,13 @@ import GenericLayout from "../components/layout/GenericLayout" -import Heading from "../components/typography/Heading" import Container from '../components/layout/Container' -import Paragraph from '../components/typography/Paragraph' -import Button from '../components/buttons/Button' -import React, { useState, useEffect } from 'react' -import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' - -const Expenses = [{ - Link: "https://opencollective.com/asyncapi/expenses/116776", - Category: "AsyncAPI Ambassador", - Month: "January", - Quater: "Q1", - Amount: "68.95" -}, { - Link: "https://opencollective.com/asyncapi/expenses/118171", - Category: "Google Season of Docs 2022", - Month: "May", - Quater: "Q2", - Amount: "2000" -}, { - Link: "https://opencollective.com/asyncapi/expenses/18495", - Category: "Google Season of Docs 2022", - Month: "July", - Quater: "Q3", - Amount: "1666.67" -}, { - Link: "https://opencollective.com/asyncapi/expenses/18495", - Category: "AsyncAPI Bounty", - Month: "July", - Quater: "Q3", - Amount: "1639" -}, { - Link: "https://opencollective.com/asyncapi/expenses/18495", - Category: "AsyncAPI Bounty", - Month: "August", - Quater: "Q3", - Amount: "1639" -} -] - - -const BarChartComponent = ({ data }) => { - // State for selected filters - const [selectedCategory, setSelectedCategory] = useState(null); - const [selectedYearQuarter, setSelectedYearQuarter] = useState(null); - - // Prepare data for chart - const categoryOptions = [...new Set(data.map((item) => item.Category))]; - - // Generate all yearly quarters (Q1, Q2, Q3, Q4) based on data - const yearQuarterOptions = []; - data.forEach((item) => { - const yearQuarter = `${item.Month} - ${item.Quater}`; - if (!yearQuarterOptions.includes(yearQuarter)) { - yearQuarterOptions.push(yearQuarter); - } - }); - - // Filter data based on selected filters - const filteredData = data.filter( - (item) => - (!selectedCategory || item.Category === selectedCategory) && - (!selectedYearQuarter || `${item.Month} - ${item.Quater}` === selectedYearQuarter) - ); - - // Calculate total expenses for each category - const totalExpensesByCategory = {}; - filteredData.forEach((item) => { - totalExpensesByCategory[item.Category] = - (totalExpensesByCategory[item.Category] || 0) + parseFloat(item.Amount); - }); - - // Prepare data for chart - const chartData = Object.keys(totalExpensesByCategory).map((category) => ({ - Category: category, - Amount: totalExpensesByCategory[category], - })); - - const totalExpenses = Object.values(totalExpensesByCategory).reduce( - (total, expense) => total + expense, - 0 - ); - - const [windowWidth, setWindowWidth] = useState(null); - - const handleResize = () => { - setWindowWidth(window.innerWidth); - }; - - useEffect(() => { - handleResize(); - window.addEventListener('resize', handleResize); - return () => { - window.removeEventListener('resize', handleResize); - }; - }, []); - - const barWidth = windowWidth < 900 ? 300 : 800; - const barHeight = windowWidth < 900 ? 200 : 400; - - return ( -
-
-
-

Budget Analysis

-

Gain insights into the allocation of funds across different categories through our Budget Analysis

-

Total Expenses: ${totalExpenses.toFixed(2)}

- {/* Select for category filter */} - - - {/* Select for year/quarter filter */} - -
- {/* Recharts BarChart */} - - - - - - - - -
-
- ); -}; - -const cardsData = [ - { - title: "fffef", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, - { - title: "fwfwfc", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, - { - title: "khjhb", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, - { - title: "fugv", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, - { - title: "veuvei", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, - { - title: "egef", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", - }, -]; - -function Card({ title, body, image }) { - return ( -
- {image && {title}} -

{title}

-

{body}

-
- ); -} - -function AsyncAPISummary() { - return ( - -
-
- AsyncAPI Finance Summary - - To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for - the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub - Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, - while Linux Foundation Crowdfunding operates separately. - -
-
-
-
-
-
- Ways to Support Us? -
-
- - The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, - they may involve greater effort. Contribute
monetarily using the following channels. -
-
-
- Image 1 - Image 1 - Image 1 -
-
- ); -} - -function SponsorshipTiers() { - return ( - -
-
- Sponsorship Tiers - - AsyncAPI offers various sponsorship tiers, each with its own set - of benefits and privileges. These tiers include Bronze, Silver, - Gold, and Platinum. - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TiersBenefitsAmounts
Bronze$100/monthCompany logo in README on GitHub
Silver$500/monthCompany logo in README on GitHub and asyncapi.com
Gold$1000/monthCompany logo in README on GitHub and asyncapi.com
Platinum$2000/monthCompany logo in README on GitHub and asyncapi.com. Up to 2 - hours of support per month. Support will be remote with the - option of a shared screen or via private chat. Support hours do not - accumulate.
-
- -
-
-
-
- ); -} - - -function OtherFormsOfFinancialSupport() { - return ( - -
-
- Image 1 - Image 2 - Image 3 -
- - -
-
- Other forms of financial support -
- -
- Employee involvement - - Assign your employees to contribute to projects under the AsyncAPI Initiative - on a regular basis, and we'll welcome them as new maintainers. You can - also provide direct assistance to a member of the Technical Steering Committee - (TSC) through contracts or employment for specific tasks. - -
- -
- Event organization - - Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI - brand at your provided venue. - -
- -
- Service provision - - AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your - organization can provide services such as hosting or storage to support our efforts. - -
-
-
-
- ); -} - -function ExpenseBreakdown() { - return ( - -
-
- Expense Breakdown - - Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open - Collective account. We maintain transparency in all expenses, and the TSC approves - anticipated expenses. - -
- {cardsData.map((card, index) => ( - - ))} -
-
-
-
- ) -} - -function SuccessStories() { - return ( - -
-
- Success Stories - - Thanks to financial support we can already see many success stories in - the project. - -
-
- Community Manager - With the addition of a dedicated Community - Manager, we now have a monthly newsletter, - regular status updates, an active social - media presence, and the ability to drive - initiatives such as event organization. -
-
- AsyncAPI Mentorship - The 2022 mentorship program yielded - significant achievements: Kafka support in - Glee, a centralized platform for sharing - AsyncAPI tools, and a versatile error - handling library for multiple projects. -
-
- AsyncAPI Conference - Every year we organize a conference that - attracts many participants. Only last year - the conference generated . We - plan to do a series of events in different - locations every year. -
-
-
-
-
- ) -} - -function ContactUs() { - return ( - -
-
- Interested in getting in touch? - - Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io. - -
-
-
-
-
- ) -} +import Expenses from "../components/FinancialSummary/ExpenseObject" +import BarChartComponent from "../components/FinancialSummary/BarChartComponent" +import ExpenseBreakdown from "../components/FinancialSummary/ExpenseBreakdown" +import SponsorshipTiers from "../components/FinancialSummary/SponsorshipTiers" +import SuccessStories from "../components/FinancialSummary/SuccessStories" +import AsyncAPISummary from "../components/FinancialSummary/AsyncAPISummary" +import OtherFormsOfFinancialSupport from "../components/FinancialSummary/OtherFormsOfFinancialSupport" +import ContactUs from "../components/FinancialSummary/ContactUs" function FinancialSummary() { const title = "AsyncAPI Finance Summary"; From 8a7d5b78357ae434721a85f20c8d85407423f79c Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 14:50:32 +0530 Subject: [PATCH 11/79] improved design --- .../FinancialSummary/AsyncAPISummary.js | 15 ++++++++---- .../FinancialSummary/BarChartComponent.js | 4 ++-- components/FinancialSummary/ContactUs.js | 4 ++-- .../FinancialSummary/ExpenseBreakdown.js | 24 +++++++++---------- .../OtherFormsOfFinancialSupport.js | 2 +- components/FinancialSummary/SuccessStories.js | 3 ++- components/footer/FooterList.js | 5 +++- pages/{financialSummary.js => finance.js} | 0 8 files changed, 34 insertions(+), 23 deletions(-) rename pages/{financialSummary.js => finance.js} (100%) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index 9711e105e039..61ea399a0066 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -20,7 +20,7 @@ function AsyncAPISummary() {

@@ -34,10 +34,17 @@ function AsyncAPISummary() {
- Image 1 - Image 1 - Image 1 + + Open Collective + + + Linux Foundation + + + Github +
+
); } diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 1a225f693b5c..a1fa3403c5c3 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -57,8 +57,8 @@ const BarChartComponent = ({ data }) => { }; }, []); - const barWidth = windowWidth < 900 ? 300 : 800; - const barHeight = windowWidth < 900 ? 200 : 400; + const barWidth = windowWidth < 900 ? null : 800; + const barHeight = windowWidth < 900 ? null : 400; return (
diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index 147728d7e901..30a4e914759e 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -11,14 +11,14 @@ function ContactUs() { Interested in getting in touch? Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io. + onboarding to the project as a sponsor. Write email to info@asyncapi.io
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index 5bedc57c462f..dfb672bc7749 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -5,33 +5,33 @@ import Paragraph from '../typography/Paragraph' const cardsData = [ { - title: "fffef", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + title: "Mentorship Program", + body: "Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "fwfwfc", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + title: "Bounty Program", + body: "Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "khjhb", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9", + title: "Events", + body: "Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "fugv", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy fdwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + title: "Swag Store", + body: "Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "veuvei", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + title: "Hiring", + body: "To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, { - title: "egef", - body: "dwsdhwdug dwu dw ydw wdy wy wf wyf f wyf9 wyf wfywdy f", + title: "Services", + body: "Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.", image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", }, ]; diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index 3e0ef5c5fe2b..524923563dd0 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -23,7 +23,7 @@ function OtherFormsOfFinancialSupport() { Assign your employees to contribute to projects under the AsyncAPI Initiative on a regular basis, and we'll welcome them as new maintainers. You can - also provide direct assistance to a member of the Technical Steering Committee + also provide direct assistance to a member of the Technical Steering Committee (TSC) through contracts or employment for specific tasks.
diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index c8319c95f273..e3f1de9a740e 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -1,3 +1,4 @@ +import { getFontDefinitionFromNetwork } from 'next/dist/server/font-utils' import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' @@ -33,7 +34,7 @@ function SuccessStories() { AsyncAPI Conference Every year we organize a conference that attracts many participants. Only last year - the conference generated . We + the conference generated 3k views. We plan to do a series of events in different locations every year.
diff --git a/components/footer/FooterList.js b/components/footer/FooterList.js index 77bacb005c09..802aa3aac7a1 100644 --- a/components/footer/FooterList.js +++ b/components/footer/FooterList.js @@ -58,5 +58,8 @@ export const initiativeLinks = [ { label: "Brand", url: "https://github.com/asyncapi/brand/blob/master/brand-guidelines/README.md", - }, + },{ + label:"Finance", + url:"/finance" + } ]; \ No newline at end of file diff --git a/pages/financialSummary.js b/pages/finance.js similarity index 100% rename from pages/financialSummary.js rename to pages/finance.js From a5e018e02a98358ce02b0d9cdbd005724b6d5633 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 15:07:48 +0530 Subject: [PATCH 12/79] expense object updated --- components/FinancialSummary/ExpenseObject.js | 122 +++++++++++++++++-- 1 file changed, 111 insertions(+), 11 deletions(-) diff --git a/components/FinancialSummary/ExpenseObject.js b/components/FinancialSummary/ExpenseObject.js index 8f52aed1f86a..65855f77107b 100644 --- a/components/FinancialSummary/ExpenseObject.js +++ b/components/FinancialSummary/ExpenseObject.js @@ -1,33 +1,133 @@ const Expenses = [{ - Link: "https://opencollective.com/asyncapi/expenses/116776", Category: "AsyncAPI Ambassador", Month: "January", Quater: "Q1", Amount: "68.95" }, { - Link: "https://opencollective.com/asyncapi/expenses/118171", Category: "Google Season of Docs 2022", + Month: "January", + Quater: "Q1", + Amount: "35.62" +}, { + Category: "Google Season of Docs 2022", + Month: "January", + Quater: "Q1", + Amount: "1666.67" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "January", + Quater: "Q1", + Amount: "1500" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "January", + Quater: "Q1", + Amount: "1500" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "January", + Quater: "Q1", + Amount: "1500" +}, { + Category: "Community Manager Salary", + Month: "February", + Quater: "Q1", + Amount: "1000.39" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "February", + Quater: "Q1", + Amount: "1500" +}, { + Category: "Community Manager Salary", + Month: "March", + Quater: "Q1", + Amount: "2000.39" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "March", + Quater: "Q1", + Amount: "1500" +}, { + Category: "AsyncAPI Mentorship 2022", + Month: "March", + Quater: "Q1", + Amount: "1500" +}, { + Category: "Community Manager Salary", + Month: "April", + Quater: "Q2", + Amount: "2000.39" +}, { + Category: "Community Manager Salary", Month: "May", Quater: "Q2", - Amount: "2000" + Amount: "2000.39" }, { - Link: "https://opencollective.com/asyncapi/expenses/18495", - Category: "Google Season of Docs 2022", + Category: " AsyncAPI Webstore", + Month: "May", + Quater: "Q2", + Amount: "75.11" +}, { + Category: "AsyncAPI Bounty", + Month: "May", + Quater: "Q2", + Amount: "400" +}, { + Category: "Community Manager Salary", + Month: "June", + Quater: "Q2", + Amount: "2000.39" +}, { + Category: "AsyncAPI Bounty", + Month: "June", + Quater: "Q2", + Amount: "200" +}, { + Category: "3rd Party Services", + Month: "June", + Quater: "Q2", + Amount: "28.31" +}, { + Category: "AsyncAPI Bounty", + Month: "June", + Quater: "Q2", + Amount: "200" +}, { + Category: "AsyncAPI Bounty", + Month: "June", + Quater: "Q2", + Amount: "200" +}, { + Category: "AsyncAPI Bounty", + Month: "June", + Quater: "Q2", + Amount: "200" +}, { + Category: "Community Manager Salary", Month: "July", Quater: "Q3", - Amount: "1666.67" + Amount: "2000.39" +}, { + Category: "3rd Party Services", + Month: "July", + Quater: "Q3", + Amount: "1088.27" }, { - Link: "https://opencollective.com/asyncapi/expenses/18495", Category: "AsyncAPI Bounty", Month: "July", Quater: "Q3", - Amount: "1639" + Amount: "400" +}, { + Category: " AsyncAPI Webstore", + Month: "July", + Quater: "Q3", + Amount: "15671.63" }, { - Link: "https://opencollective.com/asyncapi/expenses/18495", Category: "AsyncAPI Bounty", - Month: "August", + Month: "July", Quater: "Q3", - Amount: "1639" + Amount: "400" } ] From 6710e46d2918df66fc92f77f117876154a2f5983 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 19:00:59 +0530 Subject: [PATCH 13/79] added icons and enhanced design --- components/FinancialSummary/AsyncAPISummary.js | 8 ++++---- components/FinancialSummary/ExpenseBreakdown.js | 12 ++++++------ .../OtherFormsOfFinancialSupport.js | 6 +++--- public/img/finance/GitHub.png | Bin 0 -> 18648 bytes public/img/finance/LFX.png | Bin 0 -> 21949 bytes public/img/finance/OpenCollective.png | Bin 0 -> 23218 bytes public/img/finance/expense_1.png | Bin 0 -> 11278 bytes public/img/finance/expense_2.png | Bin 0 -> 11108 bytes public/img/finance/expense_3.png | Bin 0 -> 11225 bytes public/img/finance/expense_4.png | Bin 0 -> 10795 bytes public/img/finance/expense_5.png | Bin 0 -> 11533 bytes public/img/finance/expense_6.png | Bin 0 -> 10601 bytes public/img/finance/other_1.png | Bin 0 -> 33598 bytes public/img/finance/other_2.png | Bin 0 -> 33250 bytes public/img/finance/other_3.png | Bin 0 -> 33040 bytes 15 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 public/img/finance/GitHub.png create mode 100644 public/img/finance/LFX.png create mode 100644 public/img/finance/OpenCollective.png create mode 100644 public/img/finance/expense_1.png create mode 100644 public/img/finance/expense_2.png create mode 100644 public/img/finance/expense_3.png create mode 100644 public/img/finance/expense_4.png create mode 100644 public/img/finance/expense_5.png create mode 100644 public/img/finance/expense_6.png create mode 100644 public/img/finance/other_1.png create mode 100644 public/img/finance/other_2.png create mode 100644 public/img/finance/other_3.png diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index 61ea399a0066..7d70c1e7cb66 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -20,7 +20,7 @@ function AsyncAPISummary() {

@@ -35,13 +35,13 @@ function AsyncAPISummary() {
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index dfb672bc7749..15ffed4ea203 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -7,32 +7,32 @@ const cardsData = [ { title: "Mentorship Program", body: "Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_1.png", }, { title: "Bounty Program", body: "Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_2.png", }, { title: "Events", body: "Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_3.png", }, { title: "Swag Store", body: "Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_4.png", }, { title: "Hiring", body: "To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_5.png", }, { title: "Services", body: "Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.", - image: "https://avatars.githubusercontent.com/u/16401334?s=280&v=4", + image: "/img/finance/expense_6.png", }, ]; diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index 524923563dd0..283e3fcd9cdd 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -7,9 +7,9 @@ function OtherFormsOfFinancialSupport() {
- Image 1 - Image 2 - Image 3 + Image 1 + Image 2 + Image 3
diff --git a/public/img/finance/GitHub.png b/public/img/finance/GitHub.png new file mode 100644 index 0000000000000000000000000000000000000000..7d318c45a0020cee9c3dba87c112bb194d783a9c GIT binary patch literal 18648 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 V3j@*O)1m+X002ovPDHLkV1jQx%d`Lh literal 0 HcmV?d00001 diff --git a/public/img/finance/LFX.png b/public/img/finance/LFX.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3e0c3ff609a46cc06da26fefb12c2007dbaf47 GIT binary patch literal 21949 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 =W_Tk0WG-un-4%kXooQ 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

T;T%OOrJ?|TqUgoPb~8pY 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 KT>U$Xi2nl>Kz(@t literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_2.png b/public/img/finance/expense_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6efd6347d9a5e593f3b2d5a960bf203461479b16 GIT binary patch literal 11108 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 literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_3.png b/public/img/finance/expense_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0a7091fa5feb9af35b0958c705d9dfeb0209b758 GIT binary patch literal 11225 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 LP97p_9{zs-XV^;v literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_4.png b/public/img/finance/expense_4.png new file mode 100644 index 0000000000000000000000000000000000000000..7f78901a19c9a9d78ffcf58b371ae91fb317940e GIT binary patch literal 10795 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 IV*3972N#0?ZU6uP literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_6.png b/public/img/finance/expense_6.png new file mode 100644 index 0000000000000000000000000000000000000000..38b94c2db260845e0b53f339222e4ac61fc8c4a4 GIT binary patch literal 10601 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 literal 0 HcmV?d00001 diff --git a/public/img/finance/other_3.png b/public/img/finance/other_3.png new file mode 100644 index 0000000000000000000000000000000000000000..149b4bb2460ca20e9d8430d2d553df7df3b6801b GIT binary patch literal 33040 zcmZs?1yoht+6GEUqjWb&OLuNiy1S9?ZV+Khcej8bARyf(ozfy5(!EJ(*m1Xh-#Pyo z_ue(eWX(O-tTp3(pXZs27!5V~=a}S}2nYzz6%}N(5D*YW;XxQ36`nF43(!YEz;<5;Wk}*O+(EQw*r$wu|DS``9viN{otGDUQ zxc;R#M`=yiJdJcZ@}3vLQHN9iY1hV7zF2j8cVB241pK3#>INDjs> z$?qPhYi)W)pB8pKvn0haw+$Z2fe1k-=z=+g0@2y8$Z?y^Q&dt%@^68e`#|O3Pw#(3 zJ*U+9%rE{n1yHqBy{4FgsS?pj3}MpVR{Tqf2$cQZ$w% zl0w4xmR8Ykh5}|Z*@A2{S<;bt);JDzG!dEcERmy0Fs$h?*m603Dqgag*}G(>Pih@a zdwf9-ChDgC?v-Z11{HdZC_j|sK!`!0Ooj6494hfg`xBhy4wWRX^Wppfw@Ue8l)za z$anF+56eB@?3nCXq@iy4smEFcf>l9rJtcis3XTG z69l2MRGR5j!a*jsoxwQIHoW>V|BF3Z%sOdqa|98}9CQ5dh(#@D9j^DvA_SOiQkV@P z2*O|a!`QV@Z3iztBE8z&g*7^mU#;h^vr{iiWS0Y7PqD3L{Jf#ns%IU9>ets!~T z{-bue@G4Quy?D6_Y10~z z9m%GXam=g>eJdnzSq))|0JgTxk5b&X3HC*ljy^N6Sm;qzA2OFSsl zE2iqGzKeye_aXkCbV-LaP}G8|qEy~2$1KjQ>9KaCzB#0!J}dQ9m9*G~2o!AM_hRUz zlswY`&j#j)=AR=BeUp2*yAgEVqzXN34W6BZQ6cn{LZQ&&4R1VE1j>uh5!iR3d@2G2 z7axQvs;$v45lU1wZMd5~;Y{KVk-dZlNMhMZ>=)0vX>r3ppyMLrOS5Go6qED^aiVDV zVsn!ahH2GNRw07=Z0nw%AO-eGYoL+$VYs83Jj?3yaVI(Zq;`RS{lTvgM;aIZ^_#0Y7&#jFct00ID7LNg>y<}746wGcA!5E#w7=22) zdK2TjzQ$~&2|6`qPCD0@XAFV_t1(G2T`%!RlXn$ zQ0BJ0V#%(?zSbD4K>BQYV0!EE@iFo7`mx6`{f)@+-tp7?^jClmOkw`BsK)Y~cST-D zdPmxdN|$Poa`B9_eMl3(5uyugb*yjd?T1_Gu$rx^zL`y@iG}hX<@0Stmr7|>4%MSS z^9l`13`+wPu2OAVi4Di);;M({KYr2u>>~pz)vFaW4NUiq_wByLKmE0G&|CmY_ICDu z?R_tb<=t|WHy5BXa+v8Ym@i+TzM%$CJ)dJdUOD#k_VQNtxjSw-x;;EPYzHxdROc&y zh?OpWPC8mW^t!&f&N`x*>-h|G$R6ch;O?s%8gPs>CA(cWZ<8(z=`9>IFX;0LQ;)%Mzftp4ehnq#6KzS%g_di6o_&;<`Q%XG)H4HZKtA5wqV+C!Z`+L) zeJ2`ADJ0sGL>qrWO-HRMvRz6rAG4=(sB?P#!*D}nEZ~z@{#9j)9>c6$4QYVyu09D) zmUz}Fr=R>$d@QMeo6bPFP|b@P@kPudMPW>J6vzyL4~DE}b-Q?t;97T_+w$(Jd?9@QLm!}gs~ zf!tg8P+~PoBJCGtJW3Qw*0a`#!|<08RX72-j(8ubjHp%!_VENIszmZ|smZ$O!Av9J z13Nk%@8~<}ZRPS}OXQejYLea)?%^^fIFg1X#*j8TPITFW>^;0qv7@&Jt76+}oG8RZ zZtW>~I0b9y&m6$z_hgrL1cw*|1is9j%GgRKnf^kfoQj|3QmbWBTSBJyK3U; z(%%(Em+~)jC0m z%p1(7LPr1*5FOJh%~u@V?LYjs_GRzsXNp>eT;mowpho>%?Hb2gMtY9{7;d8x1@aIR zs2A*K)fbm>@hlf3H51Oa!B(=pv8L?J`oz`mI~^w~R_5d987pB%d>)ezymt+gPOMIQ zPGV!lW1vODYUA#+t9M(EAR=j^CqYs-gU&689CVmH7fEQ|S#a5;<6)L~Cezq>pk+aC zMJLmR!IgdO);sX`ZDS8N@au|2Q?d6*R{nNA)wgZG{EFWd6)P^CfrbJ`9JOaFY263E z*EhRv1k?nK?~cydf8pGY-}MM5du$H(eGlV^%8qgjZie~{SUhf}8kP7Oxv1yY)f7uM zcS95gQ!-IEA_wI2lg^y^-KvC3{hXIQ#x7Ato^oS9zRP8t{Ked$F7BGM zd+mp02jo8E13PmKs+ojWg4gNx%^~PiDAjeXBPY0VhZweSwHnZBw!zvt>*qHm(chK& zWOO%9O$sOn|AO8HQGKEsp+*Hb2c=&eo>{H$WT{)LOZsv8D+LaZQ2Xs3=M*5=*${XGDhL6#+{T|Cz2^w}1+yJB9%vPVdBQ5c2({exeFOUi zohwU{1~1*DJY1fXrK?XrmcC~S;)GekzHB+|E(Ss#AQ1eTbg>K84}BrFHi#Ft%m__7 z2#0lU#qrv=p~#^uPm74ppagoiamd>kQqRG`NuWqGAtA)29;z0zWHW->ih6zo{4T`f zeL;R5`f*P$T~AGmg4g~(HekfJ&Lz4C?+w>CHuRS_U^W!k#J7o)mNqyQxb!DvE#dD+ zC#Ijl}DzN9-KBKe!-kz0l;VmJYbwJ}h%RaHe`gU8Vko*|MWpul5@ z@F0mu@!z-{A`1fY-*hAdgeV7uXaD9=gWvyL$?))}%s+SJ)JOz0_%D2T@GnIAPi{of zLgfF(h2hT-q_y8DD#GvDR-QICu3q+T-suFpPw)f`cLhT)1O#HnKLJru>*WQ!{sjje z18)OW6;UfU7fuUnH%l8%e;4;Z^&p7*i^8KWHr^Jr{w~h0UZVaI^nY`R!sCCEx#(&C zX7P5Cpf^y}pnc=!X+tZ>$<4`4FNsM@ODpbaZ7ZrJBlmA{_%8{1dv9-dQ7$e&KR-@C zK2A4JJ1!m(5fLtKUM^l<4tNd@uK-tX3x5t*FNS|A`Ab0QaZ?}>%i~uMfUf~ga2iLhd+0C z5N5P{_DK%`LFiIZMq0-o@g(0R-fdBLeOl$jNsQ~I+BRt_n^45hBROrH*YYj z3oCyAq~B^QR4PvhPu+f|8=>cG6fULdKop&?S5*F<_F6&{>&ts-B%&46mqv40gXPbP z?iuS9El-vfx%h&Dr;R{)K~O%wvx$6IJ_WCn(|%si?c2awuTNbIUJH_3utu-x)$@%4 zCP?+qM5WuZ{Ljwv^nu^R*sv}kL3bb^zU&duWyQUFw zdpGk)0c+`*v0H(ujRNjEAv?A?L{uSl3XbwBEjYQSZuod}OW)GC=?w>&K^Byt-%6>BmTi{xZ%?6$qBZK2|E!k3afYLYQ#_1RugLcLFZE} zzx_!zQ^w<)wB?z0m$X0nOU<+5sP9t|{LT>6;>!`z6?n4~G}5@+sIza}XZlqyVkTwd z6g2&WVJB-|2P1a}<&zTlu`?Q2HSIa+b34JwSx!~L6@I!j`q~=BAn&H}M*{~3G(8$z zqlHPb3Q*PF*n%6W0YB72?3)Yl6j-)HBkSEk#*;>tl7~J%_>5ILM`=ngU7s-HCh=z* zIY|TCbF}%EHlB_`?r)v~Sd8NlARR44x1dNn*?grPYz$g8Xkj zeEs3tBx|&-EGe;vOG=|k$+-l0L-lBMh!P3BHRjSII!8b=nc*qX9I1iAyO(p15lTB; z3@M+RAQ(~CX}3L_SOhqdNc{REfY?LHNFNkkX{CsIKAo?ejAJC)fmO+VK}$zJgTLA? znEYBvT&CY?F=F4bu`agIsi?RSf?CkI0FSJW=-xKNsFHwfWIR{T)x)I(-^7X%t&HhZ zBaK;#U}}GMiCz2ty8UZtkg99I3pZzcdOEcLkQ-R&WT4c#bR_b+jL3$aq4Kn)r;aAf zR$~R`%(|VQ-ND3*EJZf_MLNNDNXHB4|C$rw2A_fI$$Vgf*u|EjMY_UOaLt*&C4sy2 zhQ=K<+;dtBam!c9V@ z>zTv28e`h$=@|;hVb2YkHwFre0QAok8SfT+J8v^vyu09jSooNs;=cAOnv4-C<$KOB ze?HZDX)Np^9o6de}uw`LLnx>vN^=i^!}2Zvm} zwi<1!RRABloP~}1R>&yXuJ9>Pn%W%CT#EcEQ>asz3?^Ju$@z=Aitg)YCoA(i*gTYfKr(TW5!z5(>hHqNL z`^!*ab=F%??)#iC8RBoEW1Dt;MurA23e<|%y$dw;CgwT{LkRqTmq^(j4W4Nys6$5A zlTQunlhw8-i0~kVh2jb~|Gb3w=y^sd&sfeQ6WT}8(;3#o&PN}GuMG<{231>k7+rEU zA4oUJf%#H9Q4HY|2x_YZ&O3Qe8}13Nb=XmZH|0g^npDrr(G_c&-8BjI=9kh+-1{C3 zmrMmLktl?OldJe!ic~>K@{E5hY)J3;=&s-?kO<2p2dLuBL^X=q&hqBl#~?N=p3@41 z4qmGI3lza>R*%nO(Jf~mULWh6F^4ZpiZ?^Iv=Em5S?*U~mR&BU@n^P7_(&WE^aYEP zx1+~*llLp4$ApW8b-Z$jSE#LcI-*fo6_9bvn`&*}wnB$#_*kv%pVH2oU|WRJ45K0~ zNoiL}(VUWg_Mv07%lE_~+=3FU^too+cZ9@@6&`PS*W*?)mQ`j=vhrskap=vu0~Y}z zBkP|gj;W*gD+d<1NXg;T9Wd(pw4ry;+)ak)CJm5``xs%#Q=qF$G{@%M41#1 zRPMgrFQBF9Z{Ou=VC4m>tep&~mb{M~JiD;r5%Sz{{JUOzmTTc2 zZyLZiBZ5lMH-T4Z5VP2EJKTKa;cc0b`N3m8JKl7-xks z-{o6o;IrggK+QoxIxurYx$dh7UW{zCiR?40K+#jJ9YB4$hx({#zg>1*c)n-sE%RVe zS(S%?*TQ}Ii`=;%<|@@aaMw=}R0=sy2M-8{ve?SX)8=gi(x$JY|C&(vPLNPtEUMow z#8h)E1LHAy+n>TD6{|T8oNEm>dxlGmp}12^@b#n;?n=&aQ$=`S7ao*tOqK#(>#qT9 z2gpKyu}6(6(A#jAWQs-WpT}260k$OyGM>pGykn3sgkufFDb`5sHy=6 z^~LM)4v{xLprppkJ_qn~{kcThZGS zhK42?*93cSiTh^0M868&C(lW?le)4E05Pw){5APC7%-NiI5)ZMcd50Z6{%l#KimQ| zjUKk8Y^0qX?T&PxzL39ee?_)#qinZixVq;1G~9i?Op-088Pv7lgc zerj~ttTJ!#Y*=xHVZrKWNYnE?V*Mu^5Wxjxt*RRweWfuAewzOhJ3i zdHFH)V%#m=BC6>%P1WRpS=6KbQgs?!5kkDU!Hwx2Z>&rwa0b zzeBd1t9AWNXmI4+)SeToY`YljXK#Zg-ynONzE+sO-bn#q&(a+_)_>-z6jy5DyaR{$~if-7d>Z} zKUQ1=$G~weqqLnNed)TgF0XVWqXk!>NO7-Ye4Yw$qiNQw4A@AS0+{OQ$2LJY$~vWD zSY)FPqM)PwrO@{g?+nj$N25>HPzkDW>u%&}{q%YCQIcOuSnf-BE{`xiC2rgo@ zolbXii^@M0gjPPX-VpJ{-1v{OQ_s(eRmAq%BD1~5&%+{-wa`tlmf57_Q8f9ws>{Gs zm)oPa_9#CGcgFB-=<+)$W~ziC6LUukb+}@=Y#OJ0m*n97a+0>~9wO|bvHjW)*X0*t z#N5|4b@av{e@Do`7lb;ezx)69Z_-zu@1TbCqIpjH^e*>fu7p~Y9yydhO^7sexWJw{ z)v3=$48l2!5OdzY96}~Nt;|`3cY8!-49>uI#ZH03vOg3&6Hj+`!3;&Sex{Q-on5rN zsUZ*lLW?-NgOWaNgY@#@fH-!uZ@jq8eV8CrI(gGR^XPZ(^%F1TZ_wC6OR_tteH!6xv2@#kr~wAOt%R_uO0~a#>4xXAiCy=+~Fi}S8z40;+@zh!|nA9{my?i zUVA}+ATI30Md@KVmgO7}@qzK#IH8%`nAt zHclx_$_Y;DyBI;axZvw)ig)7S;;o^}QvMl-t$&Cop9}Cea}@QSz$wr+S^M|&RN(oX zm$wNP>sz6)fD{Eg$)=d1ZNDS)PRgVb4)j+xT?_jaEP_f%c*1TZna+?)c1aNw|hsOt>hf;YD=>l zGrXW_ikFs?sCG?5c)&>MfK)E#NJxT%luJk_FM(-IqE>YMtyV4?1?Ls*NkWbU6)z_8HkK|LI2%bh+Ia2Rp7|P&7~a3xaJdK2cG!jA_kF63smJ zhBmf0Opd(j8PI@Mf#5IMzyH7wixBu?9apd>aRK)CQIjPW+dOR?J;>vkzUS+oBLG|3 zKj*||L~DYunssL*)my6IS~WZN=Sp5+xhotgU8?IJEes#F7Bm8RcTf3W2x7YP9|$t^KM*8!=@*MpxxPq> z35Z0mcm6)fZm0#2BlA??8vIe3IFZgz3p$Dx`74dM8Amg_QO0Ubnj?3vCC1Y^ zsxacnT;YV;&8XZjDqz``QS|oBY}LzSFTJ?Gc4SWlqX(C?`@0L8V!>DNX0T`B)iLld z8rfcgqY;IvdqRcg7b{jyiq7*T{G&1GNs{;40ys!l-SjqriBNmhi0k@O&X==)#eoO8 zr;X-q8hLL;?K%zf=Ol<7%}jTiXnYS7eR3Ib!`^Z+X|c!o7&EEdpbYF?!PW$Dk>YB+ z&tJFjQ`weFX{6VfeoN_h=WWk6@$_T3y65+J%B+#&MP=-K(nyNuGUiuU6~`~%?kC9y z?#P7~0niiD*@aVzR=o4&L-Bbv?Z~Vfy*W1iN}acW`qy2wJ&aI8JSqe$TQxp_O=JdV zO$37@;AKl$j+2a;r3!sl9z+hUxuhp=n~lOcn@r|VNc(SRE=az3e-oL7`my~{IdHQR zp}ikF^&%yfstjT+G-6j|WIhVSkY!hg`nul8=t~= z-Ers5Q&uAqm?6m6uR~T-3Yp$umFmfO9hLjz6RR6&x?H%9HJ!vD;~&`e;$oU^@z9(| zL}ikOwsr`Zhr`ytd>s3*?SEF?AF*h0iU##-4)QIzwbp>_|4w?t^5#$#m z4JzgIA7*hx%sDk?VOi3bpKI7O1t8k>>=#p zSmbpsV4K1JsvyB#*4`C`MfK10wLLZGhIwP_yQv(KK)!J%U8W*J)fHcIYK0PRc8viV za3F!<@TxJT31UG7*GlDE5_f*%)PCT}zpjN=*mR-@@UA)yFT`uCi5@ZQw8sjzwTH5&M~G7t_D}F$4ve z>FWb{kF`SUCGvg0UKYHOt9b31b;LeFB+H#mu8^sqQQg3Fth?{Txn6`iK>d$Bk%MYofqW6SNM9L%~ z##6%stpBLo~uF6uDq|5jo%FQ#EX4htVJV%tkNN zbL_~LShR%mqk^~EOro}lIJyc~H#^oAUB(|NB}T=h91c8%ACZ$$V8(76`Q2CN>yoBz zU#3VkqntM#JUHm7dN;19GN?m(;B|;yX~9E^y85(azS;?o1UWEi4dYV% zR50hZrvZAA*Y*&Q41`<2kENsnYO?&1(f3)(4`i)-9FYMgI$f2I*-M+Y57`)}^RM)l zqp;Ga|B+xEiuy3XZe5Vbqi^RAm>VJ69QczD5rs!CB3$U-RKb1oSxQO0G|)I6tk1<4 zcW=h4VN3Tw=*&TB0Tiv^)2DVFbgRvH3Iq1q9@60njbFFGUg+~V;s<6|xe4px9EI?` z5DN`bT1LB_R~flmEVrcSiIpC7%H84#>OLJ2&8kB;-{j@4KuN+R%z;bw)eqQU z;DM_Iw{t|Ei$?YoL7*J?5t4mQyj7|hrDyUh&LseY*wU!U@fqJ0}!xtRwDsDFoi`0-)|j#R+pp*p1lSB zf|&h9YNa%{N$f1kI;v9pfGNnRtY*PD{w$NHt020@q^{V)%PSUR>or00fOf}orO{|P zj(3vR=j(NRT_EJx{bz|*hvLCZHJdi^3D*7k++VTp1qtSv`!=jj)Qn&b7qB^qx+?6L zM#7N*fB|()z7Ld{&ViUU?i^g=KViPb_aYlGi7Ou%O`pZI82dS?^r|InNKe-rG+G^O z7bCAsIq|&ud*llnBbfJUrEB&&^v<;a57W8j1Av5tKXUOo%&Qy**?8)`K4~LW|WrpxV#ZkbqiP=Z?5hmyWk3OO6Wmb9fJ?wWzXF&95r=7 z{o<{g({OoBF>C`4DL>9g39cjwum`lZ8RGIOJ)=+IO9)_V+IGYe4lPtq)t{lqtVj;i z`zvbE(Bl6fF=H=!TE#WZiMY^|+~y%MzSaPbC(iX}(+4wxQ)F3gaNg#;GltD?0}GsdZAe!uBzTTKvbCc$sP6qz zeb2zh8(TzmREVw9Zvevj zArA6ak#tDDEt!LQs!ENS=t;iduOHFq{2H9yx^dP116A$75ggZsPXz?e2*>n=>fnA%PRI88WiRdvYUs-^0*R^7VqwMM{cCSIgG@OF8<8 z@t8oo=#IPwbAVkD4hJJsKtX~QQ%4nfhjjmHv&W|!Gw{dU(pJagcg^>FHjHhFLMKSD zd!M(IoOP%NJUyylV^}Dx>pWNiFW*(J2{OJ}QwtlJo5v2jiEG+rOdLB#Q51WTVkEvo z;kQEwk+v@}*%Bd~F9n^brYFaUj??CTae7#Q9oM#VciotB5lHnf{n!$Y+5rq;wVAU$ zyk2daLbBdJ>pw3V9rn-1hP4NZx(NJO z#B|ZRs{a{b&RJl%j-MXff?vc`_H76;d@`q9h1%3#G7C@e;3Bf>TaPb%|3>+PJ#3Bj z-Y$qQG~XO3UeOrKBBdFDeK<|!&XeniychuM3L}(@^?yk(`@3n&ENj0isYTa+{ieq# zDT~_&B`NRHUOb%a1IF5rqzSGtl9@$0*j7{!>Uj9Jv37yx_I>j`+RTs&OYj*Ijs4Te z@I62oHXU8l#{cU5DPP_U9BO;&ZNH$kJ`~bD4Y$Jj_ein0&zFM6u|4wzTa8^yleWD%2!7tE^0NGDMM7jL54*)2YWd~Q1w_?kT^HEEw6w2ag#EtOclHe3!kOC z^&^K1j2#&yQby#Yuil;zfr(N`88wIbbq&iq@Ks-$)|;D1mGPoDY$8W@SHShf4Q^eT z1G8IIFfubY_B9sJ>lg8*o&S%}PYYZW5{%Hh^)DmJ-LzqDPb8?kbD%>Qy=c&)F0uvu zNHbtl4E~=RUBIfDlCtN|JE=a9A25a`lO<8pXNYONo_2nE&V*sGX35rUr@8uw1&e!^ zc;>PekNe6T1?us0#*qM+JdhO5z>>xo!V*WyKF?BM8MRHr5M?!jBj}t61T89XV>1uJ z!u%w-CBBX*lP0wQPc%t0gCawaDwJxvU?V~d;)(Ir*ya54zXip3Pc|FM=(Lr6mx@@q zTWyR-Z+wLWuahLJcXdB!x)8PDWTfp&zV<$md=|Nv6%E~6R8|WHz8~S5`;je}nK*=T=>~BEp9iY1`=CsYZ*JV0+4{YE5{m`yN4vhvsPlX! z`71IgIcbxyZ%k93Fhr&!Veiz0e6Bp^(-Pv-1bsFUp>VJQ;$t>$L_s}b8a8}3nN%(dp*qNT@fA|tCy?jg4;?&4V0vLquSExP#zQAZa6FB9E zz-hJxa#M<HyDW_gDhj>-M=-uQxwQE1* zZ{8oszY8}N&;Iyfq;61d&(LY9B?bsG>!rF(((iqCYwP&5Q30Wf0@@aNVKaq#gy$m@ zkd*LkSM-hX++gCv<GD6j+Z(s7BC}B75&bMF8v1O`FEP;MBO4kcz9;kf7H(LB!DN z0`0-ny7{zi7$QVvma&UW8o^9IF)9#Xp!x5W!~iA zVhB0xzFL^&)i4g3=OPmD-HQg3VOZx8tT6g)l=<3ak#bao7d21BlmfoF7r>2I>tZ*Q zREwdp9TVn?R<}(PXsZtXnXSx}m{Z7lXWCA>It!qs@9QTHdGo$k^jaVs>+KqL8D{qn zuSO!6-_REcM+0do#!;@vcg`z=wfykm9&q%sz)jBI-ts*h-!@9dKx~>AizV%0{-c(6 zduX7dy-R$oMf#ePA0_yGOP~5B(XNGKZhxlav8G1L(1`}BS@L7xK|T-@5^IKo49fY; zuDtr{tm33@MM>_h{i(0L63(jME&8;P;DL=&1zNyktZ6uZ z;<@i}llz|euQE(2TlGfBSn{`wRg_M<5R&|o&_m!0wfkrv!huL|an%h8w41E&e8y$7 zCqR@19D+-@7^97K&S*vrRA;~$07MqwxFNy z#-_Nj_6!WhMG0|=27&<8P#Q24t&ADcKG5Woq{FcSoy4%)gM?g<2*APS^FirBP!P^B zBz9&I^48S3IB0u*AJ`qh4?TMf-`RLfih`kCEh?`-2T~_dmN5n4WCbh*uB4`6Y=!oGcSHCX=s6 z8(tX$U+gCW5($#B(6gR{5%EZor>X!*Kr<#&a#Am10YaX62}$V4JnU#A(DvOSL00Jo z@IL3L-LCX#IM=Uq^{vm&^&arL-y6j4+PVKY4y{?d%z_3A_;d}<380=JKncG!oB~^5 zPD21OKTwDT^3*bFZ%{`Poqj2}HKPC!var(spY z0uI!qc!wmCA%x&)_nt45+Q0|#FCS~)J8MaTed<2G0|578j)Z_mmq(2_S1|y_^Y8^N z{Tv=O6(&=I|1*}mL>JfkZ15h|k_3y1__;lME1Kg})thla? z=Ikc3nE$-N>uQf7>xs^0W|EFnuVi)WI3N6VzXI>(FNuqkbM5%U;qtg3I^`(R7j+P-?4I$!@5;3f%8N@i(H z=Vxl~Hg$KVhfr?nUBEQpeC64mK-jsuI$%`txWGev|GwvbZ#oxx{LM@Hx8UnFd{+>Rj5 z<9xXa5k;<&Xm_^D<=iQ++?E`P=|_F-MMU5xA}s*j$;NjY0i(}Q&5MmAX)$^tQN9=pbp%c%6bP*s@(9L-?O>a z4$^vBEe#I#zdD+qYd!_~{LcY-JFxx10|ws;O~L+(bAEHo|5jNY*|iRv5n z+G#w#3?SktD#Q$%+ScWrXJ}{{^ZE+R>xeWK=EM_6{fUeE(a3e%EcoTFcqvNrD(d=~ z`BIJjh-}m*%?aLsm=mO**+h5lKL^W|I~`0pO9D^J%KbkgYv`oXvs} zH-#5{J^y|nT6P*h=%``vUkb~STVm26L&gYdj`%gufL?ad82aL>VN%KaBr4NTaqg&! z*sT9C>s!sH)OK6O-J)(2#)}c*V07D;%zha*@>?|3*xvl@@z8>Y&rxMjk`GmmUNBGa z#>J$NnCR-fc0=xCL3a}X@^r_J2?kEPkFq6>pOzgx-|!y4<^V#ztQ5^>+)&_mxCd@E zS^yUx?~{sQZ>dT3WLisFfO2;%PsVDYVUSAIw>zROkX1MPEQculUf*5eC-G~!2$w4C z>V>#RN77IM)-P{H@h$wzEP?*Gp3LL7ltDj?Jb9JONXr7PjbQOTWi{u!m#KsNXq7Ee z+^K!qnK#SZu=Z(jKFHh#EdIJ?1eO6j>A$8r4`{zt(Cg)<;e{su0>JvBO1TaL%Xnh~ zz+7wZ2d)!ozL~a24Qyq1qbHdKR`2Fd-)!A)RAxPL1tG31Fc!7|3ueB=YyjUnLzg7*YPpsptPs=kUOYi(QsLQWR z$Ca-{7GaJ-i#OGe5nB%^TMQQkTPV)lD64pjh96WGTo7TfN3SH+o?EY^Z`0)N6MLor z=$OMnz$X>COPg!J^{DbJTzbP>?G=UsAE>zUyN^Mxn(azS7C^7NlNiCNENU;0i{3eyKvMW2vR zo5Ae@McGjxa66;&(%N4nbP}%2ZrPOqJ*Ee0s77F`JqL`zR{ca~gCjr_a1dWVV0P}- zO{^^u+S5%&x8vDlQ~NQ9qjM}WN@~e&z9XByIRwOwwCWoZ&=~w3k9^3dsF`!puwbw8 zq7!td-+M37G02pslpT^J7+-to6;gjaKTpZ0OQm2=4QO>o0nh*JTDW%#%7!LE`>kec z-{12nju_BSkwPc$f*!8HB$7$hx+`Fg)+fV%zh$}J5xTbzY;Z4@l-&jH|ahssfM z8g$g{rEjy+h&UQ7a4+9kCw-|k{{k5s`NP%mk}Oc17F<0=_=vO^AW(d#0z=) zEZM~uFja`~IRFBUDm!Sa6g~d|y+-O9yU7P05Y1wl(IZj#x>CZ$;De(hv+na0hjS5Z z=>!Iy{I~B{uS$C^aeBmu^Q>U>l2FmzEnJagBx)0l4K7t^Bq}n2VT|Y6!q2N|9gE-=6+ic2Y7uBHNcvoI_Rq zm3ZIcM|_fwFniDomJ+qS;DwOW0c}v07td9 ze6J$3USfY1^_J(?Z+d&y`nFIgC7^8K@TdYR&&x<#YB42VI>%#SQh7RU;}HfYX1|bqs*7G0U}F z05+$vtszon=-(*LNUSxqEB|jy>R;V@dZA2+i-ofsgYD$b+29#uMG-i>PW82LKH!WG zb4aBq(iJ|;Y*b&F6`F}%nMNrFqvKeqN1IPnV~qu=#cK8hQW%Y#BTB}zr0jP%Z#cJw znj5x`;s~I@>?waKSePH=Vj<~5XdlSb|BPd?Brq+YSX0}5dtfyu;bZzn+WXJw!XOh1)BnZQVfu5`I$UY>aKL_A)1_@b3I~y|%;v38Y_5yG|9b69Qw%s@+>Z%7V^P@Fr$~SJGv*^HGQA87(Gfk8esZ7FB5R{c}oqZ4`~hqXJRWv z1<<2g=!p0R4rZ$g{*{z!$fcGADPrmca46W54a} zgJy@n*}om`0}><&6(3+{|wcLwl1I zE7V>z;2@~beRo#4XQ|4eLOpv_z}o2vuVO%n;lo*Eu!u{Js7}bVp{7-xF|?XZsb9+$ z0ORz(RH_g~Z@zpcdND1~DqxpGeOcVm`nOXSd%S(Ur&1N__u9x4Uj2?H`NO6%>V`Tb zTg2~|$l1fG2houB9|Zdz+Bc@5CJHa?X1ighK&NGPdca9CZMHaaM_DNwP!NNVtVE}_ z?j{N-IC`y|6bXbbakLtF+O8O02{nRBEd6TbF;@zdp$_5r2N~T3M)WVKSb_p;4j-uM z#n$&q1!C9zmY8<@-Vm#4SEo8fA|b6OB( zyQVx_)DmDAdJD;Vah-9tJ*5kr0$^_`0BrlbHB)Tyv%18Y4`_c;%L%(^>E5bh#mbb5tBXKuZ3^0DDQ0b~HO^=y zbGxl`AC?oV60^v?4g8w$K$pH$wFsM%v=FC{uD&Yqu{!QCmVw@j zWJw3}7FJdSH85-F{O9y4yLI|^5Lmg!JFKgdxuIO3s9Q*uR-x|B5o(aR;e!_}_P`)F z2mZ4gMZC&cF;89`V|KxA9C2>$kMQ|gN}90r5XPv%d!@&Rx_)fhD^QxioapPfB+ZY1 zYEJmr+WOSagUvtC(>KEVR|ohb{s+nnj8r+rLgtf{v zk&x5WRumqkTeHefieureus(bhU?R)zt5l&whD(5+xrEFJO0jWs$u{?g+-26-*z zR+KHeA!gjNYnYGG#W}jX>&Segb!oYh>FGcBs1TijfX3*n#=>>NTBk?cbTx{0!q+T( zCGCp3CYJE1r-4|#tzn6wFXf?huGhc#+!3syN{#olP5PPcE4`XsR<@QL#?haUQ~A6z zl_TA{96u3o=y=soKct*}xjDT>1YGn@+H*sBf!-B& z+a^};*$sm*Ij3khjo&30qJ;s=V`H>86KZ2bF)aPUOK@oKP8Kg>8s>tCUReYca#PJ1 zC&Kmf{0djbVDao?7!l=|A#$0rC>c>ws!?NbZF@Bt2>3$~OGI?00xZ{3BqP)C4TBWhB9)gUV~9l3rkwOU4h(n!me~kJ=hK z|Edpl8bzu=oj-iS|D^OK$Zrcz)B*Yz& zioE6&7xv$VW@^vEVXNsC8SNXrj>dS2>qpS-u#>U6NquAAoWj|-=#_|UA(1vMvx_f< z?@P};5sJ(&Z~_+Gek7hIs<{Zi>pB|yVSEGwsPUAF#1KQK1;bhED>BN{pwA$>0(Z0o zaK0lBV+z0FQ+Ivc-{X^5NGO!kk_q@mdBLJCL+z&c0tGr+B=dOhX^qs}L+nCrE2XC1%DrJmZb_?aKDB zA#w7Rg2>+-0c5;Al9$Fe(1S_Zbn!#i7!QO)OBAxSVm`y*d{0Z6)2Hw8*vWpQP4n`4 zeE7}p8VDlBe{1fv2D)(q-n^Ys1+uCl-QeokXX@(%>hzdw|EqaC@i#yG3=-z3Ibo{9 z)Pzj0lwS^n2q87DA&-z3Fhv4twaLdf&L0JTMjRRbfe|53JDrn&y(s8k3$**jrt5a( zJ!^rL%RMRGgZE=%8Anxixyi`7cqjRkSE}CE`cs^aSJ&2LjV>O+qC$s2pEdI_=(Fyg zhePKK_HgdamMqh%>7OORq1({x)P?JP&UC$Ub1BG-`@YM%$+HS$|ID<0>*l)}d$x_II`Cl;|L!6P3ZfyRSo}s$s>j0g-zp=F{2@)=a`Z1PhXyfFzMja%$d4@7u#h)INgGJ>>o!Ek zBqL`H$t&KY;O2i1L)S}f3`*vvA+Wg(-Dnd1@$CfEfQ{4Bj$sMG@{mn<4{1gQ@-N;3 zmp>xnaeIl?{1vV5YAU#S-V13x7)0`)!GGGmi1LSzDJ#P+e}%95ZC0l}M(l36H$ORI z0G2Kn_PVGb_V#g`TxcP^fViT*H?IjNTmVrDcm3T$4Ha>UNfJ34xcVp zU@k0cmZyX@({G0MEQj4TBLe+#oUKufX1L-X{okvfHV&&rZA{-lJ#t1N^GHQet^vMg z*}y0X5q2bxr>raU4X}X;&b)B!m>=&8_HDC$O|Cj&p1<7WCRd_W0oW+E zNyu(5!qH&Y>4p;-ucf$nLgcOJDsb(av;ui}9lWU&v6(Ya4gA^xgxu?d3N#85d#xoY z$D=fy3n_;QNsI`}_yr?oW@_>jHv}megDZg0cQQ5GyL&0y8-t-D-X+kO-r-F*J)&k! zBfXD&1hx6E|L6u#-aw8^W0YupmX4Zuw*U-1;8u0vMJ_w!n1#DcPij{cOM&ga8e!%z2JGImJlG)688 z_RrTg2kNSWZ<>Xq4jwRx`;Ijs<)AstEF_>Y3_NvGheKDjz$xZbK4v2f)1Gq7o^u1& zNqlUBS}^Shay>qA>Im$=4tTUicaCXM;XkIBxr=KG<@ca1{ka?qntP%9TR+D6w2OCv z(Q9Dd5#DI=A~s6evrmr374;xRg$_TA>PxSiMJuJqWXNZ)*}*)i(rjh1e(T@zutOAj z6fq_JuIC?OzRpk!a6Niar}qPP`B{f->}kgHsYqh6SjUkCnFY=~-)#Ek%d!`3vLmCO zu**VmWUWm}43I>#9gE0mX1WMd{M?#$mMK_Og6UThN}>ob2Y@5|7jX4?>lK;=);p7m zbAh;dhpYLc_cCJ#dG@=IZM;tqH7(eV@MeoFbQ)kf0{o2L9eT1kNKZdZyRh0TBWVww z@e6Y4BV79^@$EU)%1kmr#|cRa$F!8l4Erq|ASH26{h%gyK-pwDz7|-?hqmuL#Qh>F zP9P_ddq#5@LL=j1=dV&vjeOdC5x&{1hI_@TON8X~+j=}^c%9zhAcCYt{EQ!iUSAld z4qe*UAa-E-h5_Dt=?>~H$IMSsM@0ie7%j{5zJ@wBR#8OxDC8) za5WFv>)EBpl{i8}=rql_uXn7%XM{gxmJ3z=Q3A*c>chBN)v63dL;J6*6YPbqa_Uwk z!`r#`IT+QhM37m{?H@6Xh}0@Jp5sT>8r(o`kj#a6ZQw3wlO$jG6`}(AD{9QXqLsq+ z^MmKTz)?j;dcf|6Zfwx`7yas3*&zzr1`pVZh_y3ktDNecZkg!2MVftqI_rMAv^s`w499iFx%~!n*WK#?nJi zg6)zx*5m>E<}vT0cCJ>^8^Olbr0liW zIu(q_6!H)7S(-OY6Tc|ANt5HvS%z=@n%t!m5qnQHQGb2JP-l33aM--}1KxYFxgHTs zlTLjI2@PnNUWVsGo?kN+oY4Z4aY*!$mrl+Lm~@C~2v3)s@hkjXdy|>b0lqv4L2g&5 zUD2P6O~#_ec{1MMx0EdA@{o#mna7UOFK#HG=4^(9kUufT*x%`<&AY}?)aP7-LxAY` zEDHl)|5$wy%>k2!73kIJ#A&-HMAUzsXn5BKD(O+-&l{8V1&6i+IU`Pu1_k32mTCRS zqy0;>jQb-!)As{vk+4?sC%#U#Ybty7BnIZXFX=9xJsHOws#@Wck{2IT~Ks~bMS-FsK(Qj58OY%P36-aEWYb=15nP_Fo3 zCk|RNfnbXL5xSWNy(Fu;#mQ?1eB@^b{JSO#_o^Nw1Z2dvdU&yt6b`@Xiwhwr9gMzB^SXI_M-zCG=f93DgMa%Pv{`Uk8Q z1&R~9A8gXz60Zxa6WUWic13fYlp0q$wI|{zogjQukdFx|@fx*+8wbA>zIh1POaP~; zR(6*%o5!%RiLt5o zWVC;5O||S$!zryVH}xdl`8VBApL0R9V-i72dBAi2xyCx-_A3OdJJicn3{J$vV^8n# z^eJo{Zuk&kc@|-c*SZri7M#{&@*|%q=KP}C5yIEDF5}Q@c0T!SBoSdKer>zrm>1DN z#1#vM(0KLJ{b!uKMCj*!NOylH6|C(k(_@J{POA<)K2{(BLuf66iO5i%4gj}Z28@}{ zE^+==)NIFfzIQWQTo&E&3@IsUXnQrB^>`W)NiVV(WiJzM|LnlhoioR*2%I@R5qkyP$Jja zY&179s&c|?bl3?=f0xL;6dlLJ-wR3N6=*($Z#xoX!tB!Fm`X-J={}=EV)$}(e@K#Qvu%8?{C-e z1OHM3lri5{b6_g^(HYMbER-W)|2JA9%wk0s%?YQah}Q&&3x2eSD*-mIR3Utgy$1?Y z@%`&{9|Z)zF?o`zT3_Z=I9fsU;SiR|`RVX14h0b0!fMgDK{xeHTvBj5PRs^sXZMc0Q?Twzv=n6V?uPQ;U=HJ|@j4d|+ah?mx|{bV^)2t8%W5_))A|KjaG zPHQgcv?fZ)!vYW4jOc}nqK#$jetwWOeD&^At#N5xZ?t^@_2I@GiD7XrxBV;8nObp- zIyZs-7e^KJh<1x!O5$u`0kMmT!L4gam*J+D%D5+Na|@TEShxpRF+h96hQ1cp3<^*U zSa^gqz$$<7*FWO;)L&oyJP(_J_POAPxk&%mC?jHm$CCQps2O}3`}@_dkp>01^w0KQ z*W?tKGLN&y1*^%d9gQy@G#9?6;5pR#iLbF#=FG~0raO%CY5G3@oxF#qJHi@F_v!jD|CdLm%T zHFeK_H6PU{0+YeDk>vOUKW)-2(ApJlUUh2wU?iKEMh$T@x4d)doZ(Ley&;kDI*Nuj zR2h{UuLwMv_z2y~?)*0%XEXY?oCy4j4yXWfOLBuu0c{0K1oJ6}>;^duM>D!aYgzZJ zwbtwEoG9PY3mxplYuxz6FC5!*!B;GZtFJPC##1R|F^J^@XR5;s?@hwLhF9jjVSxXh zMK@FTq7r{36ps$eGNuYZAK~Ufc$9nh##0>9|CoGZa_`za8p9&g%iDQGkFY7xp7Q!LMDR%0T%KCvF{gnUIlGb0dr@Ixuhd7Ekn)+;Sc@ZVN6ovAomR;_;L00pCeq@-}kxU-z?@YMlNY}Sm<@Z zHb<4xAL@v$_0A(>cH!P2D#gqX7KsuYmVPypv#R@z!a97KK$ViJ<--Ms%=54M!<5yc z8k4#o>%K_pjyP^P!WRo8HjeI3;M4^#<2Aq3t0HYAai-=7nNS|-x z7N0rLd1&m_Bua4|93_pM_S(?*iH^2?8FiP2qsbnaHDpOy%#sx!pmx|Fn|S7+U17@L zTT|q$IXe&`TL6g-YxySH#(9^9ixs0;Y9j+A_>*`yMefpY4YW7%0P^SnOqIUi7B>fK zv=4fb^aiM15qq?pseA30oz+$Wt=-@4UouWG=X0!@)fQBCff72e?L&S-&Fa%Jt#i?E zBQCyJy3aW}=8EH`1FjB^DqV*$Tk!1-iuugD7@Uz2$73XoT9oM)q!qDPq+D|18e$F@ zq9cd-ghj1i$~Y+pI4-Jm^SITlJW+m8ubAk|;Pk;i9_H)xJ?5PZx6LK?Lw3Y6E*OBj z*wj2U6r+A|6Zrc+3*&~QVJm6l|F~pZhWC*d?Rzyo(Hzpfl{}i}Kyoi|d53MOBO^|t zA$txFBp{;j&TH%}cbTvTw(Y0#s{A4`BZILxqkrS`G?{me(s~_=H6Lh5Hc%qR$@ya* zyzljZ;;)4saUy)X0Hmj=U}gZl62CKjOjWq~G*EB~c(pRFv-QcnReJOa*AhRO+_p^q z;QKbOln6$W6)G}86Gv&_f>C^$m04LMn_@zmNfZewrt#e+(cEF=yqrGM})Y6yN42=7P8#DMJlsTgvDfZfF~!Rgexl^y`U7hG_z2{2lHd@v@ zzb6{>g*z-Avx@rl>MImEs!j#>Z?;)I%0HSTtd_pLGplge7?OwfW^*q0tT2Ufz89jT z3({Y$2LHxC)y+XdSqTS7+5Va>_ILQ_;Cx~LnUY5tUHA zmwkmcs60U57zL@6KSz2B|7X{lm+!Y5sVG0Lt9Md&K%EosTFY=Y{Ni4n;bqv4Kux-TB0k;Qp0Z<7)VRc`KoWet%hjlM9q^%6MCjig) zpeXVD9&5BToK+P|Oo;l-mXvGmF9v1WH3jJKwG~e{GT9Mh zdy8%w2Km?tU=MlHBR8X)HHX-B^DcmF8+1_~yipl+Ryzk z>!fTFSUx+Hpr4A!s%D$LBc#jsKycqBp)f!>{_Qk50Gfoo1QBQ_mYi_-OnXUh9fC zHwib{C#o9EZ$jjv_SHi(-OY!VgK zaGEG4(>FA@2Xs@2nFeISlLLY9UWD5i{i%K9GaPoI~C%(0{ z5mjOx>FEoJBOd77)0o=?)9wCNG~{-F>r2Gs?Dn7iEd-AIJujdv&~~W)z6l#iZP0Pk8Er5nCp z#s%dw>MV&jw;NS1Vh`Qs8~l;%!rVtzLjl%&%o5S1Z)$jp?Gjm-G_LLgv&RHPD~YD4 z;Q?ML1cc+s4*~wC1yCsbg0_cyHUY6RkK~-?>(w&>3>PAen5SrU`9xOzBTyZ^I5p(L zXSBgK{6pkefUI8AivGKdrxkyjZZk!+_ZsOMSPX$8vmw~1 zGE25(xQz|FSzw?L;ePXn`Kob9=L*Hb5f01@L(Q+|4b@>MxsrcaCA5$oEu_xMeAy z-eW3OiT#B?7X{_X)6HlQIgm`2B=__87iV+E3Y$c>TtbAwI&ZnhDHM*I!Gejt@%z&0}|V(Wv36U#biHj5<6ORm8O!sjL64B>tKjo)ysxsH&z3gyN(DXxJ@jo zA7*;cWsQO2WsI;_DDea%2MNIFF(Tc%$s9#d$?@9i6u?M{aGFjXk=4x5N#xV)(N zjHO|>;^tuKhF8WdDt!PlbC}r1@**Z|a9!}piMrEQn>Vuzq`l~N&(vb^J8-G?ba^Y} zp&jELEH^8w)-BjA&#rBqeJ-=@jcITBMhDGl--(CUDyBR172eFn@Eq-CJbYYtIW{vc z$VvWzj!P{=bExi2A^P7fng4#5Lo)KaVG?ujvumP9Yf#&@Z1^BnRm||?X!@Wpt-C5e zB;N9>;RN;b@JO0R_50{jyj2j>ioowzdiT*jIlzhaX6%z0=@*CB^Cq9bt(Ez-;pHO7 z%@{-TNbz^Cpjd@Ba5^=m&vC((jBGzYr#!dD{*`d=d->DBSo*IPon<*48wbP^mh!7L zjx*q8z`zHgoX~m0ndG~XZU1eg^V#;`4G}f&jTDete1a~JI2gXtx%BeOuLcjDnwsX+ zsuH{hXo)548bWGdt5h{?Uuz927Qo|)7QY(<6~03!o|502TiJ_j%)3yMU1ySwRFL*K zEXAg43&>JpOPZ03DSxARnD1xSpdqZ=aCG>-A7Xfm$wMTt(b@u zPYQEyhIS=-`tMk?=KN*cZ=UI#`dg*z48QuUJAI1}U_oGuQoeYv4Y#ePUtzmu14Ouh z!xh1NHT1_(OpR%A5qbPcDv@XQvc3c9mQCj#wvIDj*Dcx?xF+H`5fb|F5T-9xZVap- zNU3X8?IgM#M^i3c$x}sI*;)tH*-?ZsRNym z3-@zRAG)V~j%B9Mt^Qg%M@gjRo(Ci2;9Qm^qWe+2#7>|gv)-B-pgz=aplG!k_E(QhMxDamsgV8IDRcBMfqp%F$wE72^13@Ieowi# z`j8WR6S~+y_X-mi$-epe2bZ)lcaoVxhf~?Pn$JusVBf!;>IbUFb0hHwzn^V*TF(Bl z?3afu*#$cZtU^U|HXc}%Gq-dqhkhDBU5FSy%V;^^Y!zDvRBHakAybvV&| zl$osF#_AGT%9^4rZeh|D>7ZwcnwUGvwc{f_D`vxvKyAOf5?)Bz=iBO}q!|wb29dG3 z8R_JR-`9b3%nS`msh2u4=WZky89NHGGwVer{;c2P)6zBpeHLa&ad#~Uh zA<`rsJXwUlko^E|C&*|1E5KkUW3A99t+VWv$F12fV5q>R7yhKp3Zmuu=S%80M9Om> zVhaWV{aVigGdbvTOi2PF5n$3ss~bS8`4U$(L2Qa#K8hO>U^~DYqu<_qBUFxG_)ldF zi@nq&zCLa4n2H9SEetu}SpYetJbYk>rnBs5*AHI6VHo0ASxJ9S=~q30v{{JhV*zRs zP7m#JQZ~j7O^bS~F`=OkESb-+x}GC27>u#lp9r`Zc#*>&Bh8^}&=vL(QW3 zBF;hE{s_IDrPAOV`vQJ?7o@jv=D7b4&K$1Qv@Xo(w-G9C+Qn4WqVhtm!iBzRl(X!8 z=^^cKxH*(3>=<@-s4UKvp=U<(eTC=v_#FSEQ0d2m9RB|S7|nOJzNhgXdlj$;0-Eni zFsXNdW|b=(Z^`~8`T@VsWA~UWo+r_OqezOwFVf~QgVc9ah zM8m|Y__ong8C<(smys0uaI9zQ2MVG54{8kJ1Lu5Ze-5YB4!*mabUE9;_^JqFED%1> z`pctoxma_ete`LAf~qJfjW%KU_VLUA!ZTCs^WM^#W6)5|UX6=}+9lPmli+vVed)>u zBL?`Kx1Sq(DDM5P!3^PBc+t~~my#5iVfNPR6eG!nxspCY*HO4LaY&c&(y}mI>QYJ8 zl2Jo=GGduiZVih6{ZaRmOG|IwSDBY-kcU5Q&GkDiUMdj_OYN~Uc-yDIT*}fIwYL7c zLkFfdY%j{?T_-G=+!AJs*$|&Pey>h{IgF_>OM8q#R8P$RtW{n8-0~e^{<}orK_L9l zBH|8SM97}^C;(v`-S1}k#9w(#yNXb4)=54s)-l&0$@h<$q=!RrZaseG=`BT(?~4SH z-tE$I4C^`qvBV4Re2`8t+^yqrE7Y2XGjw`Edh3DNCsIa7f7@+7{YUN8z84clPxnkl zV#!mrz4&tfKw|(iRE(lMevg|C{E*EEt;N@%55LV6jgt;Ae(>sJ1YwF_Tp25+WtT!B z?K1b-LCYt#z-7FLnBv>oJa%7MC(cvL`8~ll#Nle`G$1$ycu&FWmA~L;`s0QMf%Ay z_QW5!)9Jt^#_(JV$?Wq^0O)p5)YxK>gS$ihzc3Ee6?w=xLeJE zqc)V`Pgt-l5v$hY$x)@oJs+zgrFbe?;Lm^gTz)JKO1sP|}r z&)Cxlxg5AWQW6y26ZeIi6vT?^HkrJ%K0tBpkBSeS(A5n&vH8vNmg1K@#49osO`=%vC$kDm-3ALrf=D)yTcNVx>>Mu(r29!KNFK;(7*Ll zhKqif)9tj&NFogj0N*YxzsBu<6W`Pv4Yiztt+%h}&15ltg?`USxHJ+`8NWII@VZk; z=cVsUn_3ke;vdrI7Gh2dg%#D{Yy^4URXSkGGsy7^xvG3m6jS#~w$P5Hepq*+w(mJsZemDjX4GcU|1Li}*@ejt-}k5&2;te6ua=wY<1v3y5w z{@>a|P_x?xe^>&fH)A>|+-eVyR#e-WS{-+XPfP~!iJNT&ku%lCV607|$W;4oRF&V+ zo5`>*cwAoz4Q>fz+p7uqFz!!-nQ{&qG=A1s(LTg6S&anCStDcL+SNdR&yq3{8(J0) zkj`32tP7jJG1kBRW=T&#bo0y**uMR$ii>jb2_Nh7hdb55*idrSm==_}X8M$WpjKI! zH}ESSg@yj`Tm7q*GIOVg&@Q8vH?v2)N#;id_mORf$b1Di*(A+L77x?6@{xUdYAIf;x3G5@j%b?U@>A zkWLXJttF-&Jed8d0j|Q?UU}NmDN?-Al?3cP4>MmU7mj9@cgY=ZzP&`LD5R}PvT=gMK zCl3|Ho*`DFssz>FGV~U_Q}?u~UNEQtwlYBnc49`$X#aVZV~650%W-ob0-hN$N~Q7k zb~@oK`escY9B4+CjLX;jcybk#C?BP&9%)9@$^Xd(VT*66fAlX`HRVlE7C?JAzLPDZ zvU~*WC~jXC=2Eur{^0@~3W=9!}b>OW}K zC*ypBkNu+;HuazdkV<(Lin@Pvj_u#KodBct_4ihFTknkrs-c`B_^2e3xbe{r2z(LeG@sYV47TEIw8?@Y8iv`<=Ht%t6Y_w5)=>D7&e- z^_O@uKz|9NkIz)+NvkwuorV+NE`GF(>3cpkpfMQS(OMxp4ayM;)lR!q+34G}2Do5C zgo3Fsvpc+h_I{eUJu#y4ghk+IVMQW<{(%8JJHj@W0#ZrhA!&f}_mR0e7_p!uiQ0-J zWPY3|NaTN-6y2lxNm_1%|G4HU7(M)M*rReT;45|USj6Jeuu^&@w(SU1D8BN1s@UC2G4 z{}G$M9ya}`psbxd?_?uMt9YEeG(eXC6onB769R1Hr$fD*-7i2h8w=(yOm-Cg5~$l;!CF~;wzM>!Ag zbcHm z6hF~`2TRO^W# z0fdX~hJpQrFS;65aPfT3#*N!IKijM$pqLe4NN^2;ezJAD&l9)A6yc?=a!?$NHi7j< zf1sZ1W4X=l1AAwsXg2qBn{G6ZGus~#pIL98tKp@g_)8crl6xf8ty}e_Lx0CR`|}d^ z?%ER6S61<4*oH=9cU?os#AqhdJLxhkATc|GEE`z&& z%v-8rz~rCWAG6pd&#U4c36^YwywwP_{}ConO32WZ^$F-r!^irY>XlxN7w#K&t2azG z1d%BanccnNexRE`0d2Am0vh~>B)Q4?jdZM>Z8!uURX2jh^y=SLTINeQ{uk-_l=NW{=Wq?6S3~=id^!)`(e!!sV-jsCe65!#qQrbia_?5)>CUB4l|| zarbF(zn%t5EXRmVn^k7t%FNe?x7FFW#F?8vjEoKWf_{z`6#+j)pXCT}kXNtO#yWn~ z>9Pf_522gtcUN`K{$P!=A$XU9^1;SUEcx$^ew__kw_CNnZb;@PRdATm)g$8mqk3{? zy9o2RWG(S|=_eZod4kwq6lNp&79NJYxh=q^H74rZerEhZm$CiG!_UW%DrvG0QLiF$ z2zy@}vvWg112JfmE(_Txd-`T_aOv+3<2D9^9e9!i)#=#w-@GP97q(f&H+RpE1UasE zANK4Yz%wxbo;Y&{ct#zUwlaZhPb)~jL0esd@1(sd7{wcBPz{t{ zj&V)^0g8dIY9fwdVn_b~6nWdeb7Z~h83}TGCmc$|)*1RD5LM?wv#~x~GKHKsL}ImwTPDzS3(({0uMHlEDrz z`u;&Wi^Uf;>h}l1t$L91KLwB> z9gLzwfk*89$Pa-xJ;P*40Qx0*lpsfJ*lr?dfJkD-^M+wX*gqPa9MP%IG^YST&P6qP zQTdAF(-L)qx9Gtzi#qdHJm&Vl?YaKlF*F1q!7Mc1qpsJ{^>l(Mta2D0agy8Xf2}Hu zh1eo=nGljq$x%z2s+I-t0b!me!|&Gzk4Kejb?=lI_1!TNi;-MsjE3kMO!9pwd(gbv z^@#h4=v5_|1*Cf$28}i{Vtp$=Nm6q^r*q7-sPYuR4tv#aEem=QtfzhE`48;>GG|(S zvN-{v4{q(+-cYjX;^2fk#9wt!)4R8U9o5hHtxNl!4=<}!#%&IZXkXojp=5VR=R8LC z6oO(BFMEm;SRMbfUu#EcEa@Sr={#n9WRm>Hr|Ol9gSkZnf98rp=x9k0*W9Qh7vZN4 zLKlXOkI8|CcN->wA;LXQcBj~pkSVJh*J1s%X5m8Y&ZEetCr{?__w2>|mqtEI2bG&9 zJPPv=b(P_JIn%1vM9SiPD!p;Vh6pqOORhNv|ESV1=zc&~??0zVJO@vam<%|roS*rD zPQVvsE&RB`MTLhMlo$UX_jHUKYiM6_AU;B#s-6o-qpyM9hx-xee3a3|CsRZX-X2VK z7e4KgoPGLL+QL3_Z>cUTM`oe+?E&tIs>c&Bk^I!$9Gj0C#|5+DROSo2-$N+*xRt=v z!1rRiHwlRdYGvRq7D_OQPU922XGc3IJ0olr^N;UgZ6@h;+6lcooN7mmLS2@2 zcK_Aw+u^*9cT51NAA^cQJ}u}Ys%<0I?{dDT7~zyYOC^4tCMyL3DYVC5J)cUZf6%Vz zlW=IWU$s=6u_(J6QOO3QZ7kIH9m77b^_}zs6b)Vz%zkmNg4uPOSgNGssAG^WX1#j5f<&;DgWF1u!}Xe zz|UP&xVw!m!-Ua2pTe7iw>LFlM3IXc5yZmd+m!Xw%iH8(qSbwRTRm%T$NGQH zj+oN{A#=mWwZH7gg%0Z3)t3SYe%Hri=cU+7s;gh!$9|oF%@s5JoETi2ddC2sJliUD zE`?)-<_9VmFeI0Zd2>zdT>e&>Y-q{efW&{&fOq8P=VJy zg@VwZAqE-L!BNKwI?33>WEuC7QLLq(O{N8rh^--)$A= zA9geUf7s0hRT}@U%oDx;o7@aKAEIbrCd*4FE&3fCm6EXlhctY>wa_l7HFDJtCF-la z>J}{r`g`ib$4JDe-K|P8zO;fJ%mongS%o12X&<7P!)7H`(N`T3F{eju%`jb%ygYw$_y;E zyzqJ$LHOsk(lX%nNa_n+*V@u1QcA&{py3^xQN(KMvrG6uM|kgbxeK^3SbyC4AV Z%rSS32#Z)Ucz)x(H&RNH-(DF7{XcNlmT>?8 literal 0 HcmV?d00001 From fea4e1fe67e3510e9a437c356685fb7baecafd03 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 22:40:34 +0530 Subject: [PATCH 14/79] added id's to headings --- components/FinancialSummary/BarChartComponent.js | 10 +++++++++- components/FinancialSummary/ContactUs.js | 9 ++++++++- components/FinancialSummary/ExpenseBreakdown.js | 9 ++++++++- .../FinancialSummary/OtherFormsOfFinancialSupport.js | 9 ++++++++- components/FinancialSummary/SponsorshipTiers.js | 9 ++++++++- components/FinancialSummary/SuccessStories.js | 9 ++++++++- 6 files changed, 49 insertions(+), 6 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index a1fa3403c5c3..97ca4efaacb7 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -57,6 +57,14 @@ const BarChartComponent = ({ data }) => { }; }, []); + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } + const barWidth = windowWidth < 900 ? null : 800; const barHeight = windowWidth < 900 ? null : 400; @@ -64,7 +72,7 @@ const BarChartComponent = ({ data }) => {

-

Budget Analysis

+

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

Total Expenses: ${totalExpenses.toFixed(2)}

{/* Select for category filter */} diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index 30a4e914759e..0aac3cf87e15 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -4,11 +4,18 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function ContactUs() { + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } return (
- Interested in getting in touch? +

Interested in getting in touch?

Feel free to contact us if you need more explanation. We are happy to hop on a call and help with onboarding to the project as a sponsor. Write email to
info@asyncapi.io diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index 15ffed4ea203..d806c4363f3e 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -47,11 +47,18 @@ function Card({ title, body, image }) { } function ExpenseBreakdown() { + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } return (
- Expense Breakdown +

Expense Breakdown

Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open Collective account. We maintain transparency in all expenses, and the TSC approves diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index 283e3fcd9cdd..b7c712c88b4d 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -3,6 +3,13 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function OtherFormsOfFinancialSupport() { + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } return (
@@ -15,7 +22,7 @@ function OtherFormsOfFinancialSupport() {
- Other forms of financial support +

Other forms of financial support

diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 432d38cc2e6e..b539de0dff23 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -3,11 +3,18 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function SponsorshipTiers() { + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } return (
- Sponsorship Tiers +

Sponsorship Tiers

AsyncAPI offers various sponsorship tiers, each with its own set of benefits and privileges. These tiers include Bronze, Silver, diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index e3f1de9a740e..48edf68afb82 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -4,11 +4,18 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function SuccessStories() { + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); + } + } return (
- Success Stories +

Success Stories

Thanks to financial support we can already see many success stories in the project. From 9132a0cc42d9cb0998ad4ec6b7c30353aa0df76b Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 8 Aug 2023 23:01:00 +0530 Subject: [PATCH 15/79] added link to get more details of budget --- .../FinancialSummary/BarChartComponent.js | 19 ++++++++++++++++--- .../FinancialSummary/SponsorshipTiers.js | 2 +- components/FinancialSummary/SuccessStories.js | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 97ca4efaacb7..9d0dc683579f 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -69,10 +69,10 @@ const BarChartComponent = ({ data }) => { const barHeight = windowWidth < 900 ? null : 400; return ( -
-
+
+
-

Budget Analysis

+

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

Total Expenses: ${totalExpenses.toFixed(2)}

{/* Select for category filter */} @@ -114,6 +114,19 @@ const BarChartComponent = ({ data }) => { +
); diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index b539de0dff23..3ef33acc84d7 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -14,7 +14,7 @@ function SponsorshipTiers() {
-

Sponsorship Tiers

+

Sponsorship Tiers

AsyncAPI offers various sponsorship tiers, each with its own set of benefits and privileges. These tiers include Bronze, Silver, diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 48edf68afb82..9ebabb30a58c 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -15,7 +15,7 @@ function SuccessStories() {
-

Success Stories

+

Success Stories

Thanks to financial support we can already see many success stories in the project. From a8c719731294cd239a843bc014ed7a04589061ca Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 9 Aug 2023 10:18:17 +0530 Subject: [PATCH 16/79] design updated --- .../FinancialSummary/AsyncAPISummary.js | 4 +- .../FinancialSummary/BarChartComponent.js | 2 +- .../FinancialSummary/ExpenseBreakdown.js | 20 +++++---- .../FinancialSummary/SponsorshipTiers.js | 42 ++++++++++++------- components/FinancialSummary/SuccessStories.js | 6 ++- 5 files changed, 46 insertions(+), 28 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index 7d70c1e7cb66..9a0249d905b5 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -8,7 +8,9 @@ function AsyncAPISummary() {
- AsyncAPI Finance Summary + +

AsyncAPI Financial Summary

+
To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 9d0dc683579f..929b8af3e6c2 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -124,7 +124,7 @@ const BarChartComponent = ({ data }) => { target="_blank" rel="noopener noreferrer" > - Click here to know more + Know more about Budget
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index d806c4363f3e..db39f99f78db 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -26,7 +26,7 @@ const cardsData = [ }, { title: "Hiring", - body: "To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team", + body: (

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

), image: "/img/finance/expense_5.png", }, { @@ -38,10 +38,12 @@ const cardsData = [ function Card({ title, body, image }) { return ( -
- {image && {title}} -

{title}

-

{body}

+
+ {image && {title}} +
+

{title}

+

{body}

+
); } @@ -58,13 +60,15 @@ function ExpenseBreakdown() {
-

Expense Breakdown

- + +

Expense Breakdown

+
+ Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open Collective account. We maintain transparency in all expenses, and the TSC approves anticipated expenses. -
+
{cardsData.map((card, index) => ( ))} diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 3ef33acc84d7..71051a3d6f20 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -3,18 +3,20 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function SponsorshipTiers() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } + const hash = window.location.hash; + if (hash) { + const targetElement = document.querySelector(hash); + if (targetElement) { + targetElement.scrollIntoView({ behavior: 'smooth' }); } + } return (
-

Sponsorship Tiers

+ +

Sponsorship Tiers

+
AsyncAPI offers various sponsorship tiers, each with its own set of benefits and privileges. These tiers include Bronze, Silver, @@ -26,33 +28,41 @@ function SponsorshipTiers() { Tiers - Benefits Amounts + Benefits - + Bronze $100/month - Company logo in README on GitHub + + Company logo in README on GitHub + Silver $500/month - Company logo in README on GitHub and asyncapi.com + + Company logo in README on GitHub and asyncapi.com + Gold $1000/month - Company logo in README on GitHub and asyncapi.com + + Company logo in README on GitHub and asyncapi.com + Platinum $2000/month - Company logo in README on GitHub and asyncapi.com. Up to 2 - hours of support per month. Support will be remote with the - option of a shared screen or via private chat. Support hours do not - accumulate. + + Company logo in README on GitHub and asyncapi.com. + Up to 2 hours of support per month. Support will be + remote with the option of a shared screen or via private chat. + Support hours do not accumulate. + diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 9ebabb30a58c..45903906e73a 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -15,8 +15,10 @@ function SuccessStories() {
-

Success Stories

- + +

Success Stories

+
+ Thanks to financial support we can already see many success stories in the project. From f512471bd1a50d2d7dbe1da79ef12fd01805fe79 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 9 Aug 2023 23:39:13 +0530 Subject: [PATCH 17/79] design improvements --- .../FinancialSummary/AsyncAPISummary.js | 42 ++++-- .../FinancialSummary/BarChartComponent.js | 13 -- components/FinancialSummary/ContactUs.js | 18 ++- .../FinancialSummary/ExpenseBreakdown.js | 39 ++++-- .../FinancialSummary/SponsorshipTiers.js | 129 +++++++++--------- components/FinancialSummary/SuccessStories.js | 61 +++++---- pages/finance.js | 40 +++--- styles/globals.css | 2 +- 8 files changed, 191 insertions(+), 153 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index 9a0249d905b5..b3adacb083f9 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -1,53 +1,65 @@ import Button from '../buttons/Button' -import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function AsyncAPISummary() { return ( - + <>
- -

AsyncAPI Financial Summary

+
+ +

AsyncAPI Financial Summary

- + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, while Linux Foundation Crowdfunding operates separately. +
-
+

- Ways to Support Us? + + Ways to Support Us? +
-
- +
+ The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, they may involve greater effort. Contribute
monetarily using the following channels.
+ - - + + ); } diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 929b8af3e6c2..bf180c975c40 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -114,19 +114,6 @@ const BarChartComponent = ({ data }) => { -
); diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index 0aac3cf87e15..167f8e3b0c69 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -1,5 +1,4 @@ import Button from '../buttons/Button' -import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' @@ -12,23 +11,34 @@ function ContactUs() { } } return ( - + <>
+

Interested in getting in touch?

Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io + onboarding to the project as a sponsor. Write email to info@asyncapi.io +
-
+ + ) } diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index db39f99f78db..148ddf2c7f82 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -1,4 +1,3 @@ -import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' @@ -26,7 +25,7 @@ const cardsData = [ }, { title: "Hiring", - body: (

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

), + body: (

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

), image: "/img/finance/expense_5.png", }, { @@ -39,15 +38,21 @@ const cardsData = [ function Card({ title, body, image }) { return (
- {image && {title}} -
-

{title}

-

{body}

+
+
+ {image && {title}} +

{title}

+
+

{body}

); } + + + + function ExpenseBreakdown() { const hash = window.location.hash; if (hash) { @@ -57,25 +62,35 @@ function ExpenseBreakdown() { } } return ( - + <>
- -

Expense Breakdown

+
+ +

Expense Breakdown

- + Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open Collective account. We maintain transparency in all expenses, and the TSC approves anticipated expenses. -
+
+
{cardsData.map((card, index) => ( ))}
- + + ) } diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 71051a3d6f20..5929f964d622 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -1,4 +1,3 @@ -import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' @@ -11,64 +10,68 @@ function SponsorshipTiers() { } } return ( - -
-
- -

Sponsorship Tiers

-
- - AsyncAPI offers various sponsorship tiers, each with its own set - of benefits and privileges. These tiers include Bronze, Silver, - Gold, and Platinum. - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TiersAmountsBenefits
Bronze$100/month - Company logo in README on GitHub -
Silver$500/month - Company logo in README on GitHub and asyncapi.com -
Gold$1000/month - Company logo in README on GitHub and asyncapi.com -
Platinum$2000/month - Company logo in README on GitHub and asyncapi.com. - Up to 2 hours of support per month. Support will be - remote with the option of a shared screen or via private chat. - Support hours do not accumulate. -
-
- -
+
-
+
); } diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 45903906e73a..09f4467de8d8 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -1,5 +1,3 @@ -import { getFontDefinitionFromNetwork } from 'next/dist/server/font-utils' -import Container from '../layout/Container' import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' @@ -12,45 +10,56 @@ function SuccessStories() { } } return ( - + <>
- -

Success Stories

+
+ +

Success Stories

- + Thanks to financial support we can already see many success stories in the project. -
+
+
- Community Manager - With the addition of a dedicated Community - Manager, we now have a monthly newsletter, - regular status updates, an active social - media presence, and the ability to drive - initiatives such as event organization. + Community Manager + + With the addition of a dedicated Community Manager, we now have a monthly newsletter, + regular status updates, an active social media presence, and the ability to drive + initiatives such as event organization. +
- AsyncAPI Mentorship - The 2022 mentorship program yielded - significant achievements: Kafka support in - Glee, a centralized platform for sharing - AsyncAPI tools, and a versatile error - handling library for multiple projects. + AsyncAPI Mentorship + + The 2022 mentorship program yielded significant achievements: Kafka support in + Glee, a centralized platform for sharing AsyncAPI tools, and a versatile error + handling library for multiple projects. +
- AsyncAPI Conference - Every year we organize a conference that - attracts many participants. Only last year - the conference generated 3k views. We - plan to do a series of events in different - locations every year. + AsyncAPI Conference + + Every year we organize a conference that attracts many participants. Only last year + the conference generated 3k views. We + plan to do a series of events in different locations every year. +
+
- + + ) } diff --git a/pages/finance.js b/pages/finance.js index 348f09e268bc..a149d4714676 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -1,5 +1,3 @@ -import GenericLayout from "../components/layout/GenericLayout" -import Container from '../components/layout/Container' import Expenses from "../components/FinancialSummary/ExpenseObject" import BarChartComponent from "../components/FinancialSummary/BarChartComponent" import ExpenseBreakdown from "../components/FinancialSummary/ExpenseBreakdown" @@ -8,29 +6,31 @@ import SuccessStories from "../components/FinancialSummary/SuccessStories" import AsyncAPISummary from "../components/FinancialSummary/AsyncAPISummary" import OtherFormsOfFinancialSupport from "../components/FinancialSummary/OtherFormsOfFinancialSupport" import ContactUs from "../components/FinancialSummary/ContactUs" +import NavBar from "../components/navigation/NavBar" +import Head from "next/head" +import StickyNavbar from "../components/navigation/StickyNavbar" function FinancialSummary() { const title = "AsyncAPI Finance Summary"; const description = "Financial Summary of AsyncAPI"; - const image = "/"; - return ( - - - - - - - - - - - + return ( + <> + + {title} + + + + + + + + + + + + + ) } diff --git a/styles/globals.css b/styles/globals.css index 7503038990d5..114687bfa1d4 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -340,4 +340,4 @@ abbr[title] { .meeting-card:hover > div:nth-child(2) > p { color: white; -} +} \ No newline at end of file From 4eb000bdfa70234729a7c1ce5ee9ac0a5d417372 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 10 Aug 2023 00:23:39 +0530 Subject: [PATCH 18/79] bar chart improments --- .../FinancialSummary/BarChartComponent.js | 52 +++++++++++++++++-- .../FinancialSummary/ExpensesLinkObject.js | 26 ++++++++++ 2 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 components/FinancialSummary/ExpensesLinkObject.js diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index bf180c975c40..970eafb008b2 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,5 +1,38 @@ import React, { useState, useEffect } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' +import ExpensesLink from './ExpensesLinkObject' + +const CustomTooltip = ({ active, payload }) => { + if (active && payload && payload.length) { + const data = payload[0].payload; + const tooltipStyle = { + backgroundColor: 'rgba(255, 255, 255, 0.9)', + border: '1px solid #ccc', + padding: '10px', + boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)', + borderRadius: '4px', + }; + const labelStyle = { + fontSize: '14px', + fontWeight: 'bold', + marginBottom: '5px', + }; + const amountStyle = { + fontSize: '12px', + color: '#555', + }; + + return ( +
+

{data.Category}

+

${data.Amount.toFixed(2)}

+
+ ); + } + return null; +}; + + const BarChartComponent = ({ data }) => { // State for selected filters @@ -108,12 +141,25 @@ const BarChartComponent = ({ data }) => { {/* Recharts BarChart */} - {windowWidth > 900 ? : null} - + } /> - + { + // Get the category from the clicked bar's payload + const category = data.payload.Category; + // Replace the URL with the external website URL you want to open + const matchedLinkObject = ExpensesLink.find(obj => obj.category === category) + if (matchedLinkObject) { + // Extract the link from the matched object and open it in a new tab/window + window.open(matchedLinkObject.link, '_blank'); + }; + }} + /> +
); diff --git a/components/FinancialSummary/ExpensesLinkObject.js b/components/FinancialSummary/ExpensesLinkObject.js new file mode 100644 index 000000000000..088bf40d7e83 --- /dev/null +++ b/components/FinancialSummary/ExpensesLinkObject.js @@ -0,0 +1,26 @@ +const ExpensesLink = [ + { + category: "AsyncAPI Ambassador", + link: "https://github.com/orgs/asyncapi/discussions/425" + }, { + category: "Google Season of Docs 2022", + link: "https://github.com/orgs/asyncapi/discussions/303" + }, { + category: "AsyncAPI Mentorship 2022", + link: "https://github.com/orgs/asyncapi/discussions/284" + }, { + category: "AsyncAPI Webstore", + link: "https://github.com/orgs/asyncapi/discussions/710" + }, { + category: "AsyncAPI Bounty", + link: "https://github.com/orgs/asyncapi/discussions/541" + }, { + category: "3rd Party Services", + link: "https://github.com/orgs/asyncapi/discussions/295" + }, { + category: "Community Manager Salary", + link: "https://github.com/orgs/asyncapi/discussions/515" + } +] + +export default ExpensesLink \ No newline at end of file From fce3d6828f4f5511178729051166b0fb7e31f574 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 10 Aug 2023 00:44:03 +0530 Subject: [PATCH 19/79] added table for smaller devices --- .../FinancialSummary/BarChartComponent.js | 78 ++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 970eafb008b2..dcf4afdbded1 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,6 +1,7 @@ import React, { useState, useEffect } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' import ExpensesLink from './ExpensesLinkObject' +import Expenses from './ExpenseObject'; const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { @@ -32,7 +33,82 @@ const CustomTooltip = ({ active, payload }) => { return null; }; +const ExpensesTable = () => { + const uniqueMonths = [...new Set(Expenses.map(item => item.Month))]; + const uniqueCategories = [...new Set(Expenses.map(item => item.Category))]; + return ( +
+ + + + + {uniqueCategories.map(category => ( + + ))} + + + + {uniqueMonths.map(month => ( + + + {uniqueCategories.map(category => { + const matchingExpense = Expenses.find( + item => item.Month === month && item.Category === category + ); + return ( + + ); + })} + + ))} + +
+ {category} +
{month} + {matchingExpense ? `$${matchingExpense.Amount}` : '-'} +
+ +
+ ); +}; const BarChartComponent = ({ data }) => { // State for selected filters @@ -159,7 +235,7 @@ const BarChartComponent = ({ data }) => { }} /> - + {windowWidth < 900 ? () :null}
); From f66dfbcdbe01d885bc5a14954cf7aa66f665b2cf Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 10 Aug 2023 17:01:39 +0530 Subject: [PATCH 20/79] wide screen issue fixed --- .../FinancialSummary/BarChartComponent.js | 1 + pages/finance.js | 81 ++++++++++++++----- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index dcf4afdbded1..a7f975e7a28b 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -27,6 +27,7 @@ const CustomTooltip = ({ active, payload }) => {

{data.Category}

${data.Amount.toFixed(2)}

+

Click on the bar to know more

); } diff --git a/pages/finance.js b/pages/finance.js index a149d4714676..bbbc779fd362 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -9,29 +9,74 @@ import ContactUs from "../components/FinancialSummary/ContactUs" import NavBar from "../components/navigation/NavBar" import Head from "next/head" import StickyNavbar from "../components/navigation/StickyNavbar" +import Container from "../components/layout/Container" +import { useEffect, useState } from 'react' function FinancialSummary() { + const [windowWidth, setWindowWidth] = useState(0); + + // Update the window width when the component mounts and when the window is resized + useEffect(() => { + const handleResize = () => { + setWindowWidth(window.innerWidth); + }; + + // Initial width + handleResize(); + + // Listen for window resize events + window.addEventListener('resize', handleResize); + + // Clean up the event listener when the component unmounts + return () => { + window.removeEventListener('resize', handleResize); + }; + }, []); + const title = "AsyncAPI Finance Summary"; const description = "Financial Summary of AsyncAPI"; + // Use Container only if the window width is more than 1700px + const shouldUseContainer = windowWidth > 1700; + return ( - <> - - {title} - - - - - - - - - - - - - - ) +
+ {shouldUseContainer ? ( + + + {title} + + + + + + + + + + + + + + ) : ( + <> + + {title} + + + + + + + + + + + + + + )} +
+ ); } - export default FinancialSummary From 935d250a1a652d5ad213060f028be494106fa06d Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 10 Aug 2023 17:47:43 +0530 Subject: [PATCH 21/79] table title clickable --- components/FinancialSummary/BarChartComponent.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index a7f975e7a28b..e390fb2cb780 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -16,7 +16,7 @@ const CustomTooltip = ({ active, payload }) => { const labelStyle = { fontSize: '14px', fontWeight: 'bold', - marginBottom: '5px', + marginBottom: '5px' }; const amountStyle = { fontSize: '12px', @@ -46,7 +46,13 @@ const ExpensesTable = () => { {uniqueCategories.map(category => ( - {category} + {ExpensesLink.find(linkObj => linkObj.category === category)?.link ? ( + linkObj.category === category).link}> + {category} + + ) : ( + category + )} ))} @@ -236,7 +242,7 @@ const BarChartComponent = ({ data }) => { }} /> - {windowWidth < 900 ? () :null} + {windowWidth < 900 ? () : null}
); From c7a255e9a3e8c80ec905f55e8dc4759835bccb4c Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 10 Aug 2023 18:54:32 +0530 Subject: [PATCH 22/79] table header link --- components/FinancialSummary/BarChartComponent.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index e390fb2cb780..c3b099ad150f 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -16,7 +16,7 @@ const CustomTooltip = ({ active, payload }) => { const labelStyle = { fontSize: '14px', fontWeight: 'bold', - marginBottom: '5px' + marginBottom: '5px', }; const amountStyle = { fontSize: '12px', @@ -242,7 +242,7 @@ const BarChartComponent = ({ data }) => { }} /> - {windowWidth < 900 ? () : null} + {windowWidth < 900 ? () :null}
); From 2766fbbf05c9445eb3af55988f1c245f7a2e5673 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sun, 13 Aug 2023 18:32:34 +0530 Subject: [PATCH 23/79] added yaml files for expenses --- .../FinancialSummary/BarChartComponent.js | 2 +- config/finance/2023/Expenses.yml | 41 +++++++++++++++++++ config/finance/2023/ExpensesLink.yml | 17 ++++++++ 3 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 config/finance/2023/Expenses.yml create mode 100644 config/finance/2023/ExpensesLink.yml diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index c3b099ad150f..c953996ad1c8 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' import ExpensesLink from './ExpensesLinkObject' -import Expenses from './ExpenseObject'; +import Expenses from './ExpenseObject' const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { diff --git a/config/finance/2023/Expenses.yml b/config/finance/2023/Expenses.yml new file mode 100644 index 000000000000..9d313f53a46e --- /dev/null +++ b/config/finance/2023/Expenses.yml @@ -0,0 +1,41 @@ +January: + - {Category: "AsyncAPI Ambassador" , Amount: "68.95" } + - {Category: "Google Season of Docs 2022" , Amount: "35.62"} + - {Category: "Google Season of Docs 2022", Amount: "1666.67"} + - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + - {Category: "AsyncAPI Mentorship 2022",Amount: "1500"} + - {Category: "AsyncAPI Mentorship 2022",Amount: "1500"} + +February: + - {Category: "Community Manager Salary", Amount: "1000.39"} + - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + +March: + - {Category: "Community Manager Salary", Amount: "2000.39"} + - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + +April: + - {Category: "Community Manager Salary", Amount: "2000.39"} + +May: + - {Category: "Community Manager Salary", Amount: "2000.39"} + - {Category: " AsyncAPI Webstore", Amount: "75.11"} + - {Category: "AsyncAPI Bounty", Amount: "400"} + +June: + - {Category: "Community Manager Salary", Amount: "2000.39"} + - {Category: "AsyncAPI Bounty", Amount: "200"} + - {Category: "3rd Party Services", Amount: "28.31"} + - {Category: "AsyncAPI Bounty", Amount: "200"} + - {Category: "AsyncAPI Bounty", Amount: "200"} + - {Category: "AsyncAPI Bounty", Amount: "200"} + +July: + - {Category: "Community Manager Salary", Amount: "2000.39"} + - {Category: "3rd Party Services", Amount: "1088.27"} + - {Category: "AsyncAPI Bounty", Amount: "400"} + +August: + - {Category: "AsyncAPI Webstore", Amount: "15671.63"} + - {Category: "AsyncAPI Bounty", Amount: "400"} \ No newline at end of file diff --git a/config/finance/2023/ExpensesLink.yml b/config/finance/2023/ExpensesLink.yml new file mode 100644 index 000000000000..68ff80f8e4a9 --- /dev/null +++ b/config/finance/2023/ExpensesLink.yml @@ -0,0 +1,17 @@ +- category: "AsyncAPI Ambassador" + link: "https://github.com/orgs/asyncapi/discussions/425" + +- category: "Google Season of Docs 2022" + link: "https://github.com/orgs/asyncapi/discussions/303" + +- category: "AsyncAPI Mentorship 2022" + link: "https://github.com/orgs/asyncapi/discussions/284" + +- category: "AsyncAPI Webstore" + link: "https://github.com/orgs/asyncapi/discussions/710" + +- category: "AsyncAPI Bounty" + link: "https://github.com/orgs/asyncapi/discussions/541" + +- category: "3rd Party Services" + link: "https://github.com/orgs/asyncapi/discussions/295" \ No newline at end of file From ad780525a4d00d51b7426e013703a4f18f29401a Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 14 Aug 2023 19:13:16 +0530 Subject: [PATCH 24/79] created function for converting yaml data to json --- config/finance/json-data/2023/Expenses.json | 122 ++++++++++++++++++ .../finance/json-data/2023/ExpensesLink.json | 26 ++++ scripts/finance/expenses-json.js | 36 ++++++ scripts/index.js | 2 + 4 files changed, 186 insertions(+) create mode 100644 config/finance/json-data/2023/Expenses.json create mode 100644 config/finance/json-data/2023/ExpensesLink.json create mode 100644 scripts/finance/expenses-json.js diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json new file mode 100644 index 000000000000..48da5cfb7936 --- /dev/null +++ b/config/finance/json-data/2023/Expenses.json @@ -0,0 +1,122 @@ +{ + "January": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "68.95" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "35.62" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "1666.67" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "February": [ + { + "Category": "Community Manager Salary", + "Amount": "1000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "March": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "April": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + } + ], + "May": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "\tAsyncAPI Webstore", + "Amount": "75.11" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "June": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "3rd Party Services", + "Amount": "28.31" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + } + ], + "July": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "3rd Party Services", + "Amount": "1088.27" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "August": [ + { + "Category": "AsyncAPI Webstore", + "Amount": "15671.63" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ] +} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json new file mode 100644 index 000000000000..500a5fe72996 --- /dev/null +++ b/config/finance/json-data/2023/ExpensesLink.json @@ -0,0 +1,26 @@ +[ + { + "category": "AsyncAPI Ambassador", + "link": "https://github.com/orgs/asyncapi/discussions/425" + }, + { + "category": "Google Season of Docs 2022", + "link": "https://github.com/orgs/asyncapi/discussions/303" + }, + { + "category": "AsyncAPI Mentorship 2022", + "link": "https://github.com/orgs/asyncapi/discussions/284" + }, + { + "category": "AsyncAPI Webstore", + "link": "https://github.com/orgs/asyncapi/discussions/710" + }, + { + "category": "AsyncAPI Bounty", + "link": "https://github.com/orgs/asyncapi/discussions/541" + }, + { + "category": "3rd Party Services", + "link": "https://github.com/orgs/asyncapi/discussions/295" + } +] \ No newline at end of file diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js new file mode 100644 index 000000000000..9fdc2085d354 --- /dev/null +++ b/scripts/finance/expenses-json.js @@ -0,0 +1,36 @@ +const fs = require('fs'); +const yaml = require('yaml'); +const path = require('path'); +const { convertToJson } = require('../utils'); + +// Function to read YAML content from a file +function readYamlFromFile(filePath) { + try { + const yamlContent = fs.readFileSync(filePath, 'utf8'); + const parsedYaml = yaml.parse(yamlContent); // Parse YAML using the "yaml" package + return parsedYaml; + } catch (error) { + console.error('Error reading YAML file:', error.message); + return null; + } +} + +const ExpensesFilePath = path.join(__dirname, '../../config/finance/2023/Expenses.yml'); +const ExpensesLinkFilePath = path.join(__dirname, '../../config/finance/2023/ExpensesLink.yml'); + +const ExpensesContent = readYamlFromFile(ExpensesFilePath); +const ExpensesLinkContent = readYamlFromFile(ExpensesLinkFilePath); + +const Expenses = convertToJson(ExpensesContent); +const ExpensesLink = convertToJson(ExpensesLinkContent); + +// Specify the output directory for the JSON files +const outputDirectory = path.join(__dirname, '../../config/finance/json-data/2023/'); + +// Create new JSON files in the specified output directory +function writeJson() { + fs.writeFileSync(path.join(outputDirectory, 'Expenses.json'), JSON.stringify(Expenses, null, 2)); + fs.writeFileSync(path.join(outputDirectory, 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2)); +} + +module.exports = { writeJson } diff --git a/scripts/index.js b/scripts/index.js index 0634672c55f2..789513fe7d71 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,6 +1,7 @@ const rssFeed = require('./build-rss'); const buildPostList = require('./build-post-list'); const buildCaseStudiesList = require('./casestudies'); +const {writeJson} = require("./finance/expenses-json") async function start() { await buildPostList(); @@ -19,4 +20,5 @@ async function start() { await buildCaseStudiesList(); } +writeJson() start(); \ No newline at end of file From 394eb13a3289fb1876f05513dd5cef6da434d7f1 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 14 Aug 2023 23:35:07 +0530 Subject: [PATCH 25/79] modifies graph component for new data structure --- .../FinancialSummary/BarChartComponent.js | 261 ++++++++++-------- components/FinancialSummary/ExpenseObject.js | 134 --------- .../FinancialSummary/ExpensesLinkObject.js | 26 -- config/finance/2023/ExpensesLink.yml | 5 +- .../finance/json-data/2023/ExpensesLink.json | 4 + pages/finance.js | 5 +- 6 files changed, 150 insertions(+), 285 deletions(-) delete mode 100644 components/FinancialSummary/ExpenseObject.js delete mode 100644 components/FinancialSummary/ExpensesLinkObject.js diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index c953996ad1c8..6406a5da82d4 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,7 +1,7 @@ import React, { useState, useEffect } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' -import ExpensesLink from './ExpensesLinkObject' -import Expenses from './ExpenseObject' +import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json' +import Expenses from '../../config/finance/json-data/2023/Expenses.json' const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { @@ -34,131 +34,154 @@ const CustomTooltip = ({ active, payload }) => { return null; }; -const ExpensesTable = () => { - const uniqueMonths = [...new Set(Expenses.map(item => item.Month))]; - const uniqueCategories = [...new Set(Expenses.map(item => item.Category))]; +const getUniqueCategories = () => { + const allCategories = []; + for (const month in Expenses) { + Expenses[month].forEach(entry => { + if (!allCategories.includes(entry.Category)) { + allCategories.push(entry.Category); + } + }); + } + return allCategories; +}; + +const months = Object.keys(Expenses); +const categories = getUniqueCategories(); + +const ExpensesTable = ({ expensesData }) => { + // Function to total the amount for each category in a given month + const calculateCategoryTotal = (month, category) => { + const monthExpenses = expensesData[month]; + if (!monthExpenses) return 0; + + const categoryExpenses = monthExpenses.filter(entry => entry.Category === category); + return categoryExpenses.reduce((total, entry) => total + parseFloat(entry.Amount), 0); + }; + + // Create a mapping of month and unique categories with their totals + const monthCategoryTotals = {}; + Object.entries(expensesData).forEach(([month, entries]) => { + monthCategoryTotals[month] = {}; + entries.forEach(entry => { + if (!monthCategoryTotals[month][entry.Category]) { + monthCategoryTotals[month][entry.Category] = parseFloat(entry.Amount); + } else { + monthCategoryTotals[month][entry.Category] += parseFloat(entry.Amount); + } + }); + }); + + const openLink = (link) => { + window.open(link, '_blank'); + }; return (
- - {uniqueCategories.map(category => ( - - ))} + + + - {uniqueMonths.map(month => ( - - - {uniqueCategories.map(category => { - const matchingExpense = Expenses.find( - item => item.Month === month && item.Category === category - ); - return ( - - ); - })} - - ))} + {Object.entries(monthCategoryTotals).map(([month, categories]) => + Object.entries(categories).map(([category, totalAmount], index) => ( + + {index === 0 && } + + + + )) + )}
- {ExpensesLink.find(linkObj => linkObj.category === category)?.link ? ( - linkObj.category === category).link}> - {category} - - ) : ( - category - )} - MonthCategoryAmount
{month} - {matchingExpense ? `$${matchingExpense.Amount}` : '-'} -
{month}${totalAmount.toFixed(2)}
+ .expenses-table-container { + max-width: 800px; + margin: 0 auto; + overflow-x: auto; + } + + .expenses-table { + border-collapse: collapse; + width: 100%; + } + + .expenses-table th, + .expenses-table td { + border: 1px solid #ddd; + padding: 8px; + text-align: center; + } + + .expenses-table th { + background-color: #f2f2f2; + } + + .expenses-table th.empty-cell, + .expenses-table td.month-cell { + background-color: #e0e0e0; + font-weight: bold; + } + + .expenses-table td.expense-cell { + color: #333; + } + + .expenses-table td.expense-cell:hover { + background-color: #f7f7f7; + } + `}
); }; -const BarChartComponent = ({ data }) => { +const BarChartComponent = () => { // State for selected filters - const [selectedCategory, setSelectedCategory] = useState(null); - const [selectedYearQuarter, setSelectedYearQuarter] = useState(null); - - // Prepare data for chart - const categoryOptions = [...new Set(data.map((item) => item.Category))]; - - // Generate all yearly quarters (Q1, Q2, Q3, Q4) based on data - const yearQuarterOptions = []; - data.forEach((item) => { - const yearQuarter = `${item.Month} - ${item.Quater}`; - if (!yearQuarterOptions.includes(yearQuarter)) { - yearQuarterOptions.push(yearQuarter); - } - }); + const [selectedCategory, setSelectedCategory] = useState("All Categories"); + const [selectedMonth, setSelectedMonth] = useState("All Months"); + + // Get unique categories and months from the Expenses data + const categories = getUniqueCategories(); + const months = Object.keys(Expenses); - // Filter data based on selected filters - const filteredData = data.filter( - (item) => - (!selectedCategory || item.Category === selectedCategory) && - (!selectedYearQuarter || `${item.Month} - ${item.Quater}` === selectedYearQuarter) + // Filter the expenses data based on selectedCategory and selectedMonth + const filteredData = Object.entries(Expenses).flatMap(([month, entries]) => + (selectedMonth === "All Months" || selectedMonth === month) ? + entries.filter(entry => + selectedCategory === "All Categories" || entry.Category === selectedCategory + ) + : [] ); - // Calculate total expenses for each category - const totalExpensesByCategory = {}; - filteredData.forEach((item) => { - totalExpensesByCategory[item.Category] = - (totalExpensesByCategory[item.Category] || 0) + parseFloat(item.Amount); + // Calculate total amount for the filtered data + const totalAmount = filteredData.reduce((total, entry) => total + parseFloat(entry.Amount), 0); + + const categoryAmounts = {}; + filteredData.forEach(entry => { + if (categoryAmounts[entry.Category]) { + categoryAmounts[entry.Category] += parseFloat(entry.Amount); + } else { + categoryAmounts[entry.Category] = parseFloat(entry.Amount); + } }); - // Prepare data for chart - const chartData = Object.keys(totalExpensesByCategory).map((category) => ({ + // Prepare chartData from the aggregated categoryAmounts + const chartData = Object.keys(categoryAmounts).map(category => ({ Category: category, - Amount: totalExpensesByCategory[category], + Amount: categoryAmounts[category], })); - const totalExpenses = Object.values(totalExpensesByCategory).reduce( - (total, expense) => total + expense, - 0 - ); - const [windowWidth, setWindowWidth] = useState(null); const handleResize = () => { @@ -190,7 +213,7 @@ const BarChartComponent = ({ data }) => {

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

-

Total Expenses: ${totalExpenses.toFixed(2)}

+

Total Expenses: ${totalAmount.toFixed(2)}

{/* Select for category filter */} - {/* Select for year/quarter filter */} + {/* Select for month filter */}
{/* Recharts BarChart */} - + `$${value}`}/> } /> { // Get the category from the clicked bar's payload const category = data.payload.Category; // Replace the URL with the external website URL you want to open - const matchedLinkObject = ExpensesLink.find(obj => obj.category === category) + const matchedLinkObject = ExpensesLink.find(obj => obj.category === category); if (matchedLinkObject) { // Extract the link from the matched object and open it in a new tab/window window.open(matchedLinkObject.link, '_blank'); - }; + } }} /> - {windowWidth < 900 ? () :null} + {windowWidth < 900 ? () : null}
); diff --git a/components/FinancialSummary/ExpenseObject.js b/components/FinancialSummary/ExpenseObject.js deleted file mode 100644 index 65855f77107b..000000000000 --- a/components/FinancialSummary/ExpenseObject.js +++ /dev/null @@ -1,134 +0,0 @@ -const Expenses = [{ - Category: "AsyncAPI Ambassador", - Month: "January", - Quater: "Q1", - Amount: "68.95" -}, { - Category: "Google Season of Docs 2022", - Month: "January", - Quater: "Q1", - Amount: "35.62" -}, { - Category: "Google Season of Docs 2022", - Month: "January", - Quater: "Q1", - Amount: "1666.67" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "January", - Quater: "Q1", - Amount: "1500" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "January", - Quater: "Q1", - Amount: "1500" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "January", - Quater: "Q1", - Amount: "1500" -}, { - Category: "Community Manager Salary", - Month: "February", - Quater: "Q1", - Amount: "1000.39" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "February", - Quater: "Q1", - Amount: "1500" -}, { - Category: "Community Manager Salary", - Month: "March", - Quater: "Q1", - Amount: "2000.39" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "March", - Quater: "Q1", - Amount: "1500" -}, { - Category: "AsyncAPI Mentorship 2022", - Month: "March", - Quater: "Q1", - Amount: "1500" -}, { - Category: "Community Manager Salary", - Month: "April", - Quater: "Q2", - Amount: "2000.39" -}, { - Category: "Community Manager Salary", - Month: "May", - Quater: "Q2", - Amount: "2000.39" -}, { - Category: " AsyncAPI Webstore", - Month: "May", - Quater: "Q2", - Amount: "75.11" -}, { - Category: "AsyncAPI Bounty", - Month: "May", - Quater: "Q2", - Amount: "400" -}, { - Category: "Community Manager Salary", - Month: "June", - Quater: "Q2", - Amount: "2000.39" -}, { - Category: "AsyncAPI Bounty", - Month: "June", - Quater: "Q2", - Amount: "200" -}, { - Category: "3rd Party Services", - Month: "June", - Quater: "Q2", - Amount: "28.31" -}, { - Category: "AsyncAPI Bounty", - Month: "June", - Quater: "Q2", - Amount: "200" -}, { - Category: "AsyncAPI Bounty", - Month: "June", - Quater: "Q2", - Amount: "200" -}, { - Category: "AsyncAPI Bounty", - Month: "June", - Quater: "Q2", - Amount: "200" -}, { - Category: "Community Manager Salary", - Month: "July", - Quater: "Q3", - Amount: "2000.39" -}, { - Category: "3rd Party Services", - Month: "July", - Quater: "Q3", - Amount: "1088.27" -}, { - Category: "AsyncAPI Bounty", - Month: "July", - Quater: "Q3", - Amount: "400" -}, { - Category: " AsyncAPI Webstore", - Month: "July", - Quater: "Q3", - Amount: "15671.63" -}, { - Category: "AsyncAPI Bounty", - Month: "July", - Quater: "Q3", - Amount: "400" -} -] - -export default Expenses \ No newline at end of file diff --git a/components/FinancialSummary/ExpensesLinkObject.js b/components/FinancialSummary/ExpensesLinkObject.js deleted file mode 100644 index 088bf40d7e83..000000000000 --- a/components/FinancialSummary/ExpensesLinkObject.js +++ /dev/null @@ -1,26 +0,0 @@ -const ExpensesLink = [ - { - category: "AsyncAPI Ambassador", - link: "https://github.com/orgs/asyncapi/discussions/425" - }, { - category: "Google Season of Docs 2022", - link: "https://github.com/orgs/asyncapi/discussions/303" - }, { - category: "AsyncAPI Mentorship 2022", - link: "https://github.com/orgs/asyncapi/discussions/284" - }, { - category: "AsyncAPI Webstore", - link: "https://github.com/orgs/asyncapi/discussions/710" - }, { - category: "AsyncAPI Bounty", - link: "https://github.com/orgs/asyncapi/discussions/541" - }, { - category: "3rd Party Services", - link: "https://github.com/orgs/asyncapi/discussions/295" - }, { - category: "Community Manager Salary", - link: "https://github.com/orgs/asyncapi/discussions/515" - } -] - -export default ExpensesLink \ No newline at end of file diff --git a/config/finance/2023/ExpensesLink.yml b/config/finance/2023/ExpensesLink.yml index 68ff80f8e4a9..9493648c356d 100644 --- a/config/finance/2023/ExpensesLink.yml +++ b/config/finance/2023/ExpensesLink.yml @@ -14,4 +14,7 @@ link: "https://github.com/orgs/asyncapi/discussions/541" - category: "3rd Party Services" - link: "https://github.com/orgs/asyncapi/discussions/295" \ No newline at end of file + link: "https://github.com/orgs/asyncapi/discussions/295" + +- category: "Community Manager Salary" + link: "https://github.com/orgs/asyncapi/discussions/515" \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json index 500a5fe72996..beba059ec798 100644 --- a/config/finance/json-data/2023/ExpensesLink.json +++ b/config/finance/json-data/2023/ExpensesLink.json @@ -22,5 +22,9 @@ { "category": "3rd Party Services", "link": "https://github.com/orgs/asyncapi/discussions/295" + }, + { + "category": "Community Manager Salary", + "link": "https://github.com/orgs/asyncapi/discussions/515" } ] \ No newline at end of file diff --git a/pages/finance.js b/pages/finance.js index bbbc779fd362..a7390d046f7a 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -1,4 +1,3 @@ -import Expenses from "../components/FinancialSummary/ExpenseObject" import BarChartComponent from "../components/FinancialSummary/BarChartComponent" import ExpenseBreakdown from "../components/FinancialSummary/ExpenseBreakdown" import SponsorshipTiers from "../components/FinancialSummary/SponsorshipTiers" @@ -54,7 +53,7 @@ function FinancialSummary() { - +
@@ -71,7 +70,7 @@ function FinancialSummary() { - + From 4b2ba9b3432107a5800727ec4ca00b21e431455a Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sun, 27 Aug 2023 12:18:04 +0530 Subject: [PATCH 26/79] images extension changes --- public/img/finance/GitHub.png | Bin 18648 -> 0 bytes public/img/finance/GitHub.webp | Bin 0 -> 1984 bytes public/img/finance/LFX.png | Bin 21949 -> 0 bytes public/img/finance/LFX.webp | Bin 0 -> 1158 bytes public/img/finance/OpenCollective.png | Bin 23218 -> 0 bytes public/img/finance/OpenCollective.webp | Bin 0 -> 1922 bytes public/img/finance/expense_1.png | Bin 11278 -> 0 bytes public/img/finance/expense_1.webp | Bin 0 -> 1032 bytes public/img/finance/expense_2.png | Bin 11108 -> 0 bytes public/img/finance/expense_2.webp | Bin 0 -> 978 bytes public/img/finance/expense_3.png | Bin 11225 -> 0 bytes public/img/finance/expense_3.webp | Bin 0 -> 820 bytes public/img/finance/expense_4.png | Bin 10795 -> 0 bytes public/img/finance/expense_4.webp | Bin 0 -> 1004 bytes public/img/finance/expense_5.png | Bin 11533 -> 0 bytes public/img/finance/expense_5.webp | Bin 0 -> 1088 bytes public/img/finance/expense_6.png | Bin 10601 -> 0 bytes public/img/finance/expense_6.webp | Bin 0 -> 934 bytes public/img/finance/other_1.png | Bin 33598 -> 0 bytes public/img/finance/other_1.webp | Bin 0 -> 2104 bytes public/img/finance/other_2.png | Bin 33250 -> 0 bytes public/img/finance/other_2.webp | Bin 0 -> 1746 bytes public/img/finance/other_3.png | Bin 33040 -> 0 bytes public/img/finance/other_3.webp | Bin 0 -> 2076 bytes 24 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 public/img/finance/GitHub.png create mode 100644 public/img/finance/GitHub.webp delete mode 100644 public/img/finance/LFX.png create mode 100644 public/img/finance/LFX.webp delete mode 100644 public/img/finance/OpenCollective.png create mode 100644 public/img/finance/OpenCollective.webp delete mode 100644 public/img/finance/expense_1.png create mode 100644 public/img/finance/expense_1.webp delete mode 100644 public/img/finance/expense_2.png create mode 100644 public/img/finance/expense_2.webp delete mode 100644 public/img/finance/expense_3.png create mode 100644 public/img/finance/expense_3.webp delete mode 100644 public/img/finance/expense_4.png create mode 100644 public/img/finance/expense_4.webp delete mode 100644 public/img/finance/expense_5.png create mode 100644 public/img/finance/expense_5.webp delete mode 100644 public/img/finance/expense_6.png create mode 100644 public/img/finance/expense_6.webp delete mode 100644 public/img/finance/other_1.png create mode 100644 public/img/finance/other_1.webp delete mode 100644 public/img/finance/other_2.png create mode 100644 public/img/finance/other_2.webp delete mode 100644 public/img/finance/other_3.png create mode 100644 public/img/finance/other_3.webp diff --git a/public/img/finance/GitHub.png b/public/img/finance/GitHub.png deleted file mode 100644 index 7d318c45a0020cee9c3dba87c112bb194d783a9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18648 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 V3j@*O)1m+X002ovPDHLkV1jQx%d`Lh diff --git a/public/img/finance/GitHub.webp b/public/img/finance/GitHub.webp new file mode 100644 index 0000000000000000000000000000000000000000..f21b15146d691cf58a7183f15c3f25bfa3b59292 GIT binary patch literal 1984 zcmV;x2S4~yNk&Gv2LJ$9MM6+kP&gp02LJ#tC;*)SDy{&206r-ah(e*EArW~6_W=G+{R{k8<)1N!)%`&Kj{i{qW%mK}r~6m=&+Xrhe$am{{?-1s{73E2@Bjb* z(2wL_&VR}OaQ^xKgZz*G|NXym9=AVmy^DWT%Vsk!4f7+Q*3O`9L~Q=EteYalDZCR^ z2K?pJa)fzmhg})@(CN62*TqYFY8mBTX;uBl?J377tw;22@>;j9%jWK0XI^L zbcNL#d(HIz-c&LoUZ(hgg&}^^Y6gSYN0_w%`s90ADt5!@8wA5{?iJJTl1*}v+YsRSbL2oR%jya%=e@n%|ahB zf1J8nEbHIw9|!R#?TWH?;~n<{QJ?6EGUFQr3y?R{T#jbCym z%GbVjOs3b&-(K8NiBWOHhk>T$khtwVaX`NeX795NO{i<7a8yO5e!Loy-TL7}`JD!r z9zO$!5zeK;YCMi_WNW)z4l!yH3>CkAjsLd0CBQyUI*j2Q3t;>mg%L_>uopE5klG0{ zQE3?mHDCY7V8jik)0I)V7qj_ld%fLA6r%|H_8go?V~sIvV6tciKauf}}Is2lsH61jg3*L0A z-Xfr4CAx@e0;}-N=0NR+zrzQHM4$hO8Dsm|v;(uBB+}$KoZ&bQ2FgEtc@X)HD|&sH z+!%nnv_DA9I7({ee-)C35omuw-wZX!!*#&|=B8dTSy33Yi8VC3MKY{A=tP;rD(nx+ zFt%)Bc72RXyshZ2s{T_BP6<75Ty{otp)=7L#*tHou{S%(q7qUcIXvD?F1}Gs4+uCZ zq9jk)kaDW$-s@-o_fc{+J2}^nBdm%jG7$La{JHa8FVJn1Khna@P5A<%YFw-UWF{be zpApu1Xmpy6NFwzZn6#eVZFHjB3^~I8b8$apC4gpf`L41EPc2s1?D6Fzj{eR$PklQswSWVq7Cm@%A zQh!V6?@PpG)QYspsFcYzE>vwMdXgpX9zpr+#>c5(2xjCIpE>=bg4m{K(LOlg733~_ z^dH3Lo*ugz|3C#gYGiQn%En^>e4bc#1m2j1qO>gzYXWSCpN|);8S~O>LG*6~zLR)I*#|*<)fql^O9w zKrchZKA>c>H6l&Iy79Bgn)T2RG-7h)OHq`a5y|>!a8atl5Z0%!Rj8R~>i>qUk2XI? zBclW_Olt8R815?Mma?Ycg#j9>`OJthjMff9aVTR%h~ne`HlsfAcQKCDFFRPfa6#C( z_d{3@P~sPl%5YM_wp69|^=Jk{MQ93qxvcjG8(k*hgQricCWxcqb5S5*`!o^>FWiHL znM2|mQRy!VxH&=D-(82^e@>z+$KVb;G{^e$CFfIrjhj4+1NG!JeiB;+x literal 0 HcmV?d00001 diff --git a/public/img/finance/LFX.png b/public/img/finance/LFX.png deleted file mode 100644 index bb3e0c3ff609a46cc06da26fefb12c2007dbaf47..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21949 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 Y-Ok%l8--EVPl4S5buA}gz14sK09_PHLI3~& literal 0 HcmV?d00001 diff --git a/public/img/finance/OpenCollective.png b/public/img/finance/OpenCollective.png deleted file mode 100644 index d43e852c8a9106e072ad748a23a62e74a52eda9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23218 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 =W_Tk0WG-un-4%kXooQ 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

T;T%OOrJ?|TqUgoPb~8pY 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 KT>U$Xi2nl>Kz(@t diff --git a/public/img/finance/expense_1.webp b/public/img/finance/expense_1.webp new file mode 100644 index 0000000000000000000000000000000000000000..c4abf77ea75ce49ee8c1180721ae81109638ae74 GIT binary patch literal 1032 zcmV+j1o!(=Nk&Eh1ONb6MM6+kP&gp;0{{RJ766?ADr^8`06r-ch(jTvArbnlco+hN zvVdryfDhGwvVFRCfaQSw0QUjr19SuQ1AqheAJa3~^Y!ocpWqYqvsZC}^Mv<|_kX-_ zgSAHJMZjAE_rH{{r3P;ParOoNSN(JS_vUAHFWH}C579w{z}v3bLqqv)&NBImA=^Qj zcVi|AGQA{G0FJt_twuQolQ%wB4^Q`hfaN4WKQ@v0G7z?wo{o{j$!THzyC1sflDuhS zk2`7r0RHRVFZlug|BxU5`2qj(1Kqm9_Jfs=KQNw(HsWLElbTC^tM-5Ec7Doid>Q*Y z{7TZ*_ym|4T#i9A6PGrR5p#nsTNym#M56K>!94}j$rZL;ystRNF|ivKy(sTxR{siz z;$Ds1ZjWLb^?*v8K1Y0eW#-bqq(>oj#=w`rLHClYo5x{{7e()aU*JVB>ci)MXg`VW z8+uM~s_EA-PaU1EPXFT``%gSP!W9BKY>1)2K)z}};+@Ns&-DVv%`05d&`UlL`wo1b z9Z&YH&!B(BhkLcqB>J9AT@W|=8n_JSMLxJqq`mdKm7|K4jpFHlkQg!~WMuH>iQ0PD-k z@&`wYqV&-}N!2=jITjE3EQ(pZLKa9Iu=ET6njziFS~nDSdiw>UH~1v~>SO-4FKq@V z1+d!?+RV$9-ryrGBfOKOR9T}Q{26Ag8uSBOM}BG@1KX(0dC1sPZG@5Zj083f{bcD+%>vT2pTbOU3Vr|PqG0NLN zRdQZse3+p%I{nF+#m4%!F?Z_VL~bU0m;c znbvLS3tke8t!TJ(3!k(%>Z)qlXJQqG)RG?6Y_dbO526!hxAG_g>b~F6Hx8MUAJSlx z`z4BQ%HUiN1ze&2fci*f$Rx4-@eer@IxS>{ub3C6w-?uRv*n=0JLVL;5;g$T4yvPT zDIou_jbqm~r8oKXcsakXPgcgbBa8ikOX!lL5|``s|E#O8@7LQ!d;X-NsIKAW!~@ty zAK^dkPay)|dOE~W`C|*2yND|MXY8)Abi7cQv$K>pw667miAS!};fd|VxYsm)zyJUn C(-lAf literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_2.png b/public/img/finance/expense_2.png deleted file mode 100644 index 6efd6347d9a5e593f3b2d5a960bf203461479b16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11108 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 diff --git a/public/img/finance/expense_2.webp b/public/img/finance/expense_2.webp new file mode 100644 index 0000000000000000000000000000000000000000..103dc5bfb04c5ac2fd24565cdc9371a28bd1e2e3 GIT binary patch literal 978 zcmV;@110{{S5MM6+kP&gpI0{{T<833IDDrf*=06r-ch(e*EArne$gct&Z zv4eaL9Zb)%nD_i({AT26GS8>quzB77-Rx7ui|7Nm*O<@MU)Tk!PbtZtIJel!;)u?BEB?SI4sx(l}Pyv*?1ApYV2tgG(fGtq0EY z#`1kC&mz<^uXxb`V`g3x!D~HKY!iRF)Q#L8&Z#~!Q_uha{_EZ^`1l{k!2Ui5`1l$0 z=P;1;>RTLmeqsz#1+LfhksuK8T1TIpXg1D1&N?Xn&T|)>Xfg|<2(Ry-{EE@AK~w$GrOW`K$-#wRRE;HT6)(97I43h(yjha>;^oHiY$|Mk@7 z2vid-&fC!kGw!)j0D1)E>jMta_)YMn|ACvy@g<0XZx0uONuT=>xj?kWmFO#VDvV(h zMe|n~6+wg)%L*{z=PJp>{#Ay^L@G2SdHz!{`eP!oB z`buR-!nYJ=6-p^niT_173Lnb-jFv-(`K}?!fV_PH$h3o6g=K!>zbEOx9JjsGYwW=3 zOy>c>FnFyds{cxuVKL>tsr$9Xd>@pQK3MrHvcmXNXy?>hTYI(q?X12_;Q?|z+}mpw zyaJy`SW6a3eBqds;P{U*AR$8BKISVhWM?w@xMS){A0^o4^+Ep01>5wC7ImBe0FdDI AZ2$lO literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_3.png b/public/img/finance/expense_3.png deleted file mode 100644 index 0a7091fa5feb9af35b0958c705d9dfeb0209b758..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11225 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 LP97p_9{zs-XV^;v diff --git a/public/img/finance/expense_3.webp b/public/img/finance/expense_3.webp new file mode 100644 index 0000000000000000000000000000000000000000..c81ec6691edd62215b5a8e574a8750356f93f187 GIT binary patch literal 820 zcmV-41IzqUNk&F20{{S5MM6+kP&gnU0{{RJ6abw8Drx{`06r-ch(jTvAreb$kQf4l zvV(jMEcpM!{wn@Ja)6N&{Fg`%5D(>jKs>;HfPZfOtI`4L!PepE0p(@-xllJ?gQLTpns{G>c6U^hh}T{C5t!XBsYx`pN8ZR;hN?}ER7-7 zC5+3VvKW=0TM{u%rsNHN_18Xee4iT>I1kG-OmG%!QR?Z$XQ!k90RHRVFaO97`2qhR zKluUwklt;1ryCUy+$wvjioL*7@5qUmoS8LL#Xayd@w4$ZACvz$U+R_*Bnw(QT1y~s z(%=1*U;pot)n62jq2T6E)fF7BpZvdpIEdG_pf!OH^YX!jogFF557@T^S*Mk zhxO>(FN||`gS47v{`(;oh2DIz z2Xtw;f&Ws_Mdky+zI{EXOMbH#p;7q&ynP-Ql4>W;tbi_^GE{?XXiq$HHJk4X_x56Ao`x4tu62=!ow+DCV1o&SHKw1$z(tiG)E(W1x_~n1t~C5Xzu>V#C^}O<&5s#cem}zJuRB}+ z{2U2+l(^b7Ls6c=4w(rBNS)n3&qsTeNctEyLQvI%_yr7mzp9!3gYBD37!94&cA4@U yZhN?9+(9#tN}NhME@9Hl&3dluwHB4Vd?V2Yaa&Yiph@+ECR@Ag37c@)0000Y)2Y+| literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_4.png b/public/img/finance/expense_4.png deleted file mode 100644 index 7f78901a19c9a9d78ffcf58b371ae91fb317940e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10795 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 au(JJqq}DberJs-S$NumT@?Rf33xEI(nhAUW literal 0 HcmV?d00001 diff --git a/public/img/finance/expense_5.png b/public/img/finance/expense_5.png deleted file mode 100644 index d8e1f41d530f665a999932649f61d8218abf088d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11533 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 IV*3972N#0?ZU6uP diff --git a/public/img/finance/expense_5.webp b/public/img/finance/expense_5.webp new file mode 100644 index 0000000000000000000000000000000000000000..78c59a0727327ba77d3e45ac881e39bacb6b9a0f GIT binary patch literal 1088 zcmV-G1i$-INk&FE1ONb6MM6+kP&gng1ONcA833IDDrx{?06r-ch(jTvArYyZ&=>-Q zvVdrtT{%ZMeR{rK{9XPV?9bmf`CrCwkRNQ`rM)fu(Eg}?jeAOefc}Bl0s5=f&FC@v zGwCDyBk+6r@%wk|(W{-{4GIJ0e%bi}`5CBt`=&g8@o&y?*W&B^x2QILpDF)A>=pc% z`xpF9zg~wwt;3?tjq{CylrKhNJCcOGcRwWRV+iaw`?pD-^j8NhFt$?CR-D!rz)>%7 zW>7)qvWveBNKenBh_jW@gm{S-UnfN)CW(QH2-6|3g0Oc&~x6C4;DaemI8* z`^HPj4D0bBj!lIK{-Of5PJP}HeiS)xj8-2a`Y1!r~hE$ z*9`D~^W1Fmov++num)Su6O?#Qp}iD(voqBDW(nk^K;>%==bKfcdK~=S8tJ5kGL0+0 zv#n_fmD-@q%VwU$-1M!ZW@3owgVAsH`vp1;xhK0uHN=qk1s9M?7Uhaz@ShKZ3pZ zueZ)>zVkw%zY3e*mdQJi-@nqdMhw2~!yb7l0V`gFK+P^m<;Nvg3zCObJYG6*8k(ZJEqY5N}A za4ZT~Kb~ILK_AcILzazMI?5T1Nq*n=t!;~uXt7e{Q7t7R{}hSn`-+$U z?;g2n z{`}2vqfHeoCfjZ&TTS0#cT;}&s!gQC2yS;ObHW>~xpD;(Kbz9J5B@P}lI4vhQwB5b zHNrKYddwfkQ0*-+S+kSr<$0EtBH{lSHlK-0=Ss3cP6sjZgK77pKu;3T0mj|;>_7AW z^?G>6jJzZr8~R?-uXyx%>P~qBKh9LwqxzAZE2_5(_0!ah?y2TASCa%JqhJwHCfaPe zDexoJSc_+A<_dxSvDsP@We(QBVvW)Ce7S;1XLf8Z4AEHd#m;sqyL^q1K@)nf9RFXa zh1O9>Hc_646Q3Sb*K#>lK4;-&XC?=~TqVV!-xw_0alp|H zJn<$#=XX?$rdSG{MR)xe0_^0;136Ve6E6JfB{E7njXy*a^6KMtW2?GiM+eLnJYo`S G6uAJCBfa@?cu>)0}qybGdnY9x6i4r z>Z>)W`r24Nh9Ar6PKubh)HXw*-8M8kJv$xG!LA460i(Gi9dLjNRJ|xF z)CEW~Lp`#us7NNU^75t$c@WS>BE-v(i0QP+wI-&;fRvtR(EbLp74m*%a_~w1&6~R0 zBP2d5fQooWt}`|r)%g?P5jIa;2LMnmY{^j}Q{Li5JCQXGMEjw!WkTK4zN*U*33c<926|K#Ja90j~}#*)bICA!~;yAqdnh*>IwBnFH7zHR#e$?i99Rl zfHuKHHL~y@$^>)2j+6T{bNj$E-VmTQ870ak4dvbkq#Xo&_RsU3jzA_-E94L`NEEKx zu3nc(M3f6_)y=^tE-vTnCl&WK-+&OI7xnf^nkC^p7+J3M7a=vl72@W>Ffol38}Ob{ zX7IB}qf3EeTW2~{Q-+{LH-U=8MKB{rV8~{gmAPUtw6af2nNT^JaxR7P$L=HT-S3)g}&vD9`DEg7|NOH3dZw4zKMV%%v7<}n~cK~lLk z4bz^T_Dc1W>9k`tw2M*dkJ8uX$)a$U{vEF7Vpd$)OmDQD51`32tW%+k`an)HV*bVan43aDPi8ol3&$r(xLb zk8x>5uN(Ec+$Te<1+p3ec!@HNFoq$Dn$LeaJbvcIL~Ip7tPcY4RB(has=!+GUuFTK zyGhXy0`08yr@N~FSfb!`^6Kkj=z3TSBsh(|;BRQZL!=Yn0>%(9^;P~>x;}Nkpcfvi-Q@F&q4fHHP1)^byiXBFhn}lmo#zivrioYbHQ6WZ2 zsU&`&B1ETjF@t3%rI*m4I7zIQ#&!Yl2Iq)OQl1Ul?~%`jwF89;@nj|3l`-dGiKEz+ zaR{Pligsu0+}L$OnMKlz_N}OY!c|Ks7U0gDSi$|lI2!6qXoeT=?i08z8a-wYw>ARxJiBKH0-2Qxd_sHCiBOGQpK)NIN zs0sPiNY07s5sfFbF4V3UOO&lJwl>5m!-*iTRH2ujBC%Ytk@`zdLx$`)xdJUSxdYWX zB^TyeRD4ti6~;)yp7b^4KtgK?qzaogu{CN%lv~)m%%6g?8jG@nN}S5HG8&ESZyIII zx@WDc*iDu;er8PdoGTGTVh73J64Mh~k_m^?hjaIYqPYgrcBEuV_LL4(M(H_I=2Co8 zT8@v8agH~SosTK*c#rpwpBJVogw@`p7Yg~5R_5I*bAG1$OkS1ikoWssJY#1S)X1R& zVNYKj?U8gJcn=Jz*{|nvHH6y|0Kc9&P~+qkq^nO`6y@JTW;tu&5bKp zDqj(#AS{0|Pkp?4?BeF?_Sya6xcTV*@aVAZg!)8&;rldy*-~Nr(b}Qw?agia5$Swa z;hS~F2e7ECvpl|ZrR7#uvrHg zHC%!YtLBp2H{6(+)m*mhK0VW>wRqmKE`#)v@ojb9t!?YR-@UWF^TVnok_H4~{BRza z=+orJK8`Jzw5^`f>1wHKlBv_SQnkEUU+hjZ)iu+# z_nC^bz%}AtshK^`5}e7i&bRHFd98;!-r6Q}D|c$$i{$&l7fr;?*Bnn4dr3l0qRhKf zhPe>6uXd<*b~~*N;vMzQbIrZ^o~S`NCs~8%?Xjnci<&Nwe#Y!6brc(o$LXlnSI%97 zQX{a0xMb_V(W2C{;&A8iV}p1D<~)1d(R*5O(Cg!^)z#z9(LViM)z#^B{q^YO>Xv(Q z#aOI4vvJ-HjTfBv)V;&)>*4N^>Xz&DZ$(2|kRE8Gb4qG04kva~=ucgK80nJZcf$zb zKH(It{J;x+NU zSo>(yUv2P0;-c^xY{omRPOO~W^gl#y_g6)?k=hdS^WIw#u`zSiP@G%8lt1EMSz;a{ zU}AdEwtxO0tC!}*J;E%LH=k6MnUklN`XWTlV{R@xw47*a8P}0vlfocdtw>o){q0Qp zgcz6IVWM@?E&g`rmT=d8NRc?eKX@jz9bt&ZMqy7uAO$!qJ+hp8l}XrFy?1Zn!p?1W zf4SV=)Smt#@@nIs-mO@xa`|zL#nycB#;)sBeMP?)V4PX2+mBO?+cAkSwUToq#7*OA z=@4KbyV>d6^b-3*X+rE=^Egj6C!Of7AKoJn_W-P(NWyZ@X{HKUzF`vZP(D+j)NTW&6(w zHW2%n3(rxjeH$$KI>?v}$-Q95wW9a)X%1&5O;@+Cc~N6kEzO?NfpPub&FA{Qp^G)3 zV%4~@*lj31cPE$l*N$gy<#lD{s(rhUHm45LkMq^!&fnLYTOD_t3Y@wRM;DA6sP|(J zT|5cSTZ28rAxse&5jOr!ukL-uf3}l!N<4Jz6?1EAiiMgw!P5PSX|SO1KB?UJb2|>l zDxNY=yA|irE103@?C7j7+0+vowDpPt4w=g?4|~hWO9}(IHvGiif7UanKhaLrPjcnn z@Gp67{(ebB8b@-+6=Yd#{?bVDIwWG{@`D1J?_&i(^&qgQ0@yo|hn? zUokcAW1w~rM37(n<4?j3xw#>hyNH_&6AUr$E9*D_7#$GD2V5L#6k{%~>MqL0`J!Ia zpf{X*yApMPul6Pgq`3lmGbj9jb00ThVvbsgMsbSY9O^qVJ_Y?InF2oY3HrJA|ke3HAyvy(aXb1uT%)12fPC^ib|B)pj=m1dv=pg}s z2x|cJzkL+m`QMiCPJc1~;!sK90J!%N#yfcxK>o+ussQRgveCN@08|x|k$LB;rY`2@ z4z5;?Znjo8d+!PaCuwb0004*jFG0wtP+h*qU$9owa?_HR<1=-%XEru-G%;uPvUmC$ z2O!|Z_b%F-yBU*t+1oj|@_7kT{Nus*F8@`tP>}uO;$|yIp(U?GCg$j3PR7N|%FIe3 zgh)n4Cg5Ub!KWfF`EU69NRYzH&CQ9Ag~ij;liBkVv!jb83mY#lFAFO>3p+d0y9bl2 zw}YFp7n6f4<-dab-#FstuBI;5PHxtY4rG7h8k;z}y9rWI{7v+q_OItO_p<(PCI{Dl zm-SvC%U=r%8#61*e`3Ew1^#OJl&rnX?X<-3mG_d>*UTw_7tdGd)uw2w>SloPjtIAyA2a%kC zo=;1#z$dARRLShe!;o+3q2p8AGMrVmn$I6gJ`~Brsan zr`RB>E7CI%WiVCbI(#GHGFATYw73$jEnjiRnEsqp=hwDY{HS6wCu2z?GnM*XG~r7? zC+uf0XV@SPlVSw5g;t;=y8aTTLr{*t*#u8_i=qrUVhEL&C=vUJC?Cod@*u@y{QZTG z#jIHr;J&dxiqAH>2P-KVut9Je=|=MT0*gaXC*m;u56{tI_b~vy!j_@jHcdz782Jhr z5^6O&G#r{;L=*}!gSTJ5T3fwPzM}zBr*Cn&H)nN+Lr)xYUVqm1vfDXwN*Wgh>55da zTs|0Bjf7YdDsJRaP=c6NA5&%BGiXn@i*iO^;F_ z8o%jeE(Tw>nmlb1K%3~-ARX)B_aYfX`CtJl_g~A3UqpraQC~1{6?g|A+R#Rm?-IE( zT30GFl1zT!5PaW7vvUg`?u`}C4=2Q=&xHnheVIzmeJ{Dg!#Qi`cy$^8D-NkHViU4( z3CpGv#Ib)D3RL(lEu5EWwqIiPt<@~hYZB+>&@qzqkQ%E%?Y-{S-`dsBR#Z@pIP#c% z6eOQeVU^4A{pEeGM#~nAw{yvaij8HaiHhKH($Rm!n#DY!1wgz$6=dNN2q%mto_j3f z@7Ek}5o_Ot5e5DNvo_WVHo{r$PlS#OqSY%-HJ(J|RkTa)KC4ej2P%458RHSgM{5ZV z0lqEZ=x}Z@OxG=L!3uZ-_Wej2$9dNdzXofk(qrM)%U!Jp}gZ5Y8HCJ?$BCh-3u_e z`zZaWNOj4t{2Do0Q6=9-?!TvCq?QQjhmLizv#R`&(|W57e$JomJN@yZd`VzDZqck; zN_hUfQMBB--4>&a*wX$oJ=F>tNXu=p0Hr7|{Ft(Gv(P>0hX~>rP9K_v`ciTgJDe#s z!S`fZe)OO+rVRtD@W*xvR^S!KR7PBGRzt<4$_E>S!CAHid`T1okw8skB#HQ`VLmnU zgMJ5;jb8Tti;wt5aK2Fi*+6X7-EZNVFKDpmXCDzT6C`1y8k);Dh@a0;_>qscx@Wr1 z%2&~ZVOxRLSGd5d21cmtuIoz&d_w&AREVonsK^A!R#tRq7zC{yazriFgbeA0rXP{? zGuPA2t|hdBD|GclC|59IJEUDQ0LO4vD^0ha=`%EFnBm){rk=Q9sj<0&qtCyNQ-!!H zxolu*lPYh}y5g%Zt=P*y!+L3uAyY52aU#e$e!wsjneeUeKc#OVW8~OID6La8P^rX( z{Qa3=xR!oC_dC@ICt*M$C*4fd%?Gk$!=3XlM(}}cNr{5&!8pwrje4Sbx@Y+5t7ftM zU05!(k42E#V!qpC;wLPh1rK24KB+>auJQIVwj=yh1jtH6XxXbIaG|XM6pv-jiL*n@ zKHAyQkcz#)Ji-A1i+0&iwb4w~Ub;*G^Rj#+xWm*?)(7Xp@>FqqgI}=!Y;c51o*);I zNk!_#^L;=eD zOTw`#LQCkgHCT9Cq@Rs<+7o$n1PhRuQ+AtvAFk4S4e>dANwJ{56Whdo1ei)Mh+eY{ zJt)`7Osn_9>{C0Bf-qV4y&b-5W?7!5?>-lBuQxZ_{j&Gd{$;FY!IJKB-M@c5G&GeO zgDZWdGpy>7e|CG!PidPu#xxi%Y^!k!HpB+ORb!MpcAbRR-*o)=nC+;|r1ZSM^R#ju zVVF-JFYHm7^ZG1j#Efx0kr<0>Ax`-@?j^&xm#>kHi&H86=DB>BtUfg6rl_}c5ScUG z#(iDpdkix#;H%alULMQF1MubdCY*3*+o{(B@-<=cMh{OTg3-)Ma>IUvVJ-u0e*Q%4 zR-T)>ERCGLRG;6XKKga4?;GROGZ{R{4^(!&s1J+-!YYcW7fvW0%TB&RCB>yBPw6-3 zYGR-YtN=sd2s;{zRFkRG62DYf;+nEAwA?HfZ>t`sKR=f*Q*q$-oFU?X5{eqw51Kpz zfTMTMgRX0G*|dcmsq7zXZl4SIH=7FApGTPPbx~tqg@v!CTwX3q>tFvkxB30PGv9Fk z&i=*dd5QK--T!5pjrFT;FyXlc@ehc6ux2+k!vm4rYP;;KT zU7#ut!%u#K3Fy31c*(u^Ro5N>I$%w`9_~TfPlS?6kL?mWnLmFvTx<3BKNfx3Oph~D z0bg8wFK%sqdjoS{?P5wBN}?_kan*}0sn@wZ7;I@>h}9ZXh?RF*Q2pUp&yYT%g73v0 z1l_$*fc)DuPdhr&*V_qT!WVhc4z*5jScL?MrmGr{ zuKJIVu)K-D!a^W*E=h=hxchat9)pmejW>N)yiOemuH)+7-5dm^dm?yZIhcHXX^EQp ziDjJ1nrtXVMo4}%Z_1v2%~Q|Pr`z|K+j4BG^G?sgwR?@{Giu{5uEeY_jO>4PA^pT8U~>?x&QK%Y4D=|i<5Zs*=9vu zs`#2x5Q+HD+>?RZ?NzjF%d=sB{N#}<{(1f*hZPB24!7m4@UsL`Jcmq>s%IvCx}~{H=z-HHOI}CZ<2P)I@ZMLg(4)>djzSY z1=18UdI+QtS*L=3W@()5d`Hy@=?OSrk2$|{Ol;^iJN(wRI#PLVz|83on9*_n*g#v{ zKK$qmp3v`?cfViR2Jin0pcul^ywD%MESVIaZtup}%A*w|jOcvwMg@yR6n&R>D9UAb zM=6b~Ia0EWVU{^>lzwSCk=m!sUxGUEDC4{9CjG#yV!24?l1XKdK6uM}cFqb-9ozE<8d~zpp z{OP+7ezs@ei%*{-KC`&We(~Uc+w`e!T3S8P^*IZ8dmA@gYuru^m#EN&db8Q2RG+Y_ ztrRQT#^AgxDO)zUR4Q+<#p| znnGF2%Nr1Lqr0i8K{YE zf9v;QUv<>|^m%h1kGdrEpbS};xJO(aF)@@BLawe7O(VKK#r~cEUX}@_)CkdkwoRhH zSqp|48dMCustsHU)zR$hl!vT0ZON$duyV~Q*lcC}5KB%e zmV6%(@vz*?R6MI?qw~d}MIT)1YPTZN;(j-O+Fet8zmqR@x{oUfTJZk`{^kc0shi?K z1p~v1d8BpZmKL}OBpY|h!`%>x#O9+gNwArXR+2b4gas~sEN$${Z~IWwX5G!)Wuu(Df5t*wH$=K_TO2{#B$3bj>e?C1 za`}Uu&X|E4o=a(~3PL1!(D4fE^5b++U_~NgL}0p0JcF4W0ogDF`|0i+>*8<2dE5Lp zhYJ12I+&kQVKbssj8N6J@$^FAY`^=LPkmHVHeIm4mVDjY;ACv{mNs)uo4w~8Koo1I zT~0fVY78&v1)9LcvJf9(5$MYP9HjhfcMh+{G)Q}Q=m@|5EK2$kX>~#zKXY9`whRJT(X^;7m+=vj>G?j=_$@-tS`i__Us_HI}Yxd;ufommrx98)B(n<)GO;~yUC zJ@mUe?sv**(oea!=9>(8rxx{_v}!`%ckCmC&v^y8wnN05f4<|_0Q z!=OJ3@UiS#BRzVbiZGBz1h|Ya^F7HC+s1nb^qa3HQ=9G74dG5f8dghLVB9g+qEc`U(41ATm~qK>dj1G$ zG==lJcgbQ;^$|On0z;~_r^(=rZ4wC@v z`{Ul{%dgX4*(^zu0WU`hf=%9C2f#bc0OKfqKX99aqGtZIqQg@>F}|cM;&i`I)9Wwn z)g^xzxS70x*N+cmMG(ecZ)9f0g0S>8C*vIG5v zJNAJ3JsH4HQrha>Cc`1}3ufr@a7w|?h_mV+Cf(7AmK}{s>21l10bk{Uhtcu4;a<6& zhAT}$6JyKdImW_p(zYa+W0|tbca*(3{GaJmBqEl(!@{qLsqjDhF0=;LU=qgay?upv zKBS$z-k!cp|AxBqscT~@!E*I#wd-jpq}dLpxvsX$axJ6!QHc+|cdnp;U?}aWd&wZ; zqlIw9t1CutR_T%Rk}ClQjMm)4}KUh|26Bj7GM z(X-nSLe@p?G+I`cclXGmJLH<6Xz)dOMyVzuI<2uZ%f+zMKJ5JvU*c(BpZ`|q%xwAM z{G?u&M9Vy8>MZfzjC+A9?JUGA|6v&nKdX!BdeDW#Ps?V{JO`EvY^G?qB11&k2UiEh zyAAI$5vgLBeN#uVp-o?`rAeOrO(-CQy|28k%kwFPFac=GVi{Q8V!>}H^#1FDoR0(W zV(PVytzG7Ez+ggg)S1^&y~X}z(ni;dtL5;hK|!TzkCksV`oWe}4R$@+H&kOx)h*u~ zHac2?Vkxr*1YC`dy(D0A_9L=pewY3aKC~+VKP8^sb31i*<3C)(EpW*HXuG~CqsG8} z!|Iibdlmbop&-53HZeni-FVkh(-@NqRLJr#jV@#3KoTu-c5e0K z=H?Z$?)vGOezxrw8}e<%u+fZU6OZH8#_}?WWbN{7VR2*V)P`AX`JAL9poRF0t-xAQ z|HyqlODeDY!?5l#EYtQy1Tmw^PU~e~WGv-Fr;Ahtb|LTyvxJFGj?lLXM~UK`__`R0=Z6)}}1ImSN<9 zp^GPv2?>&K=f&uu6)8(E_4>6whw8_cAeMBOIYHziYJ zFeaxH=FMS=;ZAHq1BQQ~f<94uRDABGdcN?>sOg235)3({9}&$4O80u-er#94T$rUA za$fiYh3B)Ljzxzk9(d;vl_`Gr(Y~?E!v05fmub`8?LqBxjuY{!r`+1cC9vH*BM2E9 zGLK_R?eXGbMt0Ol^`ek$o=j&$wIw55*a6 zKD0^-ZEsCJmzsi*(PP0P&K?RqSj28{Y_*{|mdJum2=?Z&6a%GlA03k=Q-?+0+Jhi-LU2N>(g4u25E6wST zo=BJ4jE(ZI&p6+#IZV&3F|E?8j;nTp7!vNSuz=y>tCMIOu^o`weCu^A(~z*_1dqE| z5lqY*u7O6Gx+X=E zRsxtWZzVHr2P!o&adU@NEDBfxF%K)^oat#Q@ijU#1F=ihhqrHD%>%qbP?=(rE~O(&eDPD?KAcyMvsVVn z4f%h5Nd-c%%wV=c$1!dcr!KJ)pw#RIkNrw|8%%8tAze%Dwq#Xl6v2(5O4%yc*A~Ui zjRPYFfOeoUm7$ikHb#SQA(6}fd{zl4xrKtP|7z7BF42z-`1VI#xqM3#DZNoQ6*wCh z2gZNohKUR^_EKZ7nK25>j)0rieA4qHg|_WPn-qDThzM=`X=?o&?W8uZk|A%rF2@sZ1FTryUJ_gjO7KZFIU+3uhO`j+)LWNsE9g$B)AoOdVUg$bY$W=mTUe2c$yPf z5@~;-ovoXN=ei(rz4Jr6P}W%?ejdGL2${W>5(!N>e^j`QH6no*3X`*EZyiG zqAlam1Iuy(J@u_Kj^q45pD^))gdyiQFG6YqjAcJ?gSg06Gw@6m>U*Ol{dvDvr}e-{ z*+&)2%h+6se*IWdBC&A%Tr#)euiJ%+QAC0nI1-8G1*f^BC1K|SKN?O|8RKw%8g52H zXpBjE#0Vt=yD_)!KS>7nO+3QBT0P*y_9C>U8!J35f=$)$ZtS?5NNCm^DD00^iP)_? ziJBNGEacO5hQ_;(Q!c289AVi==tJEbY^gZcv$+B(P7Z*x0>b z*QOw5vxeBG_+h36HZNSU$Z6mLR1z|TtWNsrD2-#-F~la_Pp7&;P~zRUn*%*NoW|d| zx))du$UN#hQB~HH663&WkBlM+w6J2`oM91aSO~mJKNJ?h2Rxmq(NvXc5kKSnMD-=0 zA#A1|fas`d87M`ip!#}TDeG(ej|T4dqBti7OcD*>bxKyt=(wefF4x;v%dykwV${j0Kcp{ zy-BOeX&dSz{=xYhqFegLI?Gyk(erlBL(xC+{lWiLKjU?)^h^Df8`S~7tTdutLTx?c zX?p>j#RP%;Gx{GZ4q_iQA@7M-c24=fOsPWVsibquohT|cS}v9rsBYX%?qJ4{%fJBs z>)tQ_$HD*O;Q#UPfB5)6+78v1c8FB@(jI2a3d0omUQK2Z!H&=S58tS=_$GzNE_t2o zp#RhfVA8oLhN)KQ(i)Bd3!l|Ddl4AD`dMADwp@lFzS2X z?zOk8QTj;Q$;8`@yJtzbJO7NUihFaJFpRw7U)I6#U$L+8(fcfI^s?kUB&7f?JB<^{ zh}kB<@VApwA5Ij-y$%5$WBJ9X&tsM%e@+beNN&W*rU4t@u5qq-gO|XM0)prFBB~RZN z%#%UTSm@FBpr-6}!K?cjl|BB-7Wl6g+y6_BsPQSj@#6KGq!Q0?C-Kv~5sj@?G`suo z+f#T0sb!qs^!xOcqQ+mTIYnCGpSz4^^1~(UN*Gaita>$%kZPC@sq1AcVJsY5S;llm zN1gbODT#$fURhR%5ts8sK8-NN>12QBF(HdiYy7~A1wD?LgC(mw?B}bdw*PgC{fZ)c zgA$qV{8fF!1CQ)a4wFN}Q{p@#1r~vpBPIR+^6{hR5D1{TbtZ<#eGnj54$`U1K&S16 zXh{R3lz6U@xx*+HR-DXQP$64d{EeZ0#;~M}!SHP;PlQGpdokE{GHM5ptl-?o+BVAV%-3F8B6Z)M zQK;UI`%b(J_`)#>I{J;@ArSt2E(CW@dd})Vo`?xDKXgafkbz$R*8}wNY`3bFm_wl7 zR(x76pwG+X*b1!{xB0CkQ7TnyfoqUYznVZ?FjDV#yb^ltxWo6w8OQgV8Y~t~*QZa$ IZmp0207ES1YXATM literal 0 HcmV?d00001 diff --git a/public/img/finance/other_1.png b/public/img/finance/other_1.png deleted file mode 100644 index 3096972a393a7a1eb9428fd267d5da50fce17c87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33598 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 diff --git a/public/img/finance/other_2.webp b/public/img/finance/other_2.webp new file mode 100644 index 0000000000000000000000000000000000000000..b93d8b47d69eb139da2cec92d18a5884de060d8f GIT binary patch literal 1746 zcmV;@1}*tgNk&G>1^@t8MM6+kP&gpI1^@tXHvpXhDm(!?0X``di9;cwArYuF3>X50 zv$t>|X8kDFVLM6unbY6+$M}KyINP~E{Kx&v?pNnmq@NN0@EuZoz<#oSxBi>&G13A0 zf!9aq9s3XIiTg9~pZiJsJ?!7B|KgA3{i=Uqu2cM1kQ-g`;Alhfv=_%Xze#`2_X++* z{gbLcpa<&DfU{8;Y(Te)C*u`osx??B^#kJ>tKFUY2;bn zROE`I?Wd7r8Z&Y&U;ten7RA^vqtbx27BgM~)GtW+)VyY+c*`r7gm_%-?wi!B8K|*y zv6*rsMFlCaT8xjS0bKfLIQ!R4%_+%9h*J-;Uj{9O5Pdm}XP2b`YO$J&7cWCLUV;J2 z9e7J$6Sab{+ZS}HMT?w(s*3661+y}q=-<>P^^o!G8I>ptOXx#EuaLYx$&HV!C($4n z3y@y@$S+So-dgF7-joR21&l<|f0WUb!Ooou)nLQQ4CVdvN{Qi~Y71@wAQ@>s>#FH(yby9MyJ z4al_?F?I{oqQw9J{_56D`QP#Jf5*lDkBgD`HXHMft@osad;5EZbb<8d{Uq9M{opnZClfgII6ltsL);)@K;LHr0>kY7AZf;FsJa zR>uBgB{Aiacr1exbhh%4gVI=$`n+e|&b7Vai)%OGq8#_JbAQ!DSx-X1ebf|}B1D6o_jMwchL%xD1OK^{t<-YR<~{yC)Sx=V=4% zc?Ju|Ys8*vsH&nHd(0~T`yT~;Yr3~*tNzc0O=XXp@hKbW=tVD%5%Xn7X{Y?EK9%(O zZ*3Q@E2X30MW4moCUwt*r^7lxJN&4&`;&ii>cIxTMpYfqB>`vYHHg^AkM=;yW8=Ax zvt|X%Tapt*>#7>r#AN6xc0PelWBuk9{NDaBum-$5fBeStvObRL1qZ3)NwKNLZ)Dtk zXPq6u2_B~!<|)mf;{L+2kWj<_9dl#xXpl|ff-KeE7T69`51a{fKNz#L|ME%yWV|+> zm^arB8KY_HF!kP`oN4B-ta4h5rlKoGHvywDgyO*lfADMn>Gp@|freCCnD6p9*pK2} zyIx3%UoM%^@Yt)|Hojs~gAg*4W{ZDAMtlogHT4{u^1Oc47HHd+1csheJ0<1n+8;rx zm1WpCPPdi*xtQv0TuPHqUK250**C!sEN2(reOYX70*83grIVEjHV~Jdvz? z=DB$2+x1u_?-<)N8))*tz4S{~5o1xRVnO@}Sne~)p^Kb&moT=K5%4Q) zDckzI#>+f;bJA%iLRg9DUK1}l`tyC1Tv5`_2W*ORp^=~tld1f$f z7&n()d+|*B$ozVWK|x|yd=BIY1@p4H%+_Xcx#x4sD5;Wk}*O+(EQw*r$wu|DS``9viN{otGDUQ zxc;R#M`=yiJdJcZ@}3vLQHN9iY1hV7zF2j8cVB241pK3#>INDjs> z$?qPhYi)W)pB8pKvn0haw+$Z2fe1k-=z=+g0@2y8$Z?y^Q&dt%@^68e`#|O3Pw#(3 zJ*U+9%rE{n1yHqBy{4FgsS?pj3}MpVR{Tqf2$cQZ$w% zl0w4xmR8Ykh5}|Z*@A2{S<;bt);JDzG!dEcERmy0Fs$h?*m603Dqgag*}G(>Pih@a zdwf9-ChDgC?v-Z11{HdZC_j|sK!`!0Ooj6494hfg`xBhy4wWRX^Wppfw@Ue8l)za z$anF+56eB@?3nCXq@iy4smEFcf>l9rJtcis3XTG z69l2MRGR5j!a*jsoxwQIHoW>V|BF3Z%sOdqa|98}9CQ5dh(#@D9j^DvA_SOiQkV@P z2*O|a!`QV@Z3iztBE8z&g*7^mU#;h^vr{iiWS0Y7PqD3L{Jf#ns%IU9>ets!~T z{-bue@G4Quy?D6_Y10~z z9m%GXam=g>eJdnzSq))|0JgTxk5b&X3HC*ljy^N6Sm;qzA2OFSsl zE2iqGzKeye_aXkCbV-LaP}G8|qEy~2$1KjQ>9KaCzB#0!J}dQ9m9*G~2o!AM_hRUz zlswY`&j#j)=AR=BeUp2*yAgEVqzXN34W6BZQ6cn{LZQ&&4R1VE1j>uh5!iR3d@2G2 z7axQvs;$v45lU1wZMd5~;Y{KVk-dZlNMhMZ>=)0vX>r3ppyMLrOS5Go6qED^aiVDV zVsn!ahH2GNRw07=Z0nw%AO-eGYoL+$VYs83Jj?3yaVI(Zq;`RS{lTvgM;aIZ^_#0Y7&#jFct00ID7LNg>y<}746wGcA!5E#w7=22) zdK2TjzQ$~&2|6`qPCD0@XAFV_t1(G2T`%!RlXn$ zQ0BJ0V#%(?zSbD4K>BQYV0!EE@iFo7`mx6`{f)@+-tp7?^jClmOkw`BsK)Y~cST-D zdPmxdN|$Poa`B9_eMl3(5uyugb*yjd?T1_Gu$rx^zL`y@iG}hX<@0Stmr7|>4%MSS z^9l`13`+wPu2OAVi4Di);;M({KYr2u>>~pz)vFaW4NUiq_wByLKmE0G&|CmY_ICDu z?R_tb<=t|WHy5BXa+v8Ym@i+TzM%$CJ)dJdUOD#k_VQNtxjSw-x;;EPYzHxdROc&y zh?OpWPC8mW^t!&f&N`x*>-h|G$R6ch;O?s%8gPs>CA(cWZ<8(z=`9>IFX;0LQ;)%Mzftp4ehnq#6KzS%g_di6o_&;<`Q%XG)H4HZKtA5wqV+C!Z`+L) zeJ2`ADJ0sGL>qrWO-HRMvRz6rAG4=(sB?P#!*D}nEZ~z@{#9j)9>c6$4QYVyu09D) zmUz}Fr=R>$d@QMeo6bPFP|b@P@kPudMPW>J6vzyL4~DE}b-Q?t;97T_+w$(Jd?9@QLm!}gs~ zf!tg8P+~PoBJCGtJW3Qw*0a`#!|<08RX72-j(8ubjHp%!_VENIszmZ|smZ$O!Av9J z13Nk%@8~<}ZRPS}OXQejYLea)?%^^fIFg1X#*j8TPITFW>^;0qv7@&Jt76+}oG8RZ zZtW>~I0b9y&m6$z_hgrL1cw*|1is9j%GgRKnf^kfoQj|3QmbWBTSBJyK3U; z(%%(Em+~)jC0m z%p1(7LPr1*5FOJh%~u@V?LYjs_GRzsXNp>eT;mowpho>%?Hb2gMtY9{7;d8x1@aIR zs2A*K)fbm>@hlf3H51Oa!B(=pv8L?J`oz`mI~^w~R_5d987pB%d>)ezymt+gPOMIQ zPGV!lW1vODYUA#+t9M(EAR=j^CqYs-gU&689CVmH7fEQ|S#a5;<6)L~Cezq>pk+aC zMJLmR!IgdO);sX`ZDS8N@au|2Q?d6*R{nNA)wgZG{EFWd6)P^CfrbJ`9JOaFY263E z*EhRv1k?nK?~cydf8pGY-}MM5du$H(eGlV^%8qgjZie~{SUhf}8kP7Oxv1yY)f7uM zcS95gQ!-IEA_wI2lg^y^-KvC3{hXIQ#x7Ato^oS9zRP8t{Ked$F7BGM zd+mp02jo8E13PmKs+ojWg4gNx%^~PiDAjeXBPY0VhZweSwHnZBw!zvt>*qHm(chK& zWOO%9O$sOn|AO8HQGKEsp+*Hb2c=&eo>{H$WT{)LOZsv8D+LaZQ2Xs3=M*5=*${XGDhL6#+{T|Cz2^w}1+yJB9%vPVdBQ5c2({exeFOUi zohwU{1~1*DJY1fXrK?XrmcC~S;)GekzHB+|E(Ss#AQ1eTbg>K84}BrFHi#Ft%m__7 z2#0lU#qrv=p~#^uPm74ppagoiamd>kQqRG`NuWqGAtA)29;z0zWHW->ih6zo{4T`f zeL;R5`f*P$T~AGmg4g~(HekfJ&Lz4C?+w>CHuRS_U^W!k#J7o)mNqyQxb!DvE#dD+ zC#Ijl}DzN9-KBKe!-kz0l;VmJYbwJ}h%RaHe`gU8Vko*|MWpul5@ z@F0mu@!z-{A`1fY-*hAdgeV7uXaD9=gWvyL$?))}%s+SJ)JOz0_%D2T@GnIAPi{of zLgfF(h2hT-q_y8DD#GvDR-QICu3q+T-suFpPw)f`cLhT)1O#HnKLJru>*WQ!{sjje z18)OW6;UfU7fuUnH%l8%e;4;Z^&p7*i^8KWHr^Jr{w~h0UZVaI^nY`R!sCCEx#(&C zX7P5Cpf^y}pnc=!X+tZ>$<4`4FNsM@ODpbaZ7ZrJBlmA{_%8{1dv9-dQ7$e&KR-@C zK2A4JJ1!m(5fLtKUM^l<4tNd@uK-tX3x5t*FNS|A`Ab0QaZ?}>%i~uMfUf~ga2iLhd+0C z5N5P{_DK%`LFiIZMq0-o@g(0R-fdBLeOl$jNsQ~I+BRt_n^45hBROrH*YYj z3oCyAq~B^QR4PvhPu+f|8=>cG6fULdKop&?S5*F<_F6&{>&ts-B%&46mqv40gXPbP z?iuS9El-vfx%h&Dr;R{)K~O%wvx$6IJ_WCn(|%si?c2awuTNbIUJH_3utu-x)$@%4 zCP?+qM5WuZ{Ljwv^nu^R*sv}kL3bb^zU&duWyQUFw zdpGk)0c+`*v0H(ujRNjEAv?A?L{uSl3XbwBEjYQSZuod}OW)GC=?w>&K^Byt-%6>BmTi{xZ%?6$qBZK2|E!k3afYLYQ#_1RugLcLFZE} zzx_!zQ^w<)wB?z0m$X0nOU<+5sP9t|{LT>6;>!`z6?n4~G}5@+sIza}XZlqyVkTwd z6g2&WVJB-|2P1a}<&zTlu`?Q2HSIa+b34JwSx!~L6@I!j`q~=BAn&H}M*{~3G(8$z zqlHPb3Q*PF*n%6W0YB72?3)Yl6j-)HBkSEk#*;>tl7~J%_>5ILM`=ngU7s-HCh=z* zIY|TCbF}%EHlB_`?r)v~Sd8NlARR44x1dNn*?grPYz$g8Xkj zeEs3tBx|&-EGe;vOG=|k$+-l0L-lBMh!P3BHRjSII!8b=nc*qX9I1iAyO(p15lTB; z3@M+RAQ(~CX}3L_SOhqdNc{REfY?LHNFNkkX{CsIKAo?ejAJC)fmO+VK}$zJgTLA? znEYBvT&CY?F=F4bu`agIsi?RSf?CkI0FSJW=-xKNsFHwfWIR{T)x)I(-^7X%t&HhZ zBaK;#U}}GMiCz2ty8UZtkg99I3pZzcdOEcLkQ-R&WT4c#bR_b+jL3$aq4Kn)r;aAf zR$~R`%(|VQ-ND3*EJZf_MLNNDNXHB4|C$rw2A_fI$$Vgf*u|EjMY_UOaLt*&C4sy2 zhQ=K<+;dtBam!c9V@ z>zTv28e`h$=@|;hVb2YkHwFre0QAok8SfT+J8v^vyu09jSooNs;=cAOnv4-C<$KOB ze?HZDX)Np^9o6de}uw`LLnx>vN^=i^!}2Zvm} zwi<1!RRABloP~}1R>&yXuJ9>Pn%W%CT#EcEQ>asz3?^Ju$@z=Aitg)YCoA(i*gTYfKr(TW5!z5(>hHqNL z`^!*ab=F%??)#iC8RBoEW1Dt;MurA23e<|%y$dw;CgwT{LkRqTmq^(j4W4Nys6$5A zlTQunlhw8-i0~kVh2jb~|Gb3w=y^sd&sfeQ6WT}8(;3#o&PN}GuMG<{231>k7+rEU zA4oUJf%#H9Q4HY|2x_YZ&O3Qe8}13Nb=XmZH|0g^npDrr(G_c&-8BjI=9kh+-1{C3 zmrMmLktl?OldJe!ic~>K@{E5hY)J3;=&s-?kO<2p2dLuBL^X=q&hqBl#~?N=p3@41 z4qmGI3lza>R*%nO(Jf~mULWh6F^4ZpiZ?^Iv=Em5S?*U~mR&BU@n^P7_(&WE^aYEP zx1+~*llLp4$ApW8b-Z$jSE#LcI-*fo6_9bvn`&*}wnB$#_*kv%pVH2oU|WRJ45K0~ zNoiL}(VUWg_Mv07%lE_~+=3FU^too+cZ9@@6&`PS*W*?)mQ`j=vhrskap=vu0~Y}z zBkP|gj;W*gD+d<1NXg;T9Wd(pw4ry;+)ak)CJm5``xs%#Q=qF$G{@%M41#1 zRPMgrFQBF9Z{Ou=VC4m>tep&~mb{M~JiD;r5%Sz{{JUOzmTTc2 zZyLZiBZ5lMH-T4Z5VP2EJKTKa;cc0b`N3m8JKl7-xks z-{o6o;IrggK+QoxIxurYx$dh7UW{zCiR?40K+#jJ9YB4$hx({#zg>1*c)n-sE%RVe zS(S%?*TQ}Ii`=;%<|@@aaMw=}R0=sy2M-8{ve?SX)8=gi(x$JY|C&(vPLNPtEUMow z#8h)E1LHAy+n>TD6{|T8oNEm>dxlGmp}12^@b#n;?n=&aQ$=`S7ao*tOqK#(>#qT9 z2gpKyu}6(6(A#jAWQs-WpT}260k$OyGM>pGykn3sgkufFDb`5sHy=6 z^~LM)4v{xLprppkJ_qn~{kcThZGS zhK42?*93cSiTh^0M868&C(lW?le)4E05Pw){5APC7%-NiI5)ZMcd50Z6{%l#KimQ| zjUKk8Y^0qX?T&PxzL39ee?_)#qinZixVq;1G~9i?Op-088Pv7lgc zerj~ttTJ!#Y*=xHVZrKWNYnE?V*Mu^5Wxjxt*RRweWfuAewzOhJ3i zdHFH)V%#m=BC6>%P1WRpS=6KbQgs?!5kkDU!Hwx2Z>&rwa0b zzeBd1t9AWNXmI4+)SeToY`YljXK#Zg-ynONzE+sO-bn#q&(a+_)_>-z6jy5DyaR{$~if-7d>Z} zKUQ1=$G~weqqLnNed)TgF0XVWqXk!>NO7-Ye4Yw$qiNQw4A@AS0+{OQ$2LJY$~vWD zSY)FPqM)PwrO@{g?+nj$N25>HPzkDW>u%&}{q%YCQIcOuSnf-BE{`xiC2rgo@ zolbXii^@M0gjPPX-VpJ{-1v{OQ_s(eRmAq%BD1~5&%+{-wa`tlmf57_Q8f9ws>{Gs zm)oPa_9#CGcgFB-=<+)$W~ziC6LUukb+}@=Y#OJ0m*n97a+0>~9wO|bvHjW)*X0*t z#N5|4b@av{e@Do`7lb;ezx)69Z_-zu@1TbCqIpjH^e*>fu7p~Y9yydhO^7sexWJw{ z)v3=$48l2!5OdzY96}~Nt;|`3cY8!-49>uI#ZH03vOg3&6Hj+`!3;&Sex{Q-on5rN zsUZ*lLW?-NgOWaNgY@#@fH-!uZ@jq8eV8CrI(gGR^XPZ(^%F1TZ_wC6OR_tteH!6xv2@#kr~wAOt%R_uO0~a#>4xXAiCy=+~Fi}S8z40;+@zh!|nA9{my?i zUVA}+ATI30Md@KVmgO7}@qzK#IH8%`nAt zHclx_$_Y;DyBI;axZvw)ig)7S;;o^}QvMl-t$&Cop9}Cea}@QSz$wr+S^M|&RN(oX zm$wNP>sz6)fD{Eg$)=d1ZNDS)PRgVb4)j+xT?_jaEP_f%c*1TZna+?)c1aNw|hsOt>hf;YD=>l zGrXW_ikFs?sCG?5c)&>MfK)E#NJxT%luJk_FM(-IqE>YMtyV4?1?Ls*NkWbU6)z_8HkK|LI2%bh+Ia2Rp7|P&7~a3xaJdK2cG!jA_kF63smJ zhBmf0Opd(j8PI@Mf#5IMzyH7wixBu?9apd>aRK)CQIjPW+dOR?J;>vkzUS+oBLG|3 zKj*||L~DYunssL*)my6IS~WZN=Sp5+xhotgU8?IJEes#F7Bm8RcTf3W2x7YP9|$t^KM*8!=@*MpxxPq> z35Z0mcm6)fZm0#2BlA??8vIe3IFZgz3p$Dx`74dM8Amg_QO0Ubnj?3vCC1Y^ zsxacnT;YV;&8XZjDqz``QS|oBY}LzSFTJ?Gc4SWlqX(C?`@0L8V!>DNX0T`B)iLld z8rfcgqY;IvdqRcg7b{jyiq7*T{G&1GNs{;40ys!l-SjqriBNmhi0k@O&X==)#eoO8 zr;X-q8hLL;?K%zf=Ol<7%}jTiXnYS7eR3Ib!`^Z+X|c!o7&EEdpbYF?!PW$Dk>YB+ z&tJFjQ`weFX{6VfeoN_h=WWk6@$_T3y65+J%B+#&MP=-K(nyNuGUiuU6~`~%?kC9y z?#P7~0niiD*@aVzR=o4&L-Bbv?Z~Vfy*W1iN}acW`qy2wJ&aI8JSqe$TQxp_O=JdV zO$37@;AKl$j+2a;r3!sl9z+hUxuhp=n~lOcn@r|VNc(SRE=az3e-oL7`my~{IdHQR zp}ikF^&%yfstjT+G-6j|WIhVSkY!hg`nul8=t~= z-Ers5Q&uAqm?6m6uR~T-3Yp$umFmfO9hLjz6RR6&x?H%9HJ!vD;~&`e;$oU^@z9(| zL}ikOwsr`Zhr`ytd>s3*?SEF?AF*h0iU##-4)QIzwbp>_|4w?t^5#$#m z4JzgIA7*hx%sDk?VOi3bpKI7O1t8k>>=#p zSmbpsV4K1JsvyB#*4`C`MfK10wLLZGhIwP_yQv(KK)!J%U8W*J)fHcIYK0PRc8viV za3F!<@TxJT31UG7*GlDE5_f*%)PCT}zpjN=*mR-@@UA)yFT`uCi5@ZQw8sjzwTH5&M~G7t_D}F$4ve z>FWb{kF`SUCGvg0UKYHOt9b31b;LeFB+H#mu8^sqQQg3Fth?{Txn6`iK>d$Bk%MYofqW6SNM9L%~ z##6%stpBLo~uF6uDq|5jo%FQ#EX4htVJV%tkNN zbL_~LShR%mqk^~EOro}lIJyc~H#^oAUB(|NB}T=h91c8%ACZ$$V8(76`Q2CN>yoBz zU#3VkqntM#JUHm7dN;19GN?m(;B|;yX~9E^y85(azS;?o1UWEi4dYV% zR50hZrvZAA*Y*&Q41`<2kENsnYO?&1(f3)(4`i)-9FYMgI$f2I*-M+Y57`)}^RM)l zqp;Ga|B+xEiuy3XZe5Vbqi^RAm>VJ69QczD5rs!CB3$U-RKb1oSxQO0G|)I6tk1<4 zcW=h4VN3Tw=*&TB0Tiv^)2DVFbgRvH3Iq1q9@60njbFFGUg+~V;s<6|xe4px9EI?` z5DN`bT1LB_R~flmEVrcSiIpC7%H84#>OLJ2&8kB;-{j@4KuN+R%z;bw)eqQU z;DM_Iw{t|Ei$?YoL7*J?5t4mQyj7|hrDyUh&LseY*wU!U@fqJ0}!xtRwDsDFoi`0-)|j#R+pp*p1lSB zf|&h9YNa%{N$f1kI;v9pfGNnRtY*PD{w$NHt020@q^{V)%PSUR>or00fOf}orO{|P zj(3vR=j(NRT_EJx{bz|*hvLCZHJdi^3D*7k++VTp1qtSv`!=jj)Qn&b7qB^qx+?6L zM#7N*fB|()z7Ld{&ViUU?i^g=KViPb_aYlGi7Ou%O`pZI82dS?^r|InNKe-rG+G^O z7bCAsIq|&ud*llnBbfJUrEB&&^v<;a57W8j1Av5tKXUOo%&Qy**?8)`K4~LW|WrpxV#ZkbqiP=Z?5hmyWk3OO6Wmb9fJ?wWzXF&95r=7 z{o<{g({OoBF>C`4DL>9g39cjwum`lZ8RGIOJ)=+IO9)_V+IGYe4lPtq)t{lqtVj;i z`zvbE(Bl6fF=H=!TE#WZiMY^|+~y%MzSaPbC(iX}(+4wxQ)F3gaNg#;GltD?0}GsdZAe!uBzTTKvbCc$sP6qz zeb2zh8(TzmREVw9Zvevj zArA6ak#tDDEt!LQs!ENS=t;iduOHFq{2H9yx^dP116A$75ggZsPXz?e2*>n=>fnA%PRI88WiRdvYUs-^0*R^7VqwMM{cCSIgG@OF8<8 z@t8oo=#IPwbAVkD4hJJsKtX~QQ%4nfhjjmHv&W|!Gw{dU(pJagcg^>FHjHhFLMKSD zd!M(IoOP%NJUyylV^}Dx>pWNiFW*(J2{OJ}QwtlJo5v2jiEG+rOdLB#Q51WTVkEvo z;kQEwk+v@}*%Bd~F9n^brYFaUj??CTae7#Q9oM#VciotB5lHnf{n!$Y+5rq;wVAU$ zyk2daLbBdJ>pw3V9rn-1hP4NZx(NJO z#B|ZRs{a{b&RJl%j-MXff?vc`_H76;d@`q9h1%3#G7C@e;3Bf>TaPb%|3>+PJ#3Bj z-Y$qQG~XO3UeOrKBBdFDeK<|!&XeniychuM3L}(@^?yk(`@3n&ENj0isYTa+{ieq# zDT~_&B`NRHUOb%a1IF5rqzSGtl9@$0*j7{!>Uj9Jv37yx_I>j`+RTs&OYj*Ijs4Te z@I62oHXU8l#{cU5DPP_U9BO;&ZNH$kJ`~bD4Y$Jj_ein0&zFM6u|4wzTa8^yleWD%2!7tE^0NGDMM7jL54*)2YWd~Q1w_?kT^HEEw6w2ag#EtOclHe3!kOC z^&^K1j2#&yQby#Yuil;zfr(N`88wIbbq&iq@Ks-$)|;D1mGPoDY$8W@SHShf4Q^eT z1G8IIFfubY_B9sJ>lg8*o&S%}PYYZW5{%Hh^)DmJ-LzqDPb8?kbD%>Qy=c&)F0uvu zNHbtl4E~=RUBIfDlCtN|JE=a9A25a`lO<8pXNYONo_2nE&V*sGX35rUr@8uw1&e!^ zc;>PekNe6T1?us0#*qM+JdhO5z>>xo!V*WyKF?BM8MRHr5M?!jBj}t61T89XV>1uJ z!u%w-CBBX*lP0wQPc%t0gCawaDwJxvU?V~d;)(Ir*ya54zXip3Pc|FM=(Lr6mx@@q zTWyR-Z+wLWuahLJcXdB!x)8PDWTfp&zV<$md=|Nv6%E~6R8|WHz8~S5`;je}nK*=T=>~BEp9iY1`=CsYZ*JV0+4{YE5{m`yN4vhvsPlX! z`71IgIcbxyZ%k93Fhr&!Veiz0e6Bp^(-Pv-1bsFUp>VJQ;$t>$L_s}b8a8}3nN%(dp*qNT@fA|tCy?jg4;?&4V0vLquSExP#zQAZa6FB9E zz-hJxa#M<HyDW_gDhj>-M=-uQxwQE1* zZ{8oszY8}N&;Iyfq;61d&(LY9B?bsG>!rF(((iqCYwP&5Q30Wf0@@aNVKaq#gy$m@ zkd*LkSM-hX++gCv<GD6j+Z(s7BC}B75&bMF8v1O`FEP;MBO4kcz9;kf7H(LB!DN z0`0-ny7{zi7$QVvma&UW8o^9IF)9#Xp!x5W!~iA zVhB0xzFL^&)i4g3=OPmD-HQg3VOZx8tT6g)l=<3ak#bao7d21BlmfoF7r>2I>tZ*Q zREwdp9TVn?R<}(PXsZtXnXSx}m{Z7lXWCA>It!qs@9QTHdGo$k^jaVs>+KqL8D{qn zuSO!6-_REcM+0do#!;@vcg`z=wfykm9&q%sz)jBI-ts*h-!@9dKx~>AizV%0{-c(6 zduX7dy-R$oMf#ePA0_yGOP~5B(XNGKZhxlav8G1L(1`}BS@L7xK|T-@5^IKo49fY; zuDtr{tm33@MM>_h{i(0L63(jME&8;P;DL=&1zNyktZ6uZ z;<@i}llz|euQE(2TlGfBSn{`wRg_M<5R&|o&_m!0wfkrv!huL|an%h8w41E&e8y$7 zCqR@19D+-@7^97K&S*vrRA;~$07MqwxFNy z#-_Nj_6!WhMG0|=27&<8P#Q24t&ADcKG5Woq{FcSoy4%)gM?g<2*APS^FirBP!P^B zBz9&I^48S3IB0u*AJ`qh4?TMf-`RLfih`kCEh?`-2T~_dmN5n4WCbh*uB4`6Y=!oGcSHCX=s6 z8(tX$U+gCW5($#B(6gR{5%EZor>X!*Kr<#&a#Am10YaX62}$V4JnU#A(DvOSL00Jo z@IL3L-LCX#IM=Uq^{vm&^&arL-y6j4+PVKY4y{?d%z_3A_;d}<380=JKncG!oB~^5 zPD21OKTwDT^3*bFZ%{`Poqj2}HKPC!var(spY z0uI!qc!wmCA%x&)_nt45+Q0|#FCS~)J8MaTed<2G0|578j)Z_mmq(2_S1|y_^Y8^N z{Tv=O6(&=I|1*}mL>JfkZ15h|k_3y1__;lME1Kg})thla? z=Ikc3nE$-N>uQf7>xs^0W|EFnuVi)WI3N6VzXI>(FNuqkbM5%U;qtg3I^`(R7j+P-?4I$!@5;3f%8N@i(H z=Vxl~Hg$KVhfr?nUBEQpeC64mK-jsuI$%`txWGev|GwvbZ#oxx{LM@Hx8UnFd{+>Rj5 z<9xXa5k;<&Xm_^D<=iQ++?E`P=|_F-MMU5xA}s*j$;NjY0i(}Q&5MmAX)$^tQN9=pbp%c%6bP*s@(9L-?O>a z4$^vBEe#I#zdD+qYd!_~{LcY-JFxx10|ws;O~L+(bAEHo|5jNY*|iRv5n z+G#w#3?SktD#Q$%+ScWrXJ}{{^ZE+R>xeWK=EM_6{fUeE(a3e%EcoTFcqvNrD(d=~ z`BIJjh-}m*%?aLsm=mO**+h5lKL^W|I~`0pO9D^J%KbkgYv`oXvs} zH-#5{J^y|nT6P*h=%``vUkb~STVm26L&gYdj`%gufL?ad82aL>VN%KaBr4NTaqg&! z*sT9C>s!sH)OK6O-J)(2#)}c*V07D;%zha*@>?|3*xvl@@z8>Y&rxMjk`GmmUNBGa z#>J$NnCR-fc0=xCL3a}X@^r_J2?kEPkFq6>pOzgx-|!y4<^V#ztQ5^>+)&_mxCd@E zS^yUx?~{sQZ>dT3WLisFfO2;%PsVDYVUSAIw>zROkX1MPEQculUf*5eC-G~!2$w4C z>V>#RN77IM)-P{H@h$wzEP?*Gp3LL7ltDj?Jb9JONXr7PjbQOTWi{u!m#KsNXq7Ee z+^K!qnK#SZu=Z(jKFHh#EdIJ?1eO6j>A$8r4`{zt(Cg)<;e{su0>JvBO1TaL%Xnh~ zz+7wZ2d)!ozL~a24Qyq1qbHdKR`2Fd-)!A)RAxPL1tG31Fc!7|3ueB=YyjUnLzg7*YPpsptPs=kUOYi(QsLQWR z$Ca-{7GaJ-i#OGe5nB%^TMQQkTPV)lD64pjh96WGTo7TfN3SH+o?EY^Z`0)N6MLor z=$OMnz$X>COPg!J^{DbJTzbP>?G=UsAE>zUyN^Mxn(azS7C^7NlNiCNENU;0i{3eyKvMW2vR zo5Ae@McGjxa66;&(%N4nbP}%2ZrPOqJ*Ee0s77F`JqL`zR{ca~gCjr_a1dWVV0P}- zO{^^u+S5%&x8vDlQ~NQ9qjM}WN@~e&z9XByIRwOwwCWoZ&=~w3k9^3dsF`!puwbw8 zq7!td-+M37G02pslpT^J7+-to6;gjaKTpZ0OQm2=4QO>o0nh*JTDW%#%7!LE`>kec z-{12nju_BSkwPc$f*!8HB$7$hx+`Fg)+fV%zh$}J5xTbzY;Z4@l-&jH|ahssfM z8g$g{rEjy+h&UQ7a4+9kCw-|k{{k5s`NP%mk}Oc17F<0=_=vO^AW(d#0z=) zEZM~uFja`~IRFBUDm!Sa6g~d|y+-O9yU7P05Y1wl(IZj#x>CZ$;De(hv+na0hjS5Z z=>!Iy{I~B{uS$C^aeBmu^Q>U>l2FmzEnJagBx)0l4K7t^Bq}n2VT|Y6!q2N|9gE-=6+ic2Y7uBHNcvoI_Rq zm3ZIcM|_fwFniDomJ+qS;DwOW0c}v07td9 ze6J$3USfY1^_J(?Z+d&y`nFIgC7^8K@TdYR&&x<#YB42VI>%#SQh7RU;}HfYX1|bqs*7G0U}F z05+$vtszon=-(*LNUSxqEB|jy>R;V@dZA2+i-ofsgYD$b+29#uMG-i>PW82LKH!WG zb4aBq(iJ|;Y*b&F6`F}%nMNrFqvKeqN1IPnV~qu=#cK8hQW%Y#BTB}zr0jP%Z#cJw znj5x`;s~I@>?waKSePH=Vj<~5XdlSb|BPd?Brq+YSX0}5dtfyu;bZzn+WXJw!XOh1)BnZQVfu5`I$UY>aKL_A)1_@b3I~y|%;v38Y_5yG|9b69Qw%s@+>Z%7V^P@Fr$~SJGv*^HGQA87(Gfk8esZ7FB5R{c}oqZ4`~hqXJRWv z1<<2g=!p0R4rZ$g{*{z!$fcGADPrmca46W54a} zgJy@n*}om`0}><&6(3+{|wcLwl1I zE7V>z;2@~beRo#4XQ|4eLOpv_z}o2vuVO%n;lo*Eu!u{Js7}bVp{7-xF|?XZsb9+$ z0ORz(RH_g~Z@zpcdND1~DqxpGeOcVm`nOXSd%S(Ur&1N__u9x4Uj2?H`NO6%>V`Tb zTg2~|$l1fG2houB9|Zdz+Bc@5CJHa?X1ighK&NGPdca9CZMHaaM_DNwP!NNVtVE}_ z?j{N-IC`y|6bXbbakLtF+O8O02{nRBEd6TbF;@zdp$_5r2N~T3M)WVKSb_p;4j-uM z#n$&q1!C9zmY8<@-Vm#4SEo8fA|b6OB( zyQVx_)DmDAdJD;Vah-9tJ*5kr0$^_`0BrlbHB)Tyv%18Y4`_c;%L%(^>E5bh#mbb5tBXKuZ3^0DDQ0b~HO^=y zbGxl`AC?oV60^v?4g8w$K$pH$wFsM%v=FC{uD&Yqu{!QCmVw@j zWJw3}7FJdSH85-F{O9y4yLI|^5Lmg!JFKgdxuIO3s9Q*uR-x|B5o(aR;e!_}_P`)F z2mZ4gMZC&cF;89`V|KxA9C2>$kMQ|gN}90r5XPv%d!@&Rx_)fhD^QxioapPfB+ZY1 zYEJmr+WOSagUvtC(>KEVR|ohb{s+nnj8r+rLgtf{v zk&x5WRumqkTeHefieureus(bhU?R)zt5l&whD(5+xrEFJO0jWs$u{?g+-26-*z zR+KHeA!gjNYnYGG#W}jX>&Segb!oYh>FGcBs1TijfX3*n#=>>NTBk?cbTx{0!q+T( zCGCp3CYJE1r-4|#tzn6wFXf?huGhc#+!3syN{#olP5PPcE4`XsR<@QL#?haUQ~A6z zl_TA{96u3o=y=soKct*}xjDT>1YGn@+H*sBf!-B& z+a^};*$sm*Ij3khjo&30qJ;s=V`H>86KZ2bF)aPUOK@oKP8Kg>8s>tCUReYca#PJ1 zC&Kmf{0djbVDao?7!l=|A#$0rC>c>ws!?NbZF@Bt2>3$~OGI?00xZ{3BqP)C4TBWhB9)gUV~9l3rkwOU4h(n!me~kJ=hK z|Edpl8bzu=oj-iS|D^OK$Zrcz)B*Yz& zioE6&7xv$VW@^vEVXNsC8SNXrj>dS2>qpS-u#>U6NquAAoWj|-=#_|UA(1vMvx_f< z?@P};5sJ(&Z~_+Gek7hIs<{Zi>pB|yVSEGwsPUAF#1KQK1;bhED>BN{pwA$>0(Z0o zaK0lBV+z0FQ+Ivc-{X^5NGO!kk_q@mdBLJCL+z&c0tGr+B=dOhX^qs}L+nCrE2XC1%DrJmZb_?aKDB zA#w7Rg2>+-0c5;Al9$Fe(1S_Zbn!#i7!QO)OBAxSVm`y*d{0Z6)2Hw8*vWpQP4n`4 zeE7}p8VDlBe{1fv2D)(q-n^Ys1+uCl-QeokXX@(%>hzdw|EqaC@i#yG3=-z3Ibo{9 z)Pzj0lwS^n2q87DA&-z3Fhv4twaLdf&L0JTMjRRbfe|53JDrn&y(s8k3$**jrt5a( zJ!^rL%RMRGgZE=%8Anxixyi`7cqjRkSE}CE`cs^aSJ&2LjV>O+qC$s2pEdI_=(Fyg zhePKK_HgdamMqh%>7OORq1({x)P?JP&UC$Ub1BG-`@YM%$+HS$|ID<0>*l)}d$x_II`Cl;|L!6P3ZfyRSo}s$s>j0g-zp=F{2@)=a`Z1PhXyfFzMja%$d4@7u#h)INgGJ>>o!Ek zBqL`H$t&KY;O2i1L)S}f3`*vvA+Wg(-Dnd1@$CfEfQ{4Bj$sMG@{mn<4{1gQ@-N;3 zmp>xnaeIl?{1vV5YAU#S-V13x7)0`)!GGGmi1LSzDJ#P+e}%95ZC0l}M(l36H$ORI z0G2Kn_PVGb_V#g`TxcP^fViT*H?IjNTmVrDcm3T$4Ha>UNfJ34xcVp zU@k0cmZyX@({G0MEQj4TBLe+#oUKufX1L-X{okvfHV&&rZA{-lJ#t1N^GHQet^vMg z*}y0X5q2bxr>raU4X}X;&b)B!m>=&8_HDC$O|Cj&p1<7WCRd_W0oW+E zNyu(5!qH&Y>4p;-ucf$nLgcOJDsb(av;ui}9lWU&v6(Ya4gA^xgxu?d3N#85d#xoY z$D=fy3n_;QNsI`}_yr?oW@_>jHv}megDZg0cQQ5GyL&0y8-t-D-X+kO-r-F*J)&k! zBfXD&1hx6E|L6u#-aw8^W0YupmX4Zuw*U-1;8u0vMJ_w!n1#DcPij{cOM&ga8e!%z2JGImJlG)688 z_RrTg2kNSWZ<>Xq4jwRx`;Ijs<)AstEF_>Y3_NvGheKDjz$xZbK4v2f)1Gq7o^u1& zNqlUBS}^Shay>qA>Im$=4tTUicaCXM;XkIBxr=KG<@ca1{ka?qntP%9TR+D6w2OCv z(Q9Dd5#DI=A~s6evrmr374;xRg$_TA>PxSiMJuJqWXNZ)*}*)i(rjh1e(T@zutOAj z6fq_JuIC?OzRpk!a6Niar}qPP`B{f->}kgHsYqh6SjUkCnFY=~-)#Ek%d!`3vLmCO zu**VmWUWm}43I>#9gE0mX1WMd{M?#$mMK_Og6UThN}>ob2Y@5|7jX4?>lK;=);p7m zbAh;dhpYLc_cCJ#dG@=IZM;tqH7(eV@MeoFbQ)kf0{o2L9eT1kNKZdZyRh0TBWVww z@e6Y4BV79^@$EU)%1kmr#|cRa$F!8l4Erq|ASH26{h%gyK-pwDz7|-?hqmuL#Qh>F zP9P_ddq#5@LL=j1=dV&vjeOdC5x&{1hI_@TON8X~+j=}^c%9zhAcCYt{EQ!iUSAld z4qe*UAa-E-h5_Dt=?>~H$IMSsM@0ie7%j{5zJ@wBR#8OxDC8) za5WFv>)EBpl{i8}=rql_uXn7%XM{gxmJ3z=Q3A*c>chBN)v63dL;J6*6YPbqa_Uwk z!`r#`IT+QhM37m{?H@6Xh}0@Jp5sT>8r(o`kj#a6ZQw3wlO$jG6`}(AD{9QXqLsq+ z^MmKTz)?j;dcf|6Zfwx`7yas3*&zzr1`pVZh_y3ktDNecZkg!2MVftqI_rMAv^s`w499iFx%~!n*WK#?nJi zg6)zx*5m>E<}vT0cCJ>^8^Olbr0liW zIu(q_6!H)7S(-OY6Tc|ANt5HvS%z=@n%t!m5qnQHQGb2JP-l33aM--}1KxYFxgHTs zlTLjI2@PnNUWVsGo?kN+oY4Z4aY*!$mrl+Lm~@C~2v3)s@hkjXdy|>b0lqv4L2g&5 zUD2P6O~#_ec{1MMx0EdA@{o#mna7UOFK#HG=4^(9kUufT*x%`<&AY}?)aP7-LxAY` zEDHl)|5$wy%>k2!73kIJ#A&-HMAUzsXn5BKD(O+-&l{8V1&6i+IU`Pu1_k32mTCRS zqy0;>jQb-!)As{vk+4?sC%#U#Ybty7BnIZXFX=9xJsHOws#@Wck{2IT~Ks~bMS-FsK(Qj58OY%P36-aEWYb=15nP_Fo3 zCk|RNfnbXL5xSWNy(Fu;#mQ?1eB@^b{JSO#_o^Nw1Z2dvdU&yt6b`@Xiwhwr9gMzB^SXI_M-zCG=f93DgMa%Pv{`Uk8Q z1&R~9A8gXz60Zxa6WUWic13fYlp0q$wI|{zogjQukdFx|@fx*+8wbA>zIh1POaP~; zR(6*%o5!%RiLt5o zWVC;5O||S$!zryVH}xdl`8VBApL0R9V-i72dBAi2xyCx-_A3OdJJicn3{J$vV^8n# z^eJo{Zuk&kc@|-c*SZri7M#{&@*|%q=KP}C5yIEDF5}Q@c0T!SBoSdKer>zrm>1DN z#1#vM(0KLJ{b!uKMCj*!NOylH6|C(k(_@J{POA<)K2{(BLuf66iO5i%4gj}Z28@}{ zE^+==)NIFfzIQWQTo&E&3@IsUXnQrB^>`W)NiVV(WiJzM|LnlhoioR*2%I@R5qkyP$Jja zY&179s&c|?bl3?=f0xL;6dlLJ-wR3N6=*($Z#xoX!tB!Fm`X-J={}=EV)$}(e@K#Qvu%8?{C-e z1OHM3lri5{b6_g^(HYMbER-W)|2JA9%wk0s%?YQah}Q&&3x2eSD*-mIR3Utgy$1?Y z@%`&{9|Z)zF?o`zT3_Z=I9fsU;SiR|`RVX14h0b0!fMgDK{xeHTvBj5PRs^sXZMc0Q?Twzv=n6V?uPQ;U=HJ|@j4d|+ah?mx|{bV^)2t8%W5_))A|KjaG zPHQgcv?fZ)!vYW4jOc}nqK#$jetwWOeD&^At#N5xZ?t^@_2I@GiD7XrxBV;8nObp- zIyZs-7e^KJh<1x!O5$u`0kMmT!L4gam*J+D%D5+Na|@TEShxpRF+h96hQ1cp3<^*U zSa^gqz$$<7*FWO;)L&oyJP(_J_POAPxk&%mC?jHm$CCQps2O}3`}@_dkp>01^w0KQ z*W?tKGLN&y1*^%d9gQy@G#9?6;5pR#iLbF#=FG~0raO%CY5G3@oxF#qJHi@F_v!jD|CdLm%T zHFeK_H6PU{0+YeDk>vOUKW)-2(ApJlUUh2wU?iKEMh$T@x4d)doZ(Ley&;kDI*Nuj zR2h{UuLwMv_z2y~?)*0%XEXY?oCy4j4yXWfOLBuu0c{0K1oJ6}>;^duM>D!aYgzZJ zwbtwEoG9PY3mxplYuxz6FC5!*!B;GZtFJPC##1R|F^J^@XR5;s?@hwLhF9jjVSxXh zMK@FTq7r{36ps$eGNuYZAK~Ufc$9nh##0>9|CoGZa_`za8p9&g%iDQGkFY7xp7Q!LMDR%0T%KCvF{gnUIlGb0dr@Ixuhd7Ekn)+;Sc@ZVN6ovAomR;_;L00pCeq@-}kxU-z?@YMlNY}Sm<@Z zHb<4xAL@v$_0A(>cH!P2D#gqX7KsuYmVPypv#R@z!a97KK$ViJ<--Ms%=54M!<5yc z8k4#o>%K_pjyP^P!WRo8HjeI3;M4^#<2Aq3t0HYAai-=7nNS|-x z7N0rLd1&m_Bua4|93_pM_S(?*iH^2?8FiP2qsbnaHDpOy%#sx!pmx|Fn|S7+U17@L zTT|q$IXe&`TL6g-YxySH#(9^9ixs0;Y9j+A_>*`yMefpY4YW7%0P^SnOqIUi7B>fK zv=4fb^aiM15qq?pseA30oz+$Wt=-@4UouWG=X0!@)fQBCff72e?L&S-&Fa%Jt#i?E zBQCyJy3aW}=8EH`1FjB^DqV*$Tk!1-iuugD7@Uz2$73XoT9oM)q!qDPq+D|18e$F@ zq9cd-ghj1i$~Y+pI4-Jm^SITlJW+m8ubAk|;Pk;i9_H)xJ?5PZx6LK?Lw3Y6E*OBj z*wj2U6r+A|6Zrc+3*&~QVJm6l|F~pZhWC*d?Rzyo(Hzpfl{}i}Kyoi|d53MOBO^|t zA$txFBp{;j&TH%}cbTvTw(Y0#s{A4`BZILxqkrS`G?{me(s~_=H6Lh5Hc%qR$@ya* zyzljZ;;)4saUy)X0Hmj=U}gZl62CKjOjWq~G*EB~c(pRFv-QcnReJOa*AhRO+_p^q z;QKbOln6$W6)G}86Gv&_f>C^$m04LMn_@zmNfZewrt#e+(cEF=yqrGM})Y6yN42=7P8#DMJlsTgvDfZfF~!Rgexl^y`U7hG_z2{2lHd@v@ zzb6{>g*z-Avx@rl>MImEs!j#>Z?;)I%0HSTtd_pLGplge7?OwfW^*q0tT2Ufz89jT z3({Y$2LHxC)y+XdSqTS7+5Va>_ILQ_;Cx~LnUY5tUHA zmwkmcs60U57zL@6KSz2B|7X{lm+!Y5sVG0Lt9Md&K%EosTFY=Y{Ni4n;bqv4Kux-TB0k;Qp0Z<7)VRc`KoWet%hjlM9q^%6MCjig) zpeXVD9&5BToK+P|Oo;l-mXvGmF9v1WH3jJKwG~e{GT9Mh zdy8%w2Km?tU=MlHBR8X)HHX-B^DcmF8+1_~yipl+Ryzk z>!fTFSUx+Hpr4A!s%D$LBc#jsKycqBp)f!>{_Qk50Gfoo1QBQ_mYi_-OnXUh9fC zHwib{C#o9EZ$jjv_SHi(-OY!VgK zaGEG4(>FA@2Xs@2nFeISlLLY9UWD5i{i%K9GaPoI~C%(0{ z5mjOx>FEoJBOd77)0o=?)9wCNG~{-F>r2Gs?Dn7iEd-AIJujdv&~~W)z6l#iZP0Pk8Er5nCp z#s%dw>MV&jw;NS1Vh`Qs8~l;%!rVtzLjl%&%o5S1Z)$jp?Gjm-G_LLgv&RHPD~YD4 z;Q?ML1cc+s4*~wC1yCsbg0_cyHUY6RkK~-?>(w&>3>PAen5SrU`9xOzBTyZ^I5p(L zXSBgK{6pkefUI8AivGKdrxkyjZZk!+_ZsOMSPX$8vmw~1 zGE25(xQz|FSzw?L;ePXn`Kob9=L*Hb5f01@L(Q+|4b@>MxsrcaCA5$oEu_xMeAy z-eW3OiT#B?7X{_X)6HlQIgm`2B=__87iV+E3Y$c>TtbAwI&ZnhDHM*I!Gejt@%z&0}|V(Wv36U#biHj5<6ORm8O!sjL64B>tKjo)ysxsH&z3gyN(DXxJ@jo zA7*;cWsQO2WsI;_DDea%2MNIFF(Tc%$s9#d$?@9i6u?M{aGFjXk=4x5N#xV)(N zjHO|>;^tuKhF8WdDt!PlbC}r1@**Z|a9!}piMrEQn>Vuzq`l~N&(vb^J8-G?ba^Y} zp&jELEH^8w)-BjA&#rBqeJ-=@jcITBMhDGl--(CUDyBR172eFn@Eq-CJbYYtIW{vc z$VvWzj!P{=bExi2A^P7fng4#5Lo)KaVG?ujvumP9Yf#&@Z1^BnRm||?X!@Wpt-C5e zB;N9>;RN;b@JO0R_50{jyj2j>ioowzdiT*jIlzhaX6%z0=@*CB^Cq9bt(Ez-;pHO7 z%@{-TNbz^Cpjd@Ba5^=m&vC((jBGzYr#!dD{*`d=d->DBSo*IPon<*48wbP^mh!7L zjx*q8z`zHgoX~m0ndG~XZU1eg^V#;`4G}f&jTDete1a~JI2gXtx%BeOuLcjDnwsX+ zsuH{hXo)548bWGdt5h{?Uuz927Qo|)7QY(<6~03!o|502TiJ_j%)3yMU1ySwRFL*K zEXAg43&>JpOPZ03DSxARnD1xSpdqZ=aCG>-A7Xfm$wMTt(b@u zPYQEyhIS=-`tMk?=KN*cZ=UI#`dg*z48QuUJAI1}U_oGuQoeYv4Y#ePUtzmu14Ouh z!xh1NHT1_(OpR%A5qbPcDv@XQvc3c9mQCj#wvIDj*Dcx?xF+H`5fb|F5T-9xZVap- zNU3X8?IgM#M^i3c$x}sI*;)tH*-?ZsRNym z3-@zRAG)V~j%B9Mt^Qg%M@gjRo(Ci2;9Qm^qWe+2#7>|gv)-B-pgz=aplG!k_E(QhMxDamsgV8IDRcBMfqp%F$wE72^13@Ieowi# z`j8WR6S~+y_X-mi$-epe2bZ)lcaoVxhf~?Pn$JusVBf!;>IbUFb0hHwzn^V*TF(Bl z?3afu*#$cZtU^U|HXc}%Gq-dqhkhDBU5FSy%V;^^Y!zDvRBHakAybvV&| zl$osF#_AGT%9^4rZeh|D>7ZwcnwUGvwc{f_D`vxvKyAOf5?)Bz=iBO}q!|wb29dG3 z8R_JR-`9b3%nS`msh2u4=WZky89NHGGwVer{;c2P)6zBpeHLa&ad#~Uh zA<`rsJXwUlko^E|C&*|1E5KkUW3A99t+VWv$F12fV5q>R7yhKp3Zmuu=S%80M9Om> zVhaWV{aVigGdbvTOi2PF5n$3ss~bS8`4U$(L2Qa#K8hO>U^~DYqu<_qBUFxG_)ldF zi@nq&zCLa4n2H9SEetu}SpYetJbYk>rnBs5*AHI6VHo0ASxJ9S=~q30v{{JhV*zRs zP7m#JQZ~j7O^bS~F`=OkESb-+x}GC27>u#lp9r`Zc#*>&Bh8^}&=vL(QW3 zBF;hE{s_IDrPAOV`vQJ?7o@jv=D7b4&K$1Qv@Xo(w-G9C+Qn4WqVhtm!iBzRl(X!8 z=^^cKxH*(3>=<@-s4UKvp=U<(eTC=v_#FSEQ0d2m9RB|S7|nOJzNhgXdlj$;0-Eni zFsXNdW|b=(Z^`~8`T@VsWA~UWo+r_OqezOwFVf~QgVc9ah zM8m|Y__ong8C<(smys0uaI9zQ2MVG54{8kJ1Lu5Ze-5YB4!*mabUE9;_^JqFED%1> z`pctoxma_ete`LAf~qJfjW%KU_VLUA!ZTCs^WM^#W6)5|UX6=}+9lPmli+vVed)>u zBL?`Kx1Sq(DDM5P!3^PBc+t~~my#5iVfNPR6eG!nxspCY*HO4LaY&c&(y}mI>QYJ8 zl2Jo=GGduiZVih6{ZaRmOG|IwSDBY-kcU5Q&GkDiUMdj_OYN~Uc-yDIT*}fIwYL7c zLkFfdY%j{?T_-G=+!AJs*$|&Pey>h{IgF_>OM8q#R8P$RtW{n8-0~e^{<}orK_L9l zBH|8SM97}^C;(v`-S1}k#9w(#yNXb4)=54s)-l&0$@h<$q=!RrZaseG=`BT(?~4SH z-tE$I4C^`qvBV4Re2`8t+^yqrE7Y2XGjw`Edh3DNCsIa7f7@+7{YUN8z84clPxnkl zV#!mrz4&tfKw|(iRE(lMevg|C{E*EEt;N@%55LV6jgt;Ae(>sJ1YwF_Tp25+WtT!B z?K1b-LCYt#z-7FLnBv>oJa%7MC(cvL`8~ll#Nle`G$1$ycu&FWmA~L;`s0QMf%Ay z_QW5!)9Jt^#_(JV$?Wq^0O)p5)YxK>gS$ihzc3Ee6?w=xLeJE zqc)V`Pgt-l5v$hY$x)@oJs+zgrFbe?;Lm^gTz)JKO1sP|}r z&)Cxlxg5AWQW6y26ZeIi6vT?^HkrJ%K0tBpkBSeS(A5n&vH8vNmg1K@#49osO`=%vC$kDm-3ALrf=D)yTcNVx>>Mu(r29!KNFK;(7*Ll zhKqif)9tj&NFogj0N*YxzsBu<6W`Pv4Yiztt+%h}&15ltg?`USxHJ+`8NWII@VZk; z=cVsUn_3ke;vdrI7Gh2dg%#D{Yy^4URXSkGGsy7^xvG3m6jS#~w$P5Hepq*+w(mJsZemDjX4GcU|1Li}*@ejt-}k5&2;te6ua=wY<1v3y5w z{@>a|P_x?xe^>&fH)A>|+-eVyR#e-WS{-+XPfP~!iJNT&ku%lCV607|$W;4oRF&V+ zo5`>*cwAoz4Q>fz+p7uqFz!!-nQ{&qG=A1s(LTg6S&anCStDcL+SNdR&yq3{8(J0) zkj`32tP7jJG1kBRW=T&#bo0y**uMR$ii>jb2_Nh7hdb55*idrSm==_}X8M$WpjKI! zH}ESSg@yj`Tm7q*GIOVg&@Q8vH?v2)N#;id_mORf$b1Di*(A+L77x?6@{xUdYAIf;x3G5@j%b?U@>A zkWLXJttF-&Jed8d0j|Q?UU}NmDN?-Al?3cP4>MmU7mj9@cgY=ZzP&`LD5R}PvT=gMK zCl3|Ho*`DFssz>FGV~U_Q}?u~UNEQtwlYBnc49`$X#aVZV~650%W-ob0-hN$N~Q7k zb~@oK`escY9B4+CjLX;jcybk#C?BP&9%)9@$^Xd(VT*66fAlX`HRVlE7C?JAzLPDZ zvU~*WC~jXC=2Eur{^0@~3W=9!}b>OW}K zC*ypBkNu+;HuazdkV<(Lin@Pvj_u#KodBct_4ihFTknkrs-c`B_^2e3xbe{r2z(LeG@sYV47TEIw8?@Y8iv`<=Ht%t6Y_w5)=>D7&e- z^_O@uKz|9NkIz)+NvkwuorV+NE`GF(>3cpkpfMQS(OMxp4ayM;)lR!q+34G}2Do5C zgo3Fsvpc+h_I{eUJu#y4ghk+IVMQW<{(%8JJHj@W0#ZrhA!&f}_mR0e7_p!uiQ0-J zWPY3|NaTN-6y2lxNm_1%|G4HU7(M)M*rReT;45|USj6Jeuu^&@w(SU1D8BN1s@UC2G4 z{}G$M9ya}`psbxd?_?uMt9YEeG(eXC6onB769R1Hr$fD*-7i2h8w=(yOm-Cg5~$l;!CF~;wzM>!Ag zbcHm z6hF~`2TRO^W# z0fdX~hJpQrFS;65aPfT3#*N!IKijM$pqLe4NN^2;ezJAD&l9)A6yc?=a!?$NHi7j< zf1sZ1W4X=l1AAwsXg2qBn{G6ZGus~#pIL98tKp@g_)8crl6xf8ty}e_Lx0CR`|}d^ z?%ER6S61<4*oH=9cU?os#AqhdJLxhkATc|GEE`z&& z%v-8rz~rCWAG6pd&#U4c36^YwywwP_{}ConO32WZ^$F-r!^irY>XlxN7w#K&t2azG z1d%BanccnNexRE`0d2Am0vh~>B)Q4?jdZM>Z8!uURX2jh^y=SLTINeQ{uk-_l=NW{=Wq?6S3~=id^!)`(e!!sV-jsCe65!#qQrbia_?5)>CUB4l|| zarbF(zn%t5EXRmVn^k7t%FNe?x7FFW#F?8vjEoKWf_{z`6#+j)pXCT}kXNtO#yWn~ z>9Pf_522gtcUN`K{$P!=A$XU9^1;SUEcx$^ew__kw_CNnZb;@PRdATm)g$8mqk3{? zy9o2RWG(S|=_eZod4kwq6lNp&79NJYxh=q^H74rZerEhZm$CiG!_UW%DrvG0QLiF$ z2zy@}vvWg112JfmE(_Txd-`T_aOv+3<2D9^9e9!i)#=#w-@GP97q(f&H+RpE1UasE zANK4Yz%wxbo;Y&{ct#zUwlaZhPb)~jL0esd@1(sd7{wcBPz{t{ zj&V)^0g8dIY9fwdVn_b~6nWdeb7Z~h83}TGCmc$|)*1RD5LM?wv#~x~GKHKsL}ImwTPDzS3(({0uMHlEDrz z`u;&Wi^Uf;>h}l1t$L91KLwB> z9gLzwfk*89$Pa-xJ;P*40Qx0*lpsfJ*lr?dfJkD-^M+wX*gqPa9MP%IG^YST&P6qP zQTdAF(-L)qx9Gtzi#qdHJm&Vl?YaKlF*F1q!7Mc1qpsJ{^>l(Mta2D0agy8Xf2}Hu zh1eo=nGljq$x%z2s+I-t0b!me!|&Gzk4Kejb?=lI_1!TNi;-MsjE3kMO!9pwd(gbv z^@#h4=v5_|1*Cf$28}i{Vtp$=Nm6q^r*q7-sPYuR4tv#aEem=QtfzhE`48;>GG|(S zvN-{v4{q(+-cYjX;^2fk#9wt!)4R8U9o5hHtxNl!4=<}!#%&IZXkXojp=5VR=R8LC z6oO(BFMEm;SRMbfUu#EcEa@Sr={#n9WRm>Hr|Ol9gSkZnf98rp=x9k0*W9Qh7vZN4 zLKlXOkI8|CcN->wA;LXQcBj~pkSVJh*J1s%X5m8Y&ZEetCr{?__w2>|mqtEI2bG&9 zJPPv=b(P_JIn%1vM9SiPD!p;Vh6pqOORhNv|ESV1=zc&~??0zVJO@vam<%|roS*rD zPQVvsE&RB`MTLhMlo$UX_jHUKYiM6_AU;B#s-6o-qpyM9hx-xee3a3|CsRZX-X2VK z7e4KgoPGLL+QL3_Z>cUTM`oe+?E&tIs>c&Bk^I!$9Gj0C#|5+DROSo2-$N+*xRt=v z!1rRiHwlRdYGvRq7D_OQPU922XGc3IJ0olr^N;UgZ6@h;+6lcooN7mmLS2@2 zcK_Aw+u^*9cT51NAA^cQJ}u}Ys%<0I?{dDT7~zyYOC^4tCMyL3DYVC5J)cUZf6%Vz zlW=IWU$s=6u_(J6QOO3QZ7kIH9m77b^_}zs6b)Vz%zkmNg4uPOSgNGssAG^WX1#j5f<&;DgWF1u!}Xe zz|UP&xVw!m!-Ua2pTe7iw>LFlM3IXc5yZmd+m!Xw%iH8(qSbwRTRm%T$NGQH zj+oN{A#=mWwZH7gg%0Z3)t3SYe%Hri=cU+7s;gh!$9|oF%@s5JoETi2ddC2sJliUD zE`?)-<_9VmFeI0Zd2>zdT>e&>Y-q{efW&{&fOq8P=VJy zg@VwZAqE-L!BNKwI?33>WEuC7QLLq(O{N8rh^--)$A= zA9geUf7s0hRT}@U%oDx;o7@aKAEIbrCd*4FE&3fCm6EXlhctY>wa_l7HFDJtCF-la z>J}{r`g`ib$4JDe-K|P8zO;fJ%mongS%o12X&<7P!)7H`(N`T3F{eju%`jb%ygYw$_y;E zyzqJ$LHOsk(lX%nNa_n+*V@u1QcA&{py3^xQN(KMvrG6uM|kgbxeK^3SbyC4AV Z%rSS32#Z)Ucz)x(H&RNH-(DF7{XcNlmT>?8 diff --git a/public/img/finance/other_3.webp b/public/img/finance/other_3.webp new file mode 100644 index 0000000000000000000000000000000000000000..7d55d40f1ea105dffaacc8f55b8ff988c33d3b69 GIT binary patch literal 2076 zcmV+%2;=usNk&E#2mkE{~ zv$t?0uKwr7)WQek2A|KyZ^-Y;Yp?fzyqP}y#(m%N>-q=K&q;n@AEiIkKQX_w_X+a> z`py0W+UukP^>eL@&;$0D()0GK;RE(-{>S;hfZx^+{2Jf>7XG``$CY^@zhS>6!Vc5_ z-nW7{|Md^`9Bt_W#?PPE{6F3N<$hoOL;l~mPx7DYy;(nSy^udq0*e!2Zwgz&mhhUW zB+mBfb~=UKO2-lnG=R_e-(sP_Nr?(h$Vzv&BMd;l9N~Z%W4jz)6UD;_Rqx z=~3h$Wk_5yqq|yCBui{d?TLM{DN7VrQ341VsRrD-dLo;dW+1r;Av}Z)inRdMVT>3f zNKCtt)(#`cM8*&{yc{8%#u%t`y}Odvcm~|)jKjrt`hYV?)O9mzy_*2|Ei1uDlT1~++{~=!iCx# zx#4{K6Sa%8M~yJ=PK+4^)-f8!BUr+g2#hFc4lh?45;!DGNZ^qzyJXL>efsQ zfAR3Y$HM%4ELv;X{9zr&oJn7P<-|_?%ZQ!(mk~ScNLZkQRF0__5NKJUpjH-WXcdK; z8>eJ0*@9Cl zYwtQi!=!Cv5_o<{E~9lu)_8uF{bO{=$;3|z*ADsDNVElLFkOv2T>rikf8xN?)*1@z>tBmeWxnF7T~E5S|6|0zv3%F zHhy=ZbvIv4RemZ5uZM?iyg#7_B*hJH{DR7ZO=;xsB9hXng;to!N%np3XRzcS-@0~Y z>u|Vx`v|na@95M)Y(&jiid0$z(s*hMU)jYi$NeLr>e|E-N%zAMt|Kg(H(Lp%uT1rB z#@M<}BNc;uc_Y0L{qn#Aqo{|m)@ErmVn3bbTATAf@zizuxD}^*M7ODm@gDWAyKx5p zQMERl9(uP%-!Sw7%0iMuKhyS|hXU)Fzpn@c?r$J*FeGGiHcnk`kWM-Hcy`;v{NETbLuk{j#{i3hDXcB^y>S`w zPc@ihbN2u20Ll>br7(d_0uz?cWTMdsw1e&gwJl8NzR1K@v7Irn6U&h|&Xc4`k@rgW zhY)P^fa3;PBusAKtZ8u?A*yh#TAZxWU~|^6isr&4rQ{odU*4H?d$aCtPt&HdGZXgx zsqn{dl556syQ<1m!r#-48H_Ot8$tRGceNEG|A^2gJ5e(??{$u>`I#nk`?wN7rN>PDNZne&xsc@f}uEyz;$EluP*I^(Z=JT6zn_s%oF!kFO{em!q z6BZRDB|?e-Dw{`guj8n2+{`Uvdq#?5veErCb;0He;>krZ>{>TbuIa*xSd&x`e2 z)MIPL1YulX0dCMF@B&?JFog(F*%G6$hF8;PucWVW8EdG6R#7 ztyp6Xp6yJH_or4WELIXsnVIB`OaV>Io*4Zst#R@EW#hY7k?XZ9iZF7}zw`Jnf~u63 zvpRp_Qt0 zDv@stYB46$upe`q{2MFH!7HSH_7NBqew%guJ?-&XGR#ta$JFYru2RIi zyAn-v59eDg-EmTa$scR5`?;&TK26Fk?6|LpEtO!znRxxSDHZ-Bw!`HYq`ET;|NB7R z;ua{?A~|?WMn6pU8?#?O_N9GrpTI%^C%pR1S2u~-d zK+}dn-uHNZTq2g0Oe(a)i1-qR%i0Xn8U8AQ9XYlC+(A;b6g?_#YmC9XF#L=g!xJbe za*O<>=Mzv&#}1ajyVb(~9n403O=Hfn^kPrx|Jd^z;mzUrvZ79w_bvE62c=#7!{Rrc GbN~R1WF$KP literal 0 HcmV?d00001 From ac5f32b61408f9c608f2744c1a82dd4b515d0ad4 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sun, 27 Aug 2023 12:22:49 +0530 Subject: [PATCH 27/79] images extension changes --- components/FinancialSummary/AsyncAPISummary.js | 6 +++--- components/FinancialSummary/ExpenseBreakdown.js | 12 ++++++------ .../FinancialSummary/OtherFormsOfFinancialSupport.js | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index b3adacb083f9..c7af26ff1428 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -42,13 +42,13 @@ function AsyncAPISummary() {

- +
); } diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 6406a5da82d4..3e31c6f61183 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -6,27 +6,10 @@ import Expenses from '../../config/finance/json-data/2023/Expenses.json' const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { const data = payload[0].payload; - const tooltipStyle = { - backgroundColor: 'rgba(255, 255, 255, 0.9)', - border: '1px solid #ccc', - padding: '10px', - boxShadow: '0px 2px 4px rgba(0, 0, 0, 0.1)', - borderRadius: '4px', - }; - const labelStyle = { - fontSize: '14px', - fontWeight: 'bold', - marginBottom: '5px', - }; - const amountStyle = { - fontSize: '12px', - color: '#555', - }; - return ( -
-

{data.Category}

-

${data.Amount.toFixed(2)}

+
+

{data.Category}

+

${data.Amount.toFixed(2)}

Click on the bar to know more

); @@ -49,107 +32,11 @@ const getUniqueCategories = () => { const months = Object.keys(Expenses); const categories = getUniqueCategories(); -const ExpensesTable = ({ expensesData }) => { - // Function to total the amount for each category in a given month - const calculateCategoryTotal = (month, category) => { - const monthExpenses = expensesData[month]; - if (!monthExpenses) return 0; - - const categoryExpenses = monthExpenses.filter(entry => entry.Category === category); - return categoryExpenses.reduce((total, entry) => total + parseFloat(entry.Amount), 0); - }; - - // Create a mapping of month and unique categories with their totals - const monthCategoryTotals = {}; - Object.entries(expensesData).forEach(([month, entries]) => { - monthCategoryTotals[month] = {}; - entries.forEach(entry => { - if (!monthCategoryTotals[month][entry.Category]) { - monthCategoryTotals[month][entry.Category] = parseFloat(entry.Amount); - } else { - monthCategoryTotals[month][entry.Category] += parseFloat(entry.Amount); - } - }); - }); - - const openLink = (link) => { - window.open(link, '_blank'); - }; - - return ( -
- - - - - - - - - - {Object.entries(monthCategoryTotals).map(([month, categories]) => - Object.entries(categories).map(([category, totalAmount], index) => ( - - {index === 0 && } - - - - )) - )} - -
MonthCategoryAmount
{month}${totalAmount.toFixed(2)}
- -
- ); -}; - const BarChartComponent = () => { // State for selected filters const [selectedCategory, setSelectedCategory] = useState("All Categories"); const [selectedMonth, setSelectedMonth] = useState("All Months"); + const [windowWidth, setWindowWidth] = useState(null); // Get unique categories and months from the Expenses data const categories = getUniqueCategories(); @@ -182,8 +69,6 @@ const BarChartComponent = () => { Amount: categoryAmounts[category], })); - const [windowWidth, setWindowWidth] = useState(null); - const handleResize = () => { setWindowWidth(window.innerWidth); }; @@ -196,13 +81,6 @@ const BarChartComponent = () => { }; }, []); - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } const barWidth = windowWidth < 900 ? null : 800; const barHeight = windowWidth < 900 ? null : 400; @@ -210,14 +88,13 @@ const BarChartComponent = () => { return (
-
+

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

Total Expenses: ${totalAmount.toFixed(2)}

{/* Select for category filter */} setSelectedMonth(e.target.value)} > @@ -248,7 +124,7 @@ const BarChartComponent = () => { { // Get the category from the clicked bar's payload const category = data.payload.Category; @@ -261,7 +137,8 @@ const BarChartComponent = () => { }} /> - {windowWidth < 900 ? () : null} + {/* replace null with cards for mobile deivces */} + {windowWidth < 900 ? null : null}
); diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index 167f8e3b0c69..fce1b8cafe59 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -1,24 +1,17 @@ import Button from '../buttons/Button' -import Heading from "../typography/Heading" +import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' function ContactUs() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } return ( - <> +
-
+

Interested in getting in touch?

Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io + onboarding to the project as a sponsor. Write email to info@asyncapi.io
@@ -30,15 +23,7 @@ function ContactUs() { target='_blank' />
- - +
) } diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index e087f3c650f3..4aee3f2310b1 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -1,96 +1,87 @@ -import Heading from "../typography/Heading" +import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' +function ExpenseBreakdown() { + return ( +
+
+
+
+ + Expense Breakdown + + + Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open + Collective account. We maintain transparency in all expenses, and the TSC approves + anticipated expenses. + +
+
-const cardsData = [ - { - title: "Mentorship Program", - body: "Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.", - image: "/img/finance/expense_1.webp", - }, - { - title: "Bounty Program", - body: "Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.", - image: "/img/finance/expense_2.webp", - }, - { - title: "Events", - body: "Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.", - image: "/img/finance/expense_3.webp", - }, - { - title: "Swag Store", - body: "Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.", - image: "/img/finance/expense_4.webp", - }, - { - title: "Hiring", - body: (

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

), - image: "/img/finance/expense_5.webp", - }, - { - title: "Services", - body: "Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.", - image: "/img/finance/expense_6.webp", - }, -]; +
+
+
+ Mentorship Program +

Mentorship Program

+
+

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

+
+
-function Card({ title, body, image }) { - return ( -
-
-
- {image && {title}} -

{title}

-
-

{body}

-
-
- ); -} +
+
+
+ Bounty Program +

Bounty Program

+
+

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

+
+
+
+
+
+ Events +

Events

+
+

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

+
+
+
+
+
+ Swag Store +

Swag Store

+
+

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

+
+
+
+
+
+ Hiring +

Hiring

+
+

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

+
+
+
+
+
+ Services +

Services

+
+

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

+
+
-function ExpenseBreakdown() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } - return ( - <> -
-
-
- -

Expense Breakdown

-
- - Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open - Collective account. We maintain transparency in all expenses, and the TSC approves - anticipated expenses. - -
-
- {cardsData.map((card, index) => ( - - ))}
- - +
) } diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index 7a332aa23293..657c9e0bf2c9 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -1,58 +1,60 @@ import Container from '../layout/Container' -import Heading from "../typography/Heading" +import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' function OtherFormsOfFinancialSupport() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } return ( - -
-
- Image 1 - Image 2 - Image 3 -
- - -
-
-

Other forms of financial support

-
- -
- Employee involvement - - Assign your employees to contribute to projects under the AsyncAPI Initiative - on a regular basis, and we'll welcome them as new maintainers. You can - also provide direct assistance to a member of the Technical Steering Committee - (TSC) through contracts or employment for specific tasks. +
+
+
+
+ + Other Forms Of Financial Support + + + You can also support AsyncAPI initiative by getting involved through employment, providing services and organizing events
+
-
- Event organization - - Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI - brand at your provided venue. - -
+
+
+
+ Employee involvement +

Employee involvement

+
+

Assign your employees to contribute to projects under the AsyncAPI Initiative + on a regular basis, and we'll welcome them as new maintainers. You can + also provide direct assistance to a member of the Technical Steering Committee(TSC) through contracts or employment for specific tasks.

+
+
+ +
+
+
+ Event organization +

Event organization

+
+

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI + brand at your provided venue.

+
+
+ +
+
+
+ Service provision +

Service provision

+
+

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your + organization can provide services such as hosting or storage to support our efforts.

+
+
-
- Service provision - - AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your - organization can provide services such as hosting or storage to support our efforts. -
- +
); } diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 5929f964d622..199cbb0971bb 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -2,65 +2,59 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' function SponsorshipTiers() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } return ( -
+
- -

Sponsorship Tiers

-
+ +

Sponsorship Tiers

+
- - AsyncAPI offers various sponsorship tiers, each with its own set - of benefits and privileges. These tiers include Bronze, Silver, - Gold, and Platinum. - + + AsyncAPI offers various sponsorship tiers, each with its own set + of benefits and privileges. These tiers include Bronze, Silver, + Gold, and Platinum. +
- + - - - + + + + - + - - - + + - - - + + - - - + + - - - + +
TiersAmountsBenefitsTiersAmountsBenefits
Bronze$100/month + Bronze$100/month Company logo in README on GitHub
Silver$500/month + Silver$500/month Company logo in README on GitHub and asyncapi.com
Gold$1000/month + Gold$1000/month Company logo in README on GitHub and asyncapi.com
Platinum$2000/month + Platinum$2000/month Company logo in README on GitHub and asyncapi.com. Up to 2 hours of support per month. Support will be remote with the option of a shared screen or via private chat. @@ -70,31 +64,6 @@ function SponsorshipTiers() {
-
diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 09f4467de8d8..d2a94c4b8b09 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -1,65 +1,50 @@ -import Heading from "../typography/Heading" +import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' function SuccessStories() { - const hash = window.location.hash; - if (hash) { - const targetElement = document.querySelector(hash); - if (targetElement) { - targetElement.scrollIntoView({ behavior: 'smooth' }); - } - } return ( - <> +
-
- -

Success Stories

-
- +
+

+ Success Stories +

+

Thanks to financial support we can already see many success stories in the project. - +

- Community Manager - +

Community Manager

+

With the addition of a dedicated Community Manager, we now have a monthly newsletter, regular status updates, an active social media presence, and the ability to drive initiatives such as event organization. - +

- AsyncAPI Mentorship - +

AsyncAPI Mentorship

+

The 2022 mentorship program yielded significant achievements: Kafka support in Glee, a centralized platform for sharing AsyncAPI tools, and a versatile error handling library for multiple projects. - +

- AsyncAPI Conference - +

AsyncAPI Conference

+

Every year we organize a conference that attracts many participants. Only last year the conference generated 3k views. We plan to do a series of events in different locations every year. - +

- - +
) } diff --git a/components/footer/FooterList.js b/components/footer/FooterList.js index 802aa3aac7a1..011149963ba2 100644 --- a/components/footer/FooterList.js +++ b/components/footer/FooterList.js @@ -58,7 +58,8 @@ export const initiativeLinks = [ { label: "Brand", url: "https://github.com/asyncapi/brand/blob/master/brand-guidelines/README.md", - },{ + }, + { label:"Finance", url:"/finance" } diff --git a/public/img/finance/expense_2.webp b/public/img/finance/BountyProgram.webp similarity index 100% rename from public/img/finance/expense_2.webp rename to public/img/finance/BountyProgram.webp diff --git a/public/img/finance/other_1.webp b/public/img/finance/EmployeeInvolvement.webp similarity index 100% rename from public/img/finance/other_1.webp rename to public/img/finance/EmployeeInvolvement.webp diff --git a/public/img/finance/other_2.webp b/public/img/finance/EventOrganization.webp similarity index 100% rename from public/img/finance/other_2.webp rename to public/img/finance/EventOrganization.webp diff --git a/public/img/finance/expense_3.webp b/public/img/finance/Events.webp similarity index 100% rename from public/img/finance/expense_3.webp rename to public/img/finance/Events.webp diff --git a/public/img/finance/expense_5.webp b/public/img/finance/Hiring.webp similarity index 100% rename from public/img/finance/expense_5.webp rename to public/img/finance/Hiring.webp diff --git a/public/img/finance/expense_1.webp b/public/img/finance/MentorshipProgram.webp similarity index 100% rename from public/img/finance/expense_1.webp rename to public/img/finance/MentorshipProgram.webp diff --git a/public/img/finance/other_3.webp b/public/img/finance/ServiceProvision.webp similarity index 100% rename from public/img/finance/other_3.webp rename to public/img/finance/ServiceProvision.webp diff --git a/public/img/finance/expense_6.webp b/public/img/finance/Services.webp similarity index 100% rename from public/img/finance/expense_6.webp rename to public/img/finance/Services.webp diff --git a/public/img/finance/expense_4.webp b/public/img/finance/SwagStore.webp similarity index 100% rename from public/img/finance/expense_4.webp rename to public/img/finance/SwagStore.webp From b7e90da2ec5607e9dc3e5d759ff52f16f7e60c9a Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 11:11:31 +0530 Subject: [PATCH 29/79] sponsorship tier reposiveness issue fixed --- .../FinancialSummary/SponsorshipTiers.js | 32 +++++++++---------- pages/finance.js | 7 ++-- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 199cbb0971bb..e341df5cd326 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -5,7 +5,7 @@ function SponsorshipTiers() { return (
-
+

Sponsorship Tiers

@@ -22,39 +22,39 @@ function SponsorshipTiers() { - - - + + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + +
TiersAmountsBenefitsTiersAmountsBenefits
Bronze$100/month + Bronze$100/month Company logo in README on GitHub
Silver$500/month + Silver$500/month Company logo in README on GitHub and asyncapi.com
Gold$1000/month + Gold$1000/month Company logo in README on GitHub and asyncapi.com
Platinum$2000/month + Platinum$2000/month Company logo in README on GitHub and asyncapi.com. Up to 2 hours of support per month. Support will be remote with the option of a shared screen or via private chat. diff --git a/pages/finance.js b/pages/finance.js index a7390d046f7a..75989fdfb7be 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -14,11 +14,12 @@ import { useEffect, useState } from 'react' function FinancialSummary() { const [windowWidth, setWindowWidth] = useState(0); + const handleResize = () => { + setWindowWidth(window.innerWidth); + }; + // Update the window width when the component mounts and when the window is resized useEffect(() => { - const handleResize = () => { - setWindowWidth(window.innerWidth); - }; // Initial width handleResize(); From e877ff2f70004a0fc70c8600ae9f7c6b2e26088f Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 11:52:23 +0530 Subject: [PATCH 30/79] made requested changes --- .../FinancialSummary/BarChartComponent.js | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 3e31c6f61183..e1fa7bcbb12c 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -32,6 +32,36 @@ const getUniqueCategories = () => { const months = Object.keys(Expenses); const categories = getUniqueCategories(); + + +const Card = ({ month, data }) => { + return ( +
+
{month}
+
+ {data.map((item, index) => ( +
+
{item.Category}
+
${item.Amount}
+
+ ))} +
+
+ ); +}; + +const ExpensesCard = () => { + return ( +
+
+ {Object.keys(Expenses).map((month, index) => ( + + ))} +
+
+ ); + }; + const BarChartComponent = () => { // State for selected filters const [selectedCategory, setSelectedCategory] = useState("All Categories"); @@ -119,7 +149,7 @@ const BarChartComponent = () => { {/* Recharts BarChart */} - `$${value}`}/> + `$${value}`} /> } /> { }} /> - {/* replace null with cards for mobile deivces */} - {windowWidth < 900 ? null : null} + {windowWidth < 900 ? : null} ); From 2fcfea95bcc6f537163f56a02f4b7673cbad8684 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 16:11:14 +0530 Subject: [PATCH 31/79] design changes --- .../FinancialSummary/AsyncAPISummary.js | 9 +- .../FinancialSummary/BarChartComponent.js | 94 ++++++++++--------- components/FinancialSummary/ContactUs.js | 8 +- .../FinancialSummary/ExpenseBreakdown.js | 12 +-- .../OtherFormsOfFinancialSupport.js | 4 +- .../FinancialSummary/SponsorshipTiers.js | 28 +++--- components/FinancialSummary/SuccessStories.js | 16 ++-- 7 files changed, 87 insertions(+), 84 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index c88c483be188..c2e18aadc2bc 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -10,7 +10,7 @@ function AsyncAPISummary() { AsyncAPI Financial Summary - + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, @@ -18,20 +18,19 @@ function AsyncAPISummary() { -
+
-
-
+
Ways to Support Us?
-
+
The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, they may involve greater effort. Contribute
monetarily using the following channels. diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index e1fa7bcbb12c..137c79aa2936 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -35,32 +35,32 @@ const categories = getUniqueCategories(); const Card = ({ month, data }) => { - return ( -
-
{month}
-
- {data.map((item, index) => ( -
-
{item.Category}
-
${item.Amount}
-
- ))} -
-
- ); + return ( +
+
{month}
+
+ {data.map((item, index) => ( +
+
{item.Category}
+
${item.Amount}
+
+ ))} +
+
+ ); }; const ExpensesCard = () => { return ( -
-
- {Object.keys(Expenses).map((month, index) => ( - - ))} +
+
+ {Object.keys(Expenses).map((month, index) => ( + + ))} +
-
); - }; +}; const BarChartComponent = () => { // State for selected filters @@ -119,32 +119,36 @@ const BarChartComponent = () => {
-

Budget Analysis

+

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

-

Total Expenses: ${totalAmount.toFixed(2)}

- {/* Select for category filter */} - - - {/* Select for month filter */} - +
+

Total Expenses:

${totalAmount.toFixed(2)}

+ {/* Select for category filter */} +
+ + + {/* Select for month filter */} + +
+
{/* Recharts BarChart */} diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index fce1b8cafe59..d58411dcf8fc 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -5,13 +5,13 @@ import Paragraph from '../typography/Paragraph' function ContactUs() { return (
-
+
-

Interested in getting in touch?

- +

Interested in getting in touch?

+ Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io + onboarding to the project as a sponsor. Write email to info@asyncapi.io
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index 4aee3f2310b1..dcdd5853341a 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -22,7 +22,7 @@ function ExpenseBreakdown() {
Mentorship Program -

Mentorship Program

+

Mentorship Program

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

@@ -32,7 +32,7 @@ function ExpenseBreakdown() {
Bounty Program -

Bounty Program

+

Bounty Program

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

@@ -42,7 +42,7 @@ function ExpenseBreakdown() {
Events -

Events

+

Events

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

@@ -52,7 +52,7 @@ function ExpenseBreakdown() {
Swag Store -

Swag Store

+

Swag Store

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

@@ -62,7 +62,7 @@ function ExpenseBreakdown() {
Hiring -

Hiring

+

Hiring

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

@@ -72,7 +72,7 @@ function ExpenseBreakdown() {
Services -

Services

+

Services

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index 657c9e0bf2c9..abe33c11289e 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -12,7 +12,7 @@ function OtherFormsOfFinancialSupport() { Other Forms Of Financial Support - You can also support AsyncAPI initiative by getting involved through employment, providing services and organizing events + You can also support AsyncAPI initiative by getting

involved through employment, providing services and

organizing events
@@ -46,7 +46,7 @@ function OtherFormsOfFinancialSupport() { Service provision

Service provision

-

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your +

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your organization can provide services such as hosting or storage to support our efforts.

diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index e341df5cd326..aba6678833e4 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -11,8 +11,8 @@ function SponsorshipTiers() { - AsyncAPI offers various sponsorship tiers, each with its own set - of benefits and privileges. These tiers include Bronze, Silver, + AsyncAPI offers various sponsorship tiers, each with its own set

+ of benefits and privileges. These tiers include Bronze, Silver,

Gold, and Platinum.
@@ -31,30 +31,30 @@ function SponsorshipTiers() {
Bronze$100/month + Bronze$100/month Company logo in README on GitHub
Silver$500/month + Silver$500/month Company logo in README on GitHub and asyncapi.com
Gold$1000/month + Gold$1000/month Company logo in README on GitHub and asyncapi.com
Platinum$2000/month + Platinum$2000/month Company logo in README on GitHub and asyncapi.com. Up to 2 hours of support per month. Support will be remote with the option of a shared screen or via private chat. diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index d2a94c4b8b09..4d355bc08355 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -10,31 +10,31 @@ function SuccessStories() {

Success Stories

-

- Thanks to financial support we can already see many success stories in +

+ Thanks to financial support we can already see many

success stories in the project.

-

Community Manager

-

+

Community Manager

+

With the addition of a dedicated Community Manager, we now have a monthly newsletter, regular status updates, an active social media presence, and the ability to drive initiatives such as event organization.

-

AsyncAPI Mentorship

-

+

AsyncAPI Mentorship

+

The 2022 mentorship program yielded significant achievements: Kafka support in Glee, a centralized platform for sharing AsyncAPI tools, and a versatile error handling library for multiple projects.

-

AsyncAPI Conference

-

+

AsyncAPI Conference

+

Every year we organize a conference that attracts many participants. Only last year the conference generated 3k views. We plan to do a series of events in different locations every year. From 97faac2eb9aa5375ef3ec4db05daf5e50ee54fb6 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 18:45:48 +0530 Subject: [PATCH 32/79] mobile links click fix --- .gitignore | 4 +- .../FinancialSummary/BarChartComponent.js | 12 ++- config/finance/2023/Expenses.yml | 78 ++++++++++++------- config/finance/json-data/2023/Expenses.json | 2 +- 4 files changed, 65 insertions(+), 31 deletions(-) diff --git a/.gitignore b/.gitignore index 97f8c2038030..5909260e0dba 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos \ No newline at end of file +cypress/videos +Expenses.json +ExpensesLink.json \ No newline at end of file diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 137c79aa2936..0306b91bf6f4 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -10,7 +10,7 @@ const CustomTooltip = ({ active, payload }) => {

{data.Category}

${data.Amount.toFixed(2)}

-

Click on the bar to know more

+

Click the bar to learn more

); } @@ -34,14 +34,20 @@ const categories = getUniqueCategories(); -const Card = ({ month, data }) => { +const Card = ({ month, data, links }) => { return (
{month}
{data.map((item, index) => (
-
{item.Category}
+
{ + const category = item.Category; + const matchedLinkObject = ExpensesLink.find(obj => obj.category === category); + if (matchedLinkObject) { + window.open(matchedLinkObject.link, '_blank'); + } + }}>{item.Category}
${item.Amount}
))} diff --git a/config/finance/2023/Expenses.yml b/config/finance/2023/Expenses.yml index 9d313f53a46e..20e8b55273e9 100644 --- a/config/finance/2023/Expenses.yml +++ b/config/finance/2023/Expenses.yml @@ -1,41 +1,67 @@ January: - - {Category: "AsyncAPI Ambassador" , Amount: "68.95" } - - {Category: "Google Season of Docs 2022" , Amount: "35.62"} - - {Category: "Google Season of Docs 2022", Amount: "1666.67"} - - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} - - {Category: "AsyncAPI Mentorship 2022",Amount: "1500"} - - {Category: "AsyncAPI Mentorship 2022",Amount: "1500"} + - Category: AsyncAPI Ambassador + Amount: '68.95' + - Category: Google Season of Docs 2022 + Amount: '35.62' + - Category: Google Season of Docs 2022 + Amount: '1666.67' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' February: - - {Category: "Community Manager Salary", Amount: "1000.39"} - - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + - Category: Community Manager Salary + Amount: '1000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' March: - - {Category: "Community Manager Salary", Amount: "2000.39"} - - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} - - {Category: "AsyncAPI Mentorship 2022", Amount: "1500"} + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' April: - - {Category: "Community Manager Salary", Amount: "2000.39"} + - Category: Community Manager Salary + Amount: '2000.39' May: - - {Category: "Community Manager Salary", Amount: "2000.39"} - - {Category: " AsyncAPI Webstore", Amount: "75.11"} - - {Category: "AsyncAPI Bounty", Amount: "400"} + - Category: Community Manager Salary + Amount: '2000.39' + - Category: "AsyncAPI Webstore" + Amount: '75.11' + - Category: AsyncAPI Bounty + Amount: '400' June: - - {Category: "Community Manager Salary", Amount: "2000.39"} - - {Category: "AsyncAPI Bounty", Amount: "200"} - - {Category: "3rd Party Services", Amount: "28.31"} - - {Category: "AsyncAPI Bounty", Amount: "200"} - - {Category: "AsyncAPI Bounty", Amount: "200"} - - {Category: "AsyncAPI Bounty", Amount: "200"} + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: 3rd Party Services + Amount: '28.31' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' July: - - {Category: "Community Manager Salary", Amount: "2000.39"} - - {Category: "3rd Party Services", Amount: "1088.27"} - - {Category: "AsyncAPI Bounty", Amount: "400"} + - Category: Community Manager Salary + Amount: '2000.39' + - Category: 3rd Party Services + Amount: '1088.27' + - Category: AsyncAPI Bounty + Amount: '400' August: - - {Category: "AsyncAPI Webstore", Amount: "15671.63"} - - {Category: "AsyncAPI Bounty", Amount: "400"} \ No newline at end of file + - Category: AsyncAPI Webstore + Amount: '15671.63' + - Category: AsyncAPI Bounty + Amount: '400' \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json index 48da5cfb7936..4e9aa53789df 100644 --- a/config/finance/json-data/2023/Expenses.json +++ b/config/finance/json-data/2023/Expenses.json @@ -61,7 +61,7 @@ "Amount": "2000.39" }, { - "Category": "\tAsyncAPI Webstore", + "Category": "AsyncAPI Webstore", "Amount": "75.11" }, { From 0646a89f9f314d6ccd57efc7dc4bf1b623699a16 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 19:54:52 +0530 Subject: [PATCH 33/79] commit conflict fix --- .gitignore | 3 +- README.md | 17 +++ config/finance/json-data/2023/Expenses.json | 122 ------------------ .../finance/json-data/2023/ExpensesLink.json | 30 ----- pages/docs/tools/cli/usage.md | 20 +-- 5 files changed, 28 insertions(+), 164 deletions(-) delete mode 100644 config/finance/json-data/2023/Expenses.json delete mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index 5909260e0dba..7c027aeb539a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,4 @@ meetings.json .env cypress/screenshots cypress/videos -Expenses.json -ExpensesLink.json \ No newline at end of file +config/finance/json-data \ No newline at end of file diff --git a/README.md b/README.md index 90d82fb49bfb..76009f571c3e 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,23 @@ npm run build Generated files of the website go to the `.next` folder. +## Updating information about project finance + +AsyncAPI Financial Summary page aims to provide transparency and clarity regarding the organization's financial activities. It serves as a platform to showcase how donations are accepted, different sponsorship options, and how the generated funds are utilized. + +### How to update information + +- YAML files must be stored in the `config/finance` directory. +- Create separate folders for each year under `config/finance`, such as `config/finance/2023`. Inside each year's folder, include two YAML files: `Expenses.yml` and `ExpensesLink.yml`. + +- In `Expenses.yml`, record expenses for each month, specifying the `Category` and `Amount`. + +- In `ExpensesLink.yml`, provide discussion links related to expense categories. + +- When a new year begins, create a corresponding folder for that year under both `config/finance` and `config/finance/json-data`, and place the YAML files inside the year's folder(not under json-data). For example, create folders `config/finance/2024` and `config/finance/json-data/2024`. + +- Modify the years within the `scripts/finance/expenses-json.js` script to handle data for different years effectively. + ## Case studies ### Overview diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json deleted file mode 100644 index 4e9aa53789df..000000000000 --- a/config/finance/json-data/2023/Expenses.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "January": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "68.95" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "35.62" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "1666.67" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "February": [ - { - "Category": "Community Manager Salary", - "Amount": "1000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "March": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "April": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - } - ], - "May": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Webstore", - "Amount": "75.11" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "June": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "3rd Party Services", - "Amount": "28.31" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - } - ], - "July": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "3rd Party Services", - "Amount": "1088.27" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "August": [ - { - "Category": "AsyncAPI Webstore", - "Amount": "15671.63" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ] -} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json deleted file mode 100644 index beba059ec798..000000000000 --- a/config/finance/json-data/2023/ExpensesLink.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "category": "AsyncAPI Ambassador", - "link": "https://github.com/orgs/asyncapi/discussions/425" - }, - { - "category": "Google Season of Docs 2022", - "link": "https://github.com/orgs/asyncapi/discussions/303" - }, - { - "category": "AsyncAPI Mentorship 2022", - "link": "https://github.com/orgs/asyncapi/discussions/284" - }, - { - "category": "AsyncAPI Webstore", - "link": "https://github.com/orgs/asyncapi/discussions/710" - }, - { - "category": "AsyncAPI Bounty", - "link": "https://github.com/orgs/asyncapi/discussions/541" - }, - { - "category": "3rd Party Services", - "link": "https://github.com/orgs/asyncapi/discussions/295" - }, - { - "category": "Community Manager Salary", - "link": "https://github.com/orgs/asyncapi/discussions/515" - } -] \ No newline at end of file diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md index dae57e7f7ae1..2d9fdcbdd00c 100644 --- a/pages/docs/tools/cli/usage.md +++ b/pages/docs/tools/cli/usage.md @@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/0.54.3 linux-x64 node-v18.17.1 +@asyncapi/cli/0.54.4 linux-x64 node-v18.17.1 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -93,7 +93,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/bundle.ts)_ ## `asyncapi config` @@ -107,7 +107,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/config/index.ts)_ ## `asyncapi config context` @@ -282,7 +282,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -337,7 +337,7 @@ DESCRIPTION Find diff between two asyncapi files ``` -_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/diff.ts)_ +_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/diff.ts)_ ## `asyncapi generate` @@ -351,7 +351,7 @@ DESCRIPTION Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates. ``` -_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/generate/index.ts)_ +_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/generate/index.ts)_ ## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE` @@ -513,7 +513,7 @@ EXAMPLES $ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode ``` -_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/new/index.ts)_ +_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/new/index.ts)_ ## `asyncapi new file` @@ -634,7 +634,7 @@ EXAMPLES $ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty ``` -_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/optimize.ts)_ +_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/optimize.ts)_ ## `asyncapi start` @@ -648,7 +648,7 @@ DESCRIPTION Start asyncapi studio ``` -_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/start/index.ts)_ +_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/start/index.ts)_ ## `asyncapi start studio` @@ -692,5 +692,5 @@ DESCRIPTION validate asyncapi file ``` -_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.54.3/src/commands/validate.ts)_ +_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v0.54.4/src/commands/validate.ts)_ From 7a4b2c86edb78b6203b5ae7c8e84a3e65eadc7ff Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 20:02:43 +0530 Subject: [PATCH 34/79] json data issue fix --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 76009f571c3e..e9338dade85e 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,7 @@ AsyncAPI Financial Summary page aims to provide transparency and clarity regardi ### How to update information - YAML files must be stored in the `config/finance` directory. + - Create separate folders for each year under `config/finance`, such as `config/finance/2023`. Inside each year's folder, include two YAML files: `Expenses.yml` and `ExpensesLink.yml`. - In `Expenses.yml`, record expenses for each month, specifying the `Category` and `Amount`. From aa8168266933b1bf4a8bc8093e78c9daffca8202 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Sep 2023 20:08:26 +0530 Subject: [PATCH 35/79] json data issue fix --- .gitignore | 3 +- config/finance/json-data/2023/Expenses.json | 122 ++++++++++++++++++ .../finance/json-data/2023/ExpensesLink.json | 30 +++++ scripts/finance/expenses-json.js | 2 +- 4 files changed, 154 insertions(+), 3 deletions(-) create mode 100644 config/finance/json-data/2023/Expenses.json create mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index 7c027aeb539a..97f8c2038030 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,4 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos -config/finance/json-data \ No newline at end of file +cypress/videos \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json new file mode 100644 index 000000000000..4e9aa53789df --- /dev/null +++ b/config/finance/json-data/2023/Expenses.json @@ -0,0 +1,122 @@ +{ + "January": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "68.95" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "35.62" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "1666.67" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "February": [ + { + "Category": "Community Manager Salary", + "Amount": "1000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "March": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "April": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + } + ], + "May": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Webstore", + "Amount": "75.11" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "June": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "3rd Party Services", + "Amount": "28.31" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + } + ], + "July": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "3rd Party Services", + "Amount": "1088.27" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "August": [ + { + "Category": "AsyncAPI Webstore", + "Amount": "15671.63" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ] +} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json new file mode 100644 index 000000000000..beba059ec798 --- /dev/null +++ b/config/finance/json-data/2023/ExpensesLink.json @@ -0,0 +1,30 @@ +[ + { + "category": "AsyncAPI Ambassador", + "link": "https://github.com/orgs/asyncapi/discussions/425" + }, + { + "category": "Google Season of Docs 2022", + "link": "https://github.com/orgs/asyncapi/discussions/303" + }, + { + "category": "AsyncAPI Mentorship 2022", + "link": "https://github.com/orgs/asyncapi/discussions/284" + }, + { + "category": "AsyncAPI Webstore", + "link": "https://github.com/orgs/asyncapi/discussions/710" + }, + { + "category": "AsyncAPI Bounty", + "link": "https://github.com/orgs/asyncapi/discussions/541" + }, + { + "category": "3rd Party Services", + "link": "https://github.com/orgs/asyncapi/discussions/295" + }, + { + "category": "Community Manager Salary", + "link": "https://github.com/orgs/asyncapi/discussions/515" + } +] \ No newline at end of file diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index 9fdc2085d354..ba6e58a0eb38 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -33,4 +33,4 @@ function writeJson() { fs.writeFileSync(path.join(outputDirectory, 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2)); } -module.exports = { writeJson } +module.exports = { writeJson } \ No newline at end of file From 51a36d4cffa528f3bee2536ac5e20aa723af8867 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 7 Sep 2023 12:28:58 +0530 Subject: [PATCH 36/79] design changes --- components/FinancialSummary/AsyncAPISummary.js | 6 +++--- components/FinancialSummary/ExpenseBreakdown.js | 12 ++++++------ .../OtherFormsOfFinancialSupport.js | 6 +++--- pages/finance.js | 2 +- public/img/finance/GitHub.webp | Bin 1984 -> 0 bytes public/img/finance/LFX.webp | Bin 1158 -> 0 bytes public/img/finance/OpenCollective.webp | Bin 1922 -> 0 bytes .../BountyProgram.webp | Bin .../EmployeeInvolvement.webp | Bin .../EventOrganization.webp | Bin .../img/{finance => illustrations}/Events.webp | Bin .../img/{finance => illustrations}/Hiring.webp | Bin .../MentorshipProgram.webp | Bin .../ServiceProvision.webp | Bin .../img/{finance => illustrations}/Services.webp | Bin .../{finance => illustrations}/SwagStore.webp | Bin public/img/logos/LFX.svg | 1 + public/img/logos/OpenCollective.svg | 1 + 18 files changed, 15 insertions(+), 13 deletions(-) delete mode 100644 public/img/finance/GitHub.webp delete mode 100644 public/img/finance/LFX.webp delete mode 100644 public/img/finance/OpenCollective.webp rename public/img/{finance => illustrations}/BountyProgram.webp (100%) rename public/img/{finance => illustrations}/EmployeeInvolvement.webp (100%) rename public/img/{finance => illustrations}/EventOrganization.webp (100%) rename public/img/{finance => illustrations}/Events.webp (100%) rename public/img/{finance => illustrations}/Hiring.webp (100%) rename public/img/{finance => illustrations}/MentorshipProgram.webp (100%) rename public/img/{finance => illustrations}/ServiceProvision.webp (100%) rename public/img/{finance => illustrations}/Services.webp (100%) rename public/img/{finance => illustrations}/SwagStore.webp (100%) create mode 100644 public/img/logos/LFX.svg create mode 100644 public/img/logos/OpenCollective.svg diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index c2e18aadc2bc..bed5a15b1c97 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -39,13 +39,13 @@ function AsyncAPISummary() {
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index dcdd5853341a..38ffa4b7f921 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -21,7 +21,7 @@ function ExpenseBreakdown() {
- Mentorship Program + Mentorship Program

Mentorship Program

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

@@ -31,7 +31,7 @@ function ExpenseBreakdown() {
- Bounty Program + Bounty Program

Bounty Program

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

@@ -41,7 +41,7 @@ function ExpenseBreakdown() {
- Events + Events

Events

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

@@ -51,7 +51,7 @@ function ExpenseBreakdown() {
- Swag Store + Swag Store

Swag Store

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

@@ -61,7 +61,7 @@ function ExpenseBreakdown() {
- Hiring + Hiring

Hiring

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

@@ -71,7 +71,7 @@ function ExpenseBreakdown() {
- Services + Services

Services

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsOfFinancialSupport.js index abe33c11289e..990e9006a9d7 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsOfFinancialSupport.js @@ -20,7 +20,7 @@ function OtherFormsOfFinancialSupport() {
- Employee involvement + Employee involvement

Employee involvement

Assign your employees to contribute to projects under the AsyncAPI Initiative @@ -32,7 +32,7 @@ function OtherFormsOfFinancialSupport() {

- Event organization + Event organization

Event organization

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI @@ -43,7 +43,7 @@ function OtherFormsOfFinancialSupport() {

- Service provision + Service provision

Service provision

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your diff --git a/pages/finance.js b/pages/finance.js index 75989fdfb7be..671652fc0d63 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -9,7 +9,7 @@ import NavBar from "../components/navigation/NavBar" import Head from "next/head" import StickyNavbar from "../components/navigation/StickyNavbar" import Container from "../components/layout/Container" -import { useEffect, useState } from 'react' +import { useEffect, useState } from "react" function FinancialSummary() { const [windowWidth, setWindowWidth] = useState(0); diff --git a/public/img/finance/GitHub.webp b/public/img/finance/GitHub.webp deleted file mode 100644 index f21b15146d691cf58a7183f15c3f25bfa3b59292..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1984 zcmV;x2S4~yNk&Gv2LJ$9MM6+kP&gp02LJ#tC;*)SDy{&206r-ah(e*EArW~6_W=G+{R{k8<)1N!)%`&Kj{i{qW%mK}r~6m=&+Xrhe$am{{?-1s{73E2@Bjb* z(2wL_&VR}OaQ^xKgZz*G|NXym9=AVmy^DWT%Vsk!4f7+Q*3O`9L~Q=EteYalDZCR^ z2K?pJa)fzmhg})@(CN62*TqYFY8mBTX;uBl?J377tw;22@>;j9%jWK0XI^L zbcNL#d(HIz-c&LoUZ(hgg&}^^Y6gSYN0_w%`s90ADt5!@8wA5{?iJJTl1*}v+YsRSbL2oR%jya%=e@n%|ahB zf1J8nEbHIw9|!R#?TWH?;~n<{QJ?6EGUFQr3y?R{T#jbCym z%GbVjOs3b&-(K8NiBWOHhk>T$khtwVaX`NeX795NO{i<7a8yO5e!Loy-TL7}`JD!r z9zO$!5zeK;YCMi_WNW)z4l!yH3>CkAjsLd0CBQyUI*j2Q3t;>mg%L_>uopE5klG0{ zQE3?mHDCY7V8jik)0I)V7qj_ld%fLA6r%|H_8go?V~sIvV6tciKauf}}Is2lsH61jg3*L0A z-Xfr4CAx@e0;}-N=0NR+zrzQHM4$hO8Dsm|v;(uBB+}$KoZ&bQ2FgEtc@X)HD|&sH z+!%nnv_DA9I7({ee-)C35omuw-wZX!!*#&|=B8dTSy33Yi8VC3MKY{A=tP;rD(nx+ zFt%)Bc72RXyshZ2s{T_BP6<75Ty{otp)=7L#*tHou{S%(q7qUcIXvD?F1}Gs4+uCZ zq9jk)kaDW$-s@-o_fc{+J2}^nBdm%jG7$La{JHa8FVJn1Khna@P5A<%YFw-UWF{be zpApu1Xmpy6NFwzZn6#eVZFHjB3^~I8b8$apC4gpf`L41EPc2s1?D6Fzj{eR$PklQswSWVq7Cm@%A zQh!V6?@PpG)QYspsFcYzE>vwMdXgpX9zpr+#>c5(2xjCIpE>=bg4m{K(LOlg733~_ z^dH3Lo*ugz|3C#gYGiQn%En^>e4bc#1m2j1qO>gzYXWSCpN|);8S~O>LG*6~zLR)I*#|*<)fql^O9w zKrchZKA>c>H6l&Iy79Bgn)T2RG-7h)OHq`a5y|>!a8atl5Z0%!Rj8R~>i>qUk2XI? zBclW_Olt8R815?Mma?Ycg#j9>`OJthjMff9aVTR%h~ne`HlsfAcQKCDFFRPfa6#C( z_d{3@P~sPl%5YM_wp69|^=Jk{MQ93qxvcjG8(k*hgQricCWxcqb5S5*`!o^>FWiHL znM2|mQRy!VxH&=D-(82^e@>z+$KVb;G{^e$CFfIrjhj4+1NG!JeiB;+x diff --git a/public/img/finance/LFX.webp b/public/img/finance/LFX.webp deleted file mode 100644 index 8e8de9106385a831d005846efae9f11325851d36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1158 zcmV;11bO>XNk&F~1ONb6MM6+kP&goR1ONaq9sr#IDxLt806r-ahe9Et3$6lI3;{w| z+qYN43P0n&5H_{@P78M;Kfk08$A9K`%YP&E0s52sRqmDOPkDp-2dD>3zC+V8=BEdF z-t`s9>qXo{=#BaX|7-sx_W{;@>>hvx!K)80*x}<4B*T2hW+cfmKO%wFW;;xnwwA^~ z@-W$%&Hz{Tj&XpzEAe)<|h51 z5?boT@0~ZP+q9ys!Tpi&*1i>~V^&7Mm6-eQ%u1oyV+|4x>29nFQ9*lu5~6B6Bl+;t zTL1z~ILZ5^(wD3Y`L|zMfB^pf-FN_$IKSkYpMT(cZ{e@ggxg>L4Nm4iYQkl!0QvmL zwfaXr65dQ%M6@b;#-^&eW^#{vpW27l8bQ|hji;5+<~vJ5^@&AwIw|p7ZAQuIGIlj! zFtH#-j6^dk_G;2$ZSpmW5gz(Xx$+*WELO}@6|#&!QUnNh!D{h=O-nB8IoG{vb?RN} zoGJb{&RPMd`8p&_sdI>Z;Y}ye%ygr0?fCl5BDBO7E~IbIOXL1Q9n3#eB*lwRL|wOg z_So<$e&f2iC509JRv$B++wF<_J(764_^<}_qV2ALcaqqeeqwRYWKhM% zPZHp8(b3S}Go+&wx;kCo&Iso*Kx{$N9Wo(`a*v_@i8uYr+*@KQUZS!_CI=SQE*`g8 z;z0lHg}!F|9}xhbJr7M1VckPxaXs4RV9z;?39 zu}q@QDWzEs!cY(MCdkY3&u=es!z9%Ii<=kyY41ema4WP#yXEx_0A0WyG?Cux75d)BLQKma8Wf^ZX7gV+QS Y-Ok%l8--EVPl4S5buA}gz14sK09_PHLI3~& diff --git a/public/img/finance/OpenCollective.webp b/public/img/finance/OpenCollective.webp deleted file mode 100644 index c66891030d715082bca5d23a5dd78111ab0c44bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1922 zcmV-|2YvWbNk&F`2LJ$9MM6+kP&goN2LJ$2C;*)SD#`$q06r-ah(e*EAr#w8I2Zzi zvbS)!n0)SD#cYY*{OW99(7y@#@a`9?y!Cub^N!T$BuJIn{{ zukAOyAEGbt9-trJf7A7mdIx!Ie(QWC{@i}$`$PZ#)>ra>V*l(h^S7oU$0DWA5&B7{ zdE?XS?wIdgf3@DrMFvwWya`fsLgOB}L8i{fKff+tyULNILUm!yf&;fs15-({&+mKd zD5A?RB&-=iCvav8V!iR%Sx&Hz=*X|S*ThblV*FPCi%s2-ap%HKz=hJ`DP8D_E%MH@ zLbadC#`dWt$)$L5!wx4hdKUi3wk# z2Ifo-Q}dn%?TlnYN+I0mwe4~rPvV4sZ5|34SVt84N+{Lp$U?b+_7Uy%8flj}Zzmo< zvv;>*sUOg1+MJ|Q(wX*XLrmT*Fdfy>$0GpoXo51!rl;~AI8Mo%BY3=Z0)SZ{zt%X){pEY zyXb;ADjU?lK(KJ!U*|&J`%Dh+lncP}JCp_5KNFGL&omH8qcNw+e+R?=_SQdh$d|a* zO{&8q;8Sv_b?c>h>1mhSxpCe7SlZ$+OSkyLU8lcsNG}mQ>rBgssT2%FvF5Ct!66c* zWgBnYpAn4NW%rvcX5tczA;#GoOnxK8URKY`9^2{C4^kL(Ltm~n)!tTZH)|t=)dC_V z(LO%&UtIuEymH5=-}>7J!Gu_^(%7q4qPO?!Z0iRR0Nw);kZN*B z@>+}a47(>NOS_WaB;Z$SG!nI*M4_6s2VIoMmJ2ktK!de1@R%B1pT2Yr?=sGVvgS*>LQzk?M;v+xN};og+xX{qC-3+$TJ~h7SU6` zmJ>k<{^BikaDU(TeYS`=Nb=^R!s+HQk`;RROh1yoDr!lO`qMm&A^wG|eQ9iH>G zXHNPH`0}oKB9K*pG5u@k{dj%))fSNYI_OI5_y#3f2m2!1d`@t}!lTRwpK%3q*K+qa zpQnCU;!3~($X)sx4+`Zl=Z0w`Ftqle-8q@IH;OE5?%yYK)5sYsAa8~njtQCak`Z0j zb?QFJkkPCXivQfa!#aL1`bX3dRX?Cg2MKZBpK_wbUy)S4 zTf113h6w2CB9k($<>@44=hXN23nzQD)vCe-?A|>V41DI~5dl=h0&jSTM7UnM8Ab@D zDsru7_7!DH^sT_mX2>>Koj}!TcjQ}C16Kl_Iq(V~EMfe)dn=HwBvc<>i6KA$juZe} IyBi \ No newline at end of file diff --git a/public/img/logos/OpenCollective.svg b/public/img/logos/OpenCollective.svg new file mode 100644 index 000000000000..c8b3db1ba1d8 --- /dev/null +++ b/public/img/logos/OpenCollective.svg @@ -0,0 +1 @@ + \ No newline at end of file From 93924d2bcc30e7d1540ed60a7c74e3c4de917108 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sat, 7 Oct 2023 17:44:19 +0530 Subject: [PATCH 37/79] requested changes made --- .gitignore | 3 +- .../FinancialSummary/AsyncAPISummary.js | 4 +- .../FinancialSummary/BarChartComponent.js | 38 ++++--- components/FinancialSummary/ContactUs.js | 2 +- .../FinancialSummary/ExpenseBreakdown.js | 38 +++---- ...ncialSupport.js => OtherFormsComponent.js} | 18 +-- .../FinancialSummary/SponsorshipTiers.js | 26 ++--- components/FinancialSummary/SuccessStories.js | 8 +- pages/finance.js | 105 +++++++----------- scripts/finance/expenses-json.js | 4 +- scripts/index.js | 4 +- scripts/utils.js | 35 ++++-- tailwind.config.js | 2 + 13 files changed, 143 insertions(+), 144 deletions(-) rename components/FinancialSummary/{OtherFormsOfFinancialSupport.js => OtherFormsComponent.js} (80%) diff --git a/.gitignore b/.gitignore index 97f8c2038030..7c027aeb539a 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos \ No newline at end of file +cypress/videos +config/finance/json-data \ No newline at end of file diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index bed5a15b1c97..19e4c14bacce 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -10,7 +10,7 @@ function AsyncAPISummary() { AsyncAPI Financial Summary - + To help improve the current state of Event-Driven Architectures and their tooling, you can show your support for the AsyncAPI Initiative by making a financial contribution. We offer three donation options: Open Collective, GitHub Sponsors, and Linux Foundation Crowdfunding. Our expenses are managed through Open Collective and GitHub Sponsors, @@ -30,7 +30,7 @@ function AsyncAPISummary() { Ways to Support Us?

-
+
The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, they may involve greater effort. Contribute
monetarily using the following channels. diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 0306b91bf6f4..afdea519bcd9 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect } from 'react' +import React, { useState, useEffect,useRef } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json' import Expenses from '../../config/finance/json-data/2023/Expenses.json' @@ -32,8 +32,6 @@ const getUniqueCategories = () => { const months = Object.keys(Expenses); const categories = getUniqueCategories(); - - const Card = ({ month, data, links }) => { return (
@@ -105,17 +103,27 @@ const BarChartComponent = () => { Amount: categoryAmounts[category], })); - const handleResize = () => { - setWindowWidth(window.innerWidth); - }; + // Create a ref for the handleResize function + const handleResizeRef = useRef(null); + + // Define the handleResize function + handleResizeRef.current = () => { + setWindowWidth(window.innerWidth); + }; - useEffect(() => { - handleResize(); - window.addEventListener('resize', handleResize); - return () => { - window.removeEventListener('resize', handleResize); - }; - }, []); + // Update the window width when the component mounts and when the window is resized + useEffect(() => { + // Initial width + handleResizeRef.current(); + + // Listen for window resize events + window.addEventListener("resize", handleResizeRef.current); + + // Clean up the event listener when the component unmounts + return () => { + window.removeEventListener("resize", handleResizeRef.current); + }; + }, []); const barWidth = windowWidth < 900 ? null : 800; @@ -132,7 +140,7 @@ const BarChartComponent = () => { {/* Select for category filter */}
setSelectedMonth(e.target.value)} > diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index d58411dcf8fc..816cd0ca69ab 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -11,7 +11,7 @@ function ContactUs() {

Interested in getting in touch?

Feel free to contact us if you need more explanation. We are happy to hop on a call and help with - onboarding to the project as a sponsor. Write email to info@asyncapi.io + onboarding to the project as a sponsor. Write email to info@asyncapi.io
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index 38ffa4b7f921..95753e54c752 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -10,7 +10,7 @@ function ExpenseBreakdown() { Expense Breakdown - + Funds from GitHub Sponsors are directly transferred to our AsyncAPI Open Collective account. We maintain transparency in all expenses, and the TSC approves anticipated expenses. @@ -19,62 +19,62 @@ function ExpenseBreakdown() {
-
+
Mentorship Program -

Mentorship Program

+

Mentorship Program

-

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

+

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

-
+
Bounty Program -

Bounty Program

+

Bounty Program

-

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

+

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

-
+
Events -

Events

+

Events

-

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

+

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

-
+
Swag Store -

Swag Store

+

Swag Store

-

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

+

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

-
+
Hiring -

Hiring

+

Hiring

-

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

+

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

-
+
Services -

Services

+

Services

-

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

+

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

diff --git a/components/FinancialSummary/OtherFormsOfFinancialSupport.js b/components/FinancialSummary/OtherFormsComponent.js similarity index 80% rename from components/FinancialSummary/OtherFormsOfFinancialSupport.js rename to components/FinancialSummary/OtherFormsComponent.js index 990e9006a9d7..c05da473cdc9 100644 --- a/components/FinancialSummary/OtherFormsOfFinancialSupport.js +++ b/components/FinancialSummary/OtherFormsComponent.js @@ -2,7 +2,7 @@ import Container from '../layout/Container' import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function OtherFormsOfFinancialSupport() { +function OtherFormsComponent() { return (
@@ -11,42 +11,42 @@ function OtherFormsOfFinancialSupport() { Other Forms Of Financial Support - + You can also support AsyncAPI initiative by getting

involved through employment, providing services and

organizing events
-
+
Employee involvement

Employee involvement

-

Assign your employees to contribute to projects under the AsyncAPI Initiative +

Assign your employees to contribute to projects under the AsyncAPI Initiative on a regular basis, and we'll welcome them as new maintainers. You can also provide direct assistance to a member of the Technical Steering Committee(TSC) through contracts or employment for specific tasks.

-
+
Event organization

Event organization

-

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI +

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI brand at your provided venue.

-
+
Service provision

Service provision

-

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your +

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your organization can provide services such as hosting or storage to support our efforts.

@@ -58,4 +58,4 @@ function OtherFormsOfFinancialSupport() { ); } -export default OtherFormsOfFinancialSupport \ No newline at end of file +export default OtherFormsComponent \ No newline at end of file diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index aba6678833e4..14c52ac741a1 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -10,7 +10,7 @@ function SponsorshipTiers() {

Sponsorship Tiers

- + AsyncAPI offers various sponsorship tiers, each with its own set

of benefits and privileges. These tiers include Bronze, Silver,

Gold, and Platinum. @@ -31,30 +31,30 @@ function SponsorshipTiers() {
Bronze$100/month + Bronze$100/month Company logo in README on GitHub
Silver$500/month + Silver$500/month Company logo in README on GitHub and asyncapi.com
Gold$1000/month + Gold$1000/month Company logo in README on GitHub and asyncapi.com
Platinum$2000/month + Platinum$2000/month Company logo in README on GitHub and asyncapi.com. Up to 2 hours of support per month. Support will be remote with the option of a shared screen or via private chat. diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 4d355bc08355..b92888cb5887 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -10,7 +10,7 @@ function SuccessStories() {

Success Stories

-

+

Thanks to financial support we can already see many

success stories in the project.

@@ -18,7 +18,7 @@ function SuccessStories() {

Community Manager

-

+

With the addition of a dedicated Community Manager, we now have a monthly newsletter, regular status updates, an active social media presence, and the ability to drive initiatives such as event organization. @@ -26,7 +26,7 @@ function SuccessStories() {

AsyncAPI Mentorship

-

+

The 2022 mentorship program yielded significant achievements: Kafka support in Glee, a centralized platform for sharing AsyncAPI tools, and a versatile error handling library for multiple projects. @@ -34,7 +34,7 @@ function SuccessStories() {

AsyncAPI Conference

-

+

Every year we organize a conference that attracts many participants. Only last year the conference generated 3k views. We plan to do a series of events in different locations every year. diff --git a/pages/finance.js b/pages/finance.js index 671652fc0d63..aea3b069527e 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -1,82 +1,59 @@ -import BarChartComponent from "../components/FinancialSummary/BarChartComponent" -import ExpenseBreakdown from "../components/FinancialSummary/ExpenseBreakdown" -import SponsorshipTiers from "../components/FinancialSummary/SponsorshipTiers" -import SuccessStories from "../components/FinancialSummary/SuccessStories" -import AsyncAPISummary from "../components/FinancialSummary/AsyncAPISummary" -import OtherFormsOfFinancialSupport from "../components/FinancialSummary/OtherFormsOfFinancialSupport" -import ContactUs from "../components/FinancialSummary/ContactUs" -import NavBar from "../components/navigation/NavBar" -import Head from "next/head" -import StickyNavbar from "../components/navigation/StickyNavbar" -import Container from "../components/layout/Container" -import { useEffect, useState } from "react" +import React, { useEffect, useState, useRef } from "react"; +import Head from "next/head"; +import Container from "../components/layout/Container"; +import StickyNavbar from "../components/navigation/StickyNavbar"; +import NavBar from "../components/navigation/NavBar"; +import AsyncAPISummary from "../components/FinancialSummary/AsyncAPISummary"; +import SponsorshipTiers from "../components/FinancialSummary/SponsorshipTiers"; +import OtherFormsComponent from "../components/FinancialSummary/OtherFormsComponent"; +import ExpenseBreakdown from "../components/FinancialSummary/ExpenseBreakdown"; +import BarChartComponent from "../components/FinancialSummary/BarChartComponent"; +import SuccessStories from "../components/FinancialSummary/SuccessStories"; +import ContactUs from "../components/FinancialSummary/ContactUs"; function FinancialSummary() { const [windowWidth, setWindowWidth] = useState(0); - const handleResize = () => { + const handleResizeRef = useRef(null); + + handleResizeRef.current = () => { setWindowWidth(window.innerWidth); }; - - // Update the window width when the component mounts and when the window is resized - useEffect(() => { - // Initial width - handleResize(); - - // Listen for window resize events - window.addEventListener('resize', handleResize); + useEffect(() => { + handleResizeRef.current(); + window.addEventListener("resize", handleResizeRef.current); - // Clean up the event listener when the component unmounts return () => { - window.removeEventListener('resize', handleResize); + window.removeEventListener("resize", handleResizeRef.current); }; }, []); const title = "AsyncAPI Finance Summary"; const description = "Financial Summary of AsyncAPI"; - // Use Container only if the window width is more than 1700px + const renderComponents = () => ( + <> + + {title} + + + + + + + + + + + + + + ); + const shouldUseContainer = windowWidth > 1700; - return ( -

- {shouldUseContainer ? ( - - - {title} - - - - - - - - - - - - - - ) : ( - <> - - {title} - - - - - - - - - - - - - - )} -
- ); + return
{shouldUseContainer ? {renderComponents()} : renderComponents()}
; } -export default FinancialSummary + +export default FinancialSummary; diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index ba6e58a0eb38..0c7f789d62bf 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -28,9 +28,9 @@ const ExpensesLink = convertToJson(ExpensesLinkContent); const outputDirectory = path.join(__dirname, '../../config/finance/json-data/2023/'); // Create new JSON files in the specified output directory -function writeJson() { +function writeFinanceJsonFiles() { fs.writeFileSync(path.join(outputDirectory, 'Expenses.json'), JSON.stringify(Expenses, null, 2)); fs.writeFileSync(path.join(outputDirectory, 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2)); } -module.exports = { writeJson } \ No newline at end of file +module.exports = { writeFinanceJsonFiles } \ No newline at end of file diff --git a/scripts/index.js b/scripts/index.js index 789513fe7d71..a8e4030b7451 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,7 +1,7 @@ const rssFeed = require('./build-rss'); const buildPostList = require('./build-post-list'); const buildCaseStudiesList = require('./casestudies'); -const {writeJson} = require("./finance/expenses-json") +const {writeFinanceJsonFiles} = require('./finance/expenses-json') async function start() { await buildPostList(); @@ -18,7 +18,7 @@ async function start() { 'jobs/rss.xml' ); await buildCaseStudiesList(); + await writeFinanceJsonFiles(); } -writeJson() start(); \ No newline at end of file diff --git a/scripts/utils.js b/scripts/utils.js index b869aa421fa5..397bdfe62427 100644 --- a/scripts/utils.js +++ b/scripts/utils.js @@ -1,16 +1,27 @@ const yaml = require('yaml'); function convertToJson(contentYAMLorJSON) { + // Axios handles conversion to JSON by default, if data returned from the server allows it + // So if returned content is not a string (not YAML), we just return JSON back + if (typeof contentYAMLorJSON !== "string") { + return contentYAMLorJSON; + } - //Axios handles conversion to JSON by default, if data returned for the server allows it - //So if returned content is not string (not YAML) we just return JSON back - if (typeof contentYAMLorJSON !== "string") return contentYAMLorJSON; - - //in some cases json can be passed here as string as it failed parsing to json because of json related error - //instead of passint it to yaml parser, return same stuff that came in so it fails on JSON Schema validation later - if (contentYAMLorJSON.trimLeft().startsWith('{')) return contentYAMLorJSON - - return yaml.parse(contentYAMLorJSON); - } - - module.exports = { convertToJson } \ No newline at end of file + // Check if the content is valid JSON before attempting to parse as YAML + try { + const jsonContent = JSON.parse(contentYAMLorJSON); + return jsonContent; + } catch (jsonError) { + // If it's not valid JSON, try parsing it as YAML + try { + const yamlContent = yaml.parse(contentYAMLorJSON); + return yamlContent; + } catch (yamlError) { + // If parsing as YAML also fails, return null or handle the error as needed + console.error('Error parsing content as JSON or YAML:', jsonError.message, yamlError.message); + return null; + } + } +} + +module.exports = { convertToJson }; diff --git a/tailwind.config.js b/tailwind.config.js index 9054c6758e3d..7794e182d5ed 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -132,6 +132,8 @@ module.exports = { minimize: '#ffbd2e', maximize: '#28c93f', }, + violet:'#8054F2', + darkGunMetal:'#212526' }, scale: { 25: '.25', From 48f50f9e41493a5226cbea946e3e25ac985ae5f2 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 11 Oct 2023 11:31:12 +0530 Subject: [PATCH 38/79] requested changes made --- config/finance/2023/Expenses.yml | 11 +++++++++-- scripts/finance/expenses-json.js | 9 ++++----- scripts/index.js | 4 ++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/config/finance/2023/Expenses.yml b/config/finance/2023/Expenses.yml index 20e8b55273e9..c115f8dd2966 100644 --- a/config/finance/2023/Expenses.yml +++ b/config/finance/2023/Expenses.yml @@ -59,9 +59,16 @@ July: Amount: '1088.27' - Category: AsyncAPI Bounty Amount: '400' - August: - Category: AsyncAPI Webstore Amount: '15671.63' - Category: AsyncAPI Bounty - Amount: '400' \ No newline at end of file + Amount: '400' + - Category: Community Manager Salary + Amount: '2000' + +September: + - Category: AsyncAPI Ambassador + Amount: '129.48' + - Category: Community Manager Salary + Amount: '2000' \ No newline at end of file diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index 0c7f789d62bf..32d33a9a6dc5 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -11,10 +11,12 @@ function readYamlFromFile(filePath) { return parsedYaml; } catch (error) { console.error('Error reading YAML file:', error.message); - return null; + throw error; } } +function buildFinanceInfoList() { + const ExpensesFilePath = path.join(__dirname, '../../config/finance/2023/Expenses.yml'); const ExpensesLinkFilePath = path.join(__dirname, '../../config/finance/2023/ExpensesLink.yml'); @@ -26,11 +28,8 @@ const ExpensesLink = convertToJson(ExpensesLinkContent); // Specify the output directory for the JSON files const outputDirectory = path.join(__dirname, '../../config/finance/json-data/2023/'); - -// Create new JSON files in the specified output directory -function writeFinanceJsonFiles() { fs.writeFileSync(path.join(outputDirectory, 'Expenses.json'), JSON.stringify(Expenses, null, 2)); fs.writeFileSync(path.join(outputDirectory, 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2)); } -module.exports = { writeFinanceJsonFiles } \ No newline at end of file +module.exports = { buildFinanceInfoList } \ No newline at end of file diff --git a/scripts/index.js b/scripts/index.js index a8e4030b7451..2be994556a41 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,7 +1,7 @@ const rssFeed = require('./build-rss'); const buildPostList = require('./build-post-list'); const buildCaseStudiesList = require('./casestudies'); -const {writeFinanceJsonFiles} = require('./finance/expenses-json') +const {buildFinanceInfoList} = require('./finance/expenses-json') async function start() { await buildPostList(); @@ -18,7 +18,7 @@ async function start() { 'jobs/rss.xml' ); await buildCaseStudiesList(); - await writeFinanceJsonFiles(); + await buildFinanceInfoList(); } start(); \ No newline at end of file From e1acedb7bff88250902621ae8fdaefee9e7a379b Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 11 Oct 2023 11:35:21 +0530 Subject: [PATCH 39/79] bug fix --- components/footer/FooterList.js | 3 ++- config/finance/json-data/2023/Expenses.json | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/components/footer/FooterList.js b/components/footer/FooterList.js index b2eda6bbf0c6..e471541c5927 100644 --- a/components/footer/FooterList.js +++ b/components/footer/FooterList.js @@ -62,7 +62,8 @@ export const initiativeLinks = [ { label:"Finance", url:"/finance" - } + }, + { label: "FAQs", url: "/about#faqs", }, diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json index 4e9aa53789df..ff21746da72b 100644 --- a/config/finance/json-data/2023/Expenses.json +++ b/config/finance/json-data/2023/Expenses.json @@ -117,6 +117,20 @@ { "Category": "AsyncAPI Bounty", "Amount": "400" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" + } + ], + "September": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "129.48" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" } ] } \ No newline at end of file From 485cedb4ceac75f1f797d0126ca583c2187ae5cc Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 26 Oct 2023 22:09:10 +0530 Subject: [PATCH 40/79] text alignment --- .../FinancialSummary/BarChartComponent.js | 41 ++++++++++--------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index afdea519bcd9..f7b0f43d9ea4 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,4 +1,4 @@ -import React, { useState, useEffect,useRef } from 'react' +import React, { useState, useEffect, useRef } from 'react' import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json' import Expenses from '../../config/finance/json-data/2023/Expenses.json' @@ -103,27 +103,27 @@ const BarChartComponent = () => { Amount: categoryAmounts[category], })); - // Create a ref for the handleResize function - const handleResizeRef = useRef(null); + // Create a ref for the handleResize function + const handleResizeRef = useRef(null); - // Define the handleResize function - handleResizeRef.current = () => { - setWindowWidth(window.innerWidth); - }; + // Define the handleResize function + handleResizeRef.current = () => { + setWindowWidth(window.innerWidth); + }; - // Update the window width when the component mounts and when the window is resized - useEffect(() => { - // Initial width - handleResizeRef.current(); + // Update the window width when the component mounts and when the window is resized + useEffect(() => { + // Initial width + handleResizeRef.current(); - // Listen for window resize events - window.addEventListener("resize", handleResizeRef.current); + // Listen for window resize events + window.addEventListener("resize", handleResizeRef.current); - // Clean up the event listener when the component unmounts - return () => { - window.removeEventListener("resize", handleResizeRef.current); - }; - }, []); + // Clean up the event listener when the component unmounts + return () => { + window.removeEventListener("resize", handleResizeRef.current); + }; + }, []); const barWidth = windowWidth < 900 ? null : 800; @@ -136,7 +136,10 @@ const BarChartComponent = () => {

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

-

Total Expenses:

${totalAmount.toFixed(2)}

+
+

Expenses

+

${totalAmount.toFixed(2)}

+
{/* Select for category filter */}
- Mentorship Program -

Mentorship Program

+ Mentorship Program +

Mentorship Program

-

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

+

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

- Bounty Program -

Bounty Program

+ Bounty Program +

Bounty Program

-

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

+

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

- Events -

Events

+ Events +

Events

-

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

+

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

- Swag Store -

Swag Store

+ Swag Store +

Swag Store

-

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

+

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

- Hiring -

Hiring

+ Hiring +

Hiring

-

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

+

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

- Services -

Services

+ Services +

Services

-

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

+

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

diff --git a/components/FinancialSummary/OtherFormsComponent.js b/components/FinancialSummary/OtherFormsComponent.js index c05da473cdc9..b78dd5d7eb83 100644 --- a/components/FinancialSummary/OtherFormsComponent.js +++ b/components/FinancialSummary/OtherFormsComponent.js @@ -12,46 +12,38 @@ function OtherFormsComponent() { Other Forms Of Financial Support - You can also support AsyncAPI initiative by getting

involved through employment, providing services and

organizing events + You can also support AsyncAPI initiative by getting
involved through employment, providing services and
organizing events
-
+
-
-
-
- Employee involvement -

Employee involvement

-
-

Assign your employees to contribute to projects under the AsyncAPI Initiative - on a regular basis, and we'll welcome them as new maintainers. You can - also provide direct assistance to a member of the Technical Steering Committee(TSC) through contracts or employment for specific tasks.

-
+
+ Employee involvement +

Employee involvement

+

+ Assign your employees to contribute to projects under the AsyncAPI Initiative on a regular basis, and we'll welcome them as new maintainers. +

-
-
-
- Event organization -

Event organization

-
-

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI - brand at your provided venue.

-
+
+ Service provision +

Service provision

+

+ AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your organization can provide services such as hosting or storage to support our efforts. +

- -
-
-
- Service provision -

Service provision

-
-

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your - organization can provide services such as hosting or storage to support our efforts.

-
+ +
+ Event organization +

Event organization

+

+ Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI brand at your provided venue. +

+
+
diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 14c52ac741a1..ab0839db6fe7 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -11,8 +11,8 @@ function SponsorshipTiers() { - AsyncAPI offers various sponsorship tiers, each with its own set

- of benefits and privileges. These tiers include Bronze, Silver,

+ AsyncAPI offers various sponsorship tiers, each with its own set
+ of benefits and privileges. These tiers include Bronze, Silver,
Gold, and Platinum.
diff --git a/pages/finance.js b/pages/finance.js index aea3b069527e..08517d492559 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -41,13 +41,13 @@ function FinancialSummary() { - - - - - - - + + + + + + + ); From 26a89518c0c3e26c4141d1c6c11f580422c666db Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 27 Oct 2023 14:33:21 +0530 Subject: [PATCH 42/79] removed json files --- config/finance/json-data/2023/Expenses.json | 136 ------------------ .../finance/json-data/2023/ExpensesLink.json | 30 ---- 2 files changed, 166 deletions(-) delete mode 100644 config/finance/json-data/2023/Expenses.json delete mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json deleted file mode 100644 index ff21746da72b..000000000000 --- a/config/finance/json-data/2023/Expenses.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "January": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "68.95" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "35.62" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "1666.67" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "February": [ - { - "Category": "Community Manager Salary", - "Amount": "1000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "March": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "April": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - } - ], - "May": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Webstore", - "Amount": "75.11" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "June": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "3rd Party Services", - "Amount": "28.31" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - } - ], - "July": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "3rd Party Services", - "Amount": "1088.27" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "August": [ - { - "Category": "AsyncAPI Webstore", - "Amount": "15671.63" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ], - "September": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "129.48" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ] -} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json deleted file mode 100644 index beba059ec798..000000000000 --- a/config/finance/json-data/2023/ExpensesLink.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "category": "AsyncAPI Ambassador", - "link": "https://github.com/orgs/asyncapi/discussions/425" - }, - { - "category": "Google Season of Docs 2022", - "link": "https://github.com/orgs/asyncapi/discussions/303" - }, - { - "category": "AsyncAPI Mentorship 2022", - "link": "https://github.com/orgs/asyncapi/discussions/284" - }, - { - "category": "AsyncAPI Webstore", - "link": "https://github.com/orgs/asyncapi/discussions/710" - }, - { - "category": "AsyncAPI Bounty", - "link": "https://github.com/orgs/asyncapi/discussions/541" - }, - { - "category": "3rd Party Services", - "link": "https://github.com/orgs/asyncapi/discussions/295" - }, - { - "category": "Community Manager Salary", - "link": "https://github.com/orgs/asyncapi/discussions/515" - } -] \ No newline at end of file From 3221463c59218da7a220bf1da4afafe17730ef67 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 27 Oct 2023 14:36:40 +0530 Subject: [PATCH 43/79] json files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 7c027aeb539a..d05d157d091c 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,4 @@ meetings.json .env cypress/screenshots cypress/videos -config/finance/json-data \ No newline at end of file +config/finance/json-data/2023 \ No newline at end of file From c27b7bf023a500837428ec4e5d8f0075af50adf0 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 27 Oct 2023 14:38:28 +0530 Subject: [PATCH 44/79] json files --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index d05d157d091c..f822c54d8aee 100644 --- a/.gitignore +++ b/.gitignore @@ -15,4 +15,4 @@ meetings.json .env cypress/screenshots cypress/videos -config/finance/json-data/2023 \ No newline at end of file +config/finance/json-data/ \ No newline at end of file From 306a303aaecd57cccd48598caa60ea94a8b44577 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 27 Oct 2023 14:40:06 +0530 Subject: [PATCH 45/79] added json files --- .gitignore | 3 +- config/finance/json-data/2023/Expenses.json | 136 ++++++++++++++++++ .../finance/json-data/2023/ExpensesLink.json | 30 ++++ 3 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 config/finance/json-data/2023/Expenses.json create mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index f822c54d8aee..97f8c2038030 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,4 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos -config/finance/json-data/ \ No newline at end of file +cypress/videos \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json new file mode 100644 index 000000000000..ff21746da72b --- /dev/null +++ b/config/finance/json-data/2023/Expenses.json @@ -0,0 +1,136 @@ +{ + "January": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "68.95" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "35.62" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "1666.67" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "February": [ + { + "Category": "Community Manager Salary", + "Amount": "1000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "March": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "April": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + } + ], + "May": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Webstore", + "Amount": "75.11" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "June": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "3rd Party Services", + "Amount": "28.31" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + } + ], + "July": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "3rd Party Services", + "Amount": "1088.27" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "August": [ + { + "Category": "AsyncAPI Webstore", + "Amount": "15671.63" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" + } + ], + "September": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "129.48" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" + } + ] +} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json new file mode 100644 index 000000000000..beba059ec798 --- /dev/null +++ b/config/finance/json-data/2023/ExpensesLink.json @@ -0,0 +1,30 @@ +[ + { + "category": "AsyncAPI Ambassador", + "link": "https://github.com/orgs/asyncapi/discussions/425" + }, + { + "category": "Google Season of Docs 2022", + "link": "https://github.com/orgs/asyncapi/discussions/303" + }, + { + "category": "AsyncAPI Mentorship 2022", + "link": "https://github.com/orgs/asyncapi/discussions/284" + }, + { + "category": "AsyncAPI Webstore", + "link": "https://github.com/orgs/asyncapi/discussions/710" + }, + { + "category": "AsyncAPI Bounty", + "link": "https://github.com/orgs/asyncapi/discussions/541" + }, + { + "category": "3rd Party Services", + "link": "https://github.com/orgs/asyncapi/discussions/295" + }, + { + "category": "Community Manager Salary", + "link": "https://github.com/orgs/asyncapi/discussions/515" + } +] \ No newline at end of file From 9f286f566fe5b0e3e47ecfaa6ce2c9c8df734fee Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 27 Oct 2023 14:59:45 +0530 Subject: [PATCH 46/79] code updates --- .../FinancialSummary/BarChartComponent.js | 58 +++++++++++++------ components/FinancialSummary/SuccessStories.js | 2 +- lib/getUniqueCategories.js | 17 ++++++ scripts/finance/expenses-json.js | 3 +- 4 files changed, 58 insertions(+), 22 deletions(-) create mode 100644 lib/getUniqueCategories.js diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index ed24c16f83f5..094bbce7f34b 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,8 +1,16 @@ -import React, { useState, useEffect, useRef } from 'react' -import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts' -import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json' -import Expenses from '../../config/finance/json-data/2023/Expenses.json' - +import React, { useState, useEffect, useRef } from 'react'; +import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'; +import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json'; +import Expenses from '../../config/finance/json-data/2023/Expenses.json'; +import { getUniqueCategories } from '../../lib/getUniqueCategories'; +/** + * CustomTooltip component for the bar chart. Displays additional information on hover. + * + * @param {Object} props - The component's props. + * @param {boolean} props.active - Indicates if the tooltip is active. + * @param {Object[]} props.payload - An array of data points. + * @returns {JSX.Element} The rendered CustomTooltip component. + */ const CustomTooltip = ({ active, payload }) => { if (active && payload && payload.length) { const data = payload[0].payload; @@ -17,21 +25,24 @@ const CustomTooltip = ({ active, payload }) => { return null; }; -const getUniqueCategories = () => { - const allCategories = []; - for (const month in Expenses) { - Expenses[month].forEach(entry => { - if (!allCategories.includes(entry.Category)) { - allCategories.push(entry.Category); - } - }); - } - return allCategories; -}; +/** + * Retrieves unique expense categories from the Expenses data. + * + * @returns {string[]} An array of unique expense categories. + */ const months = Object.keys(Expenses); const categories = getUniqueCategories(); +/** + * Card component displays monthly expense data. + * + * @param {Object} props - The component's props. + * @param {string} props.month - The month for which expenses are displayed. + * @param {Object[]} props.data - The expense data for the month. + * @param {Object[]} props.links - Links to additional information for each category. + * @returns {JSX.Element} The rendered Card component. + */ const Card = ({ month, data, links }) => { return (
@@ -54,6 +65,11 @@ const Card = ({ month, data, links }) => { ); }; +/** + * ExpensesCard component displays a grid of expense cards for each month. + * + * @returns {JSX.Element} The rendered ExpensesCard component. + */ const ExpensesCard = () => { return (
@@ -66,6 +82,11 @@ const ExpensesCard = () => { ); }; +/** + * BarChartComponent displays a budget analysis bar chart with filtering options. + * + * @returns {JSX.Element} The rendered BarChartComponent component. + */ const BarChartComponent = () => { // State for selected filters const [selectedCategory, setSelectedCategory] = useState("All Categories"); @@ -125,7 +146,6 @@ const BarChartComponent = () => { }; }, []); - const barWidth = windowWidth < 900 ? null : 800; const barHeight = windowWidth < 900 ? null : 400; @@ -138,7 +158,7 @@ const BarChartComponent = () => {

Expenses

-

${totalAmount.toFixed(2)}

+

${totalAmount.toFixed(2)}

{/* Select for category filter */}
@@ -194,4 +214,4 @@ const BarChartComponent = () => { ); }; -export default BarChartComponent \ No newline at end of file +export default BarChartComponent; \ No newline at end of file diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index b92888cb5887..4759125b7356 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -11,7 +11,7 @@ function SuccessStories() { Success Stories

- Thanks to financial support we can already see many

success stories in + Thanks to financial support we can already see many
success stories in the project.

diff --git a/lib/getUniqueCategories.js b/lib/getUniqueCategories.js new file mode 100644 index 000000000000..7e2a835b4b3e --- /dev/null +++ b/lib/getUniqueCategories.js @@ -0,0 +1,17 @@ +/** + * Retrieves unique expense categories from the Expenses data. + * + * @param {Object} expenses - The expenses data. + * @returns {string[]} An array of unique expense categories. + */ +export function getUniqueCategories(expenses) { + const allCategories = []; + for (const month in expenses) { + expenses[month].forEach(entry => { + if (!allCategories.includes(entry.Category)) { + allCategories.push(entry.Category); + } + }); + } + return allCategories; +} diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index 32d33a9a6dc5..e143fcc9a4a5 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -10,8 +10,7 @@ function readYamlFromFile(filePath) { const parsedYaml = yaml.parse(yamlContent); // Parse YAML using the "yaml" package return parsedYaml; } catch (error) { - console.error('Error reading YAML file:', error.message); - throw error; + throw new Error('Error reading YAML file:', error.message); } } From ddfecc52a90b07637342c4927dbc117bb563afec Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Sat, 28 Oct 2023 13:08:52 +0530 Subject: [PATCH 47/79] design updates --- components/FinancialSummary/AsyncAPISummary.js | 6 +++--- .../FinancialSummary/BarChartComponent.js | 6 +++--- components/FinancialSummary/ContactUs.js | 2 +- .../FinancialSummary/ExpenseBreakdown.js | 6 +++--- .../FinancialSummary/OtherFormsComponent.js | 6 +++--- .../FinancialSummary/SponsorshipTiers.js | 4 ++-- components/FinancialSummary/SuccessStories.js | 6 +++--- pages/finance.js | 18 +++++++++--------- 8 files changed, 27 insertions(+), 27 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index a040490e6276..b5b63a652032 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -4,7 +4,7 @@ import Paragraph from '../typography/Paragraph' function AsyncAPISummary() { return ( -
+
@@ -32,8 +32,8 @@ function AsyncAPISummary() {
- The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, - they may involve greater effort. Contribute
monetarily using the following channels. + The easiest way to support AsyncAPI is by becoming a financial sponsor. While
there are alternative options, + they may involve greater effort. Contribute
monetarily using the following channels.
diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 094bbce7f34b..23439880e825 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -150,18 +150,18 @@ const BarChartComponent = () => { const barHeight = windowWidth < 900 ? null : 400; return ( -
+

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

-
+

Expenses

${totalAmount.toFixed(2)}

{/* Select for category filter */} -
+
setSelectedCategory(e.target.value)} > @@ -175,7 +175,7 @@ const BarChartComponent = () => { {/* Select for month filter */} + +
diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index 74c06fff10b9..e8125a5cba5a 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -18,63 +18,63 @@ function ExpenseBreakdown() {
-
+
- Mentorship Program -

Mentorship Program

+ Mentorship Program +

Mentorship Program

-

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

+

Our AsyncAPI Mentorship program offers paid guidance to develop valuable features, investing in tools and motivated individuals for community benefit.

-
+
- Bounty Program -

Bounty Program

+ Bounty Program +

Bounty Program

-

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

+

Rewarding contributors regardless of affiliation or volunteer status. Free mentoring and support for newcomers to build portfolios and unlock tech prospects.

-
+
- Events -

Events

+ Events +

Events

-

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

+

Supporting AsyncAPI conferences incurs costs for services and travel arrangements. Your contributions facilitate event hosting and community growth.

-
+
- Swag Store -

Swag Store

+ Swag Store +

Swag Store

-

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

+

Creating a swag store for seamless distribution to contributors, mentees, ambassadors, and community members. Store profits can fund complimentary swag expenses.

-
+
- Hiring -

Hiring

+ Hiring +

Hiring

-

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

+

To support our community, we require full time commitment. Open Collective helps us hire for AsyncAPI. Thulie joins as community manager, with plans to expand the team. our team

-
+
- Services -

Services

+ Services +

Services

-

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

+

Occasionally, we must pay for services such as Zoom or Descript, as they are not available through specific Open Source support programs.

From 82de3eb55012e46a58bf18ea63ad5447ff02ebc7 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 7 Nov 2023 19:03:18 +0530 Subject: [PATCH 51/79] bar chart design updates --- .../FinancialSummary/BarChartComponent.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 8f9e53186982..25455841a8c8 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -155,15 +155,17 @@ const BarChartComponent = () => {

Budget Analysis

Gain insights into the allocation of funds across different categories through our Budget Analysis

-
-
-

Expenses

-

${totalAmount.toFixed(2)}

+
+
+

Expenses

+

${totalAmount.toFixed(2)}

- {/* Select for category filter */} -
+
+ +
+ {/* Select for category filter */} setSelectedMonth(e.target.value)} > @@ -184,10 +186,10 @@ const BarChartComponent = () => { ))} - - +
+
{/* Recharts BarChart */} From 79d3d1652bb6bdbe26163eccd17db2db7b33f716 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 17 Nov 2023 13:03:53 +0530 Subject: [PATCH 52/79] design improvements --- components/FinancialSummary/OtherFormsComponent.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/FinancialSummary/OtherFormsComponent.js b/components/FinancialSummary/OtherFormsComponent.js index 3853d3cd2655..29f3439f197f 100644 --- a/components/FinancialSummary/OtherFormsComponent.js +++ b/components/FinancialSummary/OtherFormsComponent.js @@ -18,7 +18,7 @@ function OtherFormsComponent() {
- Employee involvement + Employee involvement

Employee involvement

Assign your employees to contribute to projects under the AsyncAPI Initiative on a regular basis, and we'll welcome them as new maintainers. @@ -26,7 +26,7 @@ function OtherFormsComponent() {

- Service provision + Service provision

Service provision

AsyncAPI Initiative relies on numerous tools, many of which incur costs. Your organization can provide services such as hosting or storage to support our efforts. @@ -34,7 +34,7 @@ function OtherFormsComponent() {

- Event organization + Event organization

Event organization

Host AsyncAPI conferences by sponsoring and organizing events under the AsyncAPI brand at your provided venue. From 56da3a9f10c519b2c6bfd5149c5644576ae9adfd Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 21 Nov 2023 23:33:31 +0530 Subject: [PATCH 53/79] code updated --- .gitignore | 4 +- config/finance/json-data/2023/Expenses.json | 136 ------------------ .../finance/json-data/2023/ExpensesLink.json | 30 ---- scripts/finance/expenses-json.js | 50 +++---- scripts/index.js | 2 +- 5 files changed, 26 insertions(+), 196 deletions(-) delete mode 100644 config/finance/json-data/2023/Expenses.json delete mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index 97f8c2038030..4dbfb30bca00 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos \ No newline at end of file +cypress/videos +config/finance/json-data/2023/Expenses.json +config/finance/json-data/2023/ExpensesLink.json \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json deleted file mode 100644 index ff21746da72b..000000000000 --- a/config/finance/json-data/2023/Expenses.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "January": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "68.95" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "35.62" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "1666.67" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "February": [ - { - "Category": "Community Manager Salary", - "Amount": "1000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "March": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "April": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - } - ], - "May": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Webstore", - "Amount": "75.11" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "June": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "3rd Party Services", - "Amount": "28.31" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - } - ], - "July": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "3rd Party Services", - "Amount": "1088.27" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "August": [ - { - "Category": "AsyncAPI Webstore", - "Amount": "15671.63" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ], - "September": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "129.48" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ] -} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json deleted file mode 100644 index beba059ec798..000000000000 --- a/config/finance/json-data/2023/ExpensesLink.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "category": "AsyncAPI Ambassador", - "link": "https://github.com/orgs/asyncapi/discussions/425" - }, - { - "category": "Google Season of Docs 2022", - "link": "https://github.com/orgs/asyncapi/discussions/303" - }, - { - "category": "AsyncAPI Mentorship 2022", - "link": "https://github.com/orgs/asyncapi/discussions/284" - }, - { - "category": "AsyncAPI Webstore", - "link": "https://github.com/orgs/asyncapi/discussions/710" - }, - { - "category": "AsyncAPI Bounty", - "link": "https://github.com/orgs/asyncapi/discussions/541" - }, - { - "category": "3rd Party Services", - "link": "https://github.com/orgs/asyncapi/discussions/295" - }, - { - "category": "Community Manager Salary", - "link": "https://github.com/orgs/asyncapi/discussions/515" - } -] \ No newline at end of file diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index e143fcc9a4a5..5ff0a20a143d 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -1,34 +1,28 @@ -const fs = require('fs'); -const yaml = require('yaml'); -const path = require('path'); +const { promises: { readFile, writeFile } } = require('fs'); const { convertToJson } = require('../utils'); +const { resolve } = require('path'); -// Function to read YAML content from a file -function readYamlFromFile(filePath) { +module.exports = async function buildFinanceInfoList() { try { - const yamlContent = fs.readFileSync(filePath, 'utf8'); - const parsedYaml = yaml.parse(yamlContent); // Parse YAML using the "yaml" package - return parsedYaml; - } catch (error) { - throw new Error('Error reading YAML file:', error.message); - } -} - -function buildFinanceInfoList() { - -const ExpensesFilePath = path.join(__dirname, '../../config/finance/2023/Expenses.yml'); -const ExpensesLinkFilePath = path.join(__dirname, '../../config/finance/2023/ExpensesLink.yml'); + const ExpensesContent = await readFile('config/finance/2023/Expenses.yml', 'utf-8'); + const ExpensesLinkContent = await readFile('config/finance/2023/ExpensesLink.yml', 'utf-8'); -const ExpensesContent = readYamlFromFile(ExpensesFilePath); -const ExpensesLinkContent = readYamlFromFile(ExpensesLinkFilePath); + const Expenses = convertToJson(ExpensesContent); + const ExpensesLink = convertToJson(ExpensesLinkContent); -const Expenses = convertToJson(ExpensesContent); -const ExpensesLink = convertToJson(ExpensesLinkContent); + // Write Expenses to a JSON file + await writeFile( + resolve(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json'), + JSON.stringify(Expenses, null, 2) + ); -// Specify the output directory for the JSON files -const outputDirectory = path.join(__dirname, '../../config/finance/json-data/2023/'); - fs.writeFileSync(path.join(outputDirectory, 'Expenses.json'), JSON.stringify(Expenses, null, 2)); - fs.writeFileSync(path.join(outputDirectory, 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2)); -} - -module.exports = { buildFinanceInfoList } \ No newline at end of file + // Write ExpensesLink to a JSON file + await writeFile( + resolve(__dirname, '../../config/finance/json-data/2023/', 'ExpensesLink.json'), + JSON.stringify(ExpensesLink, null, 2) + ); + } catch (err) { + console.error(err); + throw err; + } +}; diff --git a/scripts/index.js b/scripts/index.js index 2be994556a41..d34a76fd7e35 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,7 +1,7 @@ const rssFeed = require('./build-rss'); const buildPostList = require('./build-post-list'); const buildCaseStudiesList = require('./casestudies'); -const {buildFinanceInfoList} = require('./finance/expenses-json') +const buildFinanceInfoList = require('./finance/expenses-json') async function start() { await buildPostList(); From 529ca9d8da953ec9ded5ec428675bc9d7999efbf Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 21 Nov 2023 23:37:05 +0530 Subject: [PATCH 54/79] testing --- .gitignore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4dbfb30bca00..7c027aeb539a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,4 @@ meetings.json .env cypress/screenshots cypress/videos -config/finance/json-data/2023/Expenses.json -config/finance/json-data/2023/ExpensesLink.json \ No newline at end of file +config/finance/json-data \ No newline at end of file From 8b4e67d790a446d24d35e72c9ad7bb3338038aa8 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 21 Nov 2023 23:46:45 +0530 Subject: [PATCH 55/79] testing --- scripts/finance/expenses-json.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/finance/expenses-json.js b/scripts/finance/expenses-json.js index 5ff0a20a143d..cfdf877c823d 100644 --- a/scripts/finance/expenses-json.js +++ b/scripts/finance/expenses-json.js @@ -4,8 +4,8 @@ const { resolve } = require('path'); module.exports = async function buildFinanceInfoList() { try { - const ExpensesContent = await readFile('config/finance/2023/Expenses.yml', 'utf-8'); - const ExpensesLinkContent = await readFile('config/finance/2023/ExpensesLink.yml', 'utf-8'); + const ExpensesContent = await readFile('../../config/finance/2023/Expenses.yml', 'utf-8'); + const ExpensesLinkContent = await readFile('../../config/finance/2023/ExpensesLink.yml', 'utf-8'); const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); From b16042a98886462be3506df1112a0709138fd114 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 22 Nov 2023 00:03:55 +0530 Subject: [PATCH 56/79] file name change --- scripts/finance/{expenses-json.js => index.js} | 0 scripts/index.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename scripts/finance/{expenses-json.js => index.js} (100%) diff --git a/scripts/finance/expenses-json.js b/scripts/finance/index.js similarity index 100% rename from scripts/finance/expenses-json.js rename to scripts/finance/index.js diff --git a/scripts/index.js b/scripts/index.js index d34a76fd7e35..835ccd7b6edf 100644 --- a/scripts/index.js +++ b/scripts/index.js @@ -1,7 +1,7 @@ const rssFeed = require('./build-rss'); const buildPostList = require('./build-post-list'); const buildCaseStudiesList = require('./casestudies'); -const buildFinanceInfoList = require('./finance/expenses-json') +const buildFinanceInfoList = require('./finance') async function start() { await buildPostList(); From 2630a6d5acfc9e2d4a6c319688c5c3856e374a42 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 22 Nov 2023 00:05:45 +0530 Subject: [PATCH 57/79] file name change --- scripts/finance/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index cfdf877c823d..5ff0a20a143d 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -4,8 +4,8 @@ const { resolve } = require('path'); module.exports = async function buildFinanceInfoList() { try { - const ExpensesContent = await readFile('../../config/finance/2023/Expenses.yml', 'utf-8'); - const ExpensesLinkContent = await readFile('../../config/finance/2023/ExpensesLink.yml', 'utf-8'); + const ExpensesContent = await readFile('config/finance/2023/Expenses.yml', 'utf-8'); + const ExpensesLinkContent = await readFile('config/finance/2023/ExpensesLink.yml', 'utf-8'); const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); From 908cfa2b92040fef112cdef33abc9c86164519d9 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 22 Nov 2023 00:12:04 +0530 Subject: [PATCH 58/79] file name change --- scripts/finance/index.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index 5ff0a20a143d..a315cda8a5be 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -10,6 +10,7 @@ module.exports = async function buildFinanceInfoList() { const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); + console.log(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json') // Write Expenses to a JSON file await writeFile( resolve(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json'), From ff03b603fd778314f924de64b456b2aaa7dec367 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 22 Nov 2023 00:14:45 +0530 Subject: [PATCH 59/79] file name change --- scripts/finance/index.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index a315cda8a5be..a23e82833681 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -10,16 +10,15 @@ module.exports = async function buildFinanceInfoList() { const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); - console.log(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json') // Write Expenses to a JSON file await writeFile( - resolve(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json'), + resolve('config/finance/json-data/2023/', 'Expenses.json'), JSON.stringify(Expenses, null, 2) ); // Write ExpensesLink to a JSON file await writeFile( - resolve(__dirname, '../../config/finance/json-data/2023/', 'ExpensesLink.json'), + resolve('config/finance/json-data/2023/', 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2) ); } catch (err) { From 8353b7e231e386b8de7e2a51dedbd7eb631cc175 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 22 Nov 2023 00:20:43 +0530 Subject: [PATCH 60/79] json files added --- .gitignore | 3 +- config/finance/json-data/2023/Expenses.json | 136 ++++++++++++++++++ .../finance/json-data/2023/ExpensesLink.json | 30 ++++ scripts/finance/index.js | 4 +- 4 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 config/finance/json-data/2023/Expenses.json create mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index 7c027aeb539a..97f8c2038030 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,4 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos -config/finance/json-data \ No newline at end of file +cypress/videos \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json new file mode 100644 index 000000000000..ff21746da72b --- /dev/null +++ b/config/finance/json-data/2023/Expenses.json @@ -0,0 +1,136 @@ +{ + "January": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "68.95" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "35.62" + }, + { + "Category": "Google Season of Docs 2022", + "Amount": "1666.67" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "February": [ + { + "Category": "Community Manager Salary", + "Amount": "1000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "March": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + }, + { + "Category": "AsyncAPI Mentorship 2022", + "Amount": "1500" + } + ], + "April": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + } + ], + "May": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Webstore", + "Amount": "75.11" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "June": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "3rd Party Services", + "Amount": "28.31" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "200" + } + ], + "July": [ + { + "Category": "Community Manager Salary", + "Amount": "2000.39" + }, + { + "Category": "3rd Party Services", + "Amount": "1088.27" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + } + ], + "August": [ + { + "Category": "AsyncAPI Webstore", + "Amount": "15671.63" + }, + { + "Category": "AsyncAPI Bounty", + "Amount": "400" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" + } + ], + "September": [ + { + "Category": "AsyncAPI Ambassador", + "Amount": "129.48" + }, + { + "Category": "Community Manager Salary", + "Amount": "2000" + } + ] +} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json new file mode 100644 index 000000000000..beba059ec798 --- /dev/null +++ b/config/finance/json-data/2023/ExpensesLink.json @@ -0,0 +1,30 @@ +[ + { + "category": "AsyncAPI Ambassador", + "link": "https://github.com/orgs/asyncapi/discussions/425" + }, + { + "category": "Google Season of Docs 2022", + "link": "https://github.com/orgs/asyncapi/discussions/303" + }, + { + "category": "AsyncAPI Mentorship 2022", + "link": "https://github.com/orgs/asyncapi/discussions/284" + }, + { + "category": "AsyncAPI Webstore", + "link": "https://github.com/orgs/asyncapi/discussions/710" + }, + { + "category": "AsyncAPI Bounty", + "link": "https://github.com/orgs/asyncapi/discussions/541" + }, + { + "category": "3rd Party Services", + "link": "https://github.com/orgs/asyncapi/discussions/295" + }, + { + "category": "Community Manager Salary", + "link": "https://github.com/orgs/asyncapi/discussions/515" + } +] \ No newline at end of file diff --git a/scripts/finance/index.js b/scripts/finance/index.js index a23e82833681..5ff0a20a143d 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -12,13 +12,13 @@ module.exports = async function buildFinanceInfoList() { // Write Expenses to a JSON file await writeFile( - resolve('config/finance/json-data/2023/', 'Expenses.json'), + resolve(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json'), JSON.stringify(Expenses, null, 2) ); // Write ExpensesLink to a JSON file await writeFile( - resolve('config/finance/json-data/2023/', 'ExpensesLink.json'), + resolve(__dirname, '../../config/finance/json-data/2023/', 'ExpensesLink.json'), JSON.stringify(ExpensesLink, null, 2) ); } catch (err) { From 15290c395e084eb57c096c9e4ce1a087ddf308fd Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:32:52 +0530 Subject: [PATCH 61/79] json files removed from pr --- .gitignore | 3 +- config/finance/json-data/2023/Expenses.json | 136 ------------------ .../finance/json-data/2023/ExpensesLink.json | 30 ---- scripts/finance/index.js | 24 ++-- 4 files changed, 15 insertions(+), 178 deletions(-) delete mode 100644 config/finance/json-data/2023/Expenses.json delete mode 100644 config/finance/json-data/2023/ExpensesLink.json diff --git a/.gitignore b/.gitignore index 97f8c2038030..4a2ff1a8a09d 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ meetings.json .netlify .env cypress/screenshots -cypress/videos \ No newline at end of file +cypress/videos +/config/finance/json-data/* \ No newline at end of file diff --git a/config/finance/json-data/2023/Expenses.json b/config/finance/json-data/2023/Expenses.json deleted file mode 100644 index ff21746da72b..000000000000 --- a/config/finance/json-data/2023/Expenses.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "January": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "68.95" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "35.62" - }, - { - "Category": "Google Season of Docs 2022", - "Amount": "1666.67" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "February": [ - { - "Category": "Community Manager Salary", - "Amount": "1000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "March": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - }, - { - "Category": "AsyncAPI Mentorship 2022", - "Amount": "1500" - } - ], - "April": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - } - ], - "May": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Webstore", - "Amount": "75.11" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "June": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "3rd Party Services", - "Amount": "28.31" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "200" - } - ], - "July": [ - { - "Category": "Community Manager Salary", - "Amount": "2000.39" - }, - { - "Category": "3rd Party Services", - "Amount": "1088.27" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - } - ], - "August": [ - { - "Category": "AsyncAPI Webstore", - "Amount": "15671.63" - }, - { - "Category": "AsyncAPI Bounty", - "Amount": "400" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ], - "September": [ - { - "Category": "AsyncAPI Ambassador", - "Amount": "129.48" - }, - { - "Category": "Community Manager Salary", - "Amount": "2000" - } - ] -} \ No newline at end of file diff --git a/config/finance/json-data/2023/ExpensesLink.json b/config/finance/json-data/2023/ExpensesLink.json deleted file mode 100644 index beba059ec798..000000000000 --- a/config/finance/json-data/2023/ExpensesLink.json +++ /dev/null @@ -1,30 +0,0 @@ -[ - { - "category": "AsyncAPI Ambassador", - "link": "https://github.com/orgs/asyncapi/discussions/425" - }, - { - "category": "Google Season of Docs 2022", - "link": "https://github.com/orgs/asyncapi/discussions/303" - }, - { - "category": "AsyncAPI Mentorship 2022", - "link": "https://github.com/orgs/asyncapi/discussions/284" - }, - { - "category": "AsyncAPI Webstore", - "link": "https://github.com/orgs/asyncapi/discussions/710" - }, - { - "category": "AsyncAPI Bounty", - "link": "https://github.com/orgs/asyncapi/discussions/541" - }, - { - "category": "3rd Party Services", - "link": "https://github.com/orgs/asyncapi/discussions/295" - }, - { - "category": "Community Manager Salary", - "link": "https://github.com/orgs/asyncapi/discussions/515" - } -] \ No newline at end of file diff --git a/scripts/finance/index.js b/scripts/finance/index.js index 5ff0a20a143d..f82d9f2793d4 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -1,26 +1,28 @@ const { promises: { readFile, writeFile } } = require('fs'); const { convertToJson } = require('../utils'); -const { resolve } = require('path'); +const { resolve, dirname } = require('path'); module.exports = async function buildFinanceInfoList() { try { - const ExpensesContent = await readFile('config/finance/2023/Expenses.yml', 'utf-8'); - const ExpensesLinkContent = await readFile('config/finance/2023/ExpensesLink.yml', 'utf-8'); + const currentDir = resolve(__dirname, '../../'); + + const expensesPath = resolve(currentDir, 'config', 'finance', '2023', 'Expenses.yml'); + const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2023', 'ExpensesLink.yml'); + + const ExpensesContent = await readFile(expensesPath, 'utf-8'); + const ExpensesLinkContent = await readFile(expensesLinkPath, 'utf-8'); const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); // Write Expenses to a JSON file - await writeFile( - resolve(__dirname, '../../config/finance/json-data/2023/', 'Expenses.json'), - JSON.stringify(Expenses, null, 2) - ); + const expensesJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'Expenses.json'); + await writeFile(expensesJsonPath, JSON.stringify(Expenses, null, 2)); // Write ExpensesLink to a JSON file - await writeFile( - resolve(__dirname, '../../config/finance/json-data/2023/', 'ExpensesLink.json'), - JSON.stringify(ExpensesLink, null, 2) - ); + const expensesLinkJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'ExpensesLink.json'); + await writeFile(expensesLinkJsonPath, JSON.stringify(ExpensesLink, null, 2)); + } catch (err) { console.error(err); throw err; From ae5ac3fd486a4aad45edc49224758fb89683440f Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:37:57 +0530 Subject: [PATCH 62/79] json files removed from pr --- scripts/finance/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index f82d9f2793d4..bc1211f54929 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -9,7 +9,9 @@ module.exports = async function buildFinanceInfoList() { const expensesPath = resolve(currentDir, 'config', 'finance', '2023', 'Expenses.yml'); const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2023', 'ExpensesLink.yml'); + console.log('Reading Expenses file from:', expensesPath); const ExpensesContent = await readFile(expensesPath, 'utf-8'); + console.log('Reading ExpensesLink file from:', expensesLinkPath); const ExpensesLinkContent = await readFile(expensesLinkPath, 'utf-8'); const Expenses = convertToJson(ExpensesContent); @@ -17,10 +19,12 @@ module.exports = async function buildFinanceInfoList() { // Write Expenses to a JSON file const expensesJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'Expenses.json'); + console.log('Writing Expenses to:', expensesJsonPath); await writeFile(expensesJsonPath, JSON.stringify(Expenses, null, 2)); // Write ExpensesLink to a JSON file const expensesLinkJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'ExpensesLink.json'); + console.log('Writing ExpensesLink to:', expensesLinkJsonPath); await writeFile(expensesLinkJsonPath, JSON.stringify(ExpensesLink, null, 2)); } catch (err) { From ee13a3581c766a0b0dc1073324449a65bfd0cdac Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:41:03 +0530 Subject: [PATCH 63/79] json files issue --- scripts/finance/index.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index bc1211f54929..bf0ae73fd63a 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -1,4 +1,4 @@ -const { promises: { readFile, writeFile } } = require('fs'); +const { promises: { readFile, writeFile, mkdir } } = require('fs'); const { convertToJson } = require('../utils'); const { resolve, dirname } = require('path'); @@ -17,16 +17,21 @@ module.exports = async function buildFinanceInfoList() { const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); + // Ensure the directory exists before writing the files + const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2023'); + console.log('Ensuring directory exists:', jsonDirectory); + await mkdir(jsonDirectory, { recursive: true }); + // Write Expenses to a JSON file - const expensesJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'Expenses.json'); + const expensesJsonPath = resolve(jsonDirectory, 'Expenses.json'); console.log('Writing Expenses to:', expensesJsonPath); await writeFile(expensesJsonPath, JSON.stringify(Expenses, null, 2)); // Write ExpensesLink to a JSON file - const expensesLinkJsonPath = resolve(currentDir, 'config', 'finance', 'json-data', '2023', 'ExpensesLink.json'); + const expensesLinkJsonPath = resolve(jsonDirectory, 'ExpensesLink.json'); console.log('Writing ExpensesLink to:', expensesLinkJsonPath); await writeFile(expensesLinkJsonPath, JSON.stringify(ExpensesLink, null, 2)); - + } catch (err) { console.error(err); throw err; From 4e2bb16724fb8b7e424f4e0d12ed792abf56d5aa Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:49:15 +0530 Subject: [PATCH 64/79] json file testing --- config/finance/2024/Expenses.yml | 74 ++++++++++++++++++++++++++++ config/finance/2024/ExpensesLink.yml | 20 ++++++++ scripts/finance/index.js | 11 ++--- 3 files changed, 97 insertions(+), 8 deletions(-) create mode 100644 config/finance/2024/Expenses.yml create mode 100644 config/finance/2024/ExpensesLink.yml diff --git a/config/finance/2024/Expenses.yml b/config/finance/2024/Expenses.yml new file mode 100644 index 000000000000..c115f8dd2966 --- /dev/null +++ b/config/finance/2024/Expenses.yml @@ -0,0 +1,74 @@ +January: + - Category: AsyncAPI Ambassador + Amount: '68.95' + - Category: Google Season of Docs 2022 + Amount: '35.62' + - Category: Google Season of Docs 2022 + Amount: '1666.67' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +February: + - Category: Community Manager Salary + Amount: '1000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +March: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +April: + - Category: Community Manager Salary + Amount: '2000.39' + +May: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: "AsyncAPI Webstore" + Amount: '75.11' + - Category: AsyncAPI Bounty + Amount: '400' + +June: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: 3rd Party Services + Amount: '28.31' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' + +July: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: 3rd Party Services + Amount: '1088.27' + - Category: AsyncAPI Bounty + Amount: '400' +August: + - Category: AsyncAPI Webstore + Amount: '15671.63' + - Category: AsyncAPI Bounty + Amount: '400' + - Category: Community Manager Salary + Amount: '2000' + +September: + - Category: AsyncAPI Ambassador + Amount: '129.48' + - Category: Community Manager Salary + Amount: '2000' \ No newline at end of file diff --git a/config/finance/2024/ExpensesLink.yml b/config/finance/2024/ExpensesLink.yml new file mode 100644 index 000000000000..9493648c356d --- /dev/null +++ b/config/finance/2024/ExpensesLink.yml @@ -0,0 +1,20 @@ +- category: "AsyncAPI Ambassador" + link: "https://github.com/orgs/asyncapi/discussions/425" + +- category: "Google Season of Docs 2022" + link: "https://github.com/orgs/asyncapi/discussions/303" + +- category: "AsyncAPI Mentorship 2022" + link: "https://github.com/orgs/asyncapi/discussions/284" + +- category: "AsyncAPI Webstore" + link: "https://github.com/orgs/asyncapi/discussions/710" + +- category: "AsyncAPI Bounty" + link: "https://github.com/orgs/asyncapi/discussions/541" + +- category: "3rd Party Services" + link: "https://github.com/orgs/asyncapi/discussions/295" + +- category: "Community Manager Salary" + link: "https://github.com/orgs/asyncapi/discussions/515" \ No newline at end of file diff --git a/scripts/finance/index.js b/scripts/finance/index.js index bf0ae73fd63a..79c67deeff8e 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -6,30 +6,25 @@ module.exports = async function buildFinanceInfoList() { try { const currentDir = resolve(__dirname, '../../'); - const expensesPath = resolve(currentDir, 'config', 'finance', '2023', 'Expenses.yml'); - const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2023', 'ExpensesLink.yml'); + const expensesPath = resolve(currentDir, 'config', 'finance', '2024', 'Expenses.yml'); + const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2024', 'ExpensesLink.yml'); - console.log('Reading Expenses file from:', expensesPath); const ExpensesContent = await readFile(expensesPath, 'utf-8'); - console.log('Reading ExpensesLink file from:', expensesLinkPath); const ExpensesLinkContent = await readFile(expensesLinkPath, 'utf-8'); const Expenses = convertToJson(ExpensesContent); const ExpensesLink = convertToJson(ExpensesLinkContent); // Ensure the directory exists before writing the files - const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2023'); - console.log('Ensuring directory exists:', jsonDirectory); + const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2024'); await mkdir(jsonDirectory, { recursive: true }); // Write Expenses to a JSON file const expensesJsonPath = resolve(jsonDirectory, 'Expenses.json'); - console.log('Writing Expenses to:', expensesJsonPath); await writeFile(expensesJsonPath, JSON.stringify(Expenses, null, 2)); // Write ExpensesLink to a JSON file const expensesLinkJsonPath = resolve(jsonDirectory, 'ExpensesLink.json'); - console.log('Writing ExpensesLink to:', expensesLinkJsonPath); await writeFile(expensesLinkJsonPath, JSON.stringify(ExpensesLink, null, 2)); } catch (err) { From 97db4a943e4c21dce24f49396ab65a26fd7abdcb Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:52:58 +0530 Subject: [PATCH 65/79] testing2 --- config/finance/2024/Expenses.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/config/finance/2024/Expenses.yml b/config/finance/2024/Expenses.yml index c115f8dd2966..feab811cee63 100644 --- a/config/finance/2024/Expenses.yml +++ b/config/finance/2024/Expenses.yml @@ -64,11 +64,5 @@ August: Amount: '15671.63' - Category: AsyncAPI Bounty Amount: '400' - - Category: Community Manager Salary - Amount: '2000' - -September: - - Category: AsyncAPI Ambassador - Amount: '129.48' - Category: Community Manager Salary Amount: '2000' \ No newline at end of file From 5af477c546d8f91f2923f9895f6fb110b8ad29af Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 19:56:22 +0530 Subject: [PATCH 66/79] testing2 --- components/FinancialSummary/BarChartComponent.js | 4 ++-- lib/getUniqueCategories.js | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 25455841a8c8..5893dd89c246 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,7 +1,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'; -import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json'; -import Expenses from '../../config/finance/json-data/2023/Expenses.json'; +import ExpensesLink from '../../config/finance/json-data/2024/ExpensesLink.json'; +import Expenses from '../../config/finance/json-data/2024/Expenses.json'; import { getUniqueCategories } from '../../lib/getUniqueCategories'; /** * CustomTooltip component for the bar chart. Displays additional information on hover. diff --git a/lib/getUniqueCategories.js b/lib/getUniqueCategories.js index 6b40890658b7..2c6e9500c7b9 100644 --- a/lib/getUniqueCategories.js +++ b/lib/getUniqueCategories.js @@ -5,7 +5,7 @@ * @returns {string[]} An array of unique expense categories. */ -import Expenses from '../config/finance/json-data/2023/Expenses.json'; +import Expenses from '../config/finance/json-data/2024/Expenses.json'; export const getUniqueCategories = () => { const allCategories = []; From 4d46e5bd4018f69a10961038824b6dcfedfefb2c Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 20:01:41 +0530 Subject: [PATCH 67/79] testing2 --- README.md | 2 +- .../FinancialSummary/BarChartComponent.js | 4 +- config/finance/2025/Expenses.yml | 74 +++++++++++++++++++ config/finance/2025/ExpensesLink.yml | 20 +++++ lib/getUniqueCategories.js | 2 +- scripts/finance/index.js | 6 +- 6 files changed, 101 insertions(+), 7 deletions(-) create mode 100644 config/finance/2025/Expenses.yml create mode 100644 config/finance/2025/ExpensesLink.yml diff --git a/README.md b/README.md index f93f404b5be9..cbf32ccc063b 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ AsyncAPI Financial Summary page aims to provide transparency and clarity regardi - When a new year begins, create a corresponding folder for that year under both `config/finance` and `config/finance/json-data`, and place the YAML files inside the year's folder(not under json-data). For example, create folders `config/finance/2024` and `config/finance/json-data/2024`. -- Modify the years within the `scripts/finance/expenses-json.js` script to handle data for different years effectively. +- Modify the years within the `scripts/finance/index.js` , `lib/getUniqueCategories.js` and `components/FinancialSummary/BarChartComponent.js` to handle data for different years effectively. ## Case studies diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 5893dd89c246..0fff0195a12c 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,7 +1,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'; -import ExpensesLink from '../../config/finance/json-data/2024/ExpensesLink.json'; -import Expenses from '../../config/finance/json-data/2024/Expenses.json'; +import ExpensesLink from '../../config/finance/json-data/2025/ExpensesLink.json'; +import Expenses from '../../config/finance/json-data/2025/Expenses.json'; import { getUniqueCategories } from '../../lib/getUniqueCategories'; /** * CustomTooltip component for the bar chart. Displays additional information on hover. diff --git a/config/finance/2025/Expenses.yml b/config/finance/2025/Expenses.yml new file mode 100644 index 000000000000..c115f8dd2966 --- /dev/null +++ b/config/finance/2025/Expenses.yml @@ -0,0 +1,74 @@ +January: + - Category: AsyncAPI Ambassador + Amount: '68.95' + - Category: Google Season of Docs 2022 + Amount: '35.62' + - Category: Google Season of Docs 2022 + Amount: '1666.67' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +February: + - Category: Community Manager Salary + Amount: '1000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +March: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + - Category: AsyncAPI Mentorship 2022 + Amount: '1500' + +April: + - Category: Community Manager Salary + Amount: '2000.39' + +May: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: "AsyncAPI Webstore" + Amount: '75.11' + - Category: AsyncAPI Bounty + Amount: '400' + +June: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: 3rd Party Services + Amount: '28.31' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' + - Category: AsyncAPI Bounty + Amount: '200' + +July: + - Category: Community Manager Salary + Amount: '2000.39' + - Category: 3rd Party Services + Amount: '1088.27' + - Category: AsyncAPI Bounty + Amount: '400' +August: + - Category: AsyncAPI Webstore + Amount: '15671.63' + - Category: AsyncAPI Bounty + Amount: '400' + - Category: Community Manager Salary + Amount: '2000' + +September: + - Category: AsyncAPI Ambassador + Amount: '129.48' + - Category: Community Manager Salary + Amount: '2000' \ No newline at end of file diff --git a/config/finance/2025/ExpensesLink.yml b/config/finance/2025/ExpensesLink.yml new file mode 100644 index 000000000000..9493648c356d --- /dev/null +++ b/config/finance/2025/ExpensesLink.yml @@ -0,0 +1,20 @@ +- category: "AsyncAPI Ambassador" + link: "https://github.com/orgs/asyncapi/discussions/425" + +- category: "Google Season of Docs 2022" + link: "https://github.com/orgs/asyncapi/discussions/303" + +- category: "AsyncAPI Mentorship 2022" + link: "https://github.com/orgs/asyncapi/discussions/284" + +- category: "AsyncAPI Webstore" + link: "https://github.com/orgs/asyncapi/discussions/710" + +- category: "AsyncAPI Bounty" + link: "https://github.com/orgs/asyncapi/discussions/541" + +- category: "3rd Party Services" + link: "https://github.com/orgs/asyncapi/discussions/295" + +- category: "Community Manager Salary" + link: "https://github.com/orgs/asyncapi/discussions/515" \ No newline at end of file diff --git a/lib/getUniqueCategories.js b/lib/getUniqueCategories.js index 2c6e9500c7b9..ed1e5520e267 100644 --- a/lib/getUniqueCategories.js +++ b/lib/getUniqueCategories.js @@ -5,7 +5,7 @@ * @returns {string[]} An array of unique expense categories. */ -import Expenses from '../config/finance/json-data/2024/Expenses.json'; +import Expenses from '../config/finance/json-data/2025/Expenses.json'; export const getUniqueCategories = () => { const allCategories = []; diff --git a/scripts/finance/index.js b/scripts/finance/index.js index 79c67deeff8e..f27c061f1ae8 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -6,8 +6,8 @@ module.exports = async function buildFinanceInfoList() { try { const currentDir = resolve(__dirname, '../../'); - const expensesPath = resolve(currentDir, 'config', 'finance', '2024', 'Expenses.yml'); - const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2024', 'ExpensesLink.yml'); + const expensesPath = resolve(currentDir, 'config', 'finance', '2025', 'Expenses.yml'); + const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2025', 'ExpensesLink.yml'); const ExpensesContent = await readFile(expensesPath, 'utf-8'); const ExpensesLinkContent = await readFile(expensesLinkPath, 'utf-8'); @@ -16,7 +16,7 @@ module.exports = async function buildFinanceInfoList() { const ExpensesLink = convertToJson(ExpensesLinkContent); // Ensure the directory exists before writing the files - const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2024'); + const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2025'); await mkdir(jsonDirectory, { recursive: true }); // Write Expenses to a JSON file From 7a86a0a6cbc866c1be2998d5b241be69d86f3ad2 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Thu, 23 Nov 2023 20:09:13 +0530 Subject: [PATCH 68/79] json files issue fixed --- README.md | 2 +- .../FinancialSummary/BarChartComponent.js | 4 +- config/finance/2024/Expenses.yml | 68 ----------------- config/finance/2024/ExpensesLink.yml | 20 ----- config/finance/2025/Expenses.yml | 74 ------------------- config/finance/2025/ExpensesLink.yml | 20 ----- lib/getUniqueCategories.js | 2 +- scripts/finance/index.js | 6 +- 8 files changed, 7 insertions(+), 189 deletions(-) delete mode 100644 config/finance/2024/Expenses.yml delete mode 100644 config/finance/2024/ExpensesLink.yml delete mode 100644 config/finance/2025/Expenses.yml delete mode 100644 config/finance/2025/ExpensesLink.yml diff --git a/README.md b/README.md index cbf32ccc063b..85c0f81008d8 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ AsyncAPI Financial Summary page aims to provide transparency and clarity regardi - In `ExpensesLink.yml`, provide discussion links related to expense categories. -- When a new year begins, create a corresponding folder for that year under both `config/finance` and `config/finance/json-data`, and place the YAML files inside the year's folder(not under json-data). For example, create folders `config/finance/2024` and `config/finance/json-data/2024`. +- When a new year begins, create a corresponding folder for that year under `config/finance` and place the YAML files inside the folder for that specific year. For example, create a folder named `config/finance/2024` for the year 2024 and `config/finance/2025` for the year 2025. Place the YAML file for each respective year inside its designated folder. - Modify the years within the `scripts/finance/index.js` , `lib/getUniqueCategories.js` and `components/FinancialSummary/BarChartComponent.js` to handle data for different years effectively. diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 0fff0195a12c..25455841a8c8 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -1,7 +1,7 @@ import React, { useState, useEffect, useRef } from 'react'; import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts'; -import ExpensesLink from '../../config/finance/json-data/2025/ExpensesLink.json'; -import Expenses from '../../config/finance/json-data/2025/Expenses.json'; +import ExpensesLink from '../../config/finance/json-data/2023/ExpensesLink.json'; +import Expenses from '../../config/finance/json-data/2023/Expenses.json'; import { getUniqueCategories } from '../../lib/getUniqueCategories'; /** * CustomTooltip component for the bar chart. Displays additional information on hover. diff --git a/config/finance/2024/Expenses.yml b/config/finance/2024/Expenses.yml deleted file mode 100644 index feab811cee63..000000000000 --- a/config/finance/2024/Expenses.yml +++ /dev/null @@ -1,68 +0,0 @@ -January: - - Category: AsyncAPI Ambassador - Amount: '68.95' - - Category: Google Season of Docs 2022 - Amount: '35.62' - - Category: Google Season of Docs 2022 - Amount: '1666.67' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -February: - - Category: Community Manager Salary - Amount: '1000.39' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -March: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -April: - - Category: Community Manager Salary - Amount: '2000.39' - -May: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: "AsyncAPI Webstore" - Amount: '75.11' - - Category: AsyncAPI Bounty - Amount: '400' - -June: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: 3rd Party Services - Amount: '28.31' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: AsyncAPI Bounty - Amount: '200' - -July: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: 3rd Party Services - Amount: '1088.27' - - Category: AsyncAPI Bounty - Amount: '400' -August: - - Category: AsyncAPI Webstore - Amount: '15671.63' - - Category: AsyncAPI Bounty - Amount: '400' - - Category: Community Manager Salary - Amount: '2000' \ No newline at end of file diff --git a/config/finance/2024/ExpensesLink.yml b/config/finance/2024/ExpensesLink.yml deleted file mode 100644 index 9493648c356d..000000000000 --- a/config/finance/2024/ExpensesLink.yml +++ /dev/null @@ -1,20 +0,0 @@ -- category: "AsyncAPI Ambassador" - link: "https://github.com/orgs/asyncapi/discussions/425" - -- category: "Google Season of Docs 2022" - link: "https://github.com/orgs/asyncapi/discussions/303" - -- category: "AsyncAPI Mentorship 2022" - link: "https://github.com/orgs/asyncapi/discussions/284" - -- category: "AsyncAPI Webstore" - link: "https://github.com/orgs/asyncapi/discussions/710" - -- category: "AsyncAPI Bounty" - link: "https://github.com/orgs/asyncapi/discussions/541" - -- category: "3rd Party Services" - link: "https://github.com/orgs/asyncapi/discussions/295" - -- category: "Community Manager Salary" - link: "https://github.com/orgs/asyncapi/discussions/515" \ No newline at end of file diff --git a/config/finance/2025/Expenses.yml b/config/finance/2025/Expenses.yml deleted file mode 100644 index c115f8dd2966..000000000000 --- a/config/finance/2025/Expenses.yml +++ /dev/null @@ -1,74 +0,0 @@ -January: - - Category: AsyncAPI Ambassador - Amount: '68.95' - - Category: Google Season of Docs 2022 - Amount: '35.62' - - Category: Google Season of Docs 2022 - Amount: '1666.67' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -February: - - Category: Community Manager Salary - Amount: '1000.39' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -March: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - - Category: AsyncAPI Mentorship 2022 - Amount: '1500' - -April: - - Category: Community Manager Salary - Amount: '2000.39' - -May: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: "AsyncAPI Webstore" - Amount: '75.11' - - Category: AsyncAPI Bounty - Amount: '400' - -June: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: 3rd Party Services - Amount: '28.31' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: AsyncAPI Bounty - Amount: '200' - - Category: AsyncAPI Bounty - Amount: '200' - -July: - - Category: Community Manager Salary - Amount: '2000.39' - - Category: 3rd Party Services - Amount: '1088.27' - - Category: AsyncAPI Bounty - Amount: '400' -August: - - Category: AsyncAPI Webstore - Amount: '15671.63' - - Category: AsyncAPI Bounty - Amount: '400' - - Category: Community Manager Salary - Amount: '2000' - -September: - - Category: AsyncAPI Ambassador - Amount: '129.48' - - Category: Community Manager Salary - Amount: '2000' \ No newline at end of file diff --git a/config/finance/2025/ExpensesLink.yml b/config/finance/2025/ExpensesLink.yml deleted file mode 100644 index 9493648c356d..000000000000 --- a/config/finance/2025/ExpensesLink.yml +++ /dev/null @@ -1,20 +0,0 @@ -- category: "AsyncAPI Ambassador" - link: "https://github.com/orgs/asyncapi/discussions/425" - -- category: "Google Season of Docs 2022" - link: "https://github.com/orgs/asyncapi/discussions/303" - -- category: "AsyncAPI Mentorship 2022" - link: "https://github.com/orgs/asyncapi/discussions/284" - -- category: "AsyncAPI Webstore" - link: "https://github.com/orgs/asyncapi/discussions/710" - -- category: "AsyncAPI Bounty" - link: "https://github.com/orgs/asyncapi/discussions/541" - -- category: "3rd Party Services" - link: "https://github.com/orgs/asyncapi/discussions/295" - -- category: "Community Manager Salary" - link: "https://github.com/orgs/asyncapi/discussions/515" \ No newline at end of file diff --git a/lib/getUniqueCategories.js b/lib/getUniqueCategories.js index ed1e5520e267..6b40890658b7 100644 --- a/lib/getUniqueCategories.js +++ b/lib/getUniqueCategories.js @@ -5,7 +5,7 @@ * @returns {string[]} An array of unique expense categories. */ -import Expenses from '../config/finance/json-data/2025/Expenses.json'; +import Expenses from '../config/finance/json-data/2023/Expenses.json'; export const getUniqueCategories = () => { const allCategories = []; diff --git a/scripts/finance/index.js b/scripts/finance/index.js index f27c061f1ae8..ed03c2e0b5c0 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -6,8 +6,8 @@ module.exports = async function buildFinanceInfoList() { try { const currentDir = resolve(__dirname, '../../'); - const expensesPath = resolve(currentDir, 'config', 'finance', '2025', 'Expenses.yml'); - const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2025', 'ExpensesLink.yml'); + const expensesPath = resolve(currentDir, 'config', 'finance', '2023', 'Expenses.yml'); + const expensesLinkPath = resolve(currentDir, 'config', 'finance', '2023', 'ExpensesLink.yml'); const ExpensesContent = await readFile(expensesPath, 'utf-8'); const ExpensesLinkContent = await readFile(expensesLinkPath, 'utf-8'); @@ -16,7 +16,7 @@ module.exports = async function buildFinanceInfoList() { const ExpensesLink = convertToJson(ExpensesLinkContent); // Ensure the directory exists before writing the files - const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2025'); + const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2023'); await mkdir(jsonDirectory, { recursive: true }); // Write Expenses to a JSON file From 4d9cdfd919005da09cd79ce87a6f284b32ac1cdf Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 24 Nov 2023 09:39:02 +0530 Subject: [PATCH 69/79] conflict resolve --- package-lock.json | 125 ++++++++++++++++------------------------------ package.json | 2 +- 2 files changed, 44 insertions(+), 83 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7960774c1902..88387197e018 100644 --- a/package-lock.json +++ b/package-lock.json @@ -59,7 +59,7 @@ "react-typing-animation": "^1.6.2", "react-youtube-embed": "^1.0.3", "reading-time": "^1.2.0", - "recharts": "^2.7.2", + "recharts": "^2.10.1", "remark-frontmatter": "^2.0.0", "remark-gemoji-to-emoji": "^1.1.0", "remark-heading-id": "^1.0.0", @@ -3863,11 +3863,6 @@ "node": ">=0.10.0" } }, - "node_modules/css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -10918,18 +10913,6 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "node_modules/react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "dependencies": { - "lodash": "^4.17.21" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-scrollspy": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/react-scrollspy/-/react-scrollspy-3.4.3.tgz", @@ -10941,9 +10924,9 @@ } }, "node_modules/react-smooth": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", - "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz", + "integrity": "sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==", "dependencies": { "fast-equals": "^5.0.0", "react-transition-group": "2.9.0" @@ -11110,22 +11093,21 @@ "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "node_modules/recharts": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.2.tgz", - "integrity": "sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.1.tgz", + "integrity": "sha512-9bi0jIzxOTfEda+oYqgimKuYfApmBr0zKnAX8r4Iw56k3Saz/IQyBD4zohZL0eyzfz0oGFRH7alpJBgH1eC57g==", "dependencies": { - "classnames": "^2.2.5", + "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.19", "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", + "react-smooth": "^2.0.5", "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", + "tiny-invariant": "^1.3.1", "victory-vendor": "^36.6.8" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { "prop-types": "^15.6.0", @@ -11141,6 +11123,14 @@ "decimal.js-light": "^2.4.1" } }, + "node_modules/recharts/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/recharts/node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -11167,20 +11157,6 @@ "node": ">=4" } }, - "node_modules/reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "dependencies": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - }, - "node_modules/reduce-css-calc/node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, "node_modules/refractor": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", @@ -12435,6 +12411,11 @@ "globrex": "^0.1.2" } }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -16280,11 +16261,6 @@ } } }, - "css-unit-converter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" - }, "css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", @@ -21826,14 +21802,6 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "react-resize-detector": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz", - "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==", - "requires": { - "lodash": "^4.17.21" - } - }, "react-scrollspy": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/react-scrollspy/-/react-scrollspy-3.4.3.tgz", @@ -21845,9 +21813,9 @@ } }, "react-smooth": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.3.tgz", - "integrity": "sha512-yl4y3XiMorss7ayF5QnBiSprig0+qFHui8uh7Hgg46QX5O+aRMRKlfGGNGLHno35JkQSvSYY8eCWkBfHfrSHfg==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-2.0.5.tgz", + "integrity": "sha512-BMP2Ad42tD60h0JW6BFaib+RJuV5dsXJK9Baxiv/HlNFjvRLqA9xrNKxVWnUIZPQfzUwGXIlU/dSYLU+54YGQA==", "requires": { "fast-equals": "^5.0.0", "react-transition-group": "2.9.0" @@ -21995,21 +21963,25 @@ "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, "recharts": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.7.2.tgz", - "integrity": "sha512-HMKRBkGoOXHW+7JcRa6+MukPSifNtJlqbc+JreGVNA407VLE/vOP+8n3YYjprDVVIF9E2ZgwWnL3D7K/LUFzBg==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.1.tgz", + "integrity": "sha512-9bi0jIzxOTfEda+oYqgimKuYfApmBr0zKnAX8r4Iw56k3Saz/IQyBD4zohZL0eyzfz0oGFRH7alpJBgH1eC57g==", "requires": { - "classnames": "^2.2.5", + "clsx": "^2.0.0", "eventemitter3": "^4.0.1", "lodash": "^4.17.19", "react-is": "^16.10.2", - "react-resize-detector": "^8.0.4", - "react-smooth": "^2.0.2", + "react-smooth": "^2.0.5", "recharts-scale": "^0.4.4", - "reduce-css-calc": "^2.1.8", + "tiny-invariant": "^1.3.1", "victory-vendor": "^36.6.8" }, "dependencies": { + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==" + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -22040,22 +22012,6 @@ "redis-errors": "^1.0.0" } }, - "reduce-css-calc": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", - "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - } - } - }, "refractor": { "version": "2.10.1", "resolved": "https://registry.npmjs.org/refractor/-/refractor-2.10.1.tgz", @@ -23080,6 +23036,11 @@ "globrex": "^0.1.2" } }, + "tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/package.json b/package.json index bf17c87a43c0..fd33dd98b891 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "react-typing-animation": "^1.6.2", "react-youtube-embed": "^1.0.3", "reading-time": "^1.2.0", - "recharts": "^2.7.2", + "recharts": "^2.10.1", "remark-frontmatter": "^2.0.0", "remark-gemoji-to-emoji": "^1.1.0", "remark-heading-id": "^1.0.0", From dbe683cd5b821f3f8bf959891170def21ad74110 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 24 Nov 2023 09:47:22 +0530 Subject: [PATCH 70/79] json files update --- scripts/finance/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index ed03c2e0b5c0..977078663bc7 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -19,11 +19,10 @@ module.exports = async function buildFinanceInfoList() { const jsonDirectory = resolve(currentDir, 'config', 'finance', 'json-data', '2023'); await mkdir(jsonDirectory, { recursive: true }); - // Write Expenses to a JSON file + // Write Expenses to a JSON files const expensesJsonPath = resolve(jsonDirectory, 'Expenses.json'); await writeFile(expensesJsonPath, JSON.stringify(Expenses, null, 2)); - // Write ExpensesLink to a JSON file const expensesLinkJsonPath = resolve(jsonDirectory, 'ExpensesLink.json'); await writeFile(expensesLinkJsonPath, JSON.stringify(ExpensesLink, null, 2)); From 08b20ce0d982533729fc4337f6345b154786f369 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 24 Nov 2023 09:48:58 +0530 Subject: [PATCH 71/79] conflict resolved --- package-lock.json | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index ca7b82453dbc..bd2db31d984b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5065,14 +5065,6 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dependencies": { - "esutils": "^2.0.2" - } - }, "node_modules/dom-helpers": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", @@ -16624,14 +16616,6 @@ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, "dom-helpers": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", From eef441d263d30bc688b9e86f0d09e86e9995acb9 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 24 Nov 2023 10:01:35 +0530 Subject: [PATCH 72/79] timeout issue fixed --- cypress/test/pages/community/dashboard.cy.js | 27 +++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/cypress/test/pages/community/dashboard.cy.js b/cypress/test/pages/community/dashboard.cy.js index da33c1cc0061..a01fcaf0e270 100644 --- a/cypress/test/pages/community/dashboard.cy.js +++ b/cypress/test/pages/community/dashboard.cy.js @@ -1,28 +1,31 @@ import MockApp from "../../../utils/MockApp"; import DashboardHome from "../../../../pages/community/dashboard"; import Header from "../../../../components/dashboard/Header"; -import { mount } from '@cypress/react' -describe('Integration Test for Dashboard ', () => { +import { mount } from '@cypress/react'; - it('should filter GoodFirstIssues and check dashboard render ', () => { +describe('Integration Test for Dashboard', () => { + it('should filter GoodFirstIssues and check dashboard render', () => { mount( ); + // Click on the first filter option - cy.get(Header).should('exist') - cy.contains('AsyncAPI - Dashboard') + cy.get(Header).should('exist'); + cy.contains('AsyncAPI - Dashboard'); cy.get('[data-testid="Filters-img-container"]').click({ force: true }); cy.get('[data-testid="Filter-menu"]').within(() => { cy.get('[data-testid="Select-form"]').eq(0).select('asyncapi/generator', { force: true }); - cy.get('[data-testid="Select-form"]').eq(1).select('docs') + cy.get('[data-testid="Select-form"]').eq(1).select('docs'); }); - //check if selected is only displayed + + // Check if selected options are displayed cy.contains('asyncapi/generator'); - cy.contains('docs') - //check if this is not selected options are not displayed - cy.should('not.contain', 'asyncapi/community'); - cy.should('not.contain', 'javascript'); + cy.contains('docs'); + + // Check if options that should not be selected are not displayed + cy.get('[data-testid="Filter-menu"]').should('not.contain', 'asyncapi/community'); + cy.get('[data-testid="Filter-menu"]').should('not.contain', 'javascript'); }); -}); \ No newline at end of file +}); From ad1a31a13ccd4402c2d952e5395fbfa53540c0fc Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Fri, 24 Nov 2023 10:06:38 +0530 Subject: [PATCH 73/79] timeout issue --- cypress/test/pages/community/dashboard.cy.js | 27 +++++++++----------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/cypress/test/pages/community/dashboard.cy.js b/cypress/test/pages/community/dashboard.cy.js index a01fcaf0e270..da33c1cc0061 100644 --- a/cypress/test/pages/community/dashboard.cy.js +++ b/cypress/test/pages/community/dashboard.cy.js @@ -1,31 +1,28 @@ import MockApp from "../../../utils/MockApp"; import DashboardHome from "../../../../pages/community/dashboard"; import Header from "../../../../components/dashboard/Header"; -import { mount } from '@cypress/react'; +import { mount } from '@cypress/react' +describe('Integration Test for Dashboard ', () => { -describe('Integration Test for Dashboard', () => { - it('should filter GoodFirstIssues and check dashboard render', () => { + it('should filter GoodFirstIssues and check dashboard render ', () => { mount( ); - // Click on the first filter option - cy.get(Header).should('exist'); - cy.contains('AsyncAPI - Dashboard'); + cy.get(Header).should('exist') + cy.contains('AsyncAPI - Dashboard') cy.get('[data-testid="Filters-img-container"]').click({ force: true }); cy.get('[data-testid="Filter-menu"]').within(() => { cy.get('[data-testid="Select-form"]').eq(0).select('asyncapi/generator', { force: true }); - cy.get('[data-testid="Select-form"]').eq(1).select('docs'); + cy.get('[data-testid="Select-form"]').eq(1).select('docs') }); - - // Check if selected options are displayed + //check if selected is only displayed cy.contains('asyncapi/generator'); - cy.contains('docs'); - - // Check if options that should not be selected are not displayed - cy.get('[data-testid="Filter-menu"]').should('not.contain', 'asyncapi/community'); - cy.get('[data-testid="Filter-menu"]').should('not.contain', 'javascript'); + cy.contains('docs') + //check if this is not selected options are not displayed + cy.should('not.contain', 'asyncapi/community'); + cy.should('not.contain', 'javascript'); }); -}); +}); \ No newline at end of file From 0321317b39a170db40f0fd3bf8a98c35d9496748 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Tue, 28 Nov 2023 20:09:25 +0530 Subject: [PATCH 74/79] merged with latest commit on master branch --- scripts/finance/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/finance/index.js b/scripts/finance/index.js index 977078663bc7..d720bfd989a3 100644 --- a/scripts/finance/index.js +++ b/scripts/finance/index.js @@ -30,4 +30,4 @@ module.exports = async function buildFinanceInfoList() { console.error(err); throw err; } -}; +}; \ No newline at end of file From 45db5c78fac6b0c366084ccc4225cc882be554ae Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 4 Dec 2023 09:27:54 +0530 Subject: [PATCH 75/79] testing --- components/FinancialSummary/BarChartComponent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/components/FinancialSummary/BarChartComponent.js b/components/FinancialSummary/BarChartComponent.js index 25455841a8c8..f1cb2c75fe01 100644 --- a/components/FinancialSummary/BarChartComponent.js +++ b/components/FinancialSummary/BarChartComponent.js @@ -177,7 +177,7 @@ const BarChartComponent = () => { {/* Select for month filter */} setSelectedMonth(e.target.value)} > From 31ea8ca0e962ea0286a8b72c586b4f60f4a29a35 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 6 Dec 2023 12:08:13 +0530 Subject: [PATCH 77/79] enhancements --- components/FinancialSummary/AsyncAPISummary.js | 6 ++---- components/FinancialSummary/ContactUs.js | 6 ++---- components/FinancialSummary/ExpenseBreakdown.js | 6 ++---- components/FinancialSummary/OtherFormsComponent.js | 6 ++---- components/FinancialSummary/SponsorshipTiers.js | 6 ++---- components/FinancialSummary/SuccessStories.js | 6 ++---- pages/finance.js | 4 +--- 7 files changed, 13 insertions(+), 27 deletions(-) diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index b5b63a652032..d6b9475df87a 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -2,7 +2,7 @@ import Button from '../buttons/Button' import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function AsyncAPISummary() { +export default function AsyncAPISummary() { return (

@@ -51,6 +51,4 @@ function AsyncAPISummary() {
); -} - -export default AsyncAPISummary \ No newline at end of file +} \ No newline at end of file diff --git a/components/FinancialSummary/ContactUs.js b/components/FinancialSummary/ContactUs.js index 3829d984cc7e..24fdf5a0e8e4 100644 --- a/components/FinancialSummary/ContactUs.js +++ b/components/FinancialSummary/ContactUs.js @@ -2,7 +2,7 @@ import Button from '../buttons/Button' import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function ContactUs() { +export default function ContactUs() { return (
@@ -25,6 +25,4 @@ function ContactUs() {
) -} - -export default ContactUs \ No newline at end of file +} \ No newline at end of file diff --git a/components/FinancialSummary/ExpenseBreakdown.js b/components/FinancialSummary/ExpenseBreakdown.js index e8125a5cba5a..2c4666657c56 100644 --- a/components/FinancialSummary/ExpenseBreakdown.js +++ b/components/FinancialSummary/ExpenseBreakdown.js @@ -1,7 +1,7 @@ import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function ExpenseBreakdown() { +export default function ExpenseBreakdown() { return (
@@ -83,6 +83,4 @@ function ExpenseBreakdown() {
) -} - -export default ExpenseBreakdown \ No newline at end of file +} \ No newline at end of file diff --git a/components/FinancialSummary/OtherFormsComponent.js b/components/FinancialSummary/OtherFormsComponent.js index 29f3439f197f..5bf318932480 100644 --- a/components/FinancialSummary/OtherFormsComponent.js +++ b/components/FinancialSummary/OtherFormsComponent.js @@ -2,7 +2,7 @@ import Container from '../layout/Container' import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function OtherFormsComponent() { +export default function OtherFormsComponent() { return (
@@ -48,6 +48,4 @@ function OtherFormsComponent() {
); -} - -export default OtherFormsComponent \ No newline at end of file +} \ No newline at end of file diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index d0b4f747ff0f..54bb2f12bf6b 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -1,7 +1,7 @@ import Heading from "../typography/Heading" import Paragraph from '../typography/Paragraph' -function SponsorshipTiers() { +export default function SponsorshipTiers() { return (
@@ -68,6 +68,4 @@ function SponsorshipTiers() {
); -} - -export default SponsorshipTiers \ No newline at end of file +} \ No newline at end of file diff --git a/components/FinancialSummary/SuccessStories.js b/components/FinancialSummary/SuccessStories.js index 84340f200fec..ebac564b2bd3 100644 --- a/components/FinancialSummary/SuccessStories.js +++ b/components/FinancialSummary/SuccessStories.js @@ -1,7 +1,7 @@ import Heading from '../typography/Heading' import Paragraph from '../typography/Paragraph' -function SuccessStories() { +export default function SuccessStories() { return (
@@ -46,6 +46,4 @@ function SuccessStories() {
) -} - -export default SuccessStories \ No newline at end of file +} \ No newline at end of file diff --git a/pages/finance.js b/pages/finance.js index 737b2988fc55..c01c16fd8f68 100644 --- a/pages/finance.js +++ b/pages/finance.js @@ -11,7 +11,7 @@ import BarChartComponent from "../components/FinancialSummary/BarChartComponent" import SuccessStories from "../components/FinancialSummary/SuccessStories"; import ContactUs from "../components/FinancialSummary/ContactUs"; -function FinancialSummary() { +export default function FinancialSummary() { const [windowWidth, setWindowWidth] = useState(0); const handleResizeRef = useRef(null); @@ -55,5 +55,3 @@ function FinancialSummary() { return
{shouldUseContainer ? {renderComponents()} : renderComponents()}
; } - -export default FinancialSummary; From e03cc9941baf9c319a91c1fe6129a4ae4de40158 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Mon, 11 Dec 2023 20:39:04 +0530 Subject: [PATCH 78/79] text center --- components/FinancialSummary/AsyncAPISummary.js | 2 +- config/adopters.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 config/adopters.json diff --git a/components/FinancialSummary/AsyncAPISummary.js b/components/FinancialSummary/AsyncAPISummary.js index d6b9475df87a..9076096903b8 100644 --- a/components/FinancialSummary/AsyncAPISummary.js +++ b/components/FinancialSummary/AsyncAPISummary.js @@ -7,7 +7,7 @@ export default function AsyncAPISummary() {
- + AsyncAPI Financial Summary diff --git a/config/adopters.json b/config/adopters.json new file mode 100644 index 000000000000..e92e3ed5865b --- /dev/null +++ b/config/adopters.json @@ -0,0 +1 @@ +[{"companyName":"Reiffeisen Bank","useCase":"Continuous Integration and Continuous Delivery (CI/CD) pipeline based on GitOps to deploy a topology built on Async API definitions using a Kubernetes operator to an Apache Pulsar cluster.","resources":[{"title":"Video - From an AsyncAPI Definition to a Deployed Pulsar Topology Via GitOps","link":"https://www.youtube.com/watch?v=_MwzLZMwFN8"}]},{"companyName":"LEGO Group","useCase":"Broker management, where developers do not access the management console themselves, but rely on uploading AsyncAPI documents to a self service API that provisions access and topics specified in documents.","resources":[{"title":"Video - Documentation as Configuration for Management of Apache Pulsar","link":"https://www.youtube.com/watch?v=m8I0fYjx6Cc"}]},{"companyName":"LEGO Group","useCase":"Define, document and distribute event-driven APIs. Ensuring consistency and governance","resources":[{"title":"Video - Cross-Domain Events with AsyncAPI and AWS","link":"https://www.youtube.com/watch?v=qjarcJQVLOg"}]},{"companyName":"Bank of New Zealand","useCase":"Decentralized company-wide governance strategy for API. A self service for publishing APIs and docs.","resources":[{"title":"Video - Self-service Events & Decentralised Governance with AsyncAPI: A Real World Example","link":"https://www.confluent.io/events/kafka-summit-apac-2021/self-service-events-and-decentralised-governance-with-asyncapi-a-real-world/"}]},{"companyName":"Zora Robotics","useCase":"Documenting lot products public MQTT API and building a developers portal.","resources":[{"title":"Video - Buliding and managing an extensive API for Robotics and loT","link":"https://www.youtube.com/watch?v=yjHgT0n2BtA"},{"title":"Docs - Buliding and managing an extensive API for Robotics and loT","link":"https://docs.zorabots.be/dev-mqtt-docs/latest/index.html"}]},{"companyName":"Walmart","useCase":"Managing a central API Hub for internal teams. Using AsyncAPI for events discoverability an visibility in a single place. AsyncAPI also enabled company-wide governance on asynchronous APIs.","resources":[{"title":"Video - Time For AsyncAPI Specification","link":"https://www.youtube.com/watch?v=SxTpGRaNIPo"}]},{"companyName":"eBay","useCase":"Enabling partners to build with eBay through asynchronous communication. Public AsyncAPI documents enable code generation and faster integration. It also enables governance and standardisation.","resources":[{"title":"Video - AsyncAPI 2.0: Enabling the Event-Driven World","link":"https://www.youtube.com/watch?v=SxTpGRaNIPo"},{"title":"Article - AsyncAPI 2.0: Enabling the Event-Driven World","link":"https://innovation.ebayinc.com/tech/engineering/asyncapi-2-0-enabling-the-event-driven-world/"},{"title":"Docs - Overview of Notification API with public AsyncAPI documents","link":"https://developer.ebay.com/api-docs/commerce/notification/overview.html"}]}] \ No newline at end of file From cbef23039b45f062f3acf67d2a36dce67457dba3 Mon Sep 17 00:00:00 2001 From: Vishvamsinh Vaghela Date: Wed, 20 Dec 2023 12:01:46 +0530 Subject: [PATCH 79/79] design updates --- components/FinancialSummary/SponsorshipTiers.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/FinancialSummary/SponsorshipTiers.js b/components/FinancialSummary/SponsorshipTiers.js index 54bb2f12bf6b..e5ab417f9e51 100644 --- a/components/FinancialSummary/SponsorshipTiers.js +++ b/components/FinancialSummary/SponsorshipTiers.js @@ -6,8 +6,8 @@ export default function SponsorshipTiers() {
- -

Sponsorship Tiers

+ +

Sponsorship Tiers