@tmf_ciclica/ciclicastorybook 1.0.10 → 1.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +22 -52
- package/.storybook/main.js +0 -21
- package/.storybook/preview.jsx +0 -31
- package/eslint.config.js +0 -38
- package/index.html +0 -13
- package/public/vite.svg +0 -1
- package/src/App.css +0 -0
- package/src/App.jsx +0 -36
- package/src/_variables.scss +0 -56
- package/src/assets/img/arrowDown.svg +0 -3
- package/src/assets/img/closeIcon.svg +0 -4
- package/src/assets/img/copyIcon.svg +0 -17
- package/src/assets/img/deleteIcon.svg +0 -6
- package/src/assets/img/eyeActiveIcon.svg +0 -6
- package/src/assets/img/eyeNotActiveIcon.svg +0 -8
- package/src/assets/img/filtersIcon.svg +0 -6
- package/src/assets/img/langarrow.png +0 -0
- package/src/assets/img/pause.svg +0 -5
- package/src/assets/img/play.svg +0 -4
- package/src/assets/img/processingIcon.svg +0 -20
- package/src/assets/img/sample-image.png +0 -0
- package/src/assets/img/sample2.png +0 -0
- package/src/assets/img/world.svg +0 -3
- package/src/assets/mapStyles/mapStyle.js +0 -781
- package/src/components/AmbitSelector/AmbitItem/AmbitItem.jsx +0 -74
- package/src/components/AmbitSelector/AmbitItem/AmbitItem.module.scss +0 -27
- package/src/components/AmbitSelector/AmbitSelector.jsx +0 -68
- package/src/components/AmbitSelector/AmbitSelector.module.scss +0 -29
- package/src/components/AmbitSelector/AmbitSelector.stories.jsx +0 -21
- package/src/components/ButtonsList/ButtonsList.jsx +0 -92
- package/src/components/ButtonsList/ButtonsList.module.scss +0 -37
- package/src/components/ButtonsList/ButtonsList.stories.jsx +0 -55
- package/src/components/DropdownList/DropdownList.jsx +0 -69
- package/src/components/DropdownList/DropdownList.module.scss +0 -20
- package/src/components/DropdownList/DropdownList.stories.jsx +0 -22
- package/src/components/DropdownList/DropdownListExample/DropDownListExample.jsx +0 -33
- package/src/components/DropdownList/DropdownListExample/DropdownListExample.stories.jsx +0 -11
- package/src/components/EditAmbit/EditAmbit.jsx +0 -7
- package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.jsx +0 -57
- package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.module.scss +0 -13
- package/src/components/FiltersAmbit/AppliedFilters/AppliedFilters.stories.jsx +0 -47
- package/src/components/FiltersAmbit/FiltersAmbit.jsx +0 -58
- package/src/components/FiltersAmbit/FiltersAmbit.module.scss +0 -28
- package/src/components/FiltersAmbit/FiltersAmbit.stories.jsx +0 -36
- package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.jsx +0 -33
- package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.module.scss +0 -13
- package/src/components/FiltersAmbit/GeographicFilters/GeographicalFilters.stories.jsx +0 -47
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.jsx +0 -83
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.module.scss +0 -8
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFilters.stories.jsx +0 -17
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersCategory/TematicalFiltersCategory.jsx +0 -60
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/AbsoluteSlider/AbsoluteSlider.jsx +0 -61
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/AbsoluteSlider/AbsoluteSlider.module.scss +0 -45
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/CategoryCheckbox/CategoryChackbox.module.scss +0 -18
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/CategoryCheckbox/CategoryCheckbox.jsx +0 -47
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/TematicalFiltersInput.jsx +0 -267
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersInput/TematicalFiltersInput.module.scss +0 -31
- package/src/components/FiltersAmbit/TematicalFilters/TematicalFiltersSubcat/TematicalFiltersSubcat.jsx +0 -58
- package/src/components/FiltersAmbit/useAmbitStore.jsx +0 -10
- package/src/components/Graphic/BarChart/BarChart.jsx +0 -146
- package/src/components/Graphic/BarChart/BarChart.module.scss +0 -5
- package/src/components/Graphic/BarChart/BarChart.stories.jsx +0 -18
- package/src/components/Graphic/Graphic.jsx +0 -55
- package/src/components/Graphic/Graphic.module.scss +0 -12
- package/src/components/Graphic/Graphic.stories.jsx +0 -25
- package/src/components/IndicatorsList/Indicator/Indicator.jsx +0 -180
- package/src/components/IndicatorsList/Indicator/Indicator.module.scss +0 -46
- package/src/components/IndicatorsList/IndicatorSubCategory/IndicatorSubCategory.jsx +0 -76
- package/src/components/IndicatorsList/IndicatorSubCategory/IndicatorSubCategory.module.scss +0 -12
- package/src/components/IndicatorsList/IndicatorsCategory/IndicatorsCategory.jsx +0 -122
- package/src/components/IndicatorsList/IndicatorsCategory/IndicatorsCategory.module.scss +0 -20
- package/src/components/IndicatorsList/IndicatorsList.jsx +0 -173
- package/src/components/IndicatorsList/IndicatorsList.module.scss +0 -10
- package/src/components/IndicatorsList/IndicatorsList.stories.jsx +0 -263
- package/src/components/LangSelector/LangSelector.jsx +0 -70
- package/src/components/LangSelector/LangSelector.module.scss +0 -41
- package/src/components/LangSelector/LangSelector.stories.jsx +0 -27
- package/src/components/Legend/Legend.jsx +0 -132
- package/src/components/Legend/Legend.module.scss +0 -121
- package/src/components/Legend/Legend.stories.jsx +0 -53
- package/src/components/LogoApp/LogoApp.jsx +0 -33
- package/src/components/LogoApp/LogoApp.module.scss +0 -7
- package/src/components/LogoApp/LogoApp.stories.jsx +0 -27
- package/src/components/MapboxMap/MapboxMap.jsx +0 -160
- package/src/components/MapboxMap/MapboxMap.module.scss +0 -4
- package/src/components/MapboxMap/MapboxMap.stories.jsx +0 -57
- package/src/components/MaplibreMap/MaplibreMap.jsx +0 -166
- package/src/components/MaplibreMap/MaplibreMap.module.scss +0 -5
- package/src/components/MaplibreMap/MaplibreMap.stories.jsx +0 -55
- package/src/components/SectionBar/SectionBar.jsx +0 -41
- package/src/components/SectionBar/SectionBar.module.scss +0 -40
- package/src/components/SectionBar/SectionBar.stories.jsx +0 -35
- package/src/components/TimeSlider/TimeSlider.jsx +0 -147
- package/src/components/TimeSlider/TimeSlider.module.scss +0 -63
- package/src/components/TimeSlider/TimeSlider.stories.jsx +0 -9
- package/src/components/Tooltip/Tooltip.jsx +0 -40
- package/src/components/Tooltip/Tooltip.module.scss +0 -141
- package/src/components/Tooltip/Tooltip.stories.jsx +0 -51
- package/src/components/TopNavMenu/TopNavMenu.jsx +0 -62
- package/src/components/TopNavMenu/TopNavMenu.module.scss +0 -21
- package/src/components/TopNavMenu/TopNavMenu.stories.jsx +0 -20
- package/src/components/UserMenuTrigger/UserMenuTrigger.jsx +0 -47
- package/src/components/UserMenuTrigger/UserMenuTrigger.module.scss +0 -5
- package/src/components/UserMenuTrigger/UserMenuTrigger.stories.jsx +0 -33
- package/src/components/index.jsx +0 -17
- package/src/constants/indicators.js +0 -1371
- package/src/constants/mapTexts.js +0 -161
- package/src/constants/textLayers.js +0 -639
- package/src/constants/topNavMenuOptions.js +0 -14
- package/src/i18n.js +0 -19
- package/src/index.jsx +0 -2
- package/src/index.scss +0 -87
- package/src/locales/ca.json +0 -8
- package/src/locales/es.json +0 -15
- package/src/main.jsx +0 -10
- package/src/sections/HeaderSection/HeaderSection.jsx +0 -51
- package/src/sections/HeaderSection/HeaderSection.module.scss +0 -33
- package/src/sections/HeaderSection/HeaderSection.stories.jsx +0 -61
- package/src/sections/RightSidebar/RightSidebar.jsx +0 -35
- package/src/sections/RightSidebar/RightSidebar.module.scss +0 -39
- package/src/sections/RightSidebar/RightSidebar.stories.jsx +0 -21
- package/src/sections/index.jsx +0 -2
- package/src/store/index.js +0 -1
- package/src/store/mapSlice/index.js +0 -1
- package/src/store/mapSlice/mapSlice.js +0 -30
- package/src/store/rightBarSlice/index.js +0 -1
- package/src/store/rightBarSlice/rightBarSlice.js +0 -28
- package/src/store/routerSlice/index.js +0 -1
- package/src/store/routerSlice/routerSlice.js +0 -14
- package/src/store/store.js +0 -14
- package/src/store/userSlice/index.js +0 -1
- package/src/store/userSlice/userSlice.js +0 -22
- package/tmf_ciclica-ciclicastorybook-1.0.8.tgz +0 -0
- package/vite.config.js +0 -49
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
TimeSlider es un selector de año que permite la animación del cambio de año mediante un botón play/pause.
|
|
3
|
-
Se coloca en la parte superior derecha de la pantalla, su posición exacta depende de si el sidebar derecho está abierto o no.
|
|
4
|
-
El cambio de año se guarda en el slice de map, en la propiedad sliderSelectedYear mediante la acción setYear.
|
|
5
|
-
Recibe:
|
|
6
|
-
onResults (heredado de hdr): nos dice si el slider se ve sobre el mapa o sobre la pantalla de resultados y se le aplican unos estilos u otros.
|
|
7
|
-
defaultYear: año seleccionado por defecto al montar el componente
|
|
8
|
-
firstYear: primer año del slider
|
|
9
|
-
lastYear: último año del slider
|
|
10
|
-
z-index: propiedad css z-index del slider
|
|
11
|
-
rightBarOpen: está o no abierto el sidebar de la derecha
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
import PropTypes from 'prop-types';
|
|
15
|
-
import { useEffect, useRef, useState } from 'react'
|
|
16
|
-
import { useDispatch } from 'react-redux';
|
|
17
|
-
//store
|
|
18
|
-
import { setYear } from '../../store/mapSlice';
|
|
19
|
-
//assets
|
|
20
|
-
import Play from '../../assets/img/play.svg';
|
|
21
|
-
import Pause from '../../assets/img/pause.svg';
|
|
22
|
-
//elementos ui
|
|
23
|
-
import Slider from '@mui/material/Slider';
|
|
24
|
-
import { Box, createTheme } from '@mui/material';
|
|
25
|
-
import { ThemeProvider } from '@emotion/react';
|
|
26
|
-
// Style
|
|
27
|
-
import style from './TimeSlider.module.scss'
|
|
28
|
-
export const TimeSlider = ({ onResults = false, defaultYear = 2025, firstYear = 2025, lastYear = 2050, zIndex = 10, rightBarOpen = false }) => {
|
|
29
|
-
|
|
30
|
-
const [localYear, setLocalYear] = useState(defaultYear)
|
|
31
|
-
const dispatch = useDispatch()
|
|
32
|
-
const handleChange = (event, newValue) => {
|
|
33
|
-
setLocalYear(newValue)
|
|
34
|
-
dispatch(setYear(newValue - 2000))
|
|
35
|
-
};
|
|
36
|
-
const [isRunning, setIsRunning] = useState(false);
|
|
37
|
-
|
|
38
|
-
const handlePlay = () => {
|
|
39
|
-
setIsRunning(true)
|
|
40
|
-
}
|
|
41
|
-
const handleStop = () => {
|
|
42
|
-
setIsRunning(false)
|
|
43
|
-
}
|
|
44
|
-
const useInterval = (callback, delay) => {
|
|
45
|
-
const savedCallback = useRef();
|
|
46
|
-
|
|
47
|
-
// Remember the latest function.
|
|
48
|
-
useEffect(() => {
|
|
49
|
-
savedCallback.current = callback;
|
|
50
|
-
}, [callback]);
|
|
51
|
-
|
|
52
|
-
// Set up the interval.
|
|
53
|
-
useEffect(() => {
|
|
54
|
-
function tick() {
|
|
55
|
-
savedCallback.current();
|
|
56
|
-
}
|
|
57
|
-
if (delay !== null) {
|
|
58
|
-
let id = setInterval(tick, delay);
|
|
59
|
-
return () => clearInterval(id);
|
|
60
|
-
}
|
|
61
|
-
}, [delay]);
|
|
62
|
-
}
|
|
63
|
-
useInterval(() => {
|
|
64
|
-
// Your custom logic here
|
|
65
|
-
if (isRunning) {
|
|
66
|
-
if (localYear != 2050) {
|
|
67
|
-
setLocalYear(localYear + 1);
|
|
68
|
-
dispatch(setYear((localYear - 2000) + 1))
|
|
69
|
-
} else {
|
|
70
|
-
setLocalYear(2025);
|
|
71
|
-
dispatch(setYear(25))
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
}, 1000);
|
|
76
|
-
|
|
77
|
-
const theme = createTheme({
|
|
78
|
-
palette: {
|
|
79
|
-
primary: {
|
|
80
|
-
main: '#605b56'
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
components: {
|
|
84
|
-
MuiSlider: {
|
|
85
|
-
styleOverrides: {
|
|
86
|
-
mark: {
|
|
87
|
-
height: 10,
|
|
88
|
-
backgroundColor: '#605b56'
|
|
89
|
-
},
|
|
90
|
-
valueLabel: {
|
|
91
|
-
backgroundColor: 'transparent',
|
|
92
|
-
color: '#605b56',
|
|
93
|
-
padding: 0,
|
|
94
|
-
top: 3
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
const marcas = [
|
|
101
|
-
{ label: '', value: 2025 },
|
|
102
|
-
{ label: '', value: 2032 },
|
|
103
|
-
{ label: '', value: 2041 },
|
|
104
|
-
{ label: '', value: 2050 }
|
|
105
|
-
]
|
|
106
|
-
return (
|
|
107
|
-
<ThemeProvider theme={theme}>
|
|
108
|
-
<Box
|
|
109
|
-
sx={{ width: 400 }}
|
|
110
|
-
className={`${onResults ? style.sliderResults : style.slider} ${rightBarOpen ? style.sliderOpen : ''}`}
|
|
111
|
-
style={{zIndex: zIndex}}
|
|
112
|
-
>
|
|
113
|
-
{firstYear}
|
|
114
|
-
<Slider
|
|
115
|
-
aria-label="TimeSlider"
|
|
116
|
-
value={localYear}
|
|
117
|
-
valueLabelDisplay="on"
|
|
118
|
-
step={1}
|
|
119
|
-
marks={marcas}
|
|
120
|
-
min={firstYear}
|
|
121
|
-
max={lastYear}
|
|
122
|
-
onChange={handleChange}
|
|
123
|
-
color="primary"
|
|
124
|
-
size="small"
|
|
125
|
-
/>
|
|
126
|
-
{lastYear}
|
|
127
|
-
{!isRunning &&
|
|
128
|
-
<button className={style.playButton} onClick={handlePlay}>
|
|
129
|
-
<img src={Play} alt="Play" />
|
|
130
|
-
</button>}
|
|
131
|
-
{isRunning &&
|
|
132
|
-
<button className={style.playButton} onClick={handleStop}>
|
|
133
|
-
<img src={Pause} alt="Pause" />
|
|
134
|
-
</button>}
|
|
135
|
-
</Box>
|
|
136
|
-
</ThemeProvider>
|
|
137
|
-
)
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
TimeSlider.propTypes = {
|
|
141
|
-
defaultYear: PropTypes.number,
|
|
142
|
-
onResults: PropTypes.bool,
|
|
143
|
-
firstYear: PropTypes.number,
|
|
144
|
-
lastYear: PropTypes.number,
|
|
145
|
-
zIndex: PropTypes.number,
|
|
146
|
-
rightBarOpen: PropTypes.bool
|
|
147
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
.slider {
|
|
2
|
-
position: absolute;
|
|
3
|
-
padding: 5px 20px;
|
|
4
|
-
right: 150px;
|
|
5
|
-
border: 1px solid;
|
|
6
|
-
border-radius: 10px;
|
|
7
|
-
display: flex;
|
|
8
|
-
gap: 20px;
|
|
9
|
-
color: #605b56;
|
|
10
|
-
justify-content: center;
|
|
11
|
-
align-items: center;
|
|
12
|
-
background-color: white;
|
|
13
|
-
top: 188px;
|
|
14
|
-
transition: all 0.5s ease-out;
|
|
15
|
-
|
|
16
|
-
.playButton {
|
|
17
|
-
background-color: transparent !important;
|
|
18
|
-
|
|
19
|
-
&.hover {
|
|
20
|
-
background-color: transparent !important;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
img {
|
|
24
|
-
height: 30px;
|
|
25
|
-
width: 30px;
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.sliderOpen {
|
|
32
|
-
right: 490px;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.sliderResults {
|
|
36
|
-
position: absolute;
|
|
37
|
-
top: 75px;
|
|
38
|
-
right: 430px;
|
|
39
|
-
padding: 5px 20px;
|
|
40
|
-
border: 1px solid;
|
|
41
|
-
border-radius: 10px;
|
|
42
|
-
display: flex;
|
|
43
|
-
gap: 20px;
|
|
44
|
-
color: #605b56;
|
|
45
|
-
justify-content: center;
|
|
46
|
-
align-items: center;
|
|
47
|
-
background-color: white;
|
|
48
|
-
transition: all 0.5s ease-out;
|
|
49
|
-
|
|
50
|
-
.playButton {
|
|
51
|
-
background-color: transparent !important;
|
|
52
|
-
|
|
53
|
-
&.hover {
|
|
54
|
-
background-color: transparent !important;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
img {
|
|
58
|
-
height: 30px;
|
|
59
|
-
width: 30px;
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Componente genérico para añadir tooltips.
|
|
3
|
-
Recibe:
|
|
4
|
-
-text: textp del tooltip (código i18n),
|
|
5
|
-
-position: top, bottom, left, right
|
|
6
|
-
-styleCustom: estilo propio si necesario
|
|
7
|
-
IMPORTANTE
|
|
8
|
-
para su uso, el elemento que necesita tooltip y el componente Tooltip tienen que estar dentro de un componente padre con la clase css: "tooltip-parent" y el siguien código css tiene que incluirse en el archivo de estilos de la aplicación:
|
|
9
|
-
.tooltip-parent {
|
|
10
|
-
position: relative;
|
|
11
|
-
width: fit-content;
|
|
12
|
-
|
|
13
|
-
.tooltip {
|
|
14
|
-
display: none;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
&:hover {
|
|
18
|
-
.tooltip {
|
|
19
|
-
display:flex;
|
|
20
|
-
align-items: center;
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
*/
|
|
26
|
-
|
|
27
|
-
import { useTranslation } from "react-i18next"
|
|
28
|
-
import PropTypes from "prop-types";
|
|
29
|
-
import styles from "./Tooltip.module.scss"
|
|
30
|
-
|
|
31
|
-
export const Tooltip = ({ text, position, styleCustom = null }) => {
|
|
32
|
-
const { t } = useTranslation()
|
|
33
|
-
|
|
34
|
-
return <div className={`tooltip ${styles[position]}`} style={styleCustom}>{t(text)}</div>
|
|
35
|
-
}
|
|
36
|
-
Tooltip.propTypes = {
|
|
37
|
-
text: PropTypes.string.isRequired,
|
|
38
|
-
position: PropTypes.oneOf(["top", "bottom", "left", "right"]).isRequired,
|
|
39
|
-
styleCustom: PropTypes.object,
|
|
40
|
-
};
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
@use "../../variables.scss" as *;
|
|
2
|
-
.left {
|
|
3
|
-
position: absolute;
|
|
4
|
-
//display: inline-block;
|
|
5
|
-
width: auto;
|
|
6
|
-
bottom: 50%;
|
|
7
|
-
right: calc(100% + 10px);
|
|
8
|
-
transform: translateY(50%);
|
|
9
|
-
font-size: 16px;
|
|
10
|
-
background-color: #fff;
|
|
11
|
-
border-radius: 4px;
|
|
12
|
-
padding: 10px;
|
|
13
|
-
margin: 0;
|
|
14
|
-
white-space: nowrap;
|
|
15
|
-
color: #000;
|
|
16
|
-
|
|
17
|
-
&::after {
|
|
18
|
-
content: "";
|
|
19
|
-
z-index: -1;
|
|
20
|
-
left: 100%;
|
|
21
|
-
top: 50%;
|
|
22
|
-
transform: translateY(-50%);
|
|
23
|
-
border-width: 0.5em;
|
|
24
|
-
border-style: solid;
|
|
25
|
-
border-color: #fff;
|
|
26
|
-
position: absolute;
|
|
27
|
-
border-top-color: transparent;
|
|
28
|
-
border-bottom-color: transparent;
|
|
29
|
-
// border-left-color:transparent;
|
|
30
|
-
border-right-color: transparent;
|
|
31
|
-
transform-origin: center right;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
.top {
|
|
36
|
-
position: absolute;
|
|
37
|
-
//display: inline-block;
|
|
38
|
-
width: auto;
|
|
39
|
-
bottom: calc(100% + 10px);
|
|
40
|
-
right: 50%;
|
|
41
|
-
transform: translateX(50%);
|
|
42
|
-
font-size: 16px;
|
|
43
|
-
background-color: #fff;
|
|
44
|
-
border-radius: 4px;
|
|
45
|
-
padding: 10px;
|
|
46
|
-
margin: 0;
|
|
47
|
-
white-space: nowrap;
|
|
48
|
-
color: #000;
|
|
49
|
-
z-index: 10;
|
|
50
|
-
color: #000;
|
|
51
|
-
|
|
52
|
-
&::after {
|
|
53
|
-
content: "";
|
|
54
|
-
z-index: -1;
|
|
55
|
-
right: 50%;
|
|
56
|
-
top: 100%;
|
|
57
|
-
transform: translateX(50%);
|
|
58
|
-
border-width: 0.5em;
|
|
59
|
-
border-style: solid;
|
|
60
|
-
border-color: #fff;
|
|
61
|
-
position: absolute;
|
|
62
|
-
border-bottom-color: transparent;
|
|
63
|
-
border-left-color: transparent;
|
|
64
|
-
border-right-color: transparent;
|
|
65
|
-
color: #000;
|
|
66
|
-
|
|
67
|
-
transform-origin: center right;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
.bottom {
|
|
72
|
-
position: absolute;
|
|
73
|
-
//display: inline-block;
|
|
74
|
-
width: auto;
|
|
75
|
-
top: calc(100% + 10px);
|
|
76
|
-
right: 50%;
|
|
77
|
-
height: fit-content;
|
|
78
|
-
transform: translateX(50%);
|
|
79
|
-
font-size: 16px;
|
|
80
|
-
background-color: #fff;
|
|
81
|
-
border-radius: 4px;
|
|
82
|
-
padding: 10px;
|
|
83
|
-
margin: 0;
|
|
84
|
-
color: #000;
|
|
85
|
-
z-index: 10;
|
|
86
|
-
color: #000;
|
|
87
|
-
|
|
88
|
-
&::after {
|
|
89
|
-
content: "";
|
|
90
|
-
z-index: -1;
|
|
91
|
-
right: 50%;
|
|
92
|
-
bottom: 100%; /* Cambia `top: 100%` por `bottom: 100%` */
|
|
93
|
-
transform: translateX(50%);
|
|
94
|
-
border-width: 0.5em;
|
|
95
|
-
border-style: solid;
|
|
96
|
-
border-color: transparent; /* Deja todos los bordes transparentes por defecto */
|
|
97
|
-
border-bottom-color: #fff; /* Colorea solo el borde inferior */
|
|
98
|
-
position: absolute;
|
|
99
|
-
|
|
100
|
-
/* Opcional: mantiene el centro de transformación para futuras transformaciones */
|
|
101
|
-
transform-origin: center right;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.right {
|
|
106
|
-
position: absolute;
|
|
107
|
-
//display: inline-block;
|
|
108
|
-
width: auto;
|
|
109
|
-
//max-width: 200px;
|
|
110
|
-
bottom: 50%;
|
|
111
|
-
left: calc(100% + 10px);
|
|
112
|
-
transform: translateY(50%);
|
|
113
|
-
font-size: 16px;
|
|
114
|
-
background-color: #fff;
|
|
115
|
-
border-radius: 4px;
|
|
116
|
-
padding: 20px;
|
|
117
|
-
margin: 0;
|
|
118
|
-
white-space: nowrap;
|
|
119
|
-
height: fit-content;
|
|
120
|
-
color: #000;
|
|
121
|
-
z-index: 10;
|
|
122
|
-
&::after {
|
|
123
|
-
content: "";
|
|
124
|
-
z-index: -1;
|
|
125
|
-
right: 100%;
|
|
126
|
-
top: 50%;
|
|
127
|
-
color: #000;
|
|
128
|
-
|
|
129
|
-
transform: translateY(-50%);
|
|
130
|
-
border-width: 0.5em;
|
|
131
|
-
border-style: solid;
|
|
132
|
-
border-color: #fff;
|
|
133
|
-
position: absolute;
|
|
134
|
-
border-top-color: transparent;
|
|
135
|
-
border-bottom-color: transparent;
|
|
136
|
-
border-left-color: transparent;
|
|
137
|
-
transform-origin: center right;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { Tooltip } from "./Tooltip";
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
title: "Components/Tooltip",
|
|
5
|
-
component: Tooltip,
|
|
6
|
-
argTypes: {
|
|
7
|
-
text: { control: "text" },
|
|
8
|
-
position: {
|
|
9
|
-
control: {
|
|
10
|
-
type: "select",
|
|
11
|
-
options: ["top", "bottom", "left", "right"],
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
styleCustom: { control: "object" },
|
|
15
|
-
},
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
const Template = (args) => (
|
|
19
|
-
|
|
20
|
-
<div className="tooltip-parent" style={{background: "black", color: "white", marginTop: "150px", marginLeft:"100px"}}>
|
|
21
|
-
<Tooltip {...args} />
|
|
22
|
-
<button style={{ padding: "8px 16px" }}>Elemento con tooltip</button>
|
|
23
|
-
</div>
|
|
24
|
-
|
|
25
|
-
);
|
|
26
|
-
|
|
27
|
-
export const Default = Template.bind({});
|
|
28
|
-
Default.args = {
|
|
29
|
-
text: "sampleText", // clave i18n
|
|
30
|
-
position: "top",
|
|
31
|
-
styleCustom: null,
|
|
32
|
-
};
|
|
33
|
-
export const Right = Template.bind({});
|
|
34
|
-
Right.args = {
|
|
35
|
-
text: "sampleText", // clave i18n
|
|
36
|
-
position: "right",
|
|
37
|
-
styleCustom: null,
|
|
38
|
-
};
|
|
39
|
-
export const Left = Template.bind({});
|
|
40
|
-
Left.args = {
|
|
41
|
-
text: "sampleText", // clave i18n
|
|
42
|
-
position: "left",
|
|
43
|
-
styleCustom: null,
|
|
44
|
-
};
|
|
45
|
-
export const Bottom = Template.bind({});
|
|
46
|
-
Bottom.args = {
|
|
47
|
-
text: "sampleText", // clave i18n
|
|
48
|
-
position: "bottom",
|
|
49
|
-
styleCustom: null,
|
|
50
|
-
};
|
|
51
|
-
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Esta sección muestra un menu que te permite navegar por diferentes rutas de la aplicacion.
|
|
3
|
-
Los args que recibe son propiedades css y listado de constantes.
|
|
4
|
-
Propiedades css= borderColor y TextColor
|
|
5
|
-
Listados de constantes = options
|
|
6
|
-
Es un array de los siguientes objetos:
|
|
7
|
-
{
|
|
8
|
-
name: 'TopNavMenu.opt1', -> Nombre que aparecera en el menu haciendo referencia a locales
|
|
9
|
-
url: "/" -> ruta a la que ira al hacerle click
|
|
10
|
-
}
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
import { NavLink } from 'react-router-dom';
|
|
14
|
-
import PropTypes from 'prop-types'
|
|
15
|
-
// Styles
|
|
16
|
-
import styles from './TopNavMenu.module.scss'
|
|
17
|
-
import { useTranslation } from 'react-i18next';
|
|
18
|
-
|
|
19
|
-
export const TopNavMenu = ({ options = [], cssProps = {} }) => {
|
|
20
|
-
const { t } = useTranslation()
|
|
21
|
-
|
|
22
|
-
const textColor = cssProps.textColor || 'inherit';
|
|
23
|
-
const borderColor = cssProps.borderColor || 'transparent';
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
return (
|
|
27
|
-
<div className={styles.TopNavMenuContainer}>
|
|
28
|
-
|
|
29
|
-
{
|
|
30
|
-
options.map((option, id) => (
|
|
31
|
-
<NavLink to={option.url}
|
|
32
|
-
className={({ isActive }) => `${styles.topNavOptions} ${isActive ? styles.active : ''}`}
|
|
33
|
-
key={id}
|
|
34
|
-
style={{
|
|
35
|
-
color: textColor,
|
|
36
|
-
}}
|
|
37
|
-
>
|
|
38
|
-
{t(option.name)}
|
|
39
|
-
|
|
40
|
-
</NavLink>
|
|
41
|
-
))
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
</div>
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
TopNavMenu.propTypes = {
|
|
52
|
-
options: PropTypes.arrayOf(
|
|
53
|
-
PropTypes.object
|
|
54
|
-
),
|
|
55
|
-
cssProps: PropTypes.shape({
|
|
56
|
-
borderColor: PropTypes.string.isRequired,
|
|
57
|
-
textColor: PropTypes.string.isRequired,
|
|
58
|
-
// height: PropTypes.string.isRequired,
|
|
59
|
-
}),
|
|
60
|
-
// activeColor: PropTypes.string,
|
|
61
|
-
// defaultColor: PropTypes.string
|
|
62
|
-
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
@use '../../variables.scss' as *;
|
|
2
|
-
|
|
3
|
-
.TopNavMenuContainer {
|
|
4
|
-
@include flex(row, start, start, $gap: 80px);
|
|
5
|
-
width: fit-content;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
.topNavOptions {
|
|
11
|
-
@include flex();
|
|
12
|
-
cursor: pointer;
|
|
13
|
-
height: calc($headerHeight - 10px);
|
|
14
|
-
padding: 0px 10px;
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.active {
|
|
19
|
-
box-shadow: 0 5px 0 0 #F8A925;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import Options from '../../constants/topNavMenuOptions'
|
|
2
|
-
import { TopNavMenu } from './TopNavMenu'
|
|
3
|
-
|
|
4
|
-
export default {
|
|
5
|
-
title: "Components/TopNavMenu",
|
|
6
|
-
component: TopNavMenu,
|
|
7
|
-
};
|
|
8
|
-
// const Template = () => <TopNavMenu />;
|
|
9
|
-
|
|
10
|
-
// export const Default = Template.bind({});
|
|
11
|
-
|
|
12
|
-
export const Default = {
|
|
13
|
-
args: {
|
|
14
|
-
options: Options,
|
|
15
|
-
cssProps: {
|
|
16
|
-
borderColor: '#777777',
|
|
17
|
-
textColor: '#F8A925'
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Este componente es el texto que usamos para mostrar el menú de login (si el usuario no está logeado) o el nombre del usuario (si está logeado).
|
|
3
|
-
Recibe: cssClass y loginLocale
|
|
4
|
-
log: bool, define si el usuario está o no logeado. Se puede coger del store desde este mismo componente o enviarlo como propiedad. Si se coge del store, la ruta predefinida es =>state.userState.user.isLoggedIn
|
|
5
|
-
- cssClass => clase css si se le quiere añadir
|
|
6
|
-
- loginLocale => ruta del archivo locale para el texto 'Login', por defecto 'login'
|
|
7
|
-
*/
|
|
8
|
-
import PropTypes from 'prop-types';
|
|
9
|
-
import { useDispatch, useSelector } from 'react-redux';
|
|
10
|
-
import { useTranslation } from "react-i18next";
|
|
11
|
-
//store
|
|
12
|
-
import { setShowLogIn, setShowUserMenu } from '../../store/userSlice';
|
|
13
|
-
//styles
|
|
14
|
-
import styles from './UserMenuTrigger.module.scss'
|
|
15
|
-
|
|
16
|
-
export const UserMenuTrigger = ({cssClass, loginLocale= 'login'}) => {
|
|
17
|
-
const dispatch = useDispatch();
|
|
18
|
-
//traemos isLoggedIn y username directamente del store
|
|
19
|
-
const isLoggedIn = useSelector((state) => state.userState.user.isLoggedIn);
|
|
20
|
-
const username = useSelector((state) => state.userState.user.username);
|
|
21
|
-
|
|
22
|
-
const { t } = useTranslation();
|
|
23
|
-
|
|
24
|
-
const handleClick = () => {
|
|
25
|
-
if (!isLoggedIn) {
|
|
26
|
-
dispatch(setShowUserMenu(true));
|
|
27
|
-
} else {
|
|
28
|
-
dispatch(setShowLogIn(true))
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
return (
|
|
33
|
-
<div className={`${styles.UserMenuTrigger} link ${cssClass}`} onClick={handleClick}>
|
|
34
|
-
{isLoggedIn ? username : t(loginLocale)}
|
|
35
|
-
</div>
|
|
36
|
-
);
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
UserMenuTrigger.propTypes = {
|
|
40
|
-
onClickLoggedIn: PropTypes.func.isRequired,
|
|
41
|
-
onClickLoggedOut: PropTypes.func.isRequired,
|
|
42
|
-
log: PropTypes.bool,
|
|
43
|
-
name: PropTypes.string,
|
|
44
|
-
cssClass: PropTypes.string,
|
|
45
|
-
loginLocale: PropTypes.string
|
|
46
|
-
};
|
|
47
|
-
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { Provider } from 'react-redux';
|
|
2
|
-
import { configureStore } from '@reduxjs/toolkit';
|
|
3
|
-
import { UserMenuTrigger } from './UserMenuTrigger';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'Components/UserMenuTrigger',
|
|
7
|
-
component: UserMenuTrigger,
|
|
8
|
-
args: {
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
const Template = (args) => <UserMenuTrigger {...args} />;
|
|
14
|
-
|
|
15
|
-
export const LoggedOut = Template.bind({});
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export const LoggedIn = Template.bind({});
|
|
19
|
-
|
|
20
|
-
LoggedIn.decorators = [
|
|
21
|
-
(Story) => {
|
|
22
|
-
const loggedInStore = configureStore({
|
|
23
|
-
reducer: {
|
|
24
|
-
userState: (state = {user:{ isLoggedIn: true, username: 'JohnDoe' }}) => state,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
return (
|
|
28
|
-
<Provider store={loggedInStore}>
|
|
29
|
-
<Story />
|
|
30
|
-
</Provider>
|
|
31
|
-
);
|
|
32
|
-
},
|
|
33
|
-
];
|
package/src/components/index.jsx
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export { AmbitSelector } from './AmbitSelector/AmbitSelector.jsx'
|
|
2
|
-
export { ButtonsList } from './ButtonsList/ButtonsList.jsx'
|
|
3
|
-
export { DropdownList } from './DropdownList/DropdownList.jsx'
|
|
4
|
-
export { EditAmbit } from './EditAmbit/EditAmbit.jsx'
|
|
5
|
-
export { FiltersAmbit } from './FiltersAmbit/FiltersAmbit.jsx'
|
|
6
|
-
export { Graphic } from './Graphic/Graphic.jsx'
|
|
7
|
-
export { IndicatorsList } from './IndicatorsList/IndicatorsList.jsx'
|
|
8
|
-
export { LangSelector } from './LangSelector/LangSelector.jsx'
|
|
9
|
-
export { Legend } from './Legend/Legend.jsx'
|
|
10
|
-
export { LogoApp } from './LogoApp/LogoApp.jsx'
|
|
11
|
-
export { MapboxMap } from './MapboxMap/MapboxMap.jsx'
|
|
12
|
-
export { MaplibreMap } from './MaplibreMap/MaplibreMap.jsx'
|
|
13
|
-
export { SectionBar } from './SectionBar/SectionBar.jsx'
|
|
14
|
-
export { TimeSlider } from './TimeSlider/TimeSlider.jsx'
|
|
15
|
-
export { Tooltip } from './Tooltip/Tooltip.jsx'
|
|
16
|
-
export { TopNavMenu } from './TopNavMenu/TopNavMenu.jsx'
|
|
17
|
-
export { UserMenuTrigger } from './UserMenuTrigger/UserMenuTrigger.jsx'
|