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
@@ -1,3 +0,0 @@
|
||||
GATSBY_ROOT_URL=http://127.0.0.1:8000
|
||||
API_URL=http://127.0.0.1:1337
|
||||
STRAPI_GRAPHQL_TOKEN=307442ef6911b9692d6946bf6aac5d910795b56d92063e8a58ace14e31c8ac6ad7b64480ba591689abbad02758da9562e423e1ef1af8b9f303612ffb63f94f567060ea9f690d9d14bce676bdcf985a2a8c95643963ffd6f593490bb4b4ccae51572cbf315e7c823d0f368de2fe113b113986e9943df1a81e6e4228b82cc7cead
|
||||
2
front/.env.example
Normal file
@@ -0,0 +1,2 @@
|
||||
SITE_URL="http://localhost:3000"
|
||||
STRAPI_URL="http://127.0.0.1:1337"
|
||||
@@ -1,3 +0,0 @@
|
||||
GATSBY_ROOT_URL=https://laba-webgunea.netlify.app
|
||||
API_URL=https://vervet-big-dassie.ngrok-free.app
|
||||
STRAPI_GRAPHQL_TOKEN=307442ef6911b9692d6946bf6aac5d910795b56d92063e8a58ace14e31c8ac6ad7b64480ba591689abbad02758da9562e423e1ef1af8b9f303612ffb63f94f567060ea9f690d9d14bce676bdcf985a2a8c95643963ffd6f593490bb4b4ccae51572cbf315e7c823d0f368de2fe113b113986e9943df1a81e6e4228b82cc7cead
|
||||
24
front/.gitignore
vendored
@@ -1,4 +1,24 @@
|
||||
# build output
|
||||
dist/
|
||||
|
||||
# generated types
|
||||
.astro/
|
||||
|
||||
# dependencies
|
||||
node_modules/
|
||||
.cache/
|
||||
public
|
||||
|
||||
# logs
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
|
||||
# environment variables
|
||||
.env
|
||||
.env.production
|
||||
|
||||
# macOS-specific files
|
||||
.DS_Store
|
||||
|
||||
# jetbrains setting folder
|
||||
.idea/
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
node_modules
|
||||
public
|
||||
.cache
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"printWidth": 80,
|
||||
"tabWidth": 2,
|
||||
"useTabs": false,
|
||||
"semi": true,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "all",
|
||||
"bracketSpacing": true,
|
||||
"bracketSameLine": false,
|
||||
"arrowParens": "avoid"
|
||||
}
|
||||
4
front/.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"recommendations": ["astro-build.astro-vscode"],
|
||||
"unwantedRecommendations": []
|
||||
}
|
||||
11
front/.vscode/launch.json
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"command": "./node_modules/.bin/astro dev",
|
||||
"name": "Development server",
|
||||
"request": "launch",
|
||||
"type": "node-terminal"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,54 +1,48 @@
|
||||
<p align="center">
|
||||
<a href="https://www.gatsbyjs.com/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter">
|
||||
<img alt="Gatsby" src="https://www.gatsbyjs.com/Gatsby-Monogram.svg" width="60" />
|
||||
</a>
|
||||
</p>
|
||||
<h1 align="center">
|
||||
Gatsby minimal starter
|
||||
</h1>
|
||||
# Astro Starter Kit: Basics
|
||||
|
||||
## 🚀 Quick start
|
||||
```sh
|
||||
npm create astro@latest -- --template basics
|
||||
```
|
||||
|
||||
1. **Create a Gatsby site.**
|
||||
[](https://stackblitz.com/github/withastro/astro/tree/latest/examples/basics)
|
||||
[](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/basics)
|
||||
[](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/basics/devcontainer.json)
|
||||
|
||||
Use the Gatsby CLI to create a new site, specifying the minimal starter.
|
||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||
|
||||
```shell
|
||||
# create a new Gatsby site using the minimal starter
|
||||
npm init gatsby
|
||||
```
|
||||

|
||||
|
||||
2. **Start developing.**
|
||||
## 🚀 Project Structure
|
||||
|
||||
Navigate into your new site’s directory and start it up.
|
||||
Inside of your Astro project, you'll see the following folders and files:
|
||||
|
||||
```shell
|
||||
cd my-gatsby-site/
|
||||
npm run develop
|
||||
```
|
||||
```text
|
||||
/
|
||||
├── public/
|
||||
│ └── favicon.svg
|
||||
├── src/
|
||||
│ ├── layouts/
|
||||
│ │ └── Layout.astro
|
||||
│ └── pages/
|
||||
│ └── index.astro
|
||||
└── package.json
|
||||
```
|
||||
|
||||
3. **Open the code and start customizing!**
|
||||
To learn more about the folder structure of an Astro project, refer to [our guide on project structure](https://docs.astro.build/en/basics/project-structure/).
|
||||
|
||||
Your site is now running at http://localhost:8000!
|
||||
## 🧞 Commands
|
||||
|
||||
Edit `src/pages/index.js` to see your site update in real-time!
|
||||
All commands are run from the root of the project, from a terminal:
|
||||
|
||||
4. **Learn more**
|
||||
| Command | Action |
|
||||
| :------------------------ | :----------------------------------------------- |
|
||||
| `npm install` | Installs dependencies |
|
||||
| `npm run dev` | Starts local dev server at `localhost:4321` |
|
||||
| `npm run build` | Build your production site to `./dist/` |
|
||||
| `npm run preview` | Preview your build locally, before deploying |
|
||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `npm run astro -- --help` | Get help using the Astro CLI |
|
||||
|
||||
- [Documentation](https://www.gatsbyjs.com/docs/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
## 👀 Want to learn more?
|
||||
|
||||
- [Tutorials](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
|
||||
- [Guides](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
|
||||
- [API Reference](https://www.gatsbyjs.com/docs/api-reference/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
|
||||
- [Plugin Library](https://www.gatsbyjs.com/plugins?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
|
||||
- [Cheat Sheet](https://www.gatsbyjs.com/docs/cheat-sheet/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
|
||||
|
||||
## 🚀 Quick start (Gatsby Cloud)
|
||||
|
||||
Deploy this starter with one click on [Gatsby Cloud](https://www.gatsbyjs.com/cloud/):
|
||||
|
||||
[<img src="https://www.gatsbyjs.com/deploynow.svg" alt="Deploy to Gatsby Cloud">](https://www.gatsbyjs.com/dashboard/deploynow?url=https://github.com/gatsbyjs/gatsby-starter-minimal)
|
||||
Feel free to check [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
||||
|
||||
18
front/astro.config.mjs
Normal file
@@ -0,0 +1,18 @@
|
||||
// @ts-check
|
||||
import { defineConfig } from "astro/config";
|
||||
import { loadEnv } from "vite";
|
||||
|
||||
import react from "@astrojs/react";
|
||||
|
||||
import sitemap from "@astrojs/sitemap";
|
||||
|
||||
const { SITE_URL } = loadEnv(process.env.NODE_ENV || "", process.cwd(), "");
|
||||
|
||||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
site: SITE_URL,
|
||||
output: "static",
|
||||
|
||||
trailingSlash: "never",
|
||||
integrations: [react(), sitemap()],
|
||||
});
|
||||
@@ -1 +0,0 @@
|
||||
import './src/styles/cssConfig.scss';
|
||||
@@ -1,57 +0,0 @@
|
||||
require('dotenv').config({
|
||||
path: `.env.${process.env.NODE_ENV}`,
|
||||
});
|
||||
|
||||
module.exports = {
|
||||
trailingSlash: 'never',
|
||||
plugins: [
|
||||
'gatsby-plugin-react-helmet',
|
||||
{
|
||||
resolve: 'gatsby-source-strapi-graphql',
|
||||
options: {
|
||||
apiURL: process.env.API_URL,
|
||||
collectionTypes: ['ekintza', 'erakundea', 'zikloa'],
|
||||
singleTypes: [
|
||||
'hasiera',
|
||||
'bizi',
|
||||
'kafetegia',
|
||||
'lege-oharra',
|
||||
'pribatutasun-politika',
|
||||
],
|
||||
// Enable/disable cache.
|
||||
cache: false,
|
||||
token: process.env.STRAPI_GRAPHQL_TOKEN,
|
||||
},
|
||||
},
|
||||
'gatsby-plugin-image',
|
||||
'gatsby-plugin-sharp',
|
||||
{
|
||||
resolve: 'gatsby-plugin-react-svg',
|
||||
options: {
|
||||
rule: {
|
||||
include: /assets/,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
resolve: 'gatsby-plugin-webfonts',
|
||||
options: {
|
||||
fonts: {
|
||||
google: [
|
||||
{
|
||||
family: 'Lato',
|
||||
variants: ['400', '700'],
|
||||
fontDisplay: 'swap',
|
||||
},
|
||||
{
|
||||
family: 'Abril Fatface',
|
||||
variants: ['400'],
|
||||
fontDisplay: 'swap',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
},
|
||||
'gatsby-plugin-sass',
|
||||
],
|
||||
};
|
||||
12
front/index.d.ts
vendored
@@ -1,12 +0,0 @@
|
||||
declare module '*.png' {
|
||||
const value: string;
|
||||
export default value;
|
||||
}
|
||||
|
||||
declare module '*.jpeg' {
|
||||
const value: string;
|
||||
export default value;
|
||||
}
|
||||
|
||||
declare module '*.module.css';
|
||||
declare module '*.module.scss';
|
||||
@@ -1,48 +1,30 @@
|
||||
{
|
||||
"name": "front",
|
||||
"version": "1.0.0",
|
||||
"private": true,
|
||||
"description": "Laba webgunerako front-a",
|
||||
"author": "Laba Sarea",
|
||||
"keywords": [
|
||||
"gatsby"
|
||||
],
|
||||
"main": "gatsby-config.js",
|
||||
"type": "module",
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"develop": "gatsby develop",
|
||||
"preview": "ENABLE_GATSBY_REFRESH_ENDPOINT=true gatsby develop -H 0.0.0.0 -p 8000",
|
||||
"start": "gatsby build && gatsby serve",
|
||||
"build": "gatsby build",
|
||||
"serve": "gatsby serve",
|
||||
"clean": "gatsby clean",
|
||||
"prettier": "prettier . --write"
|
||||
"dev": "astro dev",
|
||||
"build": "astro build",
|
||||
"preview": "astro preview",
|
||||
"astro": "astro",
|
||||
"serve": "serve dist"
|
||||
},
|
||||
"dependencies": {
|
||||
"@strapi/plugin-graphql": "^4.25.17",
|
||||
"dayjs": "^1.11.10",
|
||||
"gatsby": "^5.12.11",
|
||||
"gatsby-plugin-image": "^3.12.3",
|
||||
"gatsby-plugin-react-helmet": "^6.12.0",
|
||||
"gatsby-plugin-react-svg": "^3.3.0",
|
||||
"gatsby-plugin-sass": "^6.12.3",
|
||||
"gatsby-plugin-sharp": "^5.12.3",
|
||||
"gatsby-plugin-sitemap": "^6.12.3",
|
||||
"gatsby-plugin-webfonts": "^2.3.2",
|
||||
"gatsby-source-strapi-graphql": "^6.1.2",
|
||||
"gatsby-transformer-sharp": "^5.12.3",
|
||||
"raw-loader": "^4.0.2",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
"react-helmet": "^6.1.0",
|
||||
"react-markdown": "^8.0.7",
|
||||
"remark-gfm": "^3.0.1",
|
||||
"sass": "^1.69.5",
|
||||
"typescript-plugin-css-modules": "^5.0.2"
|
||||
"@astrojs/node": "^9.4.2",
|
||||
"@astrojs/react": "^4.3.0",
|
||||
"@astrojs/rss": "^4.0.12",
|
||||
"@astrojs/sitemap": "^3.5.1",
|
||||
"@types/react": "^19.1.11",
|
||||
"@types/react-dom": "^19.1.7",
|
||||
"astro": "^5.13.2",
|
||||
"dayjs": "^1.11.15",
|
||||
"gsap": "^3.13.0",
|
||||
"marked": "^15.0.11",
|
||||
"react": "^19.1.1",
|
||||
"react-dom": "^19.1.1",
|
||||
"serve": "^14.2.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-helmet": "^6.1.11",
|
||||
"gatsby-source-rest-api": "^0.2.3",
|
||||
"prettier": "^3.1.0",
|
||||
"qs": "^6.11.2"
|
||||
"sass-embedded": "^1.90.0"
|
||||
}
|
||||
}
|
||||
|
||||
9
front/public/favicon.svg
Normal file
@@ -0,0 +1,9 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128">
|
||||
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" />
|
||||
<style>
|
||||
path { fill: #000; }
|
||||
@media (prefers-color-scheme: dark) {
|
||||
path { fill: #FFF; }
|
||||
}
|
||||
</style>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 749 B |
BIN
front/public/fonts/inter/Inter-VariableFont.ttf
Normal file
BIN
front/public/fonts/sohne/soehne-dreiviertelfett-kursiv.woff2
Normal file
BIN
front/public/fonts/sohne/soehne-dreiviertelfett.woff2
Normal file
4
front/public/robots.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://laba.eus/sitemap-index.xml
|
||||
4
front/src/@types/typings.d.ts
vendored
@@ -1,4 +0,0 @@
|
||||
declare module '*.svg' {
|
||||
const content: any;
|
||||
export default content;
|
||||
}
|
||||
@@ -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 |
4
front/src/assets/close.svg
Normal 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 |
@@ -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 |
@@ -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 |
@@ -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 |
4
front/src/assets/hamburger.svg
Normal 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 |
@@ -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 |
10
front/src/assets/labaLogo.svg
Normal 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 |
@@ -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 |
@@ -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 |
@@ -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
@@ -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 };
|
||||
@@ -1 +0,0 @@
|
||||
export type AtalaName = 'hasiera' | 'kafetegia' | 'bizi';
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
type IsoDate = string;
|
||||
@@ -1 +0,0 @@
|
||||
export type Markdown = string;
|
||||
@@ -1,4 +0,0 @@
|
||||
export interface RegularPageContent {
|
||||
izenburua: string;
|
||||
edukia: string;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
export interface BiziContent {
|
||||
izenburua: string;
|
||||
deskribapena: string;
|
||||
}
|
||||
@@ -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'>;
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
export interface HasieraContent {
|
||||
deskribapena: string;
|
||||
izenburua: string;
|
||||
edukia: string;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
import { MenuKonponentea } from './hooks/useKafetegiaContent';
|
||||
|
||||
export interface KafetegiaContent {
|
||||
deskribapena: string;
|
||||
izenburua: string;
|
||||
menua: MenuKonponentea[];
|
||||
}
|
||||
@@ -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;
|
||||
};
|
||||
}
|
||||
@@ -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),
|
||||
}));
|
||||
}
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
export type AlergenoIdentifikadorea =
|
||||
| 'apioa'
|
||||
| 'arraina'
|
||||
| 'arrautzak'
|
||||
| 'esnekiak'
|
||||
| 'fruituLehorrak'
|
||||
| 'glutena'
|
||||
| 'kakahueteak'
|
||||
| 'krustazeoak'
|
||||
| 'lupinuak'
|
||||
| 'moluskuak'
|
||||
| 'sesamoa'
|
||||
| 'soja'
|
||||
| 'sulfitoak'
|
||||
| 'ziapea';
|
||||
@@ -1,7 +0,0 @@
|
||||
import { AlergenoIdentifikadorea } from './AlergenoIdentifikadorea';
|
||||
|
||||
export interface Alergenoa {
|
||||
id: AlergenoIdentifikadorea;
|
||||
izena: string;
|
||||
zenbakia: string;
|
||||
}
|
||||
@@ -1,10 +0,0 @@
|
||||
import { Alergenoa } from './Alergenoa';
|
||||
|
||||
export interface Produktua {
|
||||
id: string;
|
||||
izena: string;
|
||||
prezioa: number;
|
||||
ekologikoa: boolean;
|
||||
beganoa: boolean;
|
||||
alergenoak: Alergenoa[];
|
||||
}
|
||||
@@ -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
@@ -0,0 +1,6 @@
|
||||
type EnvBoolean = "true" | "false";
|
||||
|
||||
interface ImportMetaEnv {
|
||||
readonly STRAPI_URL: string;
|
||||
readonly SITE_URL: string;
|
||||
}
|
||||
53
front/src/layouts/Layout.astro
Normal 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>
|
||||
35
front/src/models/Ekintza.ts
Normal 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}`;
|
||||
}
|
||||
30
front/src/models/Hasiera.ts
Normal 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[];
|
||||
}
|
||||
42
front/src/models/ImageMedia.ts
Normal 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,
|
||||
};
|
||||
}
|
||||
1
front/src/models/Markdown.ts
Normal file
@@ -0,0 +1 @@
|
||||
export type Markdown = string;
|
||||
14
front/src/models/OrriBasikoa.ts
Normal 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[];
|
||||
}
|
||||
13
front/src/models/Zikloa.ts
Normal 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}`;
|
||||
}
|
||||
@@ -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;
|
||||
16
front/src/pages/[orriBasikoa].astro
Normal 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} />
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
16
front/src/pages/ekintzak/[ekintza].astro
Normal 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} />
|
||||
10
front/src/pages/ekintzak/index.astro
Normal 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} />
|
||||
51
front/src/pages/index.astro
Normal 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} />
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
31
front/src/pages/rss.xml.ts
Normal 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>`,
|
||||
});
|
||||
}
|
||||
16
front/src/pages/zikloak/[zikloa].astro
Normal 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} />
|
||||
75
front/src/style/config/reset.scss
Normal 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;
|
||||
}
|
||||
81
front/src/style/mixins/displayFonts.scss
Normal 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%;
|
||||
}
|
||||
}
|
||||
11
front/src/style/mixins/grid12Columns.scss
Normal 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);
|
||||
}
|
||||
}
|
||||
24
front/src/style/mixins/textFonts.scss
Normal 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%;
|
||||
}
|
||||
}
|
||||
13
front/src/style/tools/mediaQueries.scss
Normal file
@@ -0,0 +1,13 @@
|
||||
$tablet: 1024px;
|
||||
|
||||
@mixin aboveTablet {
|
||||
@media (min-width: $tablet) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin belowTablet {
|
||||
@media (max-width: calc($tablet - 1px)) {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
14
front/src/style/tools/toDVW.scss
Normal 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;
|
||||
}
|
||||
6
front/src/style/vars/colors.scss
Normal file
@@ -0,0 +1,6 @@
|
||||
:root {
|
||||
--zuria: #ffffff;
|
||||
--gorria: #ff3e3e;
|
||||
--gorria-background: #fffbfb; // gorriari %5 opazitatea fondo zurian
|
||||
--marroia: #4b2125;
|
||||
}
|
||||
23
front/src/style/vars/fontDeclarations.scss
Normal 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;
|
||||
}
|
||||
3
front/src/style/vars/index.scss
Normal file
@@ -0,0 +1,3 @@
|
||||
@use "./fontDeclarations.scss";
|
||||
@use "./colors.scss";
|
||||
@use "./spacings.scss";
|
||||
36
front/src/style/vars/spacings.scss
Normal 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)};
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
@import 'reset';
|
||||
@import 'reboot';
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
:root {
|
||||
--font-weight-regular: 400;
|
||||
--font-weight-bold: 700;
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
@import 'colors';
|
||||
@import 'sizes';
|
||||
@import 'fontWeight';
|
||||
@@ -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)};
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
@function toRem($value) {
|
||||
$remValue: calc($value / 16) + rem;
|
||||
|
||||
@return $remValue;
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
@import 'functions';
|
||||
@import 'mediaQueries';
|
||||
@@ -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 + ')';
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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)};
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
@import '../functions.scss';
|
||||
|
||||
@mixin outline {
|
||||
outline: #{toRem(2)} solid var(--focus-outline);
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
@import 'visuallyHidden';
|
||||