Skip to content

Commit cacca40

Browse files
authored
Merge pull request #67 from Phosphorus-M/main
Sección de Contribuidores y Sponsors
2 parents c97daa1 + 7c61e28 commit cacca40

File tree

12 files changed

+247
-2
lines changed

12 files changed

+247
-2
lines changed

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,12 @@ cargo install cargo-make
4343
cargo make serve
4444
```
4545

46+
For do a commit:
47+
```
48+
cargo install rusty-hook
49+
cargo install leptosfmt --version 0.1.13
50+
```
51+
4652
## Configura tu VSCode
4753
Agrega esto en tu `settings.json`
4854

assets/sponsors/crabnebula.png

3.38 KB
Loading

assets/sponsors/heavydutybuilders.png

64.4 KB
Loading

assets/sponsors/shuttle.webp

128 KB
Binary file not shown.

assets/sponsors/tauri.png

27.9 KB
Loading

assets/sponsors/universidad_nur.png

68.9 KB
Loading

src/components/icons/cloudflare.rs

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use leptos::{component, view, IntoView};
2+
3+
#[component]
4+
pub fn CloudflareIcon() -> impl IntoView {
5+
view! {
6+
<svg
7+
xmlns="http://www.w3.org/2000/svg"
8+
width="100"
9+
height="100"
10+
fill="none"
11+
viewBox="0 0 60 27"
12+
class="rounded-full max-w-full max-h-full mx-auto"
13+
>
14+
<g clip-path="url(#a)">
15+
<path
16+
fill="#FBAD41"
17+
d="M47.927 11.725c-.2 0-.397.007-.594.014a.271.271 0 0 0-.094.022.33.33 0 0 0-.214.229l-.846 2.924c-.365 1.257-.23 2.418.383 3.27.563.789 1.498 1.251 2.634 1.305l4.589.276a.41.41 0 0 1 .326.179.44.44 0 0 1 .046.39.58.58 0 0 1-.498.384l-4.768.276c-2.59.118-5.377 2.21-6.355 4.761l-.344.9a.253.253 0 0 0 .225.343H58.84a.435.435 0 0 0 .422-.315 11.69 11.69 0 0 0 .437-3.185c0-6.5-5.266-11.766-11.764-11.766"
18+
></path>
19+
<path
20+
fill="#F6821F"
21+
d="m40.76 26.62.304-1.057c.365-1.258.229-2.418-.384-3.271-.562-.788-1.497-1.25-2.633-1.304l-21.527-.276a.426.426 0 0 1-.34-.18.44.44 0 0 1-.047-.39.581.581 0 0 1 .502-.383l21.727-.276c2.58-.118 5.367-2.21 6.345-4.761l1.24-3.24a.814.814 0 0 0 .035-.43C44.572 4.733 38.925 0 32.172 0c-6.223 0-11.503 4.016-13.399 9.598a6.344 6.344 0 0 0-4.467-1.236 6.367 6.367 0 0 0-5.517 7.91C3.913 16.417 0 20.412 0 25.32c0 .445.032.882.097 1.308a.418.418 0 0 0 .415.362H40.268a.517.517 0 0 0 .491-.376"
22+
></path>
23+
</g>
24+
<defs>
25+
<clipPath id="a">
26+
<path fill="#FFF" d="M0 0h60v27H0z"></path>
27+
</clipPath>
28+
</defs>
29+
</svg>
30+
}
31+
}

src/components/icons/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
mod cloudflare;
12
mod discord_icon;
23
mod github_icon;
34
mod linkedin_icon;
@@ -8,6 +9,7 @@ mod telegram_icon;
89
mod twitter_icon;
910
mod web_icon;
1011

12+
pub use cloudflare::*;
1113
pub use discord_icon::*;
1214
pub use github_icon::*;
1315
pub use linkedin_icon::*;

src/components/mod.rs

+6-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@ mod hero;
99
mod icons;
1010
mod other_communities;
1111
mod our_communities;
12+
pub mod separator;
1213
mod slogan_button;
14+
mod sponsors;
1315

1416
pub use aprende::{Books, HeaderAprende, Roadmap, Youtube};
1517
pub use button_link::ButtonLink;
@@ -20,8 +22,11 @@ pub use head_information::HeadInformation;
2022
pub use header::Header;
2123
pub use hero::Hero;
2224
pub use icons::{
23-
DiscordIcon, GithubIcon, LinkedinIcon, LocationIcon, NextIcon, TelegramIcon, TwitterIcon,
25+
CloudflareIcon, DiscordIcon, GithubIcon, LinkedinIcon, LocationIcon, NextIcon, TelegramIcon,
26+
TwitterIcon,
2427
};
2528
pub use other_communities::OtherCommunities;
2629
pub use our_communities::OurCommunities;
30+
pub use separator::Separator;
2731
pub use slogan_button::SloganButton;
32+
pub use sponsors::Sponsors;

src/components/separator.rs

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
use leptos::{component, view, IntoView};
2+
3+
// .shapedividers_com-4750{
4+
// overflow:hidden;
5+
// position:relative;
6+
// }
7+
// .shapedividers_com-4750::before{
8+
// content:'';
9+
// font-family:'shape divider from ShapeDividers.com';
10+
// position: absolute;
11+
// z-index: 3;
12+
// pointer-events: none;
13+
// background-repeat: no-repeat;
14+
// bottom: -0.1vw;
15+
// left: -0.1vw;
16+
// right: -0.1vw;
17+
// top: -0.1vw;
18+
// background-size: 100% 90px;
19+
// background-position: 50% 100%;
20+
// transform: rotateY(180deg); background-image: url('data:image/svg+xml;charset=utf8, <svg preserveAspectRatio="xMidYMin slice" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2000 73"><g fill="%23fbd8c2">');
21+
// }
22+
23+
// @media (min-width:2100px){
24+
// .shapedividers_com-4750::before{
25+
// background-size: 100% calc(2vw + 90px);
26+
// }
27+
// }
28+
29+
#[component]
30+
pub fn Separator() -> impl IntoView {
31+
view! {
32+
<svg
33+
height="90px"
34+
preserveAspectRatio="xMidYMax slice"
35+
xmlns="http://www.w3.org/2000/svg"
36+
viewBox="0 0 2000 73"
37+
>
38+
<g class="fill-orange-400/30 dark:fill-gray-800/50">
39+
<path d="M0 73V60c6-1 12-2 16-7a48 48 0 005-6 46 46 0 012-4c3-3 7-6 11-6 4 1 7 4 11 3s7-4 9-7 4-7 8-8 7 1 11 4l3 1a23 23 0 0013 2 29 29 0 0014-6l3-2c5-4 9-10 12-15l12 15h1c4 4 10 8 17 9a23 23 0 0012-2l1-1c4-2 9-6 14-5 4 1 6 5 8 8s5 7 9 7 7-2 11-3c4 0 8 3 10 6l1 1 6 9c5 5 11 7 18 7a26 26 0 016 0 27 27 0 015 0c7 0 13-2 18-7l6-8 1-2c3-3 6-6 11-6 3 1 7 4 11 3s6-4 8-7 5-7 8-8a10 10 0 017 1l7 4a23 23 0 0014 2 29 29 0 0013-5 38 38 0 004-3l12-15c4 5 7 11 12 15s11 8 17 8a23 23 0 0013-2c5-2 10-6 15-5 3 1 6 5 8 8s4 7 8 7 8-2 11-3c5 0 8 3 11 6l1 2 6 8c5 5 11 7 18 7a26 26 0 015 0 27 27 0 016 0c7 0 13-2 18-7a52 52 0 004-7l3-3c2-3 6-6 10-6 4 1 7 4 11 3s7-4 9-7 4-7 8-8c5-1 9 2 13 4l1 1a23 23 0 0014 2 30 30 0 0014-6l2-2c5-4 9-10 13-15 3 5 7 11 12 15l1 1c4 4 10 7 16 8a23 23 0 0013-3h1c4-3 9-6 13-5s6 5 8 8 5 7 9 7 7-2 11-3c4 0 8 3 11 6l1 1 6 9c5 5 11 7 18 7a26 26 0 015 0 27 27 0 016 0c6 0 13-2 17-7 3-2 4-5 6-8l1-2c3-3 7-6 11-6 4 1 7 4 11 3s7-4 9-7 4-7 8-8c3-1 5 0 8 2l6 3a23 23 0 0013 3 29 29 0 0014-6 41 41 0 003-3c5-4 9-10 12-15 4 5 8 11 13 15 5 5 10 8 17 9a23 23 0 0010-1 22 22 0 003-2c5-2 9-6 14-5 4 1 6 5 8 8s5 7 9 7 7-2 11-3c4 0 8 3 10 6l2 2a70 70 0 006 8c4 5 11 7 17 7a26 26 0 016 0 27 27 0 015 0c7 0 13-2 18-7a62 62 0 005-7l2-3c3-3 7-6 11-6 4 1 7 4 11 3s6-4 8-7 5-7 8-8c5-1 10 3 15 5l1 1a23 23 0 0012 1 30 30 0 0017-8c5-4 8-10 12-15l12 15 3 2a30 30 0 0014 6 23 23 0 0014-2l4-2c3-2 6-4 10-3s6 5 8 8 5 7 9 7 7-2 11-3c4 0 8 3 10 6l1 2 6 8c5 5 11 7 18 7a26 26 0 016 0 27 27 0 015 0c7 0 13-2 18-7l6-9 1-1c3-3 6-6 11-6 3 1 7 4 11 3s6-4 8-7 5-7 8-8 8 1 12 3l2 2a23 23 0 0014 2 30 30 0 0015-7l2-1 12-15c4 5 7 11 12 15l2 1c4 4 9 7 15 7a23 23 0 0013-2c5-2 10-6 15-5 3 1 6 5 8 8s4 7 8 7 7-2 11-3c4 0 8 3 11 6l2 3a58 58 0 005 7c5 5 11 7 18 7a26 26 0 015 0 27 27 0 016 0c6 0 13-2 17-7a56 56 0 005-7l3-3c2-3 6-6 10-6 4 1 7 4 11 3s7-4 9-7 4-7 8-8c5-1 9 3 14 5a23 23 0 0013 3 30 30 0 0016-8l1-1c5-4 9-10 13-15 3 5 7 11 12 15l1 1c5 4 10 7 16 8a23 23 0 0013-3l2-1c4-2 8-5 12-4s6 5 8 8 5 7 9 7 7-2 11-3c4 0 8 3 11 6l1 2 6 8c4 5 11 7 17 7a26 26 0 016 0 27 27 0 015 0c7 0 13-2 18-7l6-8 1-2c3-3 7-6 11-6 4 1 7 4 11 3s7-4 9-7 4-7 8-8c3-1 6 1 9 3l5 2a23 23 0 0013 3 29 29 0 0015-7l2-2c5-4 9-10 12-15 4 5 8 11 13 15v1c5 4 11 7 16 8a23 23 0 0012-2l2-1c4-2 9-6 14-5 4 1 6 5 8 8s5 7 9 7 7-2 11-3c4 0 8 3 10 6l2 2a65 65 0 005 8c5 5 11 7 18 7l7 1v12z"></path>
40+
<path d="M714 9l-8 6 3 10h10l3-10-8-6zM746 20l-14 10 5 16h17l5-16-13-10zM462 9l-9 6 4 10h10l3-10-8-6zM589 3l-11 8 4 12h13l5-12-11-8zM494 20l-14 10 5 16h17l5-16-13-10zM212 6l-8 6 3 9h10l3-9-8-6zM333 4l-8 6 3 10h10l4-10-9-6zM244 17l-14 9 5 16h17l5-16-13-9zM147 3l-8 6 3 10h10l3-10-8-6zM88 0L76 9l5 14h15l4-14-12-9zM938 1l8 6-3 10h-10l-3-10 8-6zM995 31l10 7-4 12h-12l-4-12 10-7zM1045 12l7 5-2 9h-9l-3-9 7-5zM903 3l11 8-4 13h-14l-4-13 11-8zM1275 11l8 6-3 10h-10l-3-10 8-6zM1150 4l8 6-3 10h-10l-3-10 8-6zM1247 27l11 8-4 13h-14l-4-13 11-8zM1526 8l8 6-3 10h-10l-3-10 8-6zM1402 3l8 6-3 9h-10l-3-9 8-6zM1498 24l12 8-5 14h-14l-4-14 11-8zM1719 8l-8 6 3 9h10l4-9-9-6zM1747 23l-11 8 4 14h14l5-14-12-8zM1903 3l-6 5 2 7h8l3-7-7-5zM1951 12l-9 6 4 11h11l4-11-10-6z"></path>
41+
</g>
42+
</svg>
43+
}
44+
// .shapedividers_com-8044{
45+
// overflow:hidden;
46+
// position:relative;
47+
// }
48+
// .shapedividers_com-8044::before{
49+
// content:'';
50+
// font-family:'shape divider from ShapeDividers.com';
51+
// position: absolute;
52+
// z-index: 3;
53+
// pointer-events: none;
54+
// background-repeat: no-repeat;
55+
// bottom: -0.1vw;
56+
// left: -0.1vw;
57+
// right: -0.1vw;
58+
// top: -0.1vw;
59+
// background-size: 100% 90px;
60+
// background-position: 50% 0%; background-image: url('data:image/svg+xml;charset=utf8, ');
61+
// }
62+
63+
// @media (min-width:2100px){
64+
// .shapedividers_com-8044::before{
65+
// background-size: 100% calc(2vw + 90px);
66+
// }
67+
// }
68+
69+
// }
70+
}

src/components/sponsors.rs

+130
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
use std::collections::HashMap;
2+
3+
use leptos::{component, view, Children, IntoView, View};
4+
5+
use crate::components::{CloudflareIcon, Separator};
6+
7+
#[component]
8+
pub fn Sponsors() -> impl IntoView {
9+
let assets_folder = if cfg!(debug_assertions) {
10+
"./assets"
11+
} else {
12+
"."
13+
};
14+
15+
view! {
16+
<div class="bg-orange-50 dark:bg-transparent">
17+
<div class="max-w-full overflow-clip">
18+
<Separator/>
19+
</div>
20+
<section class="bg-orange-400/30 dark:bg-gray-800/50">
21+
<div class="container mx-auto py-20 px-8">
22+
<h2 class="text-3xl text-left mb-2">"Respaldados por"</h2>
23+
<h3 class="text-lg text-left mb-6">
24+
"Estas son algunas organizaciones que apoyan nuestro trabajo."
25+
</h3>
26+
<div class="w-full grid sm:grid-cols-2 md:grid-cols-3 gap-x-8 gap-y-8">
27+
<SponsorCard
28+
name="Cloudflare"
29+
link="https://www.cloudflare.com/es-es/"
30+
component=CloudflareIcon().into_view()
31+
description="Cloudflare confiando en nuestra Vision, Metas y Objetivos, se suma como nuestro primer Sponsor, auspiciando nuestra infraestructura y servicios"
32+
/>
33+
<SponsorCard
34+
name="Universidad Nur"
35+
link="https://www.nur.edu"
36+
image=format!("{assets_folder}/sponsors/universidad_nur.png")
37+
description="Esta universidad ha presentado un especial interés por Rust y la comunidad, nos han dado lugar a la divulgación con charlas y talleres."
38+
/>
39+
<SponsorCard
40+
name="Heavy Duty Builders"
41+
link="https://heavyduty.builders"
42+
image=format!("{assets_folder}/sponsors/heavydutybuilders.png")
43+
description="Queremos unir fuerzas con más constructores como nosotros en el ecosistema Blockchain, llámalo DAO si quieres, pero queremos decir mucho más."
44+
/>
45+
</div>
46+
<div class="w-full flex flex-col md:flex-row items-center justify-center gap-x-8 gap-y-8">
47+
<SponsorCard
48+
name="CrabNebula"
49+
link="https://crabnebula.dev"
50+
image=format!("{assets_folder}/sponsors/crabnebula.png")
51+
description="Agilice el ciclo de vida de desarrollo de sus aplicaciones, facilitando más que nunca su empaquetado y envío."
52+
/>
53+
<SponsorCard
54+
name="Tauri"
55+
link="https://tauri.app"
56+
image=format!("{assets_folder}/sponsors/tauri.png")
57+
description="Cree una aplicación optimizada, segura e independiente del frontend para su implantación multiplataforma."
58+
/>
59+
</div>
60+
</div>
61+
</section>
62+
</div>
63+
}
64+
}
65+
66+
#[component]
67+
pub fn SponsorCard(
68+
#[prop(into)] name: &'static str,
69+
#[prop(into)] link: &'static str,
70+
#[prop(into)] description: &'static str,
71+
#[prop(into, optional, default=None)] image: Option<String>,
72+
#[prop(into, default=None)] component: Option<View>,
73+
#[prop(into, default = "black")] image_bg_color: &'static str,
74+
) -> impl IntoView {
75+
let colors = HashMap::from([
76+
("white", "bg-white dark:bg-white text-black dark:text-black"),
77+
("black", "bg-black text-white dark:text-black"),
78+
]);
79+
let current_color = (*colors.get(&image_bg_color).unwrap()).to_string();
80+
81+
view! {
82+
<div class="group flex flex-col gap-y-6 p-6 justify-between items-center max-w-screen-sm w-full">
83+
<div class="mx-auto text-center">
84+
{image
85+
.map(|image| {
86+
view! {
87+
<div class=format!(
88+
"mx-auto rounded-full h-[120px] w-[120px] {} mb-4",
89+
current_color,
90+
)>
91+
<Anchor link=link>
92+
<img
93+
alt=name
94+
width="120"
95+
height="120"
96+
class="mb-4 rounded-full max-w-full max-h-full"
97+
loading="lazy"
98+
src=image
99+
/>
100+
</Anchor>
101+
</div>
102+
}
103+
})}
104+
{component
105+
.map(|component| {
106+
view! {
107+
<div class=format!(
108+
"mx-auto text-center rounded-full h-[120px] w-[120px] {} mb-4",
109+
current_color,
110+
)>
111+
<Anchor link=link>{component}</Anchor>
112+
</div>
113+
}
114+
})}
115+
<h3 class="text-xl font-bold font-work-sans text-black dark:text-white mb-2">
116+
<Anchor link=link>{name}</Anchor>
117+
</h3> <p class="text-balance">{description}</p>
118+
</div>
119+
</div>
120+
}
121+
}
122+
123+
#[component]
124+
pub fn Anchor(#[prop(into)] link: &'static str, children: Children) -> impl IntoView {
125+
view! {
126+
<a href=link target="_blank">
127+
{children()}
128+
</a>
129+
}
130+
}

src/pages/index.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use leptos::{component, view, IntoView};
22

3-
use crate::components::{CommunityProjects, Hero, OtherCommunities, OurCommunities};
3+
use crate::components::{CommunityProjects, Hero, OtherCommunities, OurCommunities, Sponsors};
44

55
#[component]
66
pub fn Index() -> impl IntoView {
@@ -10,6 +10,7 @@ pub fn Index() -> impl IntoView {
1010
<OurCommunities/>
1111
<CommunityProjects show_more=true/>
1212
<OtherCommunities show_more=true/>
13+
<Sponsors/>
1314
</div>
1415
}
1516
}

0 commit comments

Comments
 (0)