Big bang/webgune berria (#18)

* chore: netlify deployments plugina kentzen du

* chore: Strapi berria instalatzen du

* feat: astro instalatzen du

* chore: cypress instalatzen du

* feat: back eta front konektatzen ditu

* feat: server side rendering egiten du

* chore: Strapin enterprise edition flagak kentzen ditu

* feat: euskara sartzen du

* chore: Strapi bertsioa igotzen du

* feat: preview modua sortzen du ingurune bariableen bidez

* aurreko commitarekin doa

* fix: cypress konpontzen du

* chore: Strapi bertsioa igotzen du

* feat: ekintza back-ean sortzen du

* feat: zikloa eta erakundea sortzen ditu

* feat: erakundeen kudeaketa hobetzen du

* chore: pnpm erabiltzen du

* feat: Strapi bertsioa igotzen du

* ekintza sortzen du eta zerbitzuak eguneratzen ditu

* chore: graphql erabiltzen du populazioa ekiditeko

* chore: collection erabiltzen du ekintzetarako

* chore: bertsioak igotzen ditu

* chore: Astro bertsioa igotzen du

* chore: Strapi bertsioa igotzen du

* feat: home-a hasten du

* feat: zig zag separadorea sortzen du

* feat: zig zaga doitzen du

* feat: heroa doitzen du

* feat: agenda sortzen du

* feat: agenda eta izan labazkide atalak konektatzen ditu

* feat: home-aren edukia sortzen du

* chore: app.js sartzen du WTF

* feat: header-a sortzen du

* feat: card-a hobetzen du

* feat: footer-a sortzen du

* feat: ekintzen zerrenda erakusten du

* feat: zikloaren bista sortzen du

* fix: header-aren estekak konpontzen ditu

* chore: remove unused code

* chore: components directorioa kentzen du

* chore: typescript konfigurazioa hobetzen du

* chore: views path-a sortzen du

* feat: zikloaren deskribapena erakusten du

* feat: ekintzaren bista sortzen du

* feat: zig zag marra erakusten du

* ignore: comment

* feat: hitzordua erakusten du

* feat: zikloa erakusten du

* feat: Waveko erroreak errepasatzen ditu

* feat: Wave birpasatzen du

* feat: zerrendan irudia erakusten du

* feat: karga optimizatzen du

* feat: irudien formatuak kontuan hartzen ditu

* feat: zikloan ekintza irudiak erakusten ditu

* feat: ekintza zerrenda atontzen du

* feat: header-eko estekak markatzen ditu

* feat: irudi estela erakusten du

* feat: responsive-a hobetzen du

* feat: orri basikoa sortzen du

* feat: hasiera responsive egiten du

* feat: overflow konpontzen du

* feat: bug-a uzten du LOL

* feat: irudi estela mugikorrean aktibatzen du

* feat: orri basikoa eta ekintza mugikorrean jartzen ditu

* feat: mugikor menua sortzen du

* feat: mugikor menua amaitzen du

* feat: build estatikoa sortzen du

* feat: sitemap-a sortzen du

* feat: rss feed-a sortzen du

* chore: ingurune aldagaiak sortzen ditu

* chore: public-proxy komandoa sortzen du

* feat: irudiak webp formatuan jartzen ditu

* fix: irudiak erakusten ditu ekintzen zerrendan

* feat: ekintza zerrendaren irudia animatzen du

* refactor: extract functions

* fix: animazioa konpontzen du

* feat: irudi estela hobetzen du

* chore: prerender aldagaiak kentzen ditu

* chore: SASS warning-ak kentzen ditu

* feat: ziklo eta ekintzetan H1 ezartzen du

* feat: slideshow-a sortzen du

* feat: ekintzak hitzorduan oinarrituta filtratzen ditu

* feat: hitzorduen arabera filtratzen du eta moment kentzen du

* feat: titulua aldatzen du

* feat: menua eguneratzen du

* feat: parte hartun deskribapena sortzen du

* feat: Cloudinary konfiguratzen du

* fix: cloudinary konfigurazioa konpontzen du

* feat: erositako fonteak jartzen ditu
This commit is contained in:
Aitor Urrutia
2025-08-29 19:43:56 +02:00
committed by GitHub
parent 67110a4821
commit 93fb0c9b40
325 changed files with 23452 additions and 26547 deletions

View File

@@ -1,4 +0,0 @@
declare module '*.svg' {
const content: any;
export default content;
}

View File

@@ -1,12 +0,0 @@
<svg viewBox="0 0 28 24" fill="none"
xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_42_985)">
<path d="M26.7981 16.0918C26.2944 17.3092 25.2717 17.9766 23.8349 18.0353C24.5535 15.8314 24.588 13.4616 23.9338 11.2377C23.8912 11.1376 23.8121 11.0574 23.7126 11.0133C23.6131 10.9692 23.5005 10.9645 23.3977 11.0003C23.2949 11.036 23.2095 11.1094 23.1587 11.2057C23.108 11.3019 23.0956 11.4139 23.1243 11.5189C23.456 12.6461 23.5939 13.8215 23.5321 14.995C23.4926 16.0142 23.2988 17.0216 22.9574 17.9828C22.1881 17.8654 21.1684 17.5224 20.5659 16.7469C20.0839 16.1289 19.9479 15.3287 20.1766 14.3523C20.844 11.4417 21.0077 10.2706 19.6266 7.52685C20.6937 7.43984 21.7669 7.58847 22.7702 7.96224C23.7734 8.336 24.6823 8.92575 25.4324 9.68973C26.9618 11.179 27.5983 14.17 26.7981 16.0918Z" fill="white"/>
<path d="M26.0287 9.07791C22.7411 5.88612 19.0271 6.74818 18.8727 6.79762C18.8161 6.81015 18.7633 6.83552 18.7182 6.87177C18.7182 6.72655 18.7336 6.57824 18.7336 6.42684C18.7336 2.25866 15.9188 0 10.7093 0H0V23.5846H12.9773C13.345 23.5846 21.876 23.4209 23.5259 18.8912C25.1975 18.9221 26.5014 18.2732 27.2677 17.0744C27.3976 16.8667 27.5103 16.6486 27.6045 16.4224C28.5253 14.173 27.8084 10.8144 26.0287 9.07791ZM6.15802 5.20636H10.0234C11.7413 5.20636 12.6683 5.89539 12.6683 7.20547C12.6683 8.51556 11.7413 9.2015 10.0234 9.2015H6.15802V5.20636ZM10.6444 18.2763H6.15802V14.0185H10.6444C12.2821 14.0185 13.1997 14.8682 13.1997 16.1474C13.1997 17.4266 12.2821 18.2763 10.6444 18.2763ZM18.6347 7.48356C20.1364 10.3077 20.019 11.2192 19.3423 14.1699C19.2719 14.4669 19.2316 14.7702 19.2218 15.0753C19.2218 15.1772 19.2218 15.2792 19.2218 15.3842C19.1971 15.2823 19.1693 15.1803 19.1384 15.0753C18.8823 14.2266 18.4354 13.4479 17.8318 12.7988C17.2282 12.1497 16.4839 11.6474 15.6561 11.3304C16.4186 10.9665 17.0853 10.4289 17.6025 9.7609C18.1198 9.09285 18.4733 8.31289 18.6347 7.48356ZM16.6171 22.2467C18.4061 21.1344 19.3639 19.3269 19.3979 16.9755C19.3979 16.9446 19.3979 16.9137 19.3979 16.8797C19.3986 16.6733 19.3883 16.467 19.367 16.2618C19.4387 16.513 19.5425 16.754 19.676 16.9786C19.7428 17.086 19.816 17.1891 19.8954 17.2876C20.5786 18.0835 21.5206 18.613 22.5557 18.783C21.6659 20.8069 18.9375 21.774 16.6171 22.2467ZM26.8135 16.1042C26.3099 17.3216 25.2871 17.989 23.8504 18.0477C24.5689 15.8438 24.6034 13.4739 23.9492 11.2501C23.9066 11.1499 23.8275 11.0697 23.728 11.0256C23.6285 10.9815 23.516 10.9769 23.4132 11.0126C23.3103 11.0483 23.2249 11.1217 23.1742 11.218C23.1234 11.3143 23.1111 11.4262 23.1397 11.5312C23.4714 12.6585 23.6094 13.8339 23.5476 15.0073C23.508 16.0266 23.3143 17.0339 22.9728 17.9951C22.2035 17.8777 21.1838 17.5348 20.5813 16.7592C20.0993 16.1412 19.9634 15.341 20.192 14.3646C20.8594 11.454 21.0232 10.2829 19.642 7.53917C20.7091 7.45216 21.7823 7.6008 22.7856 7.97456C23.7889 8.34833 24.6977 8.93807 25.4478 9.70205C26.9618 11.179 27.5983 14.1699 26.7981 16.0918L26.8135 16.1042Z" fill="#191919"/>
</g>
<defs>
<clipPath id="clip0_42_985">
<rect width="28" height="23.5846" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path fill="currentColor"
d="m12 13.4l-4.9 4.9q-.275.275-.7.275t-.7-.275t-.275-.7t.275-.7l4.9-4.9l-4.9-4.9q-.275-.275-.275-.7t.275-.7t.7-.275t.7.275l4.9 4.9l4.9-4.9q.275-.275.7-.275t.7.275t.275.7t-.275.7L13.4 12l4.9 4.9q.275.275.275.7t-.275.7t-.7.275t-.7-.275z" />
</svg>

After

Width:  |  Height:  |  Size: 344 B

View File

@@ -1,12 +0,0 @@
<svg viewBox="0 0 29 25" fill="none"
xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_42_921)">
<path d="M26.4665 14.2057C25.6058 18.3118 21.3025 22.5214 17.2613 23.2162C14.7057 23.6537 12.5204 22.656 10.9121 20.3313C12.8826 19.8357 14.775 19.0696 16.5352 18.0546C20.2111 15.939 22.2281 13.4484 22.305 13.345C22.4446 13.1706 22.5093 12.9479 22.4847 12.7259C22.4601 12.5038 22.3484 12.3006 22.174 12.161C21.9996 12.0214 21.7769 11.9567 21.5548 11.9813C21.3328 12.0059 21.1296 12.1177 20.99 12.292C19.4596 14.0253 17.648 15.4883 15.6313 16.6194C13.8945 17.6255 12.0158 18.3639 10.0586 18.8095C9.4456 17.4079 8.94074 15.35 9.57782 13.5373C10.0947 12.0949 11.2967 11.0251 13.1551 10.3688C18.7109 8.41426 20.8313 7.46465 23.9446 2.27905C25.2428 3.96431 27.7406 8.13298 26.4665 14.2057Z" fill="white"/>
<path d="M23.3918 0.240496C23.2996 0.152277 23.1886 0.0861154 23.0671 0.0469906C22.9457 0.00786583 22.8169 -0.0032034 22.6906 0.0146158C22.5642 0.032435 22.4435 0.0786785 22.3376 0.149867C22.2317 0.221055 22.1434 0.315334 22.0791 0.42561C18.8962 6.03192 17.271 6.7868 11.607 8.7918C9.25099 9.6164 7.70277 11.0348 7.00799 12.9821C6.27474 15.04 6.64978 17.3287 7.36619 19.1245C4.9175 19.4318 2.43325 19.2884 0.0361624 18.7014C-0.0724331 18.6728 -0.185658 18.6662 -0.296838 18.682C-0.408019 18.6979 -0.514905 18.7358 -0.611198 18.7936C-0.707492 18.8514 -0.791243 18.9279 -0.857516 19.0185C-0.923789 19.1092 -0.971243 19.2122 -0.99708 19.3215C-1.02292 19.4308 -1.02662 19.5441 -1.00796 19.6549C-0.989301 19.7656 -0.948664 19.8715 -0.888443 19.9663C-0.828222 20.0611 -0.749634 20.1428 -0.657314 20.2068C-0.564993 20.2707 -0.460806 20.3155 -0.350894 20.3386C1.34212 20.745 3.07678 20.9523 4.81787 20.9564C5.92902 20.9567 7.03842 20.8683 8.1355 20.692C9.85201 23.5072 12.2873 25.0025 15.1073 25.0025C15.5908 25.0021 16.0734 24.9603 16.5498 24.8775C21.2738 24.0673 26.1132 19.3481 27.1277 14.552C28.9668 5.72179 23.6202 0.454459 23.3918 0.240496ZM25.4665 14.2106C24.6058 18.3119 20.3025 22.5215 16.2613 23.2163C13.7057 23.6538 11.5204 22.6561 9.91211 20.3314C11.8826 19.8358 13.775 19.0697 15.5352 18.0547C19.2111 15.9391 21.2281 13.4485 21.305 13.3451C21.4447 13.1707 21.5093 12.948 21.4847 12.726C21.4602 12.5039 21.3484 12.3007 21.174 12.1611C20.9996 12.0215 20.7769 11.9568 20.5549 11.9814C20.3328 12.006 20.1296 12.1178 19.99 12.2921C18.4596 14.0254 16.648 15.4884 14.6313 16.6195C12.8945 17.6256 11.0158 18.364 9.05867 18.8096C8.44563 17.408 7.94077 15.3501 8.57785 13.5374C9.09473 12.095 10.2968 11.0252 12.1551 10.3689C17.7109 8.41436 19.8313 7.46475 22.9446 2.27915C24.2428 3.96441 26.7407 8.13308 25.4665 14.2058V14.2106Z" fill="#191919"/>
</g>
<defs>
<clipPath id="clip0_42_921">
<rect width="28.5027" height="25" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -1,20 +0,0 @@
<svg id="Capa_1" data-name="Capa 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 99.87 89.87">
<defs>
<style>
.cls-1 {
fill: #191919;
}
</style>
</defs>
<path class="cls-1"
d="M3.75,89.87A3.76,3.76,0,0,1,0,86.73,8.61,8.61,0,0,1,0,84.9c.14-2.52.3-5,.46-7.56q.33-5.52.68-11c.14-2.29.27-4.59.41-6.89l.57-9.2c.13-2.28.27-4.56.4-6.83l.57-9.27c.14-2.2.27-4.39.4-6.59q.3-4.78.58-9.57c.14-2.3.27-4.59.41-6.89C4.64,8.52,4.78,6,5,3.44A3.74,3.74,0,0,1,9,0c1.36.13,2.7.37,4,.57L22.39,2l9.29,1.41,9.24,1.39,9.35,1.42L58.6,7.5a7.29,7.29,0,0,1,1.3.33L97.12,21.2a3.8,3.8,0,0,1,2.73,3.34,4.21,4.21,0,0,1-.09,1.27q-2.15,10.71-4.32,21.42T91.1,68.77c-.29,1.46-.59,2.91-.88,4.37a4.07,4.07,0,0,0-.07.85q.21,4.29.44,8.6c0,1,.12,2,.15,3a3.81,3.81,0,0,1-4,4.09C82.34,89.74,6,89.88,3.75,89.87Zm83.17-4c-.06-1.26-.13-2.42-.18-3.57-.14-2.85-.29-5.7-.42-8.54a4.43,4.43,0,0,1,.07-1q1.94-9.69,3.91-19.39Q93,39.92,95.74,26.45c.1-.51.19-1,.29-1.54l-.62-.25L58.66,11.45a4.35,4.35,0,0,0-.71-.18l-5.67-.86-13.34-2L24.82,6.25,10.7,4.1,8.76,3.82Q6.26,45,3.76,86.05Z" />
<path class="cls-1"
d="M47.26,78.56v1.37H43.32c-.13-.41-.19-19.51,0-20.63h4v6.93a3.17,3.17,0,0,0,.31-.24,5.43,5.43,0,0,1,4.37-1.47,6,6,0,0,1,5.42,4,9.85,9.85,0,0,1,0,7.79,6,6,0,0,1-4.39,3.8,5.63,5.63,0,0,1-5.47-1.44A1.51,1.51,0,0,0,47.26,78.56Zm6.75-6A6.18,6.18,0,0,0,53.6,70a3.16,3.16,0,0,0-3.3-2,3.07,3.07,0,0,0-2.86,2.28,7.31,7.31,0,0,0,0,4.27,3.08,3.08,0,0,0,2.93,2.27,3.15,3.15,0,0,0,3.22-2A5.65,5.65,0,0,0,54,72.53Z" />
<path class="cls-1"
d="M69.12,78.62A5.53,5.53,0,0,1,66.49,80a7.41,7.41,0,0,1-3.74,0,4.33,4.33,0,0,1-3.16-5.29,4,4,0,0,1,1.94-2.62,9.78,9.78,0,0,1,3.27-1.13l3.42-.65c.16,0,.31-.08.45-.12A1.75,1.75,0,0,0,67.19,68a4.78,4.78,0,0,0-1.51,0A2.06,2.06,0,0,0,64,69.34c-.06.14-.12.29-.21.53L60,69.16a2.58,2.58,0,0,1,.12-.48,6.12,6.12,0,0,1,4.54-4,8.8,8.8,0,0,1,4.47.1,4.55,4.55,0,0,1,3.57,4.53c0,2,0,4.07,0,6.11,0,.18,0,.36,0,.55,0,.68.24.88.93.93l.27,0v2.92A4.39,4.39,0,0,1,69.12,78.62ZM68.72,73l-3,.61a3.33,3.33,0,0,0-.64.16,4.74,4.74,0,0,0-1,.47,1.57,1.57,0,0,0,.28,2.67,3.54,3.54,0,0,0,4-1.06,2.43,2.43,0,0,0,.38-1C68.76,74.29,68.72,73.7,68.72,73Z" />
<path class="cls-1"
d="M40.9,77a3.07,3.07,0,0,1,.05.38c0,.85,0,1.71,0,2.62-1.82.21-3.54.35-4.82-1.33A5.52,5.52,0,0,1,33.51,80a7.21,7.21,0,0,1-4.09-.16,4.32,4.32,0,0,1-2.78-5.35,4,4,0,0,1,2-2.48,9.63,9.63,0,0,1,3.21-1.1l3.42-.65.45-.11A1.75,1.75,0,0,0,34.2,68a4.78,4.78,0,0,0-1.51,0A2.06,2.06,0,0,0,31,69.34c-.06.14-.12.29-.21.53L27,69.17a3.91,3.91,0,0,1,.12-.49,6.12,6.12,0,0,1,4.54-4,8.68,8.68,0,0,1,4.41.09,4.57,4.57,0,0,1,3.64,4.67c0,2,0,3.91,0,5.86v.43C39.71,76.72,39.88,76.9,40.9,77ZM35.73,73c-1.28.27-2.47.51-3.65.79a2.68,2.68,0,0,0-1,.46,1.57,1.57,0,0,0,.33,2.7,3.59,3.59,0,0,0,3.83-1,2.56,2.56,0,0,0,.45-1.11A14.07,14.07,0,0,0,35.73,73Z" />
<path class="cls-1" d="M11.5,59.3h4.18v17h9.49v3.66H11.54C11.41,79.52,11.37,60.16,11.5,59.3Z" />
<path class="cls-1"
d="M80.59,80H76a3.06,3.06,0,0,1-.07-.4c0-1.42,0-2.85,0-4.27a2.35,2.35,0,0,1,4.69-.07c0,1.48,0,3,0,4.45A1.35,1.35,0,0,1,80.59,80Z" />
</svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,5 +0,0 @@
<svg width="37" height="31" viewBox="0 0 37 31" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M0.249298 18.36L25.3407 18.36L17.0741 26.58L21.1571 30.64L32.32 19.54L36.3829 15.48L32.32 11.42L21.1571 0.320013L17.0741 4.39001L25.3407 12.61L0.249298 12.61L0.249298 18.36Z"
fill="currentColor" />
</svg>

Before

Width:  |  Height:  |  Size: 329 B

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path fill="currentColor"
d="M4 18q-.425 0-.712-.288T3 17t.288-.712T4 16h16q.425 0 .713.288T21 17t-.288.713T20 18zm0-5q-.425 0-.712-.288T3 12t.288-.712T4 11h16q.425 0 .713.288T21 12t-.288.713T20 13zm0-5q-.425 0-.712-.288T3 7t.288-.712T4 6h16q.425 0 .713.288T21 7t-.288.713T20 8z" />
</svg>

After

Width:  |  Height:  |  Size: 362 B

View File

@@ -1 +0,0 @@
<svg id="Capa_1" data-name="Capa 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18.38 18.43"><defs><style>.cls-1{fill:#191919;}</style></defs><path class="cls-1" d="M18.38,5.44v7.42l0,.19c0,.36-.06.73-.12,1.09a4.88,4.88,0,0,1-1.57,2.94,5.39,5.39,0,0,1-3.38,1.28l-1.3.07H6.43l-.33,0a10.15,10.15,0,0,1-2.2-.23A4.69,4.69,0,0,1,.59,15.53,6.61,6.61,0,0,1,0,12.73c0-2,0-4,0-6a12.89,12.89,0,0,1,.21-2.7A4.75,4.75,0,0,1,2.89.61,6.72,6.72,0,0,1,5.65.05C8.2,0,10.74,0,13.28.09a5.65,5.65,0,0,1,2.14.48,4.81,4.81,0,0,1,2.85,3.91C18.32,4.8,18.34,5.12,18.38,5.44ZM9.18,16.81v0h1.48c1,0,2.1,0,3.14-.16a3,3,0,0,0,2.72-2.41,8,8,0,0,0,.2-1.76c0-1.85,0-3.7,0-5.56a18.25,18.25,0,0,0-.13-2.22A3.08,3.08,0,0,0,14,1.88a11.26,11.26,0,0,0-1.93-.17c-1.73,0-3.45,0-5.18,0a16.31,16.31,0,0,0-2.42.16A3,3,0,0,0,1.88,4.29,11,11,0,0,0,1.69,6.2c0,1.49,0,3,0,4.48,0,1,0,2.06.14,3.08A3.08,3.08,0,0,0,3.33,16.2a3.92,3.92,0,0,0,1.89.5C6.54,16.75,7.86,16.77,9.18,16.81Z"/><path class="cls-1" d="M9.2,14a4.74,4.74,0,1,1,4.73-4.74A4.74,4.74,0,0,1,9.2,14ZM6.14,9.22A3.07,3.07,0,1,0,9.2,6.16,3,3,0,0,0,6.14,9.22Z"/><path class="cls-1" d="M15.22,4.29A1.1,1.1,0,1,1,14.1,3.2,1.1,1.1,0,0,1,15.22,4.29Z"/></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_2" data-name="Layer 2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1062 344.39">
<g id="Layer_1-2" data-name="Layer 1">
<g>
<circle cx="1009.81" cy="292.2" r="52.19" fill="currentColor" />
<path fill="currentColor"
d="M919.24,281.56c-2.83-2.21-4.25-6.46-4.25-12.76v-95.9c0-28.03-9.13-49.68-27.4-64.96-18.27-15.28-44.25-22.91-77.95-22.91-28.98,0-53.62,7.24-73.93,21.73-20.31,14.49-33.46,33.86-39.45,58.11l72.28,10.87c2.52-10.39,6.77-17.95,12.76-22.68,5.98-4.72,14.33-7.09,25.04-7.09,11.34,0,19.92,2.52,25.75,7.56,5.83,5.04,8.74,12.6,8.74,22.68v4.25l-55.74,9.45c-32.13,4.73-56.14,13.7-72.05,26.93-2.39,1.99-4.61,4.08-6.64,6.28-3.54,3.82-9.89,1.3-9.77-3.91.03-1.41.05-2.83.05-4.26,0-17.32-2.2-33.62-6.61-48.9-4.41-15.27-10.86-28.74-19.37-40.39-9.76-13.23-21.57-23.31-35.43-30.23-13.86-6.93-29.13-10.39-45.83-10.39-13.86,0-26.69,2.6-38.5,7.8-11.81,5.2-21.49,12.68-29.05,22.44V0h-75.59v277.69c0,2.72-1.95,5.02-4.62,5.53-5.3,1.02-10.99.99-14.39-1.66-2.83-2.21-4.25-6.46-4.25-12.76v-95.9c0-28.03-9.13-49.68-27.4-64.96-18.27-15.28-44.25-22.91-77.95-22.91-28.98,0-53.62,7.24-73.93,21.73-20.31,14.49-33.46,33.86-39.45,58.11l72.28,10.87c2.52-10.39,6.77-17.95,12.76-22.68,5.98-4.72,14.33-7.09,25.04-7.09,11.34,0,19.92,2.52,25.75,7.56,5.83,5.04,8.74,12.6,8.74,22.68v4.25l-55.74,9.45c-32.13,4.73-56.14,13.7-72.05,26.93-20.42,16.98-23.57,39.22-23.9,49.36-.1,3.04-2.58,5.44-5.61,5.44h-112.66V0H0v339.2h212.75v-11.59c0-4.81,5.64-7.39,9.29-4.25,3.37,2.9,6.9,5.68,9.42,7.24,14.32,8.88,31.56,13.32,51.73,13.32,15.75,0,29.84-2.28,42.28-6.85,12.44-4.57,22.91-11.26,31.41-20.08,6.3,10.71,16.77,17.95,31.42,21.73,12.99,3.35,28.65,3.86,46.97,1.51,1.03-.13,3.8-.39,6.3-.62,3.08-.28,6.16-.42,9.25-.42h71.04v-24.57c7.56,9.45,17.24,16.77,29.05,21.97,11.81,5.2,24.64,7.79,38.5,7.79,16.69,0,31.97-3.46,45.83-10.39,13.86-6.93,25.51-16.85,34.96-29.76,3.96-5.43,7.49-11.25,10.59-17.46,2.34-4.69,9.28-3.87,10.49,1.23.06.24.12.48.18.72,3.43,13.35,10.69,24.82,21.8,34.4,16.06,13.86,36.69,20.79,61.89,20.79,15.75,0,29.84-2.28,42.28-6.85,12.44-4.57,22.91-11.26,31.41-20.08,6.3,10.71,16.77,17.95,31.42,21.73,14.64,3.78,32.68,3.94,54.09.47v-55.75c-7.24.95-12.28.32-15.12-1.89ZM348.85,249.91c0,11.65-4.56,21.02-13.7,28.11-9.13,7.09-20.63,10.63-34.49,10.63-9.13,0-16.38-2.13-21.73-6.38-5.35-4.25-8.03-10.16-8.03-17.72s2.68-13.54,8.03-17.95c5.35-4.41,14.17-7.56,26.46-9.45l43.46-8.03v20.79ZM607.14,262.67c-8.97,11.65-21.34,17.48-37.08,17.48-14.8,0-26.61-5.28-35.43-15.83-8.82-10.55-13.23-24.8-13.23-42.75v-13.23c0-17.95,4.41-32.2,13.23-42.75,8.82-10.55,20.63-15.83,35.43-15.83,15.75,0,28.11,5.83,37.08,17.48,8.98,11.65,13.46,27.56,13.46,47.72s-4.49,36.06-13.46,47.71ZM840.82,249.91c0,11.65-4.56,21.02-13.7,28.11-9.13,7.09-20.63,10.63-34.49,10.63-9.13,0-16.38-2.13-21.73-6.38-5.35-4.25-8.03-10.16-8.03-17.72s2.68-13.54,8.03-17.95c5.35-4.41,14.17-7.56,26.46-9.45l43.46-8.03v20.79Z" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1 +0,0 @@
<svg id="Capa_1" data-name="Capa 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 99.87 89.87"><defs><style>.cls-1{fill:#191919;}</style></defs><path class="cls-1" d="M3.75,89.87A3.76,3.76,0,0,1,0,86.73,8.61,8.61,0,0,1,0,84.9c.14-2.52.3-5,.46-7.56q.33-5.52.68-11c.14-2.29.27-4.59.41-6.89l.57-9.2c.13-2.28.27-4.56.4-6.83l.57-9.27c.14-2.2.27-4.39.4-6.59q.3-4.78.58-9.57c.14-2.3.27-4.59.41-6.89C4.64,8.52,4.78,6,5,3.44A3.74,3.74,0,0,1,9,0c1.36.13,2.7.37,4,.57L22.39,2l9.29,1.41,9.24,1.39,9.35,1.42L58.6,7.5a7.29,7.29,0,0,1,1.3.33L97.12,21.2a3.8,3.8,0,0,1,2.73,3.34,4.21,4.21,0,0,1-.09,1.27q-2.15,10.71-4.32,21.42T91.1,68.77c-.29,1.46-.59,2.91-.88,4.37a4.07,4.07,0,0,0-.07.85q.21,4.29.44,8.6c0,1,.12,2,.15,3a3.81,3.81,0,0,1-4,4.09C82.34,89.74,6,89.88,3.75,89.87Zm83.17-4c-.06-1.26-.13-2.42-.18-3.57-.14-2.85-.29-5.7-.42-8.54a4.43,4.43,0,0,1,.07-1q1.94-9.69,3.91-19.39Q93,39.92,95.74,26.45c.1-.51.19-1,.29-1.54l-.62-.25L58.66,11.45a4.35,4.35,0,0,0-.71-.18l-5.67-.86-13.34-2L24.82,6.25,10.7,4.1,8.76,3.82Q6.26,45,3.76,86.05Z"/><path class="cls-1" d="M47.26,78.56v1.37H43.32c-.13-.41-.19-19.51,0-20.63h4v6.93a3.17,3.17,0,0,0,.31-.24,5.43,5.43,0,0,1,4.37-1.47,6,6,0,0,1,5.42,4,9.85,9.85,0,0,1,0,7.79,6,6,0,0,1-4.39,3.8,5.63,5.63,0,0,1-5.47-1.44A1.51,1.51,0,0,0,47.26,78.56Zm6.75-6A6.18,6.18,0,0,0,53.6,70a3.16,3.16,0,0,0-3.3-2,3.07,3.07,0,0,0-2.86,2.28,7.31,7.31,0,0,0,0,4.27,3.08,3.08,0,0,0,2.93,2.27,3.15,3.15,0,0,0,3.22-2A5.65,5.65,0,0,0,54,72.53Z"/><path class="cls-1" d="M69.12,78.62A5.53,5.53,0,0,1,66.49,80a7.41,7.41,0,0,1-3.74,0,4.33,4.33,0,0,1-3.16-5.29,4,4,0,0,1,1.94-2.62,9.78,9.78,0,0,1,3.27-1.13l3.42-.65c.16,0,.31-.08.45-.12A1.75,1.75,0,0,0,67.19,68a4.78,4.78,0,0,0-1.51,0A2.06,2.06,0,0,0,64,69.34c-.06.14-.12.29-.21.53L60,69.16a2.58,2.58,0,0,1,.12-.48,6.12,6.12,0,0,1,4.54-4,8.8,8.8,0,0,1,4.47.1,4.55,4.55,0,0,1,3.57,4.53c0,2,0,4.07,0,6.11,0,.18,0,.36,0,.55,0,.68.24.88.93.93l.27,0v2.92A4.39,4.39,0,0,1,69.12,78.62ZM68.72,73l-3,.61a3.33,3.33,0,0,0-.64.16,4.74,4.74,0,0,0-1,.47,1.57,1.57,0,0,0,.28,2.67,3.54,3.54,0,0,0,4-1.06,2.43,2.43,0,0,0,.38-1C68.76,74.29,68.72,73.7,68.72,73Z"/><path class="cls-1" d="M40.9,77a3.07,3.07,0,0,1,.05.38c0,.85,0,1.71,0,2.62-1.82.21-3.54.35-4.82-1.33A5.52,5.52,0,0,1,33.51,80a7.21,7.21,0,0,1-4.09-.16,4.32,4.32,0,0,1-2.78-5.35,4,4,0,0,1,2-2.48,9.63,9.63,0,0,1,3.21-1.1l3.42-.65.45-.11A1.75,1.75,0,0,0,34.2,68a4.78,4.78,0,0,0-1.51,0A2.06,2.06,0,0,0,31,69.34c-.06.14-.12.29-.21.53L27,69.17a3.91,3.91,0,0,1,.12-.49,6.12,6.12,0,0,1,4.54-4,8.68,8.68,0,0,1,4.41.09,4.57,4.57,0,0,1,3.64,4.67c0,2,0,3.91,0,5.86v.43C39.71,76.72,39.88,76.9,40.9,77ZM35.73,73c-1.28.27-2.47.51-3.65.79a2.68,2.68,0,0,0-1,.46,1.57,1.57,0,0,0,.33,2.7,3.59,3.59,0,0,0,3.83-1,2.56,2.56,0,0,0,.45-1.11A14.07,14.07,0,0,0,35.73,73Z"/><path class="cls-1" d="M11.5,59.3h4.18v17h9.49v3.66H11.54C11.41,79.52,11.37,60.16,11.5,59.3Z"/><path class="cls-1" d="M80.59,80H76a3.06,3.06,0,0,1-.07-.4c0-1.42,0-2.85,0-4.27a2.35,2.35,0,0,1,4.69-.07c0,1.48,0,3,0,4.45A1.35,1.35,0,0,1,80.59,80Z"/></svg>

Before

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path fill="currentColor"
d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584l-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z" />
</svg>

Before

Width:  |  Height:  |  Size: 284 B

View File

@@ -1,24 +0,0 @@
import React from 'react';
import { Helmet } from 'react-helmet';
import { PageProps } from 'gatsby';
interface Props {
title: string;
description?: string;
location: PageProps['location'];
}
export const SEO: React.FC<Props> = ({ title, description, location }) => (
<Helmet title={`${title} | Laba`} htmlAttributes={{ lang: 'eu' }}>
{description && <meta name="description" content={description} />}
<meta
name="og:image"
content={`${location.protocol}//${location.host}/og-image.jpeg`}
/>
<meta name="og:image:height" content="669" />
<meta name="og:image:width" content="1205" />
</Helmet>
);

125
front/src/content.config.ts Normal file
View File

@@ -0,0 +1,125 @@
import { defineCollection } from "astro:content";
import type { Ekintza } from "./models/Ekintza";
import type { Zikloa } from "./models/Zikloa";
import type { OrriBasikoa } from "models/OrriBasikoa";
const ekintzak = defineCollection({
loader: async () => {
const response = await fetch(`${import.meta.env.STRAPI_URL}/graphql`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query {
ekintzak {
id: documentId
createdAt
slug
elkarlana {
label
erakundeak {
izena
logo {
formats
}
}
}
hitzordua
deskribapena
izenburua
labakoUzta
mainMedia {
alternativeText
formats
}
sarrera {
deskribapena
id
label
url
}
titularra
zikloa {
izena
slug
}
}
}
`,
}),
});
const json = await response.json();
const { ekintzak } = json.data;
return ekintzak as Ekintza[];
},
});
const zikloak = defineCollection({
loader: async () => {
const response = await fetch(`${import.meta.env.STRAPI_URL}/graphql`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query {
zikloak {
id:documentId
slug
izena
deskribapena
ekintzak {
id:documentId
slug
izenburua
hitzordua
mainMedia {
alternativeText
formats
}
}
}
}
`,
}),
});
const json = await response.json();
const { zikloak } = json.data;
return zikloak as Zikloa[];
},
});
const orriBasikoak = defineCollection({
loader: async () => {
const response = await fetch(`${import.meta.env.STRAPI_URL}/graphql`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query {
orriBasikoak {
id: documentId
izenburua
slug
deskribapena
edukiLibrea {
... on ComponentParagraphTestua {
id
testua
}
}
}
}
`,
}),
});
const json = await response.json();
const { orriBasikoak } = json.data;
return orriBasikoak as OrriBasikoa[];
},
});
export const collections = { ekintzak, zikloak, orriBasikoak };

View File

@@ -1 +0,0 @@
export type AtalaName = 'hasiera' | 'kafetegia' | 'bizi';

View File

@@ -1,15 +0,0 @@
interface Format {
url: string;
width: number;
height: number;
}
export interface Irudia {
alternativeText?: string;
formats: {
thumbnail: Format;
small: Format;
medium: Format;
large: Format;
};
}

View File

@@ -1 +0,0 @@
type IsoDate = string;

View File

@@ -1 +0,0 @@
export type Markdown = string;

View File

@@ -1,4 +0,0 @@
export interface RegularPageContent {
izenburua: string;
edukia: string;
}

View File

@@ -1,20 +0,0 @@
import { graphql, useStaticQuery } from 'gatsby';
import { RegularPageContent } from '../RegularPageContent';
interface DataProps {
strapiLegeOharra: RegularPageContent;
}
export function useLegeOharraContent(): RegularPageContent {
const { strapiLegeOharra } = useStaticQuery<DataProps>(graphql`
{
strapiLegeOharra {
izenburua
edukia
}
}
`);
return strapiLegeOharra;
}

View File

@@ -1,20 +0,0 @@
import { graphql, useStaticQuery } from 'gatsby';
import { RegularPageContent } from '../RegularPageContent';
interface DataProps {
strapiPribatutasunPolitika: RegularPageContent;
}
export function usePribatutasunPolitikaContent(): RegularPageContent {
const { strapiPribatutasunPolitika } = useStaticQuery<DataProps>(graphql`
{
strapiPribatutasunPolitika {
izenburua
edukia
}
}
`);
return strapiPribatutasunPolitika;
}

View File

@@ -1,4 +0,0 @@
export interface BiziContent {
izenburua: string;
deskribapena: string;
}

View File

@@ -1,13 +0,0 @@
import { Irudia } from '../_valueObjects/Irudia';
import { Markdown } from '../_valueObjects/Markdown';
import { ZikloaContent } from '../zikloa/ZikloaContent';
export interface EkintzaContent {
slug: string;
izenburua: string;
hitzordua: IsoDate;
titularra?: string;
deskribapena?: Markdown;
kartela?: Irudia;
zikloa?: Pick<ZikloaContent, 'izena' | 'slug'>;
}

View File

@@ -1,5 +0,0 @@
export interface HasieraContent {
deskribapena: string;
izenburua: string;
edukia: string;
}

View File

@@ -1,21 +0,0 @@
import { graphql, useStaticQuery } from 'gatsby';
import { HasieraContent } from '../HasieraContent';
interface DataProps {
strapiHasiera: HasieraContent;
}
export function useHasieraContent(): HasieraContent {
const { strapiHasiera } = useStaticQuery<DataProps>(graphql`
{
strapiHasiera {
deskribapena
izenburua
edukia
}
}
`);
return strapiHasiera;
}

View File

@@ -1,7 +0,0 @@
import { MenuKonponentea } from './hooks/useKafetegiaContent';
export interface KafetegiaContent {
deskribapena: string;
izenburua: string;
menua: MenuKonponentea[];
}

View File

@@ -1,12 +0,0 @@
import { AlergenoIdentifikadorea } from '../models/AlergenoIdentifikadorea';
export interface ProduktuaDTO {
id: string;
izena: string;
prezioa: number;
ekologikoa: boolean;
beganoa: boolean;
alergenoak: {
[alergenoa in AlergenoIdentifikadorea]: boolean;
};
}

View File

@@ -1,29 +0,0 @@
import { ProduktuaDTO } from '../dtos/ProduktuaDTO';
import { mapAlergenoIdentifikadoreaToIzena } from '../mappers/mapAlergenoIdentifikadoreaToIzena';
import { mapAlergenoIdentifikadoreaToZenbakia } from '../mappers/mapAlergenoIdentifikadoreaToZenbakia';
import { Alergenoa } from '../models/Alergenoa';
import { AlergenoIdentifikadorea } from '../models/AlergenoIdentifikadorea';
import { Produktua } from '../models/Produktua';
export function produktuaFactory(dto: ProduktuaDTO): Produktua {
return {
...dto,
alergenoak: mapAlergenoDTOToAlergenoZerrenda(dto.alergenoak),
};
}
function mapAlergenoDTOToAlergenoZerrenda(dto: {
[alergenoa in AlergenoIdentifikadorea]: boolean;
}): Alergenoa[] {
const alergenoIdentifikadoreak: AlergenoIdentifikadorea[] = Object.keys(
dto,
) as AlergenoIdentifikadorea[];
return alergenoIdentifikadoreak
.filter(identifikadorea => dto[identifikadorea])
.map<Alergenoa>(identifikadorea => ({
id: identifikadorea,
izena: mapAlergenoIdentifikadoreaToIzena(identifikadorea),
zenbakia: mapAlergenoIdentifikadoreaToZenbakia(identifikadorea),
}));
}

View File

@@ -1,78 +0,0 @@
import { graphql, useStaticQuery } from 'gatsby';
import { ProduktuaDTO } from '../dtos/ProduktuaDTO';
import { KafetegiaContent } from '../KafetegiaContent';
export type MenuKonponentea =
| {
konponentea: 'StrapiComponentKafetegiaIzenburua';
id: string;
izenburuBalioa: string;
}
| {
konponentea: 'StrapiComponentKafetegiaProduktuTaldea';
id: string;
izenburua: string;
produktuak: ProduktuaDTO[];
};
interface DataProps {
strapiKafetegia: {
deskribapena: string;
izenburua: string;
menua: MenuKonponentea[];
};
}
export function useKafetegiaContent(): KafetegiaContent {
const {
strapiKafetegia: { izenburua, deskribapena, menua },
} = useStaticQuery<DataProps>(graphql`
{
strapiKafetegia {
izenburua
deskribapena
menua {
konponentea: __typename
... on StrapiComponentKafetegiaIzenburua {
izenburuBalioa
id
}
... on StrapiComponentKafetegiaProduktuTaldea {
id
izenburua
produktuak {
id
izena
prezioa
beganoa
ekologikoa
alergenoak {
apioa
arraina
arrautzak
esnekiak
fruituLehorrak
glutena
kakahueteak
krustazeoak
lupinuak
moluskuak
sesamoa
soja
sulfitoak
ziapea
}
}
}
}
}
}
`);
return {
izenburua,
deskribapena,
menua,
};
}

View File

@@ -1,24 +0,0 @@
import { AlergenoIdentifikadorea } from '../models/AlergenoIdentifikadorea';
export function mapAlergenoIdentifikadoreaToIzena(
identifikadorea: AlergenoIdentifikadorea,
): string {
const dictionary: { [key in AlergenoIdentifikadorea]: string } = {
apioa: 'Apioa',
arraina: 'Arraina',
arrautzak: 'Arrautzak',
esnekiak: 'Esnekiak',
fruituLehorrak: 'Fruitu Lehorrak',
glutena: 'Glutena',
kakahueteak: 'Kakahueteak',
krustazeoak: 'Krustazeoak',
lupinuak: 'Lupinuak',
moluskuak: 'Moluskuak',
sesamoa: 'Sesamoa',
soja: 'Soja',
ziapea: 'Ziapea',
sulfitoak: 'Sulfitoak',
};
return dictionary[identifikadorea];
}

View File

@@ -1,24 +0,0 @@
import { AlergenoIdentifikadorea } from '../models/AlergenoIdentifikadorea';
export function mapAlergenoIdentifikadoreaToZenbakia(
identifikadorea: AlergenoIdentifikadorea,
): string {
const dictionary: { [key in AlergenoIdentifikadorea]: string } = {
esnekiak: '1',
arrautzak: '2',
glutena: '3',
moluskuak: '4',
krustazeoak: '5',
arraina: '6',
lupinuak: '7',
fruituLehorrak: '8',
kakahueteak: '9',
sesamoa: '10',
soja: '11',
sulfitoak: '12',
apioa: '13',
ziapea: '14',
};
return dictionary[identifikadorea];
}

View File

@@ -1,15 +0,0 @@
export type AlergenoIdentifikadorea =
| 'apioa'
| 'arraina'
| 'arrautzak'
| 'esnekiak'
| 'fruituLehorrak'
| 'glutena'
| 'kakahueteak'
| 'krustazeoak'
| 'lupinuak'
| 'moluskuak'
| 'sesamoa'
| 'soja'
| 'sulfitoak'
| 'ziapea';

View File

@@ -1,7 +0,0 @@
import { AlergenoIdentifikadorea } from './AlergenoIdentifikadorea';
export interface Alergenoa {
id: AlergenoIdentifikadorea;
izena: string;
zenbakia: string;
}

View File

@@ -1,10 +0,0 @@
import { Alergenoa } from './Alergenoa';
export interface Produktua {
id: string;
izena: string;
prezioa: number;
ekologikoa: boolean;
beganoa: boolean;
alergenoak: Alergenoa[];
}

View File

@@ -1,15 +0,0 @@
import { Markdown } from '../_valueObjects/Markdown';
import { EkintzaContent } from '../ekintza/EkintzaContent';
export interface ZikloaContent {
slug: string;
izena: string;
deskribapena?: Markdown;
ekintzak: EkintzaContent[];
}
export function getLastEkintza(zikloa: ZikloaContent) {
return zikloa.ekintzak
.sort((a, b) => (a.hitzordua > b.hitzordua ? 1 : -1))
.slice(-1)[0].hitzordua;
}

6
front/src/env.d.ts vendored Normal file
View File

@@ -0,0 +1,6 @@
type EnvBoolean = "true" | "false";
interface ImportMetaEnv {
readonly STRAPI_URL: string;
readonly SITE_URL: string;
}

View File

@@ -0,0 +1,53 @@
---
import "../style/config/reset.scss";
import "../style/vars/index.scss";
interface Props {
title: string;
}
const { title } = Astro.props;
---
<!doctype html>
<html lang="eu">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="sitemap" href="/sitemap-index.xml" />
<title>{title} | Laba</title>
</head>
<body>
<slot />
</body>
</html>
<style lang="scss">
@use "../style/mixins/textFonts.scss";
body {
display: grid;
grid-template-rows: auto 1fr auto;
min-height: 100dvh;
@include textFonts.bodyFont;
&.no-scroll {
overflow: hidden;
}
}
</style>
<style is:global>
.visually-hidden {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}
</style>

View File

@@ -0,0 +1,35 @@
import type { ImageMedia } from "./ImageMedia";
import type { Zikloa } from "./Zikloa";
export interface Ekintza {
id: string;
slug: string;
createdAt: string;
izenburua: string;
titularra: string;
deskribapena: string;
hitzordua: string;
sarrera: {
label: string;
deskribapena: string;
};
mainMedia: ImageMedia;
zikloa: Pick<Zikloa, "izena" | "slug">;
}
export type EkintzaSnippet = Pick<
Ekintza,
"id" | "izenburua" | "hitzordua" | "slug" | "mainMedia"
>;
export function getShortDate(ekintza: Pick<Ekintza, "hitzordua">): string {
const date = new Date(ekintza.hitzordua);
const day = date.getDate();
const month = date.toLocaleString("eu", { month: "short" });
return `${month} ${day}`;
}
export function getUrl(ekintza: Pick<Ekintza, "slug">): string {
return `/ekintzak/${ekintza.slug}`;
}

View File

@@ -0,0 +1,30 @@
import type { ImageMedia } from "./ImageMedia";
import type { Markdown } from "./Markdown";
export type ExternalSVG = string;
export interface Partehartzea {
ikonoa: ExternalSVG;
izenburua: string;
deskribapena: string;
email: string;
}
export interface Hasiera {
id: number;
izenburua: string;
izanLabazkide: {
izenburua: string;
deskribapena: Markdown;
url: {
label: string;
url: string;
};
};
parteHartu: {
izenburua: string;
deskribapena?: Markdown;
parteHartzea: Partehartzea[];
};
mosaikoa: ImageMedia[];
}

View File

@@ -0,0 +1,42 @@
export interface ImageMedia {
alternativeText?: string;
formats: {
thumbnail: {
url: string;
height: number;
width: number;
};
small?: {
url: string;
height: number;
width: number;
};
};
}
export interface ImageData {
alt: string;
src: string;
height: number;
width: number;
}
export function getImageData(imageMedia: ImageMedia): ImageData {
if (imageMedia.formats.small) {
return {
alt: imageMedia.alternativeText ?? "",
// react konponentean ingurune aldagaiak undefined ematen du
// TODO STRAPI_URL ingurune aldagaia erabili
src: `http://127.0.0.1:1337${imageMedia.formats.small.url}`,
width: imageMedia.formats.small.width,
height: imageMedia.formats.small.height,
};
}
return {
alt: imageMedia.alternativeText ?? "",
src: `http://127.0.0.1:1337${imageMedia.formats.thumbnail.url}`,
width: imageMedia.formats.thumbnail.width,
height: imageMedia.formats.thumbnail.height,
};
}

View File

@@ -0,0 +1 @@
export type Markdown = string;

View File

@@ -0,0 +1,14 @@
import type { Markdown } from "./Markdown";
interface ParagraphTestua {
id: string;
testua: Markdown;
}
export interface OrriBasikoa {
id: string;
izenburua: string;
slug: string;
deskribapena?: string;
edukiLibrea: ParagraphTestua[];
}

View File

@@ -0,0 +1,13 @@
import type { EkintzaSnippet } from "./Ekintza";
export interface Zikloa {
id: string;
slug: string;
izena: string;
deskribapena?: string;
ekintzak: EkintzaSnippet[];
}
export function getUrl(zikloa: Pick<Zikloa, "slug">): string {
return `/zikloak/${zikloa.slug}`;
}

View File

@@ -1,18 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { NotFound } from '../views/NotFound';
const NotFoundPage: React.FC<PageProps> = ({ location }) => {
return (
<>
<SEO title="Ez dugu orria topatu" location={location} />
<NotFound />
</>
);
};
export default NotFoundPage;

View File

@@ -0,0 +1,16 @@
---
import OrriBasikoaView from "views/orriBasikoa/OrriBasikoa.astro";
import { getCollection } from "astro:content";
export async function getStaticPaths() {
const orriBasikoak = await getCollection("orriBasikoak");
return orriBasikoak.map((orriBasikoa) => ({
params: { orriBasikoa: orriBasikoa.data.slug },
props: { orriBasikoa: orriBasikoa.data },
}));
}
const { orriBasikoa } = Astro.props;
---
<OrriBasikoaView orriBasikoa={orriBasikoa} />

View File

@@ -1,55 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../../components/SEO';
import { EkintzaContent } from '../../../domain/ekintza/EkintzaContent';
import { Ekintza } from '../../../views/Ekintza/Ekintza';
import { NotFound } from '../../../views/NotFound';
interface QueryData {
strapiEkintza: EkintzaContent;
}
const EkintzaPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiEkintza;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izenburua} location={location} />
<Ekintza content={content} />
</>
);
};
export const query = graphql`
fragment Ekintza on StrapiEkintza {
slug
izenburua
titularra
deskribapena
hitzordua
zikloa {
slug
izena
}
kartela {
alternativeText
formats
}
}
query ($slug: String) {
strapiEkintza(slug: { eq: $slug }) {
...Ekintza
}
}
`;
export default EkintzaPage;

View File

@@ -1,56 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../components/SEO';
import { BiziContent } from '../../domain/bizi/BiziContent';
import { EkintzaContent } from '../../domain/ekintza/EkintzaContent';
import { ZikloaContent } from '../../domain/zikloa/ZikloaContent';
import { Bizi } from '../../views/Bizi';
import { NotFound } from '../../views/NotFound';
interface QueryData {
strapiBizi: BiziContent;
allStrapiEkintza: { nodes: EkintzaContent[] };
allStrapiZikloa: { nodes: ZikloaContent[] };
}
const BiziPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiBizi;
const ekintzak = data.allStrapiEkintza.nodes;
const zikloak = data.allStrapiZikloa.nodes;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izenburua} location={location} />
<Bizi content={content} ekintzak={ekintzak} zikloak={zikloak} />
</>
);
};
export const query = graphql`
{
strapiBizi {
deskribapena
izenburua
}
allStrapiEkintza(sort: { hitzordua: ASC }) {
nodes {
...Ekintza
}
}
allStrapiZikloa {
nodes {
...Zikloa
}
}
}
`;
export default BiziPage;

View File

@@ -1,48 +0,0 @@
import React from 'react';
import { graphql, PageProps } from 'gatsby';
import { SEO } from '../../../components/SEO';
import { ZikloaContent } from '../../../domain/zikloa/ZikloaContent';
import { NotFound } from '../../../views/NotFound';
import { Zikloa } from '../../../views/Zikloa/Zikloa';
interface QueryData {
strapiZikloa: ZikloaContent;
}
const ZikloaPage: React.FC<PageProps<QueryData>> = ({ location, data }) => {
const content = data.strapiZikloa;
// TODO testeatu eta produkzioan jarri
if (process.env.NODE_ENV === 'production') {
return <NotFound />;
}
return (
<>
<SEO title={content.izena} location={location} />
<Zikloa content={content} />
</>
);
};
export const query = graphql`
fragment Zikloa on StrapiZikloa {
slug
izena
deskribapena
ekintzak {
...Ekintza
}
}
query ($slug: String) {
strapiZikloa(slug: { eq: $slug }) {
...Zikloa
}
}
`;
export default ZikloaPage;

View File

@@ -0,0 +1,16 @@
---
import { getCollection } from "astro:content";
import EkintzaView from "views/ekintza/Ekintza.astro";
export async function getStaticPaths() {
const ekintzak = await getCollection("ekintzak");
return ekintzak.map((ekintza) => ({
params: { ekintza: ekintza.data.slug },
props: { ekintza: ekintza.data },
}));
}
const { ekintza } = Astro.props;
---
<EkintzaView ekintza={ekintza} />

View File

@@ -0,0 +1,10 @@
---
import { getCollection } from "astro:content";
import { type Ekintza } from "models/Ekintza";
import Ekintzak from "views/ekintzak/Ekintzak.astro";
const ekintzakCollection = await getCollection("ekintzak");
const ekintzak: Ekintza[] = ekintzakCollection.map(({ data }) => data);
---
<Ekintzak ekintzak={ekintzak} />

View File

@@ -0,0 +1,51 @@
---
import { getCollection } from "astro:content";
import { type Ekintza } from "models/Ekintza";
import Hasiera from "views/hasiera/Hasiera.astro";
const response = await fetch(`${import.meta.env.STRAPI_URL}/graphql`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
query: `
query {
hasiera {
izenburua
izanLabazkide {
izenburua
deskribapena
url {
label
url
}
}
parteHartu {
izenburua
deskribapena
parteHartzea {
ikonoa
izenburua
deskribapena
email
}
}
mosaikoa (pagination: {
limit: 60
}) {
alternativeText
formats
}
}
}
`,
}),
});
const json = await response.json();
const { hasiera } = json.data;
const ekintzakCollection = await getCollection("ekintzak");
const ekintzak: Ekintza[] = ekintzakCollection.map(({ data }) => data);
---
<Hasiera hasiera={hasiera} ekintzak={ekintzak} />

View File

@@ -1,25 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useHasieraContent } from '../domain/hasiera/hooks/useHasieraContent';
import { Hasiera } from '../views/Hasiera/Hasiera';
const IndexPage: React.FC<PageProps> = ({ location }) => {
const content = useHasieraContent();
return (
<>
<SEO
title={content.izenburua}
description={content.deskribapena}
location={location}
/>
<Hasiera content={content} />
</>
);
};
export default IndexPage;

View File

@@ -1,25 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useKafetegiaContent } from '../domain/kafetegia/hooks/useKafetegiaContent';
import { Kafetegia } from '../views/Kafetegia';
const KafetegiaPage: React.FC<PageProps> = ({ location }) => {
const content = useKafetegiaContent();
return (
<>
<SEO
title={content.izenburua}
description={content.deskribapena}
location={location}
/>
<Kafetegia content={content} />
</>
);
};
export default KafetegiaPage;

View File

@@ -1,21 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { useLegeOharraContent } from '../domain/basicPage/hooks/useLegeOharraContent';
import { RegularPage } from '../views/RegularPage';
const LegeOharra: React.FC<PageProps> = ({ location }) => {
const content = useLegeOharraContent();
return (
<>
<SEO title={content.izenburua} location={location} />
<RegularPage content={content} />
</>
);
};
export default LegeOharra;

View File

@@ -1,21 +0,0 @@
import React from 'react';
import { PageProps } from 'gatsby';
import { SEO } from '../components/SEO';
import { usePribatutasunPolitikaContent } from '../domain/basicPage/hooks/usePribatutasunPolitikaContent';
import { RegularPage } from '../views/RegularPage/RegularPage';
const PribatutasunPolitika: React.FC<PageProps> = ({ location }) => {
const content = usePribatutasunPolitikaContent();
return (
<>
<SEO title={content.izenburua} location={location} />
<RegularPage content={content} />
</>
);
};
export default PribatutasunPolitika;

View File

@@ -0,0 +1,31 @@
import rss from "@astrojs/rss";
import { getCollection } from "astro:content";
import { marked } from "marked";
import type { Ekintza } from "models/Ekintza";
export async function GET() {
const ekintzak = await getCollection("ekintzak");
return rss({
// `<title>` field in output xml
title: "Laba",
// `<description>` field in output xml
description: "Euskaraz, Iruñea esaten da",
// Pull in your project "site" from the endpoint context
// https://docs.astro.build/en/reference/api-reference/#site
site: import.meta.env.SITE_URL,
// Array of `<item>`s in output xml
// See "Generating items" section for examples using content collections and glob imports
items: ekintzak.map(({ data }: { data: Ekintza }) => ({
title: data.izenburua,
pubDate: new Date(data.createdAt),
description: data.titularra || undefined,
link: `${import.meta.env.SITE_URL}/ekintzak/${data.slug}`,
content: data.deskribapena
? marked.parse(data.deskribapena, { async: false })
: undefined,
})),
// (optional) inject custom xml
customData: `<language>eu</language>`,
});
}

View File

@@ -0,0 +1,16 @@
---
import { getCollection } from "astro:content";
import ZikloaView from "views/zikloa/Zikloa.astro";
export async function getStaticPaths() {
const zikloak = await getCollection("zikloak");
return zikloak.map((zikloa) => ({
params: { zikloa: zikloa.data.slug },
props: { zikloa: zikloa.data },
}));
}
const { zikloa } = Astro.props;
---
<ZikloaView zikloa={zikloa} />

View File

@@ -0,0 +1,75 @@
/* 1. Use a more-intuitive box-sizing model */
*,
*::before,
*::after {
box-sizing: border-box;
}
/* 2. Remove default margin */
* {
margin: 0;
}
/* 3. Enable keyword animations */
@media (prefers-reduced-motion: no-preference) {
html {
interpolate-size: allow-keywords;
}
}
body {
/* 4. Add accessible line-height */
line-height: 1.5;
/* 5. Improve text rendering */
-webkit-font-smoothing: antialiased;
}
/* 6. Improve media defaults */
img,
picture,
video,
canvas,
svg {
display: block;
max-width: 100%;
}
/* 7. Inherit fonts for form controls */
input,
button,
textarea,
select {
font: inherit;
}
/* 8. Avoid text overflows */
p,
h1,
h2,
h3,
h4,
h5,
h6 {
overflow-wrap: break-word;
}
/* 9. Improve line wrapping */
p {
text-wrap: pretty;
}
h1,
h2,
h3,
h4,
h5,
h6 {
text-wrap: balance;
}
/*
10. Create a root stacking context
*/
#root,
#__next {
isolation: isolate;
}

View File

@@ -0,0 +1,81 @@
@use "../tools/mediaQueries.scss";
@use "../tools/toDVW.scss";
@mixin display1() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(44)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(65)};
}
}
@mixin display2() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(36)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(49)};
}
}
@mixin display3() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(26)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(37)};
}
}
@mixin display4() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(22)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(28)};
}
}
@mixin display5() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(19)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(21)};
}
}
@mixin display6() {
@include displayFontBase;
& {
font-size: #{toDVW.toMobileDVW(16)};
}
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(16)};
}
}
@mixin displayFontBase() {
& {
font-family: "Sohne", sans-serif;
line-height: 110%;
}
}

View File

@@ -0,0 +1,11 @@
@use "../tools/mediaQueries.scss";
@mixin grid() {
display: grid;
grid-template-columns: repeat(12, [col-start] 1fr);
gap: var(--space-05-mobile);
@include mediaQueries.aboveTablet {
gap: var(--space-05-desktop);
}
}

View File

@@ -0,0 +1,24 @@
@use "../tools/mediaQueries.scss";
@use "../tools/toDVW.scss";
@mixin bodyFont() {
font-family: "Inter", sans-serif;
font-size: #{toDVW.toMobileDVW(14)};
line-height: 150%;
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(16)};
line-height: 120%;
}
}
@mixin captionFont() {
font-family: "Inter", sans-serif;
font-size: #{toDVW.toMobileDVW(12)};
line-height: 140%;
@include mediaQueries.aboveTablet {
font-size: #{toDVW.toDesktopDVW(12)};
line-height: 130%;
}
}

View File

@@ -0,0 +1,13 @@
$tablet: 1024px;
@mixin aboveTablet {
@media (min-width: $tablet) {
@content;
}
}
@mixin belowTablet {
@media (max-width: calc($tablet - 1px)) {
@content;
}
}

View File

@@ -0,0 +1,14 @@
$desktopReferenceWidth: 1440;
$mobileReferenceWidth: 390;
@function toDesktopDVW($size) {
$dvwValue: calc($size * 100 / $desktopReferenceWidth) + dvw;
@return $dvwValue;
}
@function toMobileDVW($size) {
$dvwValue: calc($size * 100 / $mobileReferenceWidth) + dvw;
@return $dvwValue;
}

View File

@@ -0,0 +1,6 @@
:root {
--zuria: #ffffff;
--gorria: #ff3e3e;
--gorria-background: #fffbfb; // gorriari %5 opazitatea fondo zurian
--marroia: #4b2125;
}

View File

@@ -0,0 +1,23 @@
@font-face {
font-family: "Sohne";
src: url("/fonts/sohne/soehne-dreiviertelfett.woff2") format("woff2");
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: "Sohne";
src: url("/fonts/sohne/soehne-dreiviertelfett-kursiv.woff2") format("woff2");
font-weight: normal;
font-style: italic;
font-display: swap;
}
@font-face {
font-family: "Inter";
src: url("/fonts/inter/Inter-VariableFont.ttf");
font-weight: normal;
font-style: normal;
font-display: swap;
}

View File

@@ -0,0 +1,3 @@
@use "./fontDeclarations.scss";
@use "./colors.scss";
@use "./spacings.scss";

View File

@@ -0,0 +1,36 @@
@use "../tools/toDVW.scss";
:root {
--space-01-desktop: #{toDVW.toDesktopDVW(4)};
--space-01-mobile: #{toDVW.toMobileDVW(4)};
--space-02-desktop: #{toDVW.toDesktopDVW(8)};
--space-02-mobile: #{toDVW.toMobileDVW(8)};
--space-03-desktop: #{toDVW.toDesktopDVW(12)};
--space-03-mobile: #{toDVW.toMobileDVW(12)};
--space-04-desktop: #{toDVW.toDesktopDVW(16)};
--space-04-mobile: #{toDVW.toMobileDVW(16)};
--space-05-desktop: #{toDVW.toDesktopDVW(24)};
--space-05-mobile: #{toDVW.toMobileDVW(24)};
--space-06-desktop: #{toDVW.toDesktopDVW(32)};
--space-06-mobile: #{toDVW.toMobileDVW(32)};
--space-07-desktop: #{toDVW.toDesktopDVW(48)};
--space-07-mobile: #{toDVW.toMobileDVW(48)};
--space-08-desktop: #{toDVW.toDesktopDVW(64)};
--space-08-mobile: #{toDVW.toMobileDVW(64)};
--space-09-desktop: #{toDVW.toDesktopDVW(96)};
--space-09-mobile: #{toDVW.toMobileDVW(96)};
--space-10-desktop: #{toDVW.toDesktopDVW(128)};
--space-10-mobile: #{toDVW.toMobileDVW(128)};
--space-11-desktop: #{toDVW.toDesktopDVW(192)};
--space-11-mobile: #{toDVW.toMobileDVW(192)};
}

View File

@@ -1,20 +0,0 @@
@import 'settings';
@import 'generic';
@import 'tools';
@import 'utilities';
@import './tools/mixins/font.scss';
html {
scroll-behavior: smooth;
}
body {
/* OHARRA: Logoan eta irudi korporatiboan Söhne familia erabili da */
font-family: 'Lato', sans-serif;
@include baseFont;
font-weight: var(--font-weight-bold);
color: var(--color-beltza);
}

View File

@@ -1,2 +0,0 @@
@import 'reset';
@import 'reboot';

View File

@@ -1,35 +0,0 @@
*,
*::before,
*::after {
box-sizing: border-box;
/* 1 */
}
html {
-webkit-text-size-adjust: 100%;
/* 4 */
/* stylelint-disable-line */
-ms-text-size-adjust: 100%;
/* 4 */
/* stylelint-disable-line */
-ms-overflow-style: scrollbar;
/* 5 */
-webkit-tap-highlight-color: rgba(#000, 0);
/* 6 */
-webkit-tap-highlight-color: transparent;
scroll-behavior: smooth;
}
body {
font-family: 'Martel Sans', sans-serif;
min-height: 100vh;
}
/* stylelint-disable-next-line */
-ms-viewport {
width: device-width;
}
strong {
font-weight: var(--font-weight-bold);
}

View File

@@ -1,146 +0,0 @@
html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
u,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
main,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit; /* stylelint-disable-line */
vertical-align: baseline;
}
em,
i,
b {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
main,
menu,
nav,
section {
display: block;
}
*:focus,
:active {
outline: 0;
}
/* HTML5 hidden-attribute fix for newer browsers */
*[hidden] {
display: none;
}
body {
line-height: 1;
}
ol,
ul {
list-style: none;
}
blockquote,
q {
quotes: none;
}
blockquote:before,
blockquote:after,
q:before,
q:after {
content: "";
content: none;
}
table {
border-collapse: collapse;
border-spacing: 0;
}
a:link,
a:visited,
a:active {
text-decoration: none;
color: inherit;
}

View File

@@ -1,13 +0,0 @@
:root {
--color-beltza: #191919;
--color-urdina: #8fbbfd;
--color-morea: #510dfb;
--color-horia: #fdb201;
--color-gorria: #fd3647;
--color-zuria: #ffffff;
--color-grisa-1: #474747;
--color-grisa-2: #707070;
--color-grisa-3: #999999;
--color-grisa-4: #c2c2c2;
}

View File

@@ -1,4 +0,0 @@
:root {
--font-weight-regular: 400;
--font-weight-bold: 700;
}

View File

@@ -1,3 +0,0 @@
@import 'colors';
@import 'sizes';
@import 'fontWeight';

View File

@@ -1,14 +0,0 @@
@import '../tools/functions.scss';
:root {
--size-none: #{toRem(0)};
--size-xtiny: #{toRem(4)};
--size-tiny: #{toRem(8)};
--size-small: #{toRem(12)};
--size-mini: #{toRem(16)};
--size-base: #{toRem(24)};
--size-medium: #{toRem(32)};
--size-large: #{toRem(48)};
--size-xlarge: #{toRem(64)};
--size-huge: #{toRem(96)};
}

View File

@@ -1,5 +0,0 @@
@function toRem($value) {
$remValue: calc($value / 16) + rem;
@return $remValue;
}

View File

@@ -1,2 +0,0 @@
@import 'functions';
@import 'mediaQueries';

View File

@@ -1,17 +0,0 @@
// Hemos visto que .98 es una solución standard para no romper los estilos en las décimas de pixel entre un mediaquerie y otro.
// OJO! Tienen que ser unidades fraccionarias, .99 no funciona
// https://stackoverflow.com/questions/70120238/do-i-consider-decimal-point-of-px-in-media-query
$mobileMax: 767.98px;
$tabletMin: 768px;
$tabletMax: 1023.98px;
$desktopMin: 1024px;
$onlyMobile: 'only screen and (max-width: ' + $mobileMax + ')';
$onlyTablet: 'only screen and (min-width: ' + $tabletMin + ') AND (max-width: ' +
$tabletMax + ')';
$onlyDesktop: 'only screen and (min-width: ' + $desktopMin + ')';
$fromTablet: 'only screen and (min-width: ' + $tabletMin + ')';
$fromDesktop: 'only screen and (min-width: ' + $desktopMin + ')';

View File

@@ -1,19 +0,0 @@
@import '../mediaQueries.scss';
@mixin container {
margin-left: auto;
margin-right: auto;
padding-left: var(--size-small);
padding-right: var(--size-small);
width: 100%;
@media #{$fromTablet} {
padding-left: 0;
padding-right: 0;
width: 744px;
}
@media #{$fromDesktop} {
width: 1014px;
}
}

View File

@@ -1,31 +0,0 @@
@import '../functions.scss';
@mixin tinyFont() {
font-size: #{toRem(12.64)};
line-height: #{toRem(17)};
}
@mixin smallFont() {
font-size: #{toRem(16)};
line-height: #{toRem(22)};
}
@mixin baseFont() {
font-size: #{toRem(18)};
line-height: #{toRem(24)};
}
@mixin largeFont() {
font-size: #{toRem(25.63)};
line-height: #{toRem(35)};
}
@mixin hugeFont() {
font-size: #{toRem(36.41)};
line-height: #{toRem(50)};
}
@mixin gargantuanFont() {
font-size: #{toRem(41.83)};
line-height: #{toRem(57)};
}

View File

@@ -1,5 +0,0 @@
@import '../functions.scss';
@mixin outline {
outline: #{toRem(2)} solid var(--focus-outline);
}

View File

@@ -1 +0,0 @@
@import 'visuallyHidden';

View File

@@ -1,14 +0,0 @@
.visually-hidden:not(:focus):not(:active) {
position: absolute;
overflow: hidden;
border: 0;
width: 1px;
height: 1px;
padding: 0;
clip: rect(0 0 0 0);
clip-path: inset(50%);
white-space: nowrap;
}

View File

@@ -1,26 +0,0 @@
type classNameProp =
| string
| { [key: string]: boolean }
| null
| undefined
| false
export const classNames = (...classNames: classNameProp[]): string => {
const resultClasses: string[] = []
classNames.forEach(className => {
if (!className) return
if (typeof className === 'string') {
return resultClasses.push(className)
}
Object.keys(className).forEach(key => {
if (className[key]) {
resultClasses.push(key)
}
})
})
return resultClasses.join(' ')
}

View File

@@ -1,19 +0,0 @@
import 'dayjs/locale/eu';
import dayjs from 'dayjs';
import localizedFormat from 'dayjs/plugin/localizedFormat';
dayjs.extend(localizedFormat);
dayjs.locale('eu');
export function formatAbbreviatedDate(date: IsoDate) {
return dayjs(date).format('MMM D, dddd, LT[etan]');
}
export function formatLargeDate(date: IsoDate) {
return dayjs(date).format('LL, dddd, LT[etan]');
}
export function formatAbbreviatedDay(date: IsoDate) {
return dayjs(date).format('MMM D');
}

View File

@@ -1,89 +0,0 @@
@import '../../styles/tools/mixins/font.scss';
@import '../../styles/tools/mediaQueries.scss';
.wrapper {
padding-left: var(--size-small);
padding-right: var(--size-small);
padding-top: var(--size-huge);
margin-bottom: var(--size-huge);
@media #{$fromDesktop} {
display: grid;
grid-template-columns: 4fr 2fr;
gap: var(--size-huge);
padding-left: var(--size-huge);
padding-right: var(--size-huge);
}
}
.section {
@media #{$fromDesktop} {
position: relative;
&:hover {
& > .title {
transform: translateY(-200%);
filter: none;
}
}
}
}
.title {
font-family: 'Abril Fatface', sans-serif;
font-size: clamp(2rem, 4.2dvw, 5rem);
color: var(--color-grisa-3);
z-index: 10;
mix-blend-mode: difference;
@media #{$fromDesktop} {
position: absolute;
top: 0;
left: 0;
transition: transform 0.3s ease-in-out;
transform: translateX(-50%) rotate(-90deg) translateX(-50%)
translateY(-120%);
}
}
.zikloaCardList {
padding: var(--size-base);
display: grid;
gap: var(--size-large);
}
.card {
position: relative;
}
.cardLink {
font-family: 'Abril Fatface', sans-serif;
@include largeFont;
transition: color 0.4s ease;
&:hover {
color: var(--color-morea);
}
&::after {
position: absolute;
content: '';
left: 0;
top: 0;
right: 0;
bottom: 0;
}
}
.deskribapena {
@include baseFont;
font-weight: var(--font-weight-regular);
}
.cardHitzordua {
@include baseFont;
}

View File

@@ -1,77 +0,0 @@
import React from 'react';
import ReactMarkdown from 'react-markdown';
import { Link } from 'gatsby';
import { BiziContent } from '../../domain/bizi/BiziContent';
import { EkintzaContent } from '../../domain/ekintza/EkintzaContent';
import {
getLastEkintza,
ZikloaContent,
} from '../../domain/zikloa/ZikloaContent';
import { formatAbbreviatedDay } from '../../utilities/dateUtils';
import { EkintzaSnippetList } from '../components/EkintzaSnippetList/EkintzaSnippetList';
import { Hero } from '../components/Hero';
import { Layout } from '../components/Layout';
import { Oina } from '../components/Oina';
import * as styles from './Bizi.module.scss';
interface Props {
content: BiziContent;
ekintzak: EkintzaContent[];
zikloak: ZikloaContent[];
}
export const Bizi: React.FC<Props> = ({ content, ekintzak, zikloak }) => {
const { izenburua, deskribapena } = content;
const ekintzakToShow = ekintzak.filter(
ekintza => new Date(ekintza.hitzordua) >= new Date(),
);
const zikloakToShow = zikloak.filter(
zikloa => new Date(getLastEkintza(zikloa)) >= new Date(),
);
return (
<Layout>
<Hero izenburua={izenburua} deskribapena={deskribapena} atala="bizi" />
<main className={styles.wrapper} id="edukia">
<section className={styles.section}>
<h2 className={styles.title}>ekintzak</h2>
<EkintzaSnippetList ekintzak={ekintzakToShow} />
</section>
{zikloakToShow.length > 0 && (
<section className={styles.section}>
<h2 className={styles.title}>zikloak</h2>
<ul className={styles.zikloaCardList}>
{zikloakToShow.map(zikloa => (
<li className={styles.card} key={zikloa.slug}>
<p className={styles.cardHitzordua}>
{formatAbbreviatedDay(getLastEkintza(zikloa))} arte
</p>
<Link
className={styles.cardLink}
to={`/bizi/zikloak/${zikloa.slug}`}
>
{zikloa.izena}
</Link>
{zikloa.deskribapena && (
<ReactMarkdown className={styles.deskribapena}>
{zikloa.deskribapena}
</ReactMarkdown>
)}
</li>
))}
</ul>
</section>
)}
</main>
<Oina />
</Layout>
);
};

View File

@@ -1 +0,0 @@
export { Bizi } from './Bizi';

View File

@@ -1,103 +0,0 @@
@import '../../styles/tools/mixins/font.scss';
@import '../../styles/tools/mediaQueries.scss';
.wrapper {
display: flex;
flex-direction: column-reverse;
padding: var(--size-base) var(--size-small) var(--size-base) var(--size-small);
@media #{$fromTablet} {
width: 100%;
display: grid;
grid-template-columns: 2fr 1fr;
gap: var(--size-base);
padding: var(--size-huge) var(--size-base) var(--size-base) var(--size-base);
}
}
.kartela {
width: 56%;
height: auto;
margin-bottom: var(--size-base);
@media #{$fromTablet} {
width: 100%;
min-width: 360px;
height: auto;
}
}
.izenburuWrapper {
display: flex;
flex-direction: column;
margin-bottom: var(--size-base);
}
.hitzordua {
margin-bottom: var(--size-base);
@include largeFont;
color: var(--color-grisa-1);
}
.izenburua {
margin-bottom: var(--size-base);
font-family: 'Abril Fatface', sans-serif;
font-size: clamp(2rem, 4.2dvw, 5rem);
line-height: 125%;
}
.titularra {
@include hugeFont;
&:not(:last-child) {
margin-bottom: var(--size-base);
}
}
.deskribapena {
padding-top: var(--size-base);
@include largeFont;
font-weight: var(--font-weight-regular);
border-top: 3px solid var(--color-grisa-3);
p:not(:last-child) {
margin-bottom: var(--size-base);
}
}
.zikloa {
display: flex;
align-items: center;
margin-bottom: var(--size-small);
width: fit-content;
@include baseFont;
text-decoration: underline;
transition: color 0.3s ease;
.gezia {
transition: transform 0.3s ease;
}
&:hover {
color: var(--color-morea);
.gezia {
transform: translateX(var(--size-small));
}
}
&:visited,
&:link {
text-decoration: underline;
}
}
.gezia {
height: 1rem;
}

View File

@@ -1,73 +0,0 @@
import React from 'react';
import ReactMarkdown from 'react-markdown';
import { Link } from 'gatsby';
import Gezia from '../../assets/gezia.svg';
import { EkintzaContent } from '../../domain/ekintza/EkintzaContent';
import { formatLargeDate } from '../../utilities/dateUtils';
import { Gainburua } from '../components/Gainburua/Gainburua';
import { Layout } from '../components/Layout';
import { Oina } from '../components/Oina';
import * as styles from './Ekintza.module.scss';
interface Props {
content: EkintzaContent;
}
export const Ekintza: React.FC<Props> = ({ content }) => {
const { izenburua, kartela, titularra, hitzordua, deskribapena, zikloa } =
content;
return (
<Layout>
<Gainburua atala="bizi" />
<div className={styles.wrapper}>
<section className={styles.izenburuWrapper}>
{zikloa && (
<Link to={`/bizi/zikloak/${zikloa.slug}`} className={styles.zikloa}>
{zikloa.izena}{' '}
<Gezia aria-hidden={true} className={styles.gezia} />
</Link>
)}
<p className={styles.hitzordua}>{formatLargeDate(hitzordua)}</p>
<h1 className={styles.izenburua}>{izenburua}</h1>
<p className={styles.titularra}>{titularra}</p>
{deskribapena && (
<ReactMarkdown className={styles.deskribapena}>
{deskribapena}
</ReactMarkdown>
)}
</section>
{kartela && (
<aside>
<img
className={styles.kartela}
src={
kartela.formats.medium
? kartela.formats.medium.url
: kartela.formats.small.url
}
alt={kartela.alternativeText}
height={
kartela.formats.medium
? kartela.formats.medium.height
: kartela.formats.small.height
}
width={
kartela.formats.medium
? kartela.formats.medium.width
: kartela.formats.small.width
}
></img>
</aside>
)}
</div>
<Oina />
</Layout>
);
};

View File

@@ -1,44 +0,0 @@
@import '../../styles/tools/mixins/font.scss';
.contentWrapper {
padding: var(--size-huge) 0;
font-weight: var(--font-weight-regular);
@include largeFont;
}
.edukia {
margin-bottom: var(--size-large);
p:not(:last-child) {
margin-bottom: var(--size-base);
}
}
.izanLabaWrapper {
display: flex;
justify-content: flex-end;
}
.callToAction {
border: 2px solid var(--color-beltza);
@include largeFont;
padding: var(--size-base);
background: var(--color-zuria);
font-weight: var(--font-weight-bold);
cursor: pointer;
display: flex;
align-items: center;
transition: color 0.4s ease;
&:hover {
color: var(--color-morea);
}
&:focus {
outline: 3px solid var(--color-morea);
}
}
.gezia {
margin-right: var(--size-tiny);
}

View File

@@ -1,39 +0,0 @@
import React from 'react';
import ReactMarkdown from 'react-markdown';
import Gezia from '../../assets/gezia.svg';
import { HasieraContent } from '../../domain/hasiera/HasieraContent';
import { Container } from '../components/Container';
import { Hero } from '../components/Hero';
import { Oina } from '../components/Oina';
import * as styles from './Hasiera.module.scss';
interface Props {
content: HasieraContent;
}
export const Hasiera: React.FC<Props> = ({ content }) => {
const { izenburua, deskribapena, edukia } = content;
return (
<>
<Hero atala="hasiera" izenburua={izenburua} deskribapena={deskribapena} />
<div className={styles.contentWrapper} id="edukia">
<Container>
<ReactMarkdown className={styles.edukia}>{edukia}</ReactMarkdown>
<div className={styles.izanLabaWrapper}>
<a
className={styles.callToAction}
href="https://forms.gle/wV41CVkRX1JtHsAu9"
>
<Gezia className={styles.gezia} /> Labazkidetu.
</a>
</div>
</Container>
</div>
<Oina />
</>
);
};

View File

@@ -1 +0,0 @@
export { Hasiera } from './Hasiera';

View File

@@ -1,47 +0,0 @@
@import '../../styles/tools/mixins/font.scss';
.contentWrapper {
padding: var(--size-huge) 0;
}
.onEgin {
text-align: center;
@include gargantuanFont;
}
.taldeWrapper {
margin-bottom: var(--size-large);
}
.izenburuWrapper {
display: flex;
justify-content: flex-end;
align-items: center;
margin-bottom: var(--size-medium);
}
.marra {
/* altuera erabiliko den letraren berdina da */
height: #{toRem(41.83)};
flex-grow: 1;
box-shadow: inset 0px -3px 0px 0px var(--color-beltza);
margin-right: var(--size-tiny);
}
.izenburua {
text-align: right;
vertical-align: bottom;
font-family: 'Abril Fatface', serif;
@include gargantuanFont;
&:after {
content: '.';
}
}
.zerrendaWrapper {
&:not(:last-child) {
margin-bottom: var(--size-base);
}
}

View File

@@ -1,71 +0,0 @@
import React from 'react';
import { produktuaFactory } from '../../domain/kafetegia/factories/produktuaFactory';
import { KafetegiaContent } from '../../domain/kafetegia/KafetegiaContent';
import { Container } from '../components/Container';
import { Hero } from '../components/Hero';
import { Oina } from '../components/Oina';
import { ProduktuZerrenda } from './components/ProduktuZerrenda';
import * as styles from './Kafetegia.module.scss';
interface Props {
content: KafetegiaContent;
}
export const Kafetegia: React.FC<Props> = ({ content }) => {
const { izenburua, deskribapena, menua } = content;
/**
* oraingoz menuak alergenorik ez duenez, alergeno legenda ezkutatuko dugu.
* AlergenoLegenda konponentea sortuta dago, baina ez dugu erabiltzen
* performance arrazoiengatik
*/
return (
<>
<Hero
atala="kafetegia"
izenburua={izenburua}
deskribapena={deskribapena}
/>
<div className={styles.contentWrapper} id="edukia">
<Container>
{menua.map(konponentea => {
if (
konponentea.konponentea ===
'StrapiComponentKafetegiaProduktuTaldea'
) {
return (
<div className={styles.zerrendaWrapper} key={konponentea.id}>
<ProduktuZerrenda
izena={konponentea.izenburua}
produktuZerrenda={konponentea.produktuak.map(
produktuaFactory,
)}
/>
</div>
);
}
if (
konponentea.konponentea === 'StrapiComponentKafetegiaIzenburua'
) {
return (
<div className={styles.izenburuWrapper} key={konponentea.id}>
<div className={styles.marra} />
<h1 className={styles.izenburua}>
{konponentea.izenburuBalioa}
</h1>
</div>
);
}
})}
<p className={styles.onEgin}>On egin!</p>
</Container>
</div>
<Oina />
</>
);
};

View File

@@ -1,53 +0,0 @@
@import '../../../../styles/tools/mediaQueries.scss';
.wrapper {
width: 100%;
display: grid;
grid-column-gap: var(--size-tiny);
grid-row-gap: var(--size-base);
grid-template-columns: repeat(3, 1fr);
@media #{$fromTablet} {
grid-template-columns: repeat(5, 1fr);
}
}
.izena {
margin-bottom: var(--size-tiny);
font-weight: var(--font-weight-bold);
text-align: center;
}
.zenbakia {
font-weight: var(--font-weight-bold);
text-align: center;
color: var(--color-morea);
}
.alergenoWrapper {
display: flex;
flex-direction: column;
justify-content: center;
}
.logoWrapper {
margin-bottom: var(--size-mini);
display: flex;
align-items: flex-end;
justify-content: center;
height: var(--size-medium);
@media #{$fromDesktop} {
height: var(--size-huge);
}
}
.logo {
height: var(--size-medium);
@media #{$fromDesktop} {
height: var(--size-huge);
}
}

View File

@@ -1,45 +0,0 @@
import React from 'react';
import { mapAlergenoIdentifikadoreaToIzena } from '../../../../domain/kafetegia/mappers/mapAlergenoIdentifikadoreaToIzena';
import { mapAlergenoIdentifikadoreaToZenbakia } from '../../../../domain/kafetegia/mappers/mapAlergenoIdentifikadoreaToZenbakia';
import { AlergenoIdentifikadorea } from '../../../../domain/kafetegia/models/AlergenoIdentifikadorea';
import * as styles from './AlergenoLegenda.module.scss';
import { AlergenoLogoa } from './AlergenoLogoa';
const alergenoakOrdenaturik: AlergenoIdentifikadorea[] = [
'esnekiak',
'arrautzak',
'glutena',
'moluskuak',
'krustazeoak',
'arraina',
'lupinuak',
'fruituLehorrak',
'kakahueteak',
'sesamoa',
'soja',
'sulfitoak',
'apioa',
'ziapea',
];
export const AlergenoLegenda: React.FC = () => {
return (
<div className={styles.wrapper}>
{alergenoakOrdenaturik.map(alergenoa => (
<div className={styles.alergenoWrapper}>
<div className={styles.logoWrapper}>
<AlergenoLogoa alergenoId={alergenoa} />
</div>
<div className={styles.izena}>
{mapAlergenoIdentifikadoreaToIzena(alergenoa)}
</div>
<div className={styles.zenbakia}>
{mapAlergenoIdentifikadoreaToZenbakia(alergenoa)}
</div>
</div>
))}
</div>
);
};

View File

@@ -1,43 +0,0 @@
import React from 'react';
import { AlergenoIdentifikadorea } from '../../../../domain/kafetegia/models/AlergenoIdentifikadorea';
import Apioa from './assets/alergenoak/apioa.svg';
import Arraina from './assets/alergenoak/arraina.svg';
import Arrautzak from './assets/alergenoak/arrautzak.svg';
import Esnekiak from './assets/alergenoak/esnekiak.svg';
import FruituLehorrak from './assets/alergenoak/fruituLehorrak.svg';
import Glutena from './assets/alergenoak/glutena.svg';
import Kakahueteak from './assets/alergenoak/kakahueteak.svg';
import Krustazeoak from './assets/alergenoak/krustazeoak.svg';
import Lupinuak from './assets/alergenoak/lupinuak.svg';
import Moluskuak from './assets/alergenoak/moluskuak.svg';
import Sesamoa from './assets/alergenoak/sesamoa.svg';
import Soja from './assets/alergenoak/soja.svg';
import Sulfitoak from './assets/alergenoak/sulfitoak.svg';
import Ziapea from './assets/alergenoak/ziapea.svg';
interface Props {
alergenoId: AlergenoIdentifikadorea;
}
export const AlergenoLogoa: React.FC<Props> = ({ alergenoId }) => {
const alergenoIdToLogo: {
[id in AlergenoIdentifikadorea]: React.ReactNode;
} = {
esnekiak: <Esnekiak height="100%" />,
arrautzak: <Arrautzak height="100%" />,
glutena: <Glutena height="100%" />,
moluskuak: <Moluskuak height="100%" />,
krustazeoak: <Krustazeoak height="100%" />,
arraina: <Arraina height="100%" />,
lupinuak: <Lupinuak height="100%" />,
fruituLehorrak: <FruituLehorrak height="100%" />,
kakahueteak: <Kakahueteak height="100%" />,
sesamoa: <Sesamoa height="100%" />,
soja: <Soja height="100%" />,
sulfitoak: <Sulfitoak height="100%" />,
apioa: <Apioa height="100%" />,
ziapea: <Ziapea height="100%" />,
};
return <>{alergenoIdToLogo[alergenoId]}</>;
};

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="Capa_1" data-name="Capa 1" viewBox="0 0 355.33915 221.08047" version="1.1" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata id="metadata41">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1016" id="namedview39" showgrid="false" inkscape:zoom="0.86739199" inkscape:cx="177.65038" inkscape:cy="85.050976" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" inkscape:current-layer="Capa_1" />
<defs id="defs4">
<style id="style2">.cls-1{fill:#1d1d1b;}.cls-2{fill:#fff;}</style>
</defs>
<path class="cls-2" d="m 235.62038,44.169495 a 168.74,168.74 0 0 0 -87.54,-24.18 172,172 0 0 0 -39.67,4.58 80.14,80.14 0 0 1 16.3,-8.58 c 33.1,-13.23 75.9,-9.24 106.68,-3.34 1.61,4.83 5.71,18.79 4.23,31.52 z" id="path20" inkscape:connector-curvature="0" style="fill:#ffffff" />
<path class="cls-2" d="m 239.26038,179.5095 c -6.8,11.66 -19.15,24.7 -29.12,33.32 -21,3 -40.6,0.64 -58.59,-6.94 a 168,168 0 0 0 87.71,-26.38 z" id="path22" inkscape:connector-curvature="0" style="fill:#ffffff" />
<path class="cls-1" d="m 323.00038,112.9895 a 86.42,86.42 0 0 0 10.88,-9.24 c 15.52,-15.520005 23.73,-35.220005 20.91,-50.200005 a 3.52,3.52 0 0 0 -2.79,-2.8 c -15,-2.82 -34.68,5.39 -50.2,20.91 a 81.35,81.35 0 0 0 -15.71,21.69 152.88,152.88 0 0 0 -44,-45.06 c 3.45,-18.27 -4.35,-38.92 -4.76,-40 a 3.49,3.49 0 0 0 -2.59,-2.17 c -46.71,-9.24 -84.84,-8 -113.32,3.61 -16.78,6.84 -25.159995,15.45 -28.279995,19.26 q -5.76,2 -11.38,4.36 c -36.99,15.64 -65.91,43.41 -81.45000016,78.210005 a 3.47,3.47 0 0 0 0.11,3.09 3.51,3.51 0 0 0 2.57999996,1.79 c 0.18,0 10.4300002,1.63 27.1300002,3.27 -7.57,2.32 -14.29,5.86 -18.34,11.19 a 3.5,3.5 0 0 0 -0.19,4.09 c 16.74,25.39 41,45.33 70.17,57.66 a 168,168 0 0 0 53.389995,12.85 114,114 0 0 0 58,15.58 128.34,128.34 0 0 0 19,-1.43 3.51,3.51 0 0 0 1.75,-0.8 c 3.81,-3.24 30.85,-26.83 36.45,-47.13 a 152.11,152.11 0 0 0 35.68,-39.07 81.35,81.35 0 0 0 15.71,21.69 c 15.53,15.48 35.25,23.65 50.25,20.87 a 3.51,3.51 0 0 0 2.79,-2.79 c 2.82,-15 -5.39,-34.68 -20.91,-50.2 a 86.42,86.42 0 0 0 -10.88,-9.23 z m -198.29,-97.000005 c 33.1,-13.23 75.9,-9.24 106.68,-3.34 1.63,4.88 5.71,18.84 4.23,31.57 a 168.74,168.74 0 0 0 -87.54,-24.23 172,172 0 0 0 -39.67,4.58 80.14,80.14 0 0 1 16.3,-8.58 z m 85.43,196.890005 c -21,3 -40.6,0.64 -58.59,-6.94 a 168,168 0 0 0 87.71,-26.38 c -6.8,11.61 -19.15,24.65 -29.12,33.27 z m 138.06,-44.22 c -12.34,1 -28.65,-6.46 -41.49,-19.31 -7.79,-7.79 -13.61,-16.65 -16.82,-25.63 a 3.5,3.5 0 0 0 -6.34,-0.55 143.89,143.89 0 0 1 -32.37,38.82 c -1.08,0.92 -2.17,1.82 -3.28,2.7 -1.11,0.88 -2.51,2 -3.79,2.92 -26.7,19.94 -60.36,31.29 -96,31.29 q -5.42,0 -10.77,-0.34 c -2.47,-0.16 -4.94,-0.37 -7.39,-0.63 -2.45,-0.26 -4.83,-0.58 -7.23,-0.95 a 160.13,160.13 0 0 1 -38.199995,-10.85 c -27,-11.42 -49.64,-29.66 -65.55,-52.84 5.45,-5.28 16,-8.8 30.77,-10.22 a 159.92,159.92 0 0 1 18.54,-0.64 l 6.12,0.26 a 3.5057096,3.5057096 0 0 0 0.4,-7 c -0.43,0 -3,-0.21 -6.82,-0.29 -28.21,-1.34 -50.15,-4 -59.2800002,-5.25 C 23.920385,78.949495 50.700385,54.059495 84.520385,39.759495 q 4.58,-1.94 9.24,-3.58 c 2.26,-0.8 4.53,-1.55 6.829995,-2.24 v 0 c 2.53,-0.77 5.07,-1.47 7.64,-2.11 a 164.13,164.13 0 0 1 39.85,-4.84 161.51,161.51 0 0 1 86,24.4 c 1,0.63 2,1.28 3,1.94 1,0.66 2,1.33 3,2 a 145.21,145.21 0 0 1 43.5,47.400005 3.5,3.5 0 0 0 6.34,-0.55 70.73,70.73 0 0 1 16.82,-25.630005 c 12.85,-12.85 29.15,-20.36 41.49,-19.31 1,12.34 -6.46,28.65 -19.31,41.49 a 77.6,77.6 0 0 1 -14.12,11.260005 3.49,3.49 0 0 0 0,6 78,78 0 0 1 14.09,11.21 c 12.85,12.79 20.35,29.12 19.31,41.46 z" id="path24" inkscape:connector-curvature="0" style="fill:#1d1d1b" />
<path class="cls-2" d="m 210.34038,141.4995 c -8.73,2.65 -28.37,4.73 -54.41,-16 1.62,-4.22 5.73,-13.45 12.2,-18.39 z" id="path26" inkscape:connector-curvature="0" style="fill:#ffffff" />
<path class="cls-2" d="m 314.80038,115.9895 a 3.49,3.49 0 0 1 0,-6 77.6,77.6 0 0 0 14.09,-11.200005 c 12.85,-12.8 20.35,-29.15 19.31,-41.49 -12.34,-1.05 -28.64,6.46 -41.49,19.31 a 70.73,70.73 0 0 0 -16.82,25.630005 3.5,3.5 0 0 1 -6.34,0.55 145.21,145.21 0 0 0 -43.5,-47.400005 c -1,-0.69 -2,-1.36 -3,-2 -1,-0.64 -2,-1.31 -3,-1.94 a 161.51,161.51 0 0 0 -86,-24.4 164.13,164.13 0 0 0 -39.87,4.84 c -2.57,0.64 -5.11,1.34 -7.64,2.11 v 0 c -2.299995,0.69 -4.569995,1.44 -6.829995,2.24 q -4.67,1.65 -9.24,3.58 c -33.82,14.28 -60.58,39.17 -75.8000002,70.370005 9.1300002,1.24 31.0700002,3.91 59.2800002,5.25 3.85,0.08 6.39,0.26 6.82,0.29 a 3.5057096,3.5057096 0 0 1 -0.4,7 l -6.12,-0.26 a 159.92,159.92 0 0 0 -18.54,0.64 c -14.77,1.42 -25.32,4.94 -30.77,10.22 15.91,23.18 38.53,41.42 65.55,52.84 a 160.13,160.13 0 0 0 38.199995,10.82 c 2.4,0.37 4.81,0.68 7.23,0.95 2.42,0.27 4.92,0.47 7.39,0.63 q 5.35,0.35 10.77,0.34 c 35.67,0 69.33,-11.35 96,-31.29 1.28,-1 2.55,-1.93 3.79,-2.92 1.24,-0.99 2.2,-1.78 3.28,-2.7 a 143.89,143.89 0 0 0 32.37,-38.85 3.5,3.5 0 0 1 6.34,0.55 c 3.21,9 9,17.84 16.82,25.63 12.84,12.85 29.15,20.35 41.49,19.31 1,-12.34 -6.46,-28.64 -19.31,-41.49 a 78,78 0 0 0 -14.06,-11.16 z M 66.930385,89.989495 a 11.12,11.12 0 0 1 -1.93,-0.13 10.33,10.33 0 0 1 -6.82,-4.78 c -3.38,-5.24 -0.18,-11.42 0.24,-12.09 a 3.5,3.5 0 0 1 6.39,2.75 3,3 0 0 1 -0.26,0.62 c -0.43,0.81 -1.44,3.44 -0.48,4.93 a 3.22,3.22 0 0 0 2.21,1.7 c 2.55,0.47 6.65,-2 9.36,-3.83 0.89,-0.6 1.62,-1.14 2.11,-1.5 a 3.5011462,3.5011462 0 1 1 4.15,5.64 c -4.62,3.38 -9.9,6.69 -14.97,6.69 z m 18.62,78.890005 a 3.45,3.45 0 0 1 -1.3,0.25 3.5,3.5 0 0 1 -1.31,-6.75 28.48,28.48 0 0 0 4.34,-2.36 c 7.94,-5.08 24.249995,-19.31 28.059995,-52 q 0.45,-3.76 0.66,-7.87 a 3.5043723,3.5043723 0 0 1 7,0.35 c -2.7,53.91 -35.999995,67.85 -37.449995,68.42 z m 133.349995,-23.41 c -0.59,0.36 -8,4.66 -20.23,4.66 -12.23,0 -29.15,-4.23 -49.1,-20.75 a 3.51,3.51 0 0 1 -1.11,-3.74 c 0.24,-0.76 6,-18.84 18.12,-25.870005 a 3.49,3.49 0 0 1 4,0.310005 l 48.76,39.68 a 3.52,3.52 0 0 1 1.28,3 3.48,3.48 0 0 1 -1.72,2.71 z" id="path28" inkscape:connector-curvature="0" style="fill:#ffffff" />
<path class="cls-1" d="m 123.00038,100.5695 c -2.7,53.84 -35.999995,67.78 -37.449995,68.35 a 3.45,3.45 0 0 1 -1.3,0.25 3.5,3.5 0 0 1 -1.31,-6.75 28.48,28.48 0 0 0 4.34,-2.36 c 7.94,-5.08 24.249995,-19.31 28.059995,-52 q 0.45,-3.76 0.66,-7.87 a 3.5043723,3.5043723 0 0 1 7,0.35 z" id="path30" inkscape:connector-curvature="0" style="fill:#1d1d1b" />
<path class="cls-2" d="m 210.34038,141.4995 c -8.73,2.65 -28.37,4.73 -54.41,-16 1.62,-4.22 5.73,-13.45 12.2,-18.39 z" id="path32" inkscape:connector-curvature="0" style="fill:#ffffff" />
<path class="cls-1" d="m 219.30038,139.7595 -48.76,-39.68 a 3.49,3.49 0 0 0 -4,-0.310005 c -12.13,7.000005 -17.88,25.110005 -18.12,25.870005 a 3.51,3.51 0 0 0 1.11,3.74 c 20,16.52 36.93,20.75 49.1,20.75 12.17,0 19.64,-4.3 20.23,-4.66 a 3.48,3.48 0 0 0 1.68,-2.75 3.52,3.52 0 0 0 -1.24,-2.96 z m -63.37,-14.23 c 1.62,-4.22 5.73,-13.45 12.2,-18.39 l 42.21,34.36 c -8.73,2.65 -28.34,4.73 -54.41,-15.97 z" id="path34" inkscape:connector-curvature="0" style="fill:#1d1d1b" />
<path class="cls-1" d="m 81.900385,83.279495 c -4.62,3.4 -9.9,6.71 -14.97,6.71 a 11.12,11.12 0 0 1 -1.93,-0.13 10.33,10.33 0 0 1 -6.82,-4.78 c -3.38,-5.24 -0.18,-11.42 0.24,-12.09 a 3.5,3.5 0 0 1 6.39,2.75 3,3 0 0 1 -0.26,0.62 c -0.43,0.81 -1.44,3.44 -0.48,4.93 a 3.22,3.22 0 0 0 2.21,1.7 c 2.55,0.47 6.65,-2 9.36,-3.83 0.89,-0.6 1.62,-1.14 2.11,-1.5 a 3.5011462,3.5011462 0 1 1 4.15,5.64 z" id="path36" inkscape:connector-curvature="0" style="fill:#1d1d1b" />
</svg>

Before

Width:  |  Height:  |  Size: 8.1 KiB

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