territories-dashboard-lib 0.1.39b2__py3-none-any.whl → 1.1.1.dev10__py3-none-any.whl
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.
Potentially problematic release.
This version of territories-dashboard-lib might be problematic. Click here for more details.
- territories_dashboard_lib/geo_lib/admin.py +2 -0
- territories_dashboard_lib/geo_lib/migrations/0003_geofeature_color_column_geofeature_size_column.py +23 -0
- territories_dashboard_lib/geo_lib/models.py +12 -0
- territories_dashboard_lib/geo_lib/payloads.py +7 -21
- territories_dashboard_lib/geo_lib/views.py +58 -53
- territories_dashboard_lib/indicators_lib/enums.py +61 -37
- territories_dashboard_lib/indicators_lib/migrations/0004_alter_indicator_min_mesh.py +18 -0
- territories_dashboard_lib/indicators_lib/migrations/0005_auto_20251203_1621.py +2 -2
- territories_dashboard_lib/indicators_lib/models.py +9 -6
- territories_dashboard_lib/indicators_lib/payloads.py +14 -1
- territories_dashboard_lib/indicators_lib/query/commons.py +90 -104
- territories_dashboard_lib/indicators_lib/query/comparison.py +8 -3
- territories_dashboard_lib/indicators_lib/query/details.py +8 -13
- territories_dashboard_lib/indicators_lib/query/histogram.py +0 -1
- territories_dashboard_lib/indicators_lib/query/indicator_card.py +12 -7
- territories_dashboard_lib/indicators_lib/query/top_10.py +12 -12
- territories_dashboard_lib/indicators_lib/query/utils.py +9 -0
- territories_dashboard_lib/indicators_lib/table.py +15 -12
- territories_dashboard_lib/indicators_lib/views.py +49 -59
- territories_dashboard_lib/superset_lib/logic.py +24 -25
- territories_dashboard_lib/superset_lib/migrations/0002_alter_filter_mesh.py +18 -0
- territories_dashboard_lib/tracking_lib/enums.py +2 -0
- territories_dashboard_lib/tracking_lib/migrations/0005_alter_page_cmp_territory_mesh_alter_page_submesh_and_more.py +28 -0
- territories_dashboard_lib/tracking_lib/migrations/0006_alter_event_name.py +18 -0
- territories_dashboard_lib/tracking_lib/payloads.py +4 -2
- territories_dashboard_lib/tracking_lib/views.py +7 -6
- territories_dashboard_lib/website_lib/conf.py +14 -0
- territories_dashboard_lib/website_lib/context_processors.py +2 -1
- territories_dashboard_lib/website_lib/migrations/0005_mainconf_meshes.py +20 -0
- territories_dashboard_lib/website_lib/models.py +12 -0
- territories_dashboard_lib/website_lib/params.py +34 -22
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/anchor.mjs +43 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/comparaison/page.mjs +7 -9
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/details/page.mjs +2 -7
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/dom.mjs +0 -15
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/enums.mjs +13 -10
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/side_panel.mjs +1 -15
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/theme/page.mjs +7 -9
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/js/pages/indicators/track-visible-indicators.mjs +121 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/indicatorMap.bundle.js +2 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/sankeyGraph.bundle.js +2 -0
- territories_dashboard_lib/website_lib/static/territories_dashboard_lib/website/react/vendors.bundle.js +2 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/layout/base.css +12 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/comparaison/[theme]/page.html +4 -3
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/anchor.html +14 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/geo_params.html +3 -3
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/indicator-card.html +14 -8
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/select_territory.html +32 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_geo.html +8 -35
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/components/histogram.html +1 -1
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/details/page.html +9 -8
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/methodo/methodo.js +28 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/methodo/page.html +40 -0
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/themes/page.html +4 -5
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/sitemap/page.html +9 -0
- territories_dashboard_lib/website_lib/templatetags/other_filters.py +6 -3
- territories_dashboard_lib/website_lib/views.py +100 -0
- {territories_dashboard_lib-0.1.39b2.dist-info → territories_dashboard_lib-1.1.1.dev10.dist-info}/METADATA +2 -2
- {territories_dashboard_lib-0.1.39b2.dist-info → territories_dashboard_lib-1.1.1.dev10.dist-info}/RECORD +62 -51
- territories_dashboard_lib/indicators_lib/migrations/0006_alter_theme_action_theme_alter_theme_objectif_theme.py +0 -23
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.css +0 -29
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.html +0 -45
- territories_dashboard_lib/website_lib/templates/territories_dashboard_lib/website/pages/indicators/components/side_panel_methodo.js +0 -19
- {territories_dashboard_lib-0.1.39b2.dist-info → territories_dashboard_lib-1.1.1.dev10.dist-info}/WHEEL +0 -0
- {territories_dashboard_lib-0.1.39b2.dist-info → territories_dashboard_lib-1.1.1.dev10.dist-info}/licenses/licence.md +0 -0
- {territories_dashboard_lib-0.1.39b2.dist-info → territories_dashboard_lib-1.1.1.dev10.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
function enableAnchorLinks() {
|
|
2
|
+
document.querySelectorAll("button.anchor-link").forEach((button) => {
|
|
3
|
+
button.addEventListener("click", () => {
|
|
4
|
+
const anchor = button.dataset.anchor;
|
|
5
|
+
window.history.replaceState(undefined, undefined, "#" + anchor);
|
|
6
|
+
navigator.clipboard.writeText(window.location.href);
|
|
7
|
+
setTimeout(() => {
|
|
8
|
+
// to close the tooltip and not trigger it again when reloading the URL
|
|
9
|
+
button.parentElement.click();
|
|
10
|
+
}, 500);
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function trackAnchorLinks() {
|
|
16
|
+
const buttons = document.querySelectorAll('button[data-track="true"]');
|
|
17
|
+
if (buttons.length === 0) return;
|
|
18
|
+
|
|
19
|
+
const observer = new IntersectionObserver((entries) => {
|
|
20
|
+
entries.forEach((entry) => {
|
|
21
|
+
if (entry.isIntersecting) {
|
|
22
|
+
fetch("/api/tracking/event/", {
|
|
23
|
+
method: "POST",
|
|
24
|
+
body: JSON.stringify({
|
|
25
|
+
indicator: entry.target.dataset.indicator,
|
|
26
|
+
event: "vue-resume-indicateur",
|
|
27
|
+
}),
|
|
28
|
+
});
|
|
29
|
+
observer.unobserve(entry.target);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
window.addEventListener(
|
|
35
|
+
"scroll",
|
|
36
|
+
() => {
|
|
37
|
+
buttons.forEach((button) => observer.observe(button));
|
|
38
|
+
},
|
|
39
|
+
{ once: true }
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { enableAnchorLinks, trackAnchorLinks };
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
import { callData, getSearchParams } from "./data.mjs";
|
|
3
3
|
import { delaySpinner, getClosestIndicator } from "../dom.mjs";
|
|
4
4
|
import { handleFilterClick, initializeFilters } from "../filters.mjs";
|
|
5
|
-
import { addSidePanelListener
|
|
5
|
+
import { addSidePanelListener } from "../side_panel.mjs";
|
|
6
6
|
|
|
7
7
|
import { exportImageAsync } from "../export-graph.mjs";
|
|
8
8
|
import { exportToCSV } from "../export.mjs";
|
|
9
|
+
import { enableAnchorLinks, trackAnchorLinks } from "../anchor.mjs";
|
|
10
|
+
import { trackVisibleIndicators } from "../track-visible-indicators.mjs";
|
|
9
11
|
|
|
10
12
|
Chart.register(
|
|
11
13
|
Chart.CategoryScale,
|
|
@@ -43,14 +45,6 @@ document.querySelectorAll(".indicator-card").forEach((indicatorCard) => {
|
|
|
43
45
|
callData(indicator);
|
|
44
46
|
});
|
|
45
47
|
});
|
|
46
|
-
|
|
47
|
-
indicatorCard
|
|
48
|
-
.querySelectorAll('button[aria-controls="slide-panel-methodo"]')
|
|
49
|
-
.forEach((button) => {
|
|
50
|
-
button.addEventListener("click", () => {
|
|
51
|
-
openMethodoSidePanel(indicator, button);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
48
|
});
|
|
55
49
|
|
|
56
50
|
document
|
|
@@ -105,3 +99,7 @@ document.addEventListener("DOMContentLoaded", () => {
|
|
|
105
99
|
});
|
|
106
100
|
addSidePanelListener();
|
|
107
101
|
});
|
|
102
|
+
|
|
103
|
+
enableAnchorLinks();
|
|
104
|
+
trackAnchorLinks();
|
|
105
|
+
trackVisibleIndicators();
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
updateFiltersReminder,
|
|
8
8
|
updateUrlWithFilters,
|
|
9
9
|
} from "../filters.mjs";
|
|
10
|
-
import { addSidePanelListener
|
|
10
|
+
import { addSidePanelListener } from "../side_panel.mjs";
|
|
11
11
|
|
|
12
12
|
import { exportImageAsync } from "../export-graph.mjs";
|
|
13
13
|
import { exportToCSV } from "../export.mjs";
|
|
@@ -33,12 +33,7 @@ initializeFilters(indicator);
|
|
|
33
33
|
callData(indicator);
|
|
34
34
|
makeMap(indicator);
|
|
35
35
|
makeSankeyGraph(indicator);
|
|
36
|
-
|
|
37
|
-
'button[aria-controls="slide-panel-methodo"]'
|
|
38
|
-
);
|
|
39
|
-
openMethodoButton.addEventListener("click", () => {
|
|
40
|
-
openMethodoSidePanel(indicator, openMethodoButton);
|
|
41
|
-
});
|
|
36
|
+
|
|
42
37
|
document.querySelectorAll(".filter-tag").forEach((button) => {
|
|
43
38
|
button.addEventListener("click", async () => {
|
|
44
39
|
await handleFilterClick(indicator);
|
|
@@ -1,17 +1,3 @@
|
|
|
1
|
-
function fillMethodoSidePanel(indicator) {
|
|
2
|
-
const container = document.getElementById(
|
|
3
|
-
"slide-panel-content-methodo-markdown"
|
|
4
|
-
);
|
|
5
|
-
container.innerHTML = indicator.methodo_html;
|
|
6
|
-
const exportButton = document.getElementById("methodo-export-button");
|
|
7
|
-
exportButton.dataset.indicatorName = indicator.name;
|
|
8
|
-
exportButton.dataset.indicatorTitle = indicator.title;
|
|
9
|
-
document.getElementById("slide-panel-methodo-indicator-title").textContent =
|
|
10
|
-
indicator.title;
|
|
11
|
-
document.getElementById("slide-panel-methodo-theme-title").textContent =
|
|
12
|
-
indicator.theme;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
1
|
function getClosestIndicator(element) {
|
|
16
2
|
const indicatorId = element.closest(".indicator-card").dataset.indicator;
|
|
17
3
|
return JSON.parse(document.getElementById(indicatorId).textContent);
|
|
@@ -81,7 +67,6 @@ function delaySpinner() {
|
|
|
81
67
|
export {
|
|
82
68
|
delaySpinner,
|
|
83
69
|
getClosestIndicator,
|
|
84
|
-
fillMethodoSidePanel,
|
|
85
70
|
makeIndicatorDataScript,
|
|
86
71
|
getIndicatorDataScript,
|
|
87
72
|
getIsAlternativeUnit,
|
|
@@ -2,11 +2,12 @@ const THOUSANDS = "k";
|
|
|
2
2
|
const MILLIONS = "M";
|
|
3
3
|
|
|
4
4
|
const MeshLevel = {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
fr: "fr",
|
|
6
|
+
reg: "reg",
|
|
7
|
+
dep: "dep",
|
|
8
|
+
epci: "epci",
|
|
9
|
+
com: "com",
|
|
10
|
+
aom: "aom",
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
const COLORS = {
|
|
@@ -76,16 +77,18 @@ const PATTERNS = [
|
|
|
76
77
|
|
|
77
78
|
function getMeshLevelTitle(meshLevel) {
|
|
78
79
|
switch (meshLevel) {
|
|
79
|
-
case MeshLevel.
|
|
80
|
+
case MeshLevel.reg:
|
|
80
81
|
return "Région";
|
|
81
|
-
case MeshLevel.
|
|
82
|
+
case MeshLevel.dep:
|
|
82
83
|
return "Département";
|
|
83
|
-
case MeshLevel.
|
|
84
|
+
case MeshLevel.epci:
|
|
84
85
|
return "Intercommunalité";
|
|
85
|
-
case MeshLevel.
|
|
86
|
+
case MeshLevel.com:
|
|
86
87
|
return "Commune";
|
|
87
|
-
case MeshLevel.
|
|
88
|
+
case MeshLevel.fr:
|
|
88
89
|
return "France entière";
|
|
90
|
+
case MeshLevel.aom:
|
|
91
|
+
return "AOM";
|
|
89
92
|
}
|
|
90
93
|
}
|
|
91
94
|
|
|
@@ -1,22 +1,13 @@
|
|
|
1
|
-
import { fillMethodoSidePanel } from "./dom.mjs";
|
|
2
|
-
|
|
3
1
|
let buttonWhichOpenedPanel = null;
|
|
4
2
|
|
|
5
3
|
function closeSidePanel() {
|
|
6
4
|
const sidePanelGeo = document.getElementById("slide-panel-geo");
|
|
7
|
-
const sidePanelMethodo = document.getElementById("slide-panel-methodo");
|
|
8
5
|
sidePanelGeo.classList.remove("tdbmd-slide-panel--show");
|
|
9
|
-
sidePanelMethodo.classList.remove("tdbmd-slide-panel--show");
|
|
10
6
|
if (sidePanelGeo.style.display === "block") {
|
|
11
7
|
setTimeout(() => {
|
|
12
8
|
sidePanelGeo.style.display = "none";
|
|
13
9
|
}, 500);
|
|
14
10
|
}
|
|
15
|
-
if (sidePanelMethodo.style.display === "block") {
|
|
16
|
-
setTimeout(() => {
|
|
17
|
-
sidePanelMethodo.style.display = "none";
|
|
18
|
-
}, 500);
|
|
19
|
-
}
|
|
20
11
|
document.querySelectorAll(".validate-territory-btn").forEach((btn) => {
|
|
21
12
|
delete btn.dataset.comparison;
|
|
22
13
|
});
|
|
@@ -73,11 +64,6 @@ function releaseFocusTrap() {
|
|
|
73
64
|
document.removeEventListener("keydown", focusTrapListener);
|
|
74
65
|
}
|
|
75
66
|
|
|
76
|
-
function openMethodoSidePanel(indicator, button) {
|
|
77
|
-
fillMethodoSidePanel(indicator);
|
|
78
|
-
openSidePanel(button, "methodo");
|
|
79
|
-
}
|
|
80
|
-
|
|
81
67
|
function addSidePanelListener() {
|
|
82
68
|
const button = document.querySelector(
|
|
83
69
|
'button[aria-controls="slide-panel-geo"][data-comparison="false"]'
|
|
@@ -100,4 +86,4 @@ function addSidePanelListener() {
|
|
|
100
86
|
});
|
|
101
87
|
}
|
|
102
88
|
|
|
103
|
-
export {
|
|
89
|
+
export { addSidePanelListener };
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
handleFilterClick,
|
|
14
14
|
initializeFilters,
|
|
15
15
|
} from "../filters.mjs";
|
|
16
|
-
import { addSidePanelListener
|
|
16
|
+
import { addSidePanelListener } from "../side_panel.mjs";
|
|
17
17
|
|
|
18
18
|
import { exportImageAsync } from "../export-graph.mjs";
|
|
19
19
|
import { exportToCSV } from "../export.mjs";
|
|
@@ -21,6 +21,8 @@ import { exportToCSV } from "../export.mjs";
|
|
|
21
21
|
import { updateHistoryDOM } from "./history.mjs";
|
|
22
22
|
import { updateMainValueDOM } from "./main-value.mjs";
|
|
23
23
|
import { updateStatisticsDOM } from "./statistics.mjs";
|
|
24
|
+
import { enableAnchorLinks, trackAnchorLinks } from "../anchor.mjs";
|
|
25
|
+
import { trackVisibleIndicators } from "../track-visible-indicators.mjs";
|
|
24
26
|
|
|
25
27
|
Chart.register(
|
|
26
28
|
Chart.CategoryScale,
|
|
@@ -117,14 +119,6 @@ document.querySelectorAll(".indicator-card").forEach((indicatorCard) => {
|
|
|
117
119
|
toggleIndicatorUnit(event.target);
|
|
118
120
|
});
|
|
119
121
|
});
|
|
120
|
-
|
|
121
|
-
indicatorCard
|
|
122
|
-
.querySelectorAll('button[aria-controls="slide-panel-methodo"]')
|
|
123
|
-
.forEach((button) => {
|
|
124
|
-
button.addEventListener("click", () => {
|
|
125
|
-
openMethodoSidePanel(indicator, button);
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
122
|
});
|
|
129
123
|
|
|
130
124
|
document.addEventListener("DOMContentLoaded", () => {
|
|
@@ -162,3 +156,7 @@ document
|
|
|
162
156
|
button.removeAttribute("disabled");
|
|
163
157
|
});
|
|
164
158
|
});
|
|
159
|
+
|
|
160
|
+
enableAnchorLinks();
|
|
161
|
+
trackAnchorLinks();
|
|
162
|
+
trackVisibleIndicators();
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
function trackVisibleIndicators() {
|
|
2
|
+
// Track the most visible card over time
|
|
3
|
+
let currentMostVisibleId = null;
|
|
4
|
+
let mostVisibleCounter = 0;
|
|
5
|
+
let lastTrackedIndicator = null;
|
|
6
|
+
const REQUIRED_CONSECUTIVE_CHECKS = 3; // 3 seconds at 1 check per second
|
|
7
|
+
|
|
8
|
+
function resetTracking() {
|
|
9
|
+
currentMostVisibleId = null;
|
|
10
|
+
mostVisibleCounter = 0;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
function fetchTracking(indicatorId) {
|
|
14
|
+
fetch("/api/tracking/event/", {
|
|
15
|
+
method: "POST",
|
|
16
|
+
body: JSON.stringify({
|
|
17
|
+
indicator: indicatorId,
|
|
18
|
+
event: "attention-sur-resume-indicateur",
|
|
19
|
+
}),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function getMostVisibleIndicatorCard() {
|
|
24
|
+
const indicatorCards = document.querySelectorAll(".indicator-card");
|
|
25
|
+
const visibilityData = [];
|
|
26
|
+
|
|
27
|
+
indicatorCards.forEach((card, index) => {
|
|
28
|
+
const rect = card.getBoundingClientRect();
|
|
29
|
+
const windowHeight =
|
|
30
|
+
window.innerHeight || document.documentElement.clientHeight;
|
|
31
|
+
const windowWidth =
|
|
32
|
+
window.innerWidth || document.documentElement.clientWidth;
|
|
33
|
+
|
|
34
|
+
// Calculate the visible portion of the card
|
|
35
|
+
const visibleTop = Math.max(0, rect.top);
|
|
36
|
+
const visibleBottom = Math.min(windowHeight, rect.bottom);
|
|
37
|
+
const visibleLeft = Math.max(0, rect.left);
|
|
38
|
+
const visibleRight = Math.min(windowWidth, rect.right);
|
|
39
|
+
|
|
40
|
+
// Calculate visible area (only if card is actually visible)
|
|
41
|
+
const visibleHeight = Math.max(0, visibleBottom - visibleTop);
|
|
42
|
+
const visibleWidth = Math.max(0, visibleRight - visibleLeft);
|
|
43
|
+
const visibleArea = visibleHeight * visibleWidth;
|
|
44
|
+
|
|
45
|
+
// Calculate total card area
|
|
46
|
+
const totalArea = rect.width * rect.height;
|
|
47
|
+
|
|
48
|
+
const visibilityRatio = visibleArea / totalArea;
|
|
49
|
+
|
|
50
|
+
let isVisible = visibleArea > 0;
|
|
51
|
+
// Check if visible area is at least 20% of total area
|
|
52
|
+
if (visibilityRatio < 0.2) {
|
|
53
|
+
isVisible = false;
|
|
54
|
+
}
|
|
55
|
+
// 40% for the first card
|
|
56
|
+
if (index == 0 && visibilityRatio < 0.4) {
|
|
57
|
+
isVisible = false;
|
|
58
|
+
}
|
|
59
|
+
if (isVisible) {
|
|
60
|
+
visibilityData.push({
|
|
61
|
+
card,
|
|
62
|
+
visibleArea,
|
|
63
|
+
totalArea,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// No visible cards - reset tracking
|
|
69
|
+
if (visibilityData.length === 0) {
|
|
70
|
+
resetTracking();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Sort by visible area (descending)
|
|
75
|
+
visibilityData.sort((a, b) => b.visibleArea - a.visibleArea);
|
|
76
|
+
|
|
77
|
+
const mostVisible = visibilityData[0];
|
|
78
|
+
|
|
79
|
+
// Check if there are other visible cards and if the most visible is at least twice as visible
|
|
80
|
+
if (visibilityData.length > 1) {
|
|
81
|
+
const secondMostVisible = visibilityData[1];
|
|
82
|
+
if (mostVisible.visibleArea < 2 * secondMostVisible.visibleArea) {
|
|
83
|
+
resetTracking();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const indicatorId = mostVisible.card.getAttribute("data-indicator");
|
|
89
|
+
|
|
90
|
+
// Check if it's the same card as before
|
|
91
|
+
if (indicatorId === currentMostVisibleId) {
|
|
92
|
+
mostVisibleCounter++;
|
|
93
|
+
|
|
94
|
+
// Add the class only after 3 consecutive seconds
|
|
95
|
+
if (
|
|
96
|
+
mostVisibleCounter >= REQUIRED_CONSECUTIVE_CHECKS &&
|
|
97
|
+
indicatorId !== lastTrackedIndicator
|
|
98
|
+
) {
|
|
99
|
+
fetchTracking(indicatorId);
|
|
100
|
+
lastTrackedIndicator = indicatorId;
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
// Different card - reset counter
|
|
104
|
+
currentMostVisibleId = indicatorId;
|
|
105
|
+
mostVisibleCounter = 1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Start tracking only after first scroll
|
|
110
|
+
window.addEventListener(
|
|
111
|
+
"scroll",
|
|
112
|
+
() => {
|
|
113
|
+
setInterval(() => {
|
|
114
|
+
getMostVisibleIndicatorCard();
|
|
115
|
+
}, 1000);
|
|
116
|
+
},
|
|
117
|
+
{ once: true }
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
export { trackVisibleIndicators };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see indicatorMap.bundle.js.LICENSE.txt */
|
|
2
|
+
(()=>{"use strict";var e,t,r,n={"./src/IndicatorCardFilters.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react"),a=r.n(n);const o=({filters:e,currentFilters:t,onClick:r})=>a().createElement("div",{className:"fr-tag-list"},e.map(((e,n)=>a().createElement("button",{key:n,className:"fr-tag","aria-pressed":!!t.includes(e)||void 0,onClick:()=>r(e)},e))))},"./src/IndicatorMap/Help.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx");function s(){const{geoFeatures:e,page:t}=(0,o.useMapContext)(),r=(0,n.useMemo)((()=>t.indicator.flows_db_table_prefix?a().createElement(a().Fragment,null,a().createElement("p",null,a().createElement("strong",null,"Valeurs de l'indicateur")," : Les valeurs de l'indicateur s'affichent au survol de chaque zone du territoire d'étude."),a().createElement("p",null,a().createElement("strong",null,"Légende")," : Les valeurs de l'indicateur sont réparties en 5 intervalles égaux entre les valeurs minimum et maximum. Il est possible de masquer la légende en cliquant sur la petite croix située en haut à droite de celle-ci. Pour l'afficher de nouveau, cliquez sur le bouton \"Légende\"."," "),a().createElement("p",null,a().createElement("strong",null,"Valeurs des données géolocalisées (points, segments, flux)")," ",": Pour les indicateurs disposant d'une couche géographique avec des données géolocalisées (points, segments, flux), les propriétés de ces éléments géographiques s'affichent à leur survol."),a().createElement("p",null,a().createElement("strong",null,"Affichage des flux d'une zone du territoire")," ",": Cliquez sur une zone du territoire d'étude pour n'afficher que les flux entrants/sortants de cette zone. Cliquez à nouveau sur la zone (ou en dehors du territoire d'étude) pour faire réapparaître tous les flux. Les zones grisées correspondent à des zones situées en dehors du territoire d’étude, mais qui sont toutefois émettrices ou attractrices de flux depuis ou vers le territoire d’étude."),a().createElement("p",null,a().createElement("em",null,"Précisions : A la maille communale, seuls les flux pour lesquels la somme des flux entrants (A -> B) et sortants (B -> A) est > 100 sont affichés. Pour les autres mailles, seuls les flux entrants/sortants > 200 sont affichés.")),a().createElement("p",null,a().createElement("strong",null,"Gestion des couches")," : Un bouton de gestion des couches (situé en haut à gauche sur la carte) permet d'afficher/masquer chacune des couches géographiques (indicateur(s), points, segments, flux...)."),a().createElement("p",null,a().createElement("strong",null,"Gestion des filtres")," : Pour les indicateurs disposant de données géolocalisées, un bouton de gestion des filtres est disponible en dessous du bouton de gestion des couches. Il permet de filtrer l'affichage des données géographiques (points, segments, flux) selon différents paramètres. Dans ce cas, les filtres de l'indicateur s'appliquent par défaut aux filtres correspondants sur la carte (par contre, les filtres de la carte ne modifient pas les filtres de l'indicateur)."," ")):a().createElement(a().Fragment,null,a().createElement("p",null,a().createElement("strong",null,"Valeurs de l'indicateur")," : Les valeurs de l'indicateur s'affichent au survol de chaque zone du territoire d'étude."),a().createElement("p",null,a().createElement("strong",null,"Légende")," : Les valeurs de l'indicateur sont réparties en 5 intervalles égaux entre les valeurs minimum et maximum. Il est possible de masquer la légende en cliquant sur la petite croix située en haut à droite de celle-ci. Pour l'afficher de nouveau, cliquez sur le bouton \"Légende\"."," "),a().createElement("p",null,a().createElement("strong",null,"Valeurs des données géolocalisées (points, segments, flux)")," ",": Pour les indicateurs disposant d'une couche géographique avec des données géolocalisées (points, segments, flux), les propriétés de ces éléments géographiques s'affichent à leur survol."),a().createElement("p",null,a().createElement("strong",null,"Gestion des couches")," : Un bouton de gestion des couches (situé en haut à gauche sur la carte) permet d'afficher/masquer chacune des couches géographiques (indicateur(s), points, segments, flux...)."),a().createElement("p",null,a().createElement("strong",null,"Gestion des filtres")," : Pour les indicateurs disposant de données géolocalisées, un bouton de gestion des filtres est disponible en dessous du bouton de gestion des couches. Il permet de filtrer l'affichage des données géographiques (points, segments, flux) selon différents paramètres. Dans ce cas, les filtres de l'indicateur s'appliquent par défaut aux filtres correspondants sur la carte (par contre, les filtres de la carte ne modifient pas les filtres de l'indicateur)."," "))),[e,[t]]);return a().createElement("details",{id:"map-help-details"},a().createElement("summary",{id:"map-help-details-summary"},"Aide au fonctionnement de la carte"),r)}},"./src/IndicatorMap/MapLoader.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/utils/Loader.tsx");function l(){const{geoFeaturesLoading:e}=(0,o.useMapContext)(),t=Object.values(e).some((e=>!1!==e&&void 0!==e));return a().createElement(a().Fragment,null,t?a().createElement("div",{id:"map-loader"},a().createElement(s.default,{width:40})):a().createElement(a().Fragment,null))}},"./src/IndicatorMap/MapWithinContext.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>T});var n=r("./node_modules/@deck.gl/react/dist/deckgl.js"),a=r("react"),o=r.n(a),s=r("./node_modules/react-map-gl/dist/esm/index.js"),l=r("./src/IndicatorMap/territories/useZoomOnTerritories.ts"),i=r("./src/IndicatorMap/context.tsx"),c=r("./src/IndicatorMap/values/useFetchValues.ts"),u=r("./src/IndicatorMap/territories/useFetchTerritories.ts"),d=r("./src/IndicatorMap/territories/useMainTerritories.ts"),m=r("./src/IndicatorMap/territories/usePreciseTerritories.ts"),p=r("./src/IndicatorMap/values/useRankValues.ts"),f=r("./src/IndicatorMap/geo-features/useFetchGeoFeatures.ts"),v=r("./src/IndicatorMap/geo-features/useGeoFeaturesForTerritories.ts"),g=r("./src/IndicatorMap/overview/OverviewTooltip.tsx"),h=r("./src/IndicatorMap/geo-features/GeoFeatureTooltip.tsx"),b=r("./src/IndicatorMap/legend/Legend.tsx"),x=r("./src/IndicatorMap/legend/Download.tsx"),y=r("./src/IndicatorMap/sidebar/Sidebar.tsx"),M=r("./src/IndicatorMap/flows/useFetchFlows.ts"),E=r("./src/IndicatorMap/flows/FlowTooltip.tsx"),w=r("./src/IndicatorMap/buttons/Buttons.tsx"),C=r("./src/IndicatorMap/useRemoveFocus.ts"),F=r("./src/IndicatorMap/useAddExcelSheet.ts"),I=r("./src/IndicatorMap/geo-features/useFilterGeoFeature.tsx"),L=r("./src/IndicatorMap/Help.tsx"),S=r("./src/IndicatorMap/useLayers.ts"),_=r("./src/IndicatorMap/MapLoader.tsx"),O=r("./src/IndicatorMap/overview/useOverviewValues.ts");const T=()=>{const{viewState:e,mapRef:t,setters:r,page:a,deckRef:T}=(0,i.useMapContext)();(0,c.default)(),(0,u.default)(),(0,f.default)(),(0,I.useFilterGeoFeature)(),(0,I.useGeoFeaturesFilteredByColumn)(),(0,d.default)(),(0,l.default)(),(0,m.default)(),(0,p.default)(),(0,v.default)(),(0,M.default)(),(0,C.default)(t),(0,F.usePrepareExcelExport)(),(0,O.default)();const k=(0,S.default)(),j=a.indicator.flows_db_table_prefix?"Carte des flux":"Cartographie de l'indicateur";return o().createElement(o().Fragment,null,o().createElement("h3",{className:"fr-mt-4w"},j),o().createElement("div",{id:"tdbmd-map","aria-describedby":"download-map-spreadsheet",onMouseLeave:()=>{r.setTerritoryHover(null),r.setGeoFeatureHover(null),r.setFlowHover(null)}},o().createElement(n.default,{ref:T,viewState:e,layers:k,getCursor:({isHovering:e})=>e?"pointer":"default",onViewStateChange:e=>{r.setViewState(e.viewState)},onClick:e=>{null===e.layer&&r.setTerritoryClick(null)},controller:!0},o().createElement(s.Map,{ref:t,preserveDrawingBuffer:!0,mapStyle:"mapbox://styles/bastien-prune/cm2owpt4v008201pm01evfdow",mapboxAccessToken:"pk.eyJ1IjoiYmFzdGllbi1wcnVuZSIsImEiOiJjbTJvdzlncHAwanczMm5zYnNnb2w0YTJ0In0.TCo7quhfnzeQrVsY0M7nCw",projection:"mercator",attributionControl:!1}),o().createElement(g.default,null),o().createElement(h.default,null),o().createElement(E.default,null),o().createElement(_.default,null)),o().createElement(w.default,null),o().createElement(b.default,null),o().createElement(y.default,null)),o().createElement(L.default,null),o().createElement(x.default,null))}},"./src/IndicatorMap/buttons/Buttons.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/buttons/FullScreen.tsx"),s=r("./src/IndicatorMap/buttons/ZoomButtons.tsx"),l=r("./src/IndicatorMap/buttons/LayersButton.tsx"),i=r("./src/IndicatorMap/buttons/FiltersButton.tsx");function c(){return a().createElement("div",{id:"map-buttons",className:"hideForDownload"},a().createElement(s.default,null),a().createElement(o.default,null),a().createElement(l.default,null),a().createElement(i.default,null))}},"./src/IndicatorMap/buttons/FiltersButton.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts");function l(){const{setters:e,sideBarMode:t,geoFeatures:r,flowDimensions:n}=(0,o.useMapContext)();return 0==Object.keys(r).length&&0===n.length?a().createElement(a().Fragment,null):a().createElement("button",{className:"map-button",onClick:()=>{e.setSideBarMode(s.SideBarMode.filters),e.setIsSidebarOpen((e=>!e||t!=s.SideBarMode.filters))},title:"Gestion des filtres"},a().createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",width:"24px",height:"24px"},a().createElement("path",{d:"M21 4V6H20L15 13.5V22H9V13.5L4 6H3V4H21ZM6.4037 6L11 12.8944V20H13V12.8944L17.5963 6H6.4037Z"})))}},"./src/IndicatorMap/buttons/FullScreen.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r.n(n);function o(){return a().createElement("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},a().createElement("path",{d:"M21.7092 2.29502C21.8041 2.3904 21.8757 2.50014 21.9241 2.61722C21.9727 2.73425 21.9996 2.8625 22 2.997L22 3V9C22 9.55228 21.5523 10 21 10C20.4477 10 20 9.55228 20 9V5.41421L14.7071 10.7071C14.3166 11.0976 13.6834 11.0976 13.2929 10.7071C12.9024 10.3166 12.9024 9.68342 13.2929 9.29289L18.5858 4H15C14.4477 4 14 3.55228 14 3C14 2.44772 14.4477 2 15 2H20.9998C21.2749 2 21.5242 2.11106 21.705 2.29078L21.7092 2.29502Z",fill:"currentColor"}),a().createElement("path",{d:"M10.7071 14.7071L5.41421 20H9C9.55228 20 10 20.4477 10 21C10 21.5523 9.55228 22 9 22H3.00069L2.997 22C2.74301 21.9992 2.48924 21.9023 2.29502 21.7092L2.29078 21.705C2.19595 21.6096 2.12432 21.4999 2.07588 21.3828C2.02699 21.2649 2 21.1356 2 21V15C2 14.4477 2.44772 14 3 14C3.55228 14 4 14.4477 4 15V18.5858L9.29289 13.2929C9.68342 12.9024 10.3166 12.9024 10.7071 13.2929C11.0976 13.6834 11.0976 14.3166 10.7071 14.7071Z",fill:"currentColor"}))}function s(){return a().createElement("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},a().createElement("path",{d:"M21.7071 3.70711L16.4142 9H20C20.5523 9 21 9.44772 21 10C21 10.5523 20.5523 11 20 11H14.0007L13.997 11C13.743 10.9992 13.4892 10.9023 13.295 10.7092L13.2908 10.705C13.196 10.6096 13.1243 10.4999 13.0759 10.3828C13.0273 10.2657 13.0004 10.1375 13 10.003L13 10V4C13 3.44772 13.4477 3 14 3C14.5523 3 15 3.44772 15 4V7.58579L20.2929 2.29289C20.6834 1.90237 21.3166 1.90237 21.7071 2.29289C22.0976 2.68342 22.0976 3.31658 21.7071 3.70711Z",fill:"currentColor"}),a().createElement("path",{d:"M9 20C9 20.5523 9.44772 21 10 21C10.5523 21 11 20.5523 11 20V14.0007C11 13.9997 11 13.998 11 13.997C10.9992 13.7231 10.8883 13.4752 10.7092 13.295C10.7078 13.2936 10.7064 13.2922 10.705 13.2908C10.6096 13.196 10.4999 13.1243 10.3828 13.0759C10.2657 13.0273 10.1375 13.0004 10.003 13C10.002 13 10.001 13 10 13H4C3.44772 13 3 13.4477 3 14C3 14.5523 3.44772 15 4 15H7.58579L2.29289 20.2929C1.90237 20.6834 1.90237 21.3166 2.29289 21.7071C2.68342 22.0976 3.31658 22.0976 3.70711 21.7071L9 16.4142V20Z",fill:"currentColor"}))}function l(){const[e,t]=(0,n.useState)(!1);return a().createElement("button",{className:"map-button fullscreen-button",onClick:()=>{const r=document.getElementById("left-menu"),n=document.getElementById("tdbmd-map");e?(null==r||r.removeAttribute("hide"),null==n||n.removeAttribute("fullscreen"),t(!1)):(null==r||r.setAttribute("hide",""),null==n||n.setAttribute("fullscreen",""),t(!0))}},e?a().createElement(s,null):a().createElement(o,null))}},"./src/IndicatorMap/buttons/LayersButton.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts");function l(){const{setters:e,sideBarMode:t}=(0,o.useMapContext)();return a().createElement("button",{className:"map-button",onClick:r=>{e.setSideBarMode(s.SideBarMode.layers),e.setIsSidebarOpen((e=>!e||t!=s.SideBarMode.layers))},title:"Gestion des couches"},a().createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24px",height:"24px",viewBox:"0 0 24 24",fill:"currentColor"},a().createElement("path",{d:"M20.0833 15.1999L21.2854 15.9212C21.5221 16.0633 21.5989 16.3704 21.4569 16.6072C21.4146 16.6776 21.3557 16.7365 21.2854 16.7787L12.5144 22.0412C12.1977 22.2313 11.8021 22.2313 11.4854 22.0412L2.71451 16.7787C2.47772 16.6366 2.40093 16.3295 2.54301 16.0927C2.58523 16.0223 2.64413 15.9634 2.71451 15.9212L3.9166 15.1999L11.9999 20.0499L20.0833 15.1999ZM20.0833 10.4999L21.2854 11.2212C21.5221 11.3633 21.5989 11.6704 21.4569 11.9072C21.4146 11.9776 21.3557 12.0365 21.2854 12.0787L11.9999 17.6499L2.71451 12.0787C2.47772 11.9366 2.40093 11.6295 2.54301 11.3927C2.58523 11.3223 2.64413 11.2634 2.71451 11.2212L3.9166 10.4999L11.9999 15.3499L20.0833 10.4999ZM12.5144 1.30864L21.2854 6.5712C21.5221 6.71327 21.5989 7.0204 21.4569 7.25719C21.4146 7.32757 21.3557 7.38647 21.2854 7.42869L11.9999 12.9999L2.71451 7.42869C2.47772 7.28662 2.40093 6.97949 2.54301 6.7427C2.58523 6.67232 2.64413 6.61343 2.71451 6.5712L11.4854 1.30864C11.8021 1.11864 12.1977 1.11864 12.5144 1.30864ZM11.9999 3.33233L5.88723 6.99995L11.9999 10.6676L18.1126 6.99995L11.9999 3.33233Z"})))}},"./src/IndicatorMap/buttons/ZoomButtons.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx");function s(){const{setters:e}=(0,o.useMapContext)(),t=t=>r=>{e.setViewState((e=>Object.assign(Object.assign({},e),{zoom:e.zoom+t}))),r.preventDefault(),r.stopPropagation()};return a().createElement(a().Fragment,null,a().createElement("button",{className:"map-button",onClick:t(1)},a().createElement("span",{className:"fr-icon-add-line"})),a().createElement("button",{className:"map-button",onClick:t(-1)},a().createElement("span",{className:"fr-icon-subtract-line"})))}},"./src/IndicatorMap/context.tsx":(e,t,r)=>{r.r(t),r.d(t,{MapContextProvider:()=>l,useMapContext:()=>i});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/enums.ts");const s=(0,n.createContext)(void 0);function l({indicator:e,mesh:t,geoLevel:r,geoCode:l,filters:i,children:c}){const u=(0,n.useMemo)((()=>JSON.stringify(e)),[e]),d=(0,n.useMemo)((()=>({indicator:e,mesh:t,geoLevel:r,geoCode:l})),[u,t,r,l]),m=(0,n.useMemo)((()=>Object.fromEntries(d.indicator.geo_features.map((e=>[e.name,e])))),[d]),[p,f]=(0,n.useState)(o.DEFAULT_VIEW_STATE),v=(0,n.useRef)(null),g=(0,n.useRef)(null),[h,b]=(0,n.useState)({}),[x,y]=(0,n.useState)({}),[M,E]=(0,n.useState)([]),[w,C]=(0,n.useState)([]),[F,I]=(0,n.useState)(null),[L,S]=(0,n.useState)(null),[_,O]=(0,n.useState)(null),[T,k]=(0,n.useState)(null),[j,N]=(0,n.useState)([]),[A,V]=(0,n.useState)({}),[B,D]=(0,n.useState)([]),[H,G]=(0,n.useState)("common"),[$,R]=(0,n.useState)({}),[P,z]=(0,n.useState)({}),[q,W]=(0,n.useState)({}),[U,Y]=(0,n.useState)({}),[Z,J]=(0,n.useState)([]),[X,K]=(0,n.useState)({}),[Q,ee]=(0,n.useState)({}),[te,re]=(0,n.useState)({}),[ne,ae]=(0,n.useState)([]),[oe,se]=(0,n.useState)([]),[le,ie]=(0,n.useState)([]),[ce,ue]=(0,n.useState)([]),[de,me]=(0,n.useState)(!1),[pe,fe]=(0,n.useState)(null),[ve,ge]=(0,n.useState)(new Set),[he,be]=(0,n.useState)({}),[xe,ye]=(0,n.useState)({}),Me=(0,n.useMemo)((()=>o.PRECISION_LEVEL_BY_MESH[t]<=p.zoom),[t,p]);return a().createElement(s.Provider,{value:{currentFlowDimensions:le,deckRef:g,excelFile:ce,featuresForDownload:te,filters:i,flowDimensions:oe,flowHover:T,flows:ne,geoFeatureHover:_,geoFeatures:q,geoFeaturesMeta:m,geoFeaturesFiltered:U,geoFeaturesFilteredByColumn:X,geoFeaturesFilters:Z,geoFeaturesForTerritories:$,geoFeaturesLoading:Q,hiddenLayers:ve,isSidebarOpen:de,mainTerritories:j,mapRef:v,outsideTerritories:w,overviewLayers:he,overviewValues:xe,page:d,precision:P,precisionMode:Me,rankValues:x,secondaryValuesByName:A,secondaryValuesForMap:B,secondaryValuesScaleType:H,sideBarMode:pe,territories:M,territoryHover:F,territoryClick:L,values:h,viewState:p,setters:{setCurrentFlowDimensions:ie,setExcelFile:ue,setFeaturesForDownload:re,setFlowDimensions:se,setFlowHover:k,setFlows:ae,setGeoFeatureHover:O,setGeoFeatures:W,setGeoFeaturesFiltered:Y,setGeoFeaturesFilteredByColumn:K,setGeoFeaturesFilters:J,setGeoFeaturesForTerritories:R,setGeoFeaturesLoading:ee,setHiddenLayers:ge,setIsSidebarOpen:me,setMainTerritories:N,setOutsideTerritories:C,setOverviewLayers:be,setOverviewValues:ye,setPrecision:z,setRankValues:y,setSecondaryValuesByName:V,setSecondaryValuesForMap:D,setSecondaryValuesScaleType:G,setSideBarMode:fe,setTerritories:E,setTerritoryHover:I,setTerritoryClick:S,setValues:b,setViewState:f}}},c)}function i(){const e=(0,n.useContext)(s);if(!e)throw new Error("useMapContext must be used within a MapContextProvider");return e}},"./src/IndicatorMap/enums.ts":(e,t,r)=>{r.r(t),r.d(t,{COLORS:()=>o,COLOR_MAX:()=>u,COLOR_MIN:()=>c,DEFAULT_VIEW_STATE:()=>b,LIGHT_MAX:()=>v,LIGHT_MIN:()=>g,MAIN_COLOR_HSL:()=>s,NULL_COLOR_HSL:()=>i,NULL_COLOR_RGB:()=>l,OPACITY:()=>h,PRECISION_LEVEL_BY_MESH:()=>a,SATURATION:()=>m,SATURATION_MAX:()=>f,SATURATION_MIN:()=>p,SCALES_COMMONS_BY_MESH:()=>y,SCALES_PIXELS_BY_MESH:()=>M,SCALE_CHANGE:()=>x,SECOND_COLOR_RGB:()=>d,SideBarMode:()=>E});var n=r("./src/enums.tsx");const a={[n.MeshLevel.fr]:6,[n.MeshLevel.reg]:7,[n.MeshLevel.dep]:8.5,[n.MeshLevel.epci]:9.5,[n.MeshLevel.com]:10.5,[n.MeshLevel.aom]:9},o=["#417DC4","#223d06","#fbe769","#CE70CC"],s=[213,53,51],l=[200,200,200],i=[0,0,78],c=180,u=240,d=[34,61,6],m=70,p=10,f=100,v=98,g=40,h=200,b={latitude:47,longitude:2,zoom:4.5,bearing:0,pitch:0},x={[n.MeshLevel.fr]:5,[n.MeshLevel.reg]:7,[n.MeshLevel.dep]:8.5,[n.MeshLevel.epci]:10,[n.MeshLevel.com]:10,[n.MeshLevel.aom]:9},y={[n.MeshLevel.fr]:.24,[n.MeshLevel.reg]:.24,[n.MeshLevel.dep]:.08,[n.MeshLevel.epci]:.02,[n.MeshLevel.com]:.005,[n.MeshLevel.aom]:.04},M={[n.MeshLevel.fr]:10,[n.MeshLevel.reg]:8,[n.MeshLevel.dep]:10,[n.MeshLevel.epci]:5,[n.MeshLevel.com]:3,[n.MeshLevel.aom]:7};var E;!function(e){e.layers="layers",e.filters="filters"}(E||(E={}))},"./src/IndicatorMap/filters.ts":(e,t,r)=>{r.r(t),r.d(t,{useFilters:()=>a});var n=r("react");function a(){const e=Array.from(document.querySelectorAll(".filter-tag")).map((e=>{const t=e;return{dimension:t.dataset.dimension,db_name:t.innerText}})),t=Array.from(document.querySelectorAll(".filter-tag[aria-pressed=true]")).map((e=>{const t=e;return{dimension:t.dataset.dimension,db_name:t.innerText}}));(0,n.useEffect)((()=>{Array.from(document.querySelectorAll(".filter-tag")).forEach((e=>e.addEventListener("click",(()=>{const e=Array.from(document.querySelectorAll(".filter-tag[aria-pressed=true]")).map((e=>{const t=e;return{dimension:t.dataset.dimension,db_name:t.innerText}}));a((t=>{const r=structuredClone(t);return r.current=e,r}))}))))}),[]);const[r,a]=(0,n.useState)({possible:e,current:t});return r}},"./src/IndicatorMap/flows/FlowTooltip.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("./src/IndicatorMap/context.tsx"),a=r("react"),o=r.n(a);const s=()=>{const{flowHover:e}=(0,n.useMapContext)();if(!(null==e?void 0:e.object))return o().createElement(o().Fragment,null);const t=e.object;return o().createElement("div",{style:{position:"absolute",zIndex:1,pointerEvents:"none",backgroundColor:"white",color:"black",left:e.x,top:e.y,padding:"8px 16px",borderRadius:"4px",opacity:"95%",maxWidth:"300px"}},o().createElement("div",{style:{marginBottom:"8px",fontSize:"14px"}},o().createElement("div",null,t.territory_1.name," ",o().createElement("span",{style:{fontSize:"14px"}},"⬌")," ",t.territory_2.name),o().createElement("div",null,o().createElement("b",null,t.value," actifs"))),o().createElement("div",{style:{fontSize:"11px"}},o().createElement("div",null,t.territory_1.name," ",o().createElement("span",{style:{fontSize:"11px"}},"➡")," ",t.territory_2.name),o().createElement("div",null,o().createElement("b",null,t.oneToTwo," actifs")),o().createElement("div",null,t.territory_2.name," ",o().createElement("span",{style:{fontSize:"11px"}},"➡")," ",t.territory_1.name),o().createElement("div",null,o().createElement("b",null,t.twoToOne," actifs"))))}},"./src/IndicatorMap/flows/useFetchFlows.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/enums.tsx"),s=r("./src/IndicatorMap/flows/useFetchOutsideTerritories.ts"),l=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function i(){const{page:e,setters:t,flowDimensions:r,currentFlowDimensions:i}=(0,a.useMapContext)(),[c,u]=(0,n.useState)(null);(0,n.useEffect)((()=>{e.indicator.flows_db_table_prefix&&(()=>{l(this,void 0,void 0,(function*(){const t=yield fetch(`/api/indicators/flows/?prefix=${e.indicator.flows_db_table_prefix}&submesh=${e.mesh}&territory=${e.geoCode}-${e.geoLevel}${e.indicator.flows_dimension?"&dimension="+e.indicator.flows_dimension:""}`);if(t.ok){const e=yield t.json();u(e)}}))})()}),[e]),(0,n.useEffect)((()=>{if(c){const e=c.flows,r=Array.from(new Set(e.map((e=>e.dimension))));r.sort(((e,t)=>e.localeCompare(t))),t.setFlowDimensions(r),t.setCurrentFlowDimensions([...r])}}),[c]),(0,n.useEffect)((()=>{if(c&&r.length>0){const r=c.flows.filter((e=>e.territory_1_id!=e.territory_2_id&&i.includes(e.dimension))),n=c.territories,a=Object.values(r.reduce(((e,t)=>{const r=[t.territory_1_id,t.territory_2_id].sort(((e,t)=>e.localeCompare(t))),n=`${r[0]}-${r[1]}`;return e[n]||(e[n]={territory_1_id:r[0],territory_2_id:r[1],value:0,dimension:"aggregated",oneToTwo:0,twoToOne:0}),e[n].value+=t.value,t.territory_1_id===r[0]?e[n].oneToTwo+=t.value:e[n].twoToOne+=t.value,e}),{})).filter((t=>e.mesh===o.MeshLevel.com?t.value>=100:t.value>=200)),s=a.map((e=>({territory_1:n[e.territory_1_id],territory_2:n[e.territory_2_id],value:e.value,oneToTwo:e.oneToTwo,twoToOne:e.twoToOne})));t.setFlows(s);const l=a.map((e=>({type:"Feature",geometry:{type:"LineString",coordinates:[n[e.territory_1_id].center.coordinates,n[e.territory_2_id].center.coordinates]},properties:{value:e.value,oneToTwo:e.oneToTwo,twoToOne:e.twoToOne}})));t.setFeaturesForDownload((e=>{const t=structuredClone(e);return t.flows=l,t}))}}),[c,e,r,i]),(0,s.default)()}},"./src/IndicatorMap/flows/useFetchOutsideTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/IndicatorMap/utils.ts"),s=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function l(){const{flows:e,page:t,territories:r,setters:l}=(0,a.useMapContext)();(0,n.useEffect)((()=>{const n=e.map((e=>[e.territory_1,e.territory_2])).flat(),a=Object.fromEntries(n.map((e=>[e.code,e]))),i=r.map((e=>e.id)),c=Object.keys(a).filter((e=>!i.includes(e)));c.length>0&&(()=>{s(this,void 0,void 0,(function*(){const e=new URLSearchParams(`submesh=${t.mesh}&territory=${t.geoCode}-${t.geoLevel}&codes=${c.join(",")}`).toString(),r=yield(0,o.fetchMapApi)("territories",e);r.forEach((e=>e.properties={name:a[e.id].name})),l.setOutsideTerritories(r)}))})()}),[e,r])}},"./src/IndicatorMap/flows/useFlowsLayer.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("deck.gl"),s=r("./src/IndicatorMap/utils.ts"),l=r("./src/enums.tsx");const i={[l.MeshLevel.com]:1,[l.MeshLevel.epci]:10,[l.MeshLevel.aom]:15,[l.MeshLevel.dep]:20,[l.MeshLevel.reg]:50,[l.MeshLevel.fr]:5};function c(){var e,t,r,l;const{flows:c,page:u,territoryHover:d,territoryClick:m,flowHover:p,setters:f,hiddenLayers:v}=(0,a.useMapContext)(),g=null!==(t=null===(e=null==d?void 0:d.object)||void 0===e?void 0:e.id)&&void 0!==t?t:null,h=null!==(l=null===(r=null==m?void 0:m.object)||void 0===r?void 0:r.id)&&void 0!==l?l:null,b=(null==p?void 0:p.object)?`${p.object.territory_1.code}-${p.object.territory_2.code}`:"";return(0,n.useMemo)((()=>{const e=h?c.filter((e=>e.territory_1.code===h||e.territory_2.code===h)):c;if(0===e.length)return null;const t=Math.min(...e.map((e=>e.value))),r=Math.max(...e.map((e=>e.value))),n=e=>{let t=[63,58,32,200];return(null==p?void 0:p.object)&&[e.territory_1.code,e.territory_2.code].includes(p.object.territory_1.code)&&[e.territory_1.code,e.territory_2.code].includes(p.object.territory_2.code)?t=[216,198,52,255]:g&&!h&&(t=[e.territory_1.code,e.territory_2.code].includes(g)?[216,198,52,255]:[63,58,32,100]),t};return new o.ArcLayer({id:`flows-${g}-${b}`,data:e,getSourcePosition:e=>e.territory_1.center.coordinates,getTargetPosition:e=>e.territory_2.center.coordinates,getWidth:e=>(0,s.scaleValue)({value:e.value,target:[4e-4*i[u.mesh],.004*i[u.mesh]],minmax:[t,r]}),getSourceColor:n,getTargetColor:n,getHeight:.3,widthUnits:"common",pickable:!0,onHover:e=>{f.setTerritoryHover(null),f.setFlowHover(e)},visible:!Array.from(v).some((e=>e.startsWith("flows")))})}),[c,u,g,h,b,v])}},"./src/IndicatorMap/geo-features/GeoFeatureTooltip.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx");const s=()=>{var e;const{geoFeatureHover:t}=(0,o.useMapContext)();return t&&void 0!==t.object&&0!==Object.keys(null!==(e=t.object.properties)&&void 0!==e?e:{}).filter((e=>"display"!==e)).length?a().createElement("div",{style:{position:"absolute",zIndex:1,pointerEvents:"none",backgroundColor:"white",color:"black",left:t.x,top:t.y,padding:"4px 8px",borderRadius:"4px",opacity:"95%",maxWidth:"300px",fontSize:"13px"}},a().createElement("ul",null,Object.entries(t.object.properties).filter((([e])=>"display"!==e)).map((([e,t])=>{return a().createElement("li",{key:e},a().createElement("b",null,e),":"," ","string"==typeof(r=t)?r:"number"==typeof r?r.toFixed(Number.isInteger(r)?0:2):"boolean"==typeof r?r?"oui":"non":void 0);var r})))):a().createElement(a().Fragment,null)}},"./src/IndicatorMap/geo-features/useFetchGeoFeatures.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r("react"),a=r("./src/IndicatorMap/utils.ts"),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/enums.tsx"),l=r("./node_modules/pako/dist/pako.esm.mjs"),i=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function c(e,t,r){e.setGeoFeaturesLoading((e=>{const n=structuredClone(e);return n[t.name]=r,n}))}function u(){const{page:e,mainTerritories:t,geoFeaturesMeta:r,values:u,setters:d}=(0,o.useMapContext)();(0,n.useEffect)((()=>{t.length>0&&(()=>{i(this,void 0,void 0,(function*(){e.indicator.geo_features.forEach((n=>i(this,void 0,void 0,(function*(){if(n.show_on_fr_level||e.geoLevel!=s.MeshLevel.fr){c(d,n,0);let o=!0,i=0,m=[];for(;o;){const r=n.geo_type===s.GeoType.point?5e4:1e4,u=new URLSearchParams(`territory=${t.map((e=>e.id)).join(",")}-${e.geoLevel}&submesh=${e.mesh}&last=${i}&limit=${r}&feature=${n.id}`).toString(),p=yield(0,a.fetchMapApi)("geo-features",u),f=Uint8Array.from(atob(p.data),(e=>e.charCodeAt(0))),v=l.default.ungzip(f,{to:"string"}),g=JSON.parse(v);g.length>0?(i=p.last,m=[...m,...g],c(d,n,m.length)):(o=!1,c(d,n,!1))}d.setGeoFeatures((e=>{const t=structuredClone(e);return t[n.name]=m,t})),d.setFeaturesForDownload((e=>{const t=structuredClone(e),a=r[n.name].geo_type==s.GeoType.point?m.map((e=>{var t;const r=structuredClone(e),n=Object.fromEntries(Object.entries(r.properties).filter((([e,t])=>"display"!==e)));return n["code du territoire"]=e.id,n["nom du territoire"]=null===(t=u[e.id])||void 0===t?void 0:t.territoryName,r.properties=n,r})):m;return t[n.name]=a,t}))}}))))}))})()}),[e,t,r,u])}},"./src/IndicatorMap/geo-features/useFilterGeoFeature.tsx":(e,t,r)=>{r.r(t),r.d(t,{useFilterGeoFeature:()=>l,useGeoFeaturesFilteredByColumn:()=>i});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/IndicatorMap/utils.ts");function s(e,t){var r;const n=null!==(r=e.properties[t.column.label])&&void 0!==r?r:null;if("select"===t.filterType)return t.value.some((e=>{return""===e?""===n:"string"==typeof e?(t=n,r=e,(0,o.normalizeString)(t.trim())===(0,o.normalizeString)(r.trim())):n===e;var t,r}));if("date"===t.filterType){if(null===n)return!1;const e=new Date(n);if(!(e instanceof Date))return!1;const r=t.value,a=r[0],o=r[1];return a&&o?e>=a&&e<=o:a?e>=a:!o||e<=o}if("number"===t.filterType){if(null===n)return!1;const e=t.value,r=e[0],a=e[1],o=e[2];return""!==r?n===r:""!==a&&""!==o?n>=a&&n<=o:""!==a?n>=a:""===o||n<=o}return!0}function l(){const{geoFeatures:e,geoFeaturesFilters:t,setters:r}=(0,a.useMapContext)();(0,n.useEffect)((()=>{const n=Object.fromEntries(Object.entries(e).map((([e,r])=>{let n=r;return t.forEach((t=>{t.table.name===e&&(n=n.filter((e=>s(e,t))))})),[e,n]})));r.setGeoFeaturesFiltered(n)}),[e,t])}function i(){const{geoFeatures:e,geoFeaturesFilters:t,setters:r,page:o}=(0,a.useMapContext)();(0,n.useEffect)((()=>{const n=Object.fromEntries(Object.entries(e).map((([e,r])=>{const n=o.indicator.geo_features.find((t=>t.name===e)).items.map((e=>e.name)),a=Object.fromEntries(n.map((n=>{const a=t.filter((t=>!(t.column.name===n&&t.table.name===e)));let o=[...r];return a.forEach((t=>{t.table.name===e&&(o=o.filter((e=>s(e,t))))})),[n,o]})));return[e,a]})));r.setGeoFeaturesFilteredByColumn(n)}),[e,t,o])}},"./src/IndicatorMap/geo-features/useGeoFeaturesForTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/enums.tsx");function s(){const{page:e,geoFeaturesFiltered:t,setters:r}=(0,a.useMapContext)();(0,n.useEffect)((()=>{const n=e.indicator.geo_features.filter((e=>e.geo_type==o.GeoType.point)).map((e=>e.name)),a=Object.fromEntries(e.indicator.geo_features.map((e=>[e.name,e.title])));n.forEach((e=>{var n;const o=null!==(n=t[e])&&void 0!==n?n:[],s={};o.map((e=>{const t=e.id;void 0!==t&&(Object.keys(s).includes(t)?s[t]=s[t]+1:s[t]=1)})),r.setGeoFeaturesForTerritories((t=>{const r=structuredClone(t);return r[e]={values:s,name:e,title:a[e]},r}))}))}),[e,t])}},"./src/IndicatorMap/geo-features/useGeoFeaturesLayers.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("react"),a=r("deck.gl"),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/utils.ts"),l=r("./src/enums.tsx");function i(e){e=e.replace(/^#/,"");const t=parseInt(e,16);return[t>>16&255,t>>8&255,255&t]}function c(){const{page:e,geoFeaturesFiltered:t,geoFeaturesMeta:r,hiddenLayers:c,setters:u,precisionMode:d}=(0,o.useMapContext)();return(0,n.useMemo)((()=>{const e=Object.entries(t).map((([e,t])=>{const n=r[e].geo_type;if(n!=l.GeoType.point)return new a.GeoJsonLayer({id:e,data:t,getPointRadius:10,getFillColor:[...i(r[e].color),n===l.GeoType.polygon?100:255],getLineWidth:12,lineWidthMinPixels:1.5,getLineColor:i(r[e].color),pickable:!0,onHover:e=>u.setGeoFeatureHover(e),lineCapRounded:!0,lineJointRounded:!0,pointType:"point",sizeScale:40,visible:!c.has(e)});{const n=(o=(0,s.modifySvgAttributes)(r[e].point_icon_svg,{x:"16",y:"-5",height:"",width:"50",fill:"black"}),m=r[e],e=>{var t,r,n;const a=null!==(r=null===(t=e.properties.display)||void 0===t?void 0:t.color)&&void 0!==r?r:m.color,s=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(`<svg width="82" height="102" viewBox="0 0 82 102" fill="none" xmlns="http://www.w3.org/2000/svg">\n <path d="M1 41C0.999992 61 41 101 41 101C41 101 81 61 81 41C81 21 61 1 41 1C21 1 0.999992 21 1 41Z" fill="${a}"/>\n ${o}\n </svg>`)}`,l=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(`<svg width="20" height="20" viewBox="0 0 50 50" xmlns="http://www.w3.org/2000/svg">\n <circle cx="10" cy="10" r="9" fill="${a}"/>\n </svg>`)}`;return"sm"==(null===(n=e.properties.display)||void 0===n?void 0:n.size)?{url:l,height:20,width:20}:{url:s,height:102,width:82}});return new a.IconLayer({id:e,data:t,pickable:!0,onHover:e=>u.setGeoFeatureHover(e),getIcon:n,getSize:d?32:16,getPosition:e=>e.geometry.coordinates,visible:!c.has(e)})}var o,m})),n=e=>r[e.id].geo_type===l.GeoType.line?10:100;return e.sort(((e,t)=>n(e)-n(t)))}),[t,r,e,c,d])}},"./src/IndicatorMap/index.tsx":(e,t,r)=>{r.r(t);var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/MapWithinContext.tsx"),l=r("./src/IndicatorMap/filters.ts");window.IndicatorMap=({indicator:e,mesh:t,territory:r})=>{const{geoLevel:n,geoId:i}=r,c=(0,l.useFilters)();return a().createElement(o.MapContextProvider,{key:`map${t}${i}`,indicator:e,mesh:t,geoCode:i,geoLevel:n,filters:c},a().createElement(s.default,null))}},"./src/IndicatorMap/legend/Download.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./node_modules/jszip/dist/jszip.min.js"),l=r.n(s),i=r("./node_modules/file-saver/dist/FileSaver.min.js"),c=r.n(i),u=r("html2canvas"),d=r.n(u),m=r("xlsx"),p=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function f(e,t){fetch("/api/tracking/event/",{method:"POST",body:JSON.stringify({indicator:e.name,event:"download",objet:"map",type:t})})}function v(){const{featuresForDownload:e,deckRef:t,mapRef:r,page:s,excelFile:u}=(0,o.useMapContext)(),v=(0,n.useCallback)((()=>p(this,void 0,void 0,(function*(){const t=new(l());for(const[r,n]of Object.entries(e)){const e={type:"FeatureCollection",features:n},a=`${r}.geojson`,o=JSON.stringify(e,null,2);t.file(a,o)}const r=yield t.generateAsync({type:"blob"});(0,i.saveAs)(r,"carte.zip"),f(s.indicator,"geojson")}))),[e]),g=(0,n.useCallback)((()=>p(this,void 0,void 0,(function*(){const e=m.utils.book_new();u.forEach((t=>{const r=[[t.title],t.headers,...t.data],n=m.utils.aoa_to_sheet(r);m.utils.book_append_sheet(e,n,t.title.length>30?t.title.substring(0,30)+"…":t.title)}));const t=m.write(e,{bookType:"ods",type:"array"}),r=new Blob([t],{type:"application/octet-stream"});(0,i.saveAs)(r,`carte - ${s.indicator.title}.ods`),f(s.indicator,"spreadsheet")}))),[u]),h=(0,n.useCallback)((()=>p(this,void 0,void 0,(function*(){const e=`carte - ${s.indicator.title}.png`;if(!r.current||!t.current)return;const n=r.current.getMap(),a=t.current.deck,o=n.getCanvas();a.redraw(!0);const l=a.canvas;document.querySelectorAll(".hideForDownload").forEach((e=>{e.style.visibility="hidden"}));const i=yield d()(document.getElementById("tdbmd-map"));document.querySelectorAll(".hideForDownload").forEach((e=>{e.style.visibility="visible"}));let u=document.createElement("canvas");u.width=o.width,u.height=o.height;var m=u.getContext("2d");m.globalAlpha=1,m.drawImage(o,0,0),m.globalAlpha=1,m.drawImage(l,0,0),m.globalAlpha=1,m.drawImage(i,0,0),u.toBlob((t=>{c().saveAs(t,e)})),f(s.indicator,"image")}))),[t,r,s]);return a().createElement("div",{id:"map-download-buttons"},a().createElement("button",{onClick:()=>v(),className:"fr-btn fr-btn--secondary fr-btn--sm fr-icon-road-map-line fr-btn--icon-right"},"Exporter la carte en GeoJSON"),a().createElement("button",{onClick:()=>h(),className:"fr-btn fr-btn--secondary fr-btn--sm fr-icon-image-line fr-btn--icon-right"},"Exporter la carte en png"),a().createElement("button",{id:"download-map-spreadsheet",onClick:()=>g(),className:"fr-btn fr-btn--secondary fr-btn--sm fr-icon-line-chart-line fr-btn--icon-right"},"Exporter la carte en feuille de calcul"))}},"./src/IndicatorMap/legend/Legend.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts"),l=r("./src/IndicatorMap/utils.ts"),i=r("./src/IndicatorMap/legend/SecondaryValues.tsx");function c(){const{values:e,rankValues:t}=(0,o.useMapContext)(),[r,c]=(0,n.useState)(!0),u=(0,n.useMemo)((()=>{const r={};Object.entries(t).forEach((([e,t])=>{const n=null===t.light||null===t.saturation||null===t.color?s.NULL_COLOR_HSL:[t.color,t.saturation,t.light],a=JSON.stringify(n);a in r||(r[a]=[]),r[a].push(e)}));const n=Object.fromEntries(Object.entries(r).map((([t,r])=>{var n,a,o,s;const l=r.map((t=>e[t])),i=l.map((e=>e.value));let c=null,u="NA",d="NA";return i.length>0&&(c=Math.min(...i),u=null!==(a=null===(n=Object.values(l).find((e=>e.value===Math.min(...i))))||void 0===n?void 0:n.valueLabel)&&void 0!==a?a:"NA",d=null!==(s=null===(o=Object.values(l).find((e=>e.value===Math.max(...i))))||void 0===o?void 0:o.valueLabel)&&void 0!==s?s:"NA"),[t,{minLabel:u,maxLabel:d,minValue:c}]})));return Object.entries(n).sort(((e,t)=>(null===t[1].minValue?-1:t[1].minValue)-(null===e[1].minValue?-1:e[1].minValue)))}),[t,e]),d=()=>c((e=>!e));return a().createElement("div",{id:"tdbmd-map-legend",className:`${!r&&"tdbmd-map-legend--small"}`,onClick:()=>{r||d()}},r&&a().createElement(a().Fragment,null,a().createElement("div",null,u.map((e=>{const t=JSON.parse(e[0]),r=`rgba(${[...(0,l.hsl2rgb)(...t),s.OPACITY].join(",")})`,n=e[1].minLabel===e[1].maxLabel?e[1].minLabel:`${e[1].minLabel.split(" ")[0]} à ${e[1].maxLabel}`;return a().createElement("div",{className:"tdbmd-map-legend-category"},a().createElement("div",{style:{backgroundColor:r}}),a().createElement("div",null,n))}))),a().createElement(i.default,null),a().createElement("div",{className:"tdbmd-map-legend--close",onClick:d},a().createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor"},a().createElement("path",{d:"M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z"})))),!r&&a().createElement("span",null,"Légende"))}},"./src/IndicatorMap/legend/SecondaryValues.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("./src/IndicatorMap/context.tsx"),a=r("react"),o=r.n(a),s=r("./src/IndicatorMap/enums.ts"),l=r("deck.gl");function i(){const{secondaryValuesByName:e,mapRef:t,viewState:r,page:i,secondaryValuesForMap:c,secondaryValuesScaleType:u}=(0,n.useMapContext)(),d=(0,a.useMemo)((()=>{if("pixels"===u)return 2;if(null===t.current)return 0;const e=new l.WebMercatorViewport({width:t.current.getContainer().clientWidth,height:t.current.getContainer().clientHeight,longitude:r.longitude,latitude:r.latitude,zoom:r.zoom}),n=e.project([48,2]),a=e.project([48,2.01]);return 140*(n[1]-a[1])}),[t.current,r,i,u]),[m,p]=(0,a.useMemo)((()=>{let e=c.map((e=>e.value));return 0==e.length&&(e=[0]),[Math.min(...e),Math.max(...e)]}),[c]);return o().createElement(o().Fragment,null,Object.values(e).map((e=>o().createElement("section",{key:e.name},o().createElement("div",null,e.short_title),o().createElement("div",{style:{display:"flex",flexDirection:"row",gap:"16px"}},o().createElement("div",{style:{padding:"8px 0px 4px 0px",minWidth:"75px",display:"flex",justifyContent:"center",alignItems:"end"}},o().createElement("div",{style:{position:"relative"}},o().createElement("div",{style:{backgroundColor:s.COLORS[1],border:"1px solid gray",opacity:"60%",width:d*p+"px",height:d*p+"px",minWidth:"16px",minHeight:"16px",maxWidth:"100px",maxHeight:"100px",borderRadius:"9999px"}}),o().createElement("div",{style:{backgroundColor:s.COLORS[1],border:"1px solid gray",width:d*m+"px",height:d*m+"px",borderRadius:"9999px",position:"absolute",bottom:"0",left:"50%",transform:"translateX(-50%)"}}))),o().createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"space-between",gap:"4px"}},o().createElement("div",null,"Max : ",e.details[2].valueLabel),o().createElement("div",null,"Min : ",e.details[0].valueLabel)))))))}},"./src/IndicatorMap/overview/OverviewTooltip.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx");const s=()=>{const{page:e,territoryHover:t,geoFeaturesForTerritories:r,secondaryValuesByName:s,values:l,overviewLayers:i,overviewValues:c,hiddenLayers:u}=(0,o.useMapContext)(),d=(0,n.useMemo)((()=>{var n,a,o,d,m,p;if(null===t||void 0===t.object)return null;const f=t.object.id;let v=[];const g=`${e.indicator.name}-fill`;return u.has(g)||(v=[...v,{name:i[g].name,color:i[g].color,value:null===(a=null===(n=c[f])||void 0===n?void 0:n[g])||void 0===a?void 0:a.label}]),u.has(null===(o=e.indicator.secondary_indicator)||void 0===o?void 0:o.name)||Object.keys(s).forEach((e=>{var t,r;v=[...v,{name:i[e].name,color:i[e].color,value:null===(r=null===(t=c[f])||void 0===t?void 0:t[e])||void 0===r?void 0:r.label}]})),Object.keys(r).filter((e=>!u.has(e))).forEach((e=>{var t,r;v=[...v,{name:i[e].name,color:i[e].color,value:null===(r=null===(t=c[f])||void 0===t?void 0:t[e])||void 0===r?void 0:r.label}]})),{name:null!==(m=null===(d=l[f])||void 0===d?void 0:d.territoryName)&&void 0!==m?m:null===(p=t.object.properties)||void 0===p?void 0:p.name,position:[t.x,t.y],values:v,withGeoFeatures:e.indicator.geo_features.length>0}}),[e,t,r,s,l,u]);return d&&d.values.length>0&&a().createElement("div",{style:{position:"absolute",zIndex:1,pointerEvents:"none",backgroundColor:"white",color:"black",left:d.position[0],top:d.position[1],padding:"4px 8px",display:"flex",flexDirection:"column",alignItems:"center",borderRadius:"4px",opacity:"95%",maxWidth:"300px"}},a().createElement("div",{style:{fontSize:"14px",fontWeight:"600",marginBottom:"4px"}},d.name),a().createElement("div",{style:{display:"flex",flexDirection:"column",gap:"4px"}},d.values.map((e=>void 0!==e.value&&a().createElement("div",{key:e.name,style:{display:"flex",flexDirection:"row",alignItems:"center",gap:"8px"}},d.values.length>1&&a().createElement("div",{style:{width:"14px",height:"14px",backgroundColor:e.color,borderRadius:"1000px",flexShrink:0}}),a().createElement("div",{style:{display:"flex",flexDirection:"column",alignItems:"start"}},a().createElement("div",{style:{fontWeight:"500",fontSize:"13px",lineHeight:"13px"}},e.name),a().createElement("div",{style:{fontSize:"13px"}},e.value)))))))}},"./src/IndicatorMap/overview/useOverviewValues.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/IndicatorMap/enums.ts");function s(){const{page:e,geoFeaturesMeta:t,geoFeaturesForTerritories:r,secondaryValuesByName:s,values:l,setters:i}=(0,a.useMapContext)();(0,n.useEffect)((()=>{var n;const a=`${e.indicator.name}-fill`,c=[Object.fromEntries(Object.entries(l).map((([e,t])=>[e,{[a]:{value:t.value,label:t.valueLabel}}]))),...Object.entries(s).map((([e,t])=>Object.fromEntries(Object.entries(t.values).map((([t,r])=>[t,{[e]:{value:r.value,label:r.valueLabel}}]))))),...Object.entries(r).map((([e,t])=>Object.fromEntries(Object.entries(t.values).map((([t,r])=>[t,{[e]:{value:r,label:r.toString()}}])))))].reduce(((e,t)=>{for(const r in t)e[r]=Object.assign(Object.assign({},e[r]),t[r]);return e}),{});i.setOverviewValues(c);const u=Object.assign(Object.assign({[a]:{name:null!==(n=e.indicator.short_title)&&void 0!==n?n:e.indicator.title,color:o.COLORS[0]}},Object.fromEntries(Object.entries(s).map((([e,t])=>{var r;return[e,{name:null!==(r=t.short_title)&&void 0!==r?r:t.title,color:o.COLORS[1]}]})))),Object.fromEntries(Object.entries(r).map((([e,r])=>[e,{name:r.title,color:t[e].color}]))));i.setOverviewLayers(u)}),[e,l,s,r])}},"./src/IndicatorMap/secondary/useSecondIndicator.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./node_modules/@turf/center-of-mass/dist/esm/index.js"),s=r("./src/IndicatorMap/utils.ts"),l=r("./src/IndicatorMap/enums.ts");function i(){const{secondaryValuesByName:e,page:t,setters:r,territories:i,viewState:c,secondaryValuesScaleType:u}=(0,a.useMapContext)(),d=(0,n.useMemo)((()=>Object.fromEntries(i.map((e=>[e.id,(0,o.centerOfMass)(e.geometry).geometry.coordinates])))),[i]);(0,n.useEffect)((()=>{r.setSecondaryValuesScaleType(c.zoom<l.SCALE_CHANGE[t.geoLevel]?"common":"pixels")}),[c.zoom,t.geoLevel]),(0,n.useEffect)((()=>{const n=Object.values(e),a=n.length>0?n[0].values:{},o="pixels"===u?l.SCALES_PIXELS_BY_MESH[t.mesh]:l.SCALES_COMMONS_BY_MESH[t.mesh],i=Object.values(a).map((e=>e.value)),c=Math.max(...i),m=Math.min(...i),p=Object.entries(a).map((([e,t])=>({position:d[e],value:(0,s.scaleValue)({value:t.value,target:[1,4],minmax:[m,c]})*o})));r.setSecondaryValuesForMap(p)}),[e,d,t,u])}},"./src/IndicatorMap/secondary/useSecondaryLayer.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("react"),a=r("deck.gl"),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts"),l=r("./src/IndicatorMap/secondary/useSecondIndicator.ts");function i(){const{precisionMode:e,page:t,secondaryValuesForMap:r,hiddenLayers:i,secondaryValuesScaleType:c}=(0,o.useMapContext)();return(0,l.default)(),(0,n.useMemo)((()=>{var e,n;return[new a.ScatterplotLayer({id:null===(e=t.indicator.secondary_indicator)||void 0===e?void 0:e.name,data:r,radiusUnits:c,lineWidthUnits:"pixels",stroked:!0,getRadius:e=>e.value,getFillColor:[...s.SECOND_COLOR_RGB,180],getLineColor:[255,255,255,180],getLineWidth:1,visible:!i.has(null===(n=t.indicator.secondary_indicator)||void 0===n?void 0:n.name)})]}),[e,t,r,i,c])}},"./src/IndicatorMap/sidebar/Filters.tsx":(e,t,r)=>{r.r(t),r.d(t,{SideBarFilters:()=>m});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/utils.ts"),s=r("./src/IndicatorMap/sidebar/Loader.tsx"),l=r("./src/enums.tsx"),i=r("./src/IndicatorCardFilters.tsx"),c=r("./src/IndicatorMap/sidebar/filters/GeoFeaturesFilters.tsx"),u=r("./src/IndicatorMap/context.tsx"),d=r("./src/IndicatorMap/enums.ts");function m(){const{page:e,geoFeaturesLoading:t,geoFeaturesFiltered:r,flowDimensions:n,currentFlowDimensions:m,sideBarMode:p,setters:f}=(0,u.useMapContext)(),v=p!==d.SideBarMode.filters?"none":"block";return a().createElement("div",{style:{display:v}},e.indicator.geo_features.filter((t=>t.show_on_fr_level||e.geoLevel!==l.MeshLevel.fr)).map((e=>{var n,l,i;const u=null!==(i=null!==(l=null===(n=r[e.name])||void 0===n?void 0:n.length)&&void 0!==l?l:t[e.name])&&void 0!==i?i:0,d=u?(0,o.addSpacesToDigit)(u):"0",m=!1!==t[e.name]&&void 0!==t[e.name];return a().createElement("section",{key:e.name},a().createElement("div",{className:"title"},e.title),a().createElement("div",{className:"geo-feature-count"},m&&a().createElement(s.default,null),d&&a().createElement("div",null,d," ",e.unite)),a().createElement(c.default,{featureTable:e}))})),n.length>0&&a().createElement("details",null,a().createElement("summary",null,a().createElement("b",null,"Flux des actifs"),a().createElement("div",{className:"filterTitle"},"Filtrer sur le type de flux")),a().createElement(i.default,{filters:n,currentFilters:m,onClick:e=>{f.setCurrentFlowDimensions((t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e].sort(((e,t)=>e.localeCompare(t)))))}})))}},"./src/IndicatorMap/sidebar/Layers.tsx":(e,t,r)=>{r.r(t),r.d(t,{SideBarLayers:()=>i});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/enums.tsx"),l=r("./src/IndicatorMap/enums.ts");function i(){const{page:e,hiddenLayers:t,setters:r,secondaryValuesByName:n,sideBarMode:i}=(0,o.useMapContext)(),c=e.indicator.geo_features.filter((t=>t.show_on_fr_level||e.geoLevel!==s.MeshLevel.fr));function u(e){return t=>{r.setHiddenLayers((r=>{const n=new Set(r);return t.target.checked?n.delete(e):n.add(e),n}))}}const d=i!==l.SideBarMode.layers?"none":"block";return a().createElement("fieldset",{style:{display:d},className:"fr-fieldset sidebar-filters","aria-labelledby":"layers-checkboxes-legend"},a().createElement("legend",{className:"fr-fieldset__legend--regular fr-fieldset__legend",id:"layers-checkboxes-legend"},"Couches de données"),a().createElement("div",{className:"fr-fieldset__element"},a().createElement("div",{className:"fr-checkbox-group fr-checkbox-group--sm"},a().createElement("input",{name:"layers-indicator",id:"layers-indicator",type:"checkbox",checked:!t.has(`${e.indicator.name}-fill`),onChange:u(`${e.indicator.name}-fill`)}),a().createElement("label",{className:"fr-label",htmlFor:"layers-indicator"},e.indicator.title))),c.map((e=>a().createElement("div",{className:"fr-fieldset__element"},a().createElement("div",{className:"fr-checkbox-group fr-checkbox-group--sm"},a().createElement("input",{name:`layers-geo-${e.name}`,id:`layers-geo-${e.name}`,type:"checkbox",checked:!t.has(e.name),onChange:u(e.name)}),a().createElement("label",{className:"fr-label",htmlFor:`layers-geo-${e.name}`},e.title))))),Object.values(n).map((r=>{var n,o;return a().createElement("div",{className:"fr-fieldset__element"},a().createElement("div",{className:"fr-checkbox-group fr-checkbox-group--sm"},a().createElement("input",{name:`layers-secondary-${r.name}`,id:`layers-secondary-${r.name}`,type:"checkbox",checked:!t.has(null===(n=e.indicator.secondary_indicator)||void 0===n?void 0:n.name),onChange:u(null===(o=e.indicator.secondary_indicator)||void 0===o?void 0:o.name)}),a().createElement("label",{className:"fr-label",htmlFor:`layers-secondary-${r.name}`},r.title)))})),e.indicator.flows_db_table_prefix&&a().createElement("div",{className:"fr-fieldset__element"},a().createElement("div",{className:"fr-checkbox-group fr-checkbox-group--sm"},a().createElement("input",{name:"layers-flows",id:"layers-flows",type:"checkbox",checked:!Array.from(t).some((e=>e.startsWith("flows"))),onChange:u("flows")}),a().createElement("label",{className:"fr-label",htmlFor:"layers-flows"},"Flux"))))}},"./src/IndicatorMap/sidebar/Loader.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react"),a=r.n(n);function o(){return a().createElement("div",{className:"loader"},a().createElement("svg",{viewBox:"0 0 50 50",className:"spinner"},a().createElement("circle",{cx:"25",cy:"25",r:"20",fill:"none",stroke:"currentColor",strokeWidth:"10"})))}},"./src/IndicatorMap/sidebar/Sidebar.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/sidebar/Layers.tsx"),l=r("./src/IndicatorMap/sidebar/Filters.tsx");function i(){const{isSidebarOpen:e,sideBarMode:t,setters:r}=(0,o.useMapContext)();return a().createElement("div",{className:"hideForDownload",id:"map-sidebar","data-open":e},a().createElement("button",{id:"collapse",onClick:()=>r.setIsSidebarOpen(!e)},a().createElement("span",{className:"fr-icon-arrow-left-s-line-double"})),a().createElement("div",{className:"ms-container"},a().createElement("div",{className:"ms-body"},a().createElement(s.SideBarLayers,null),a().createElement(l.SideBarFilters,null))))}},"./src/IndicatorMap/sidebar/filters/BoolFilter.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r.n(n),o=r("./node_modules/react-select/dist/react-select.esm.js"),s=r("./src/IndicatorMap/context.tsx");function l({table:e,column:t,reset:r}){const{setters:l,geoFeaturesFiltered:i,geoFeatures:c}=(0,s.useMapContext)(),u=(0,n.useMemo)((()=>{var r,n;return(null!==(n=null!==(r=i[e.name])&&void 0!==r?r:c[e.name])&&void 0!==n?n:[]).map((e=>e.properties[t.label]))}),[i,c,e,t]),[d,m]=(0,n.useState)(null),p=(0,n.useRef)(null);(0,n.useEffect)((()=>{p.current.clearValue(),l.setGeoFeaturesFilters([])}),[r]),(0,n.useEffect)((()=>{l.setGeoFeaturesFilters((r=>{let n=r.filter((e=>e.column.name!=t.name));return d&&d.length>0&&(n=n.concat([{column:t,filterType:"select",value:d.map((e=>e.value)),table:e}])),n}))}),[d]);const f=[];return u.includes(!0)&&f.push({value:!0,label:"oui"}),u.includes(!1)&&f.push({value:!1,label:"non"}),u.includes(null)&&f.push({value:null,label:"sans valeur"}),a().createElement(o.default,{ref:p,options:f,onChange:m,placeholder:"Sélectionner",isMulti:!0,isClearable:!0})}},"./src/IndicatorMap/sidebar/filters/DateFilter.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>c});var n=r("react"),a=r.n(n),o=r("./node_modules/react-datepicker/dist/index.es.js"),s=r("./node_modules/date-fns/locale/fr.js"),l=r("./src/IndicatorMap/context.tsx");function i({date:e,setDate:t}){return a().createElement(o.default,{selected:e,onChange:e=>t(e),showMonthDropdown:!0,showYearDropdown:!0,locale:"fr",scrollableYearDropdown:!0,yearDropdownItemNumber:60,maxDate:new Date,onYearChange:e=>t(e),onMonthChange:e=>t(e),isClearable:!0})}function c({table:e,column:t,reset:r}){const{setters:o}=(0,l.useMapContext)(),[s,c]=(0,n.useState)(null),[u,d]=(0,n.useState)(null);return(0,n.useEffect)((()=>{d(null),c(null),o.setGeoFeaturesFilters([])}),[r]),(0,n.useEffect)((()=>{o.setGeoFeaturesFilters((r=>{let n=r.filter((e=>e.column.name!=t.name));return(s||u)&&(n=n.concat([{column:t,filterType:"date",value:[s,u],table:e}])),n}))}),[s,u]),a().createElement("div",{className:"date-pickers-range"},a().createElement("div",null,a().createElement("label",null,"Date minimum"),a().createElement("br",null),a().createElement(i,{date:s,setDate:c})),a().createElement("div",null,a().createElement("label",null,"Date maximum"),a().createElement("br",null),a().createElement(i,{date:u,setDate:d})))}r("./node_modules/react-datepicker/dist/react-datepicker.css"),(0,o.registerLocale)("fr",s.fr)},"./src/IndicatorMap/sidebar/filters/FilterType.ts":(e,t,r)=>{r.r(t),r.d(t,{guessFilterType:()=>a});var n=r("./src/IndicatorMap/sidebar/filters/enums.ts");function a(e){if(e.every((e=>null===e||""===e)))return n.FilterType.null;const t=e.filter((e=>null!==e)),r=t.every((e=>"string"==typeof e));return r&&t.filter((e=>""!==e)).every((e=>function(e){if(!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;const[t,r,n]=e.split("-").map(Number),a=new Date(e);return a instanceof Date&&a.getFullYear()===t&&a.getMonth()+1===r&&a.getDate()===n}(e)))?n.FilterType.date:r?n.FilterType.string:t.every((e=>"boolean"==typeof e))?n.FilterType.bool:t.every((e=>"number"==typeof e))?n.FilterType.number:null}},"./src/IndicatorMap/sidebar/filters/GeoFeaturesFilters.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>p});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/sidebar/filters/FilterType.ts"),l=r("./src/IndicatorMap/sidebar/filters/DateFilter.tsx"),i=r("./src/IndicatorMap/sidebar/filters/BoolFilter.tsx"),c=r("./src/IndicatorMap/sidebar/filters/enums.ts"),u=r("./src/IndicatorMap/sidebar/filters/NumberFilter.tsx"),d=r("./src/IndicatorMap/sidebar/filters/StringFilter.tsx");function m({table:e,column:t,reset:r}){const{geoFeatures:m}=(0,o.useMapContext)(),p=(0,n.useMemo)((()=>{var r;const n=(null!==(r=m[e.name])&&void 0!==r?r:[]).map((e=>e.properties[t.label]));return(0,s.guessFilterType)(n)}),[e,t,m]);return p===c.FilterType.date?a().createElement(l.default,{column:t,table:e,reset:r}):p===c.FilterType.number?a().createElement(u.default,{column:t,table:e,reset:r}):p===c.FilterType.bool?a().createElement(i.default,{column:t,table:e,reset:r}):p===c.FilterType.string?a().createElement(d.default,{column:t,table:e,reset:r}):p===c.FilterType.null?a().createElement("div",null,"Données manquantes."):a().createElement("p",null,"Pas de filtres disponibles.")}function p({featureTable:e}){const{geoFeaturesFilters:t}=(0,o.useMapContext)(),[r,s]=(0,n.useState)(0),l=(0,n.useMemo)((()=>t.filter((t=>t.table.id===e.id)).length>0),[t,e]);return a().createElement("div",{className:"table-geo-filters"},a().createElement("div",{className:"filters-title"},l?a().createElement("div",{className:"reset-filters",onClick:()=>s((e=>e+1))},"réinitialiser les filtres"):a().createElement("div",{className:"no-filters"},"0 filtres appliqués")),e.items.map((t=>t.filterable?a().createElement("details",null,a().createElement("summary",null,"Filtrer par ",t.label),a().createElement("div",{className:"table-geo-filters-details-body"},a().createElement(m,{table:e,column:t,reset:r}))):a().createElement(a().Fragment,null))))}},"./src/IndicatorMap/sidebar/filters/NumberFilter.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx");function s({table:e,column:t,reset:r}){const{setters:s}=(0,o.useMapContext)();(0,n.useEffect)((()=>{document.getElementById(i+"-exact").value="",document.getElementById(i+"-min").value="",document.getElementById(i+"-max").value="",s.setGeoFeaturesFilters([])}),[r]);const l=()=>{s.setGeoFeaturesFilters((r=>{let n=r.filter((e=>e.column.name!=t.name));const a=document.getElementById(i+"-exact").value,o=document.getElementById(i+"-min").value,s=document.getElementById(i+"-max").value;return""===a&&""===o&&""===s||(n=n.concat([{column:t,filterType:"number",value:[""===a?"":parseInt(a),""===o?"":parseInt(o),""===s?"":parseInt(s)],table:e}])),n}))},i=`search-${e.name}-${t.name}`;return a().createElement("div",{className:"geo-filters-numbers-col"},a().createElement("div",null,a().createElement("label",{className:"fr-label",htmlFor:i+"-exact"},"Valeur exacte"),a().createElement("input",{id:i+"-exact",type:"number",className:"fr-input fr-input--sm",onInput:l})),a().createElement("i",null,"ou intervallle de valeur"),a().createElement("div",{className:"geo-filters-numbers-row"},a().createElement("div",null,a().createElement("label",{className:"fr-label",htmlFor:i+"-min"},"Valeur minimum"),a().createElement("input",{id:i+"-min",type:"number",className:"fr-input fr-input--sm",onInput:l})),a().createElement("div",null,a().createElement("label",{className:"fr-label",htmlFor:i+"-max"},"Valeur maximum"),a().createElement("input",{id:i+"-max",type:"number",className:"fr-input fr-input--sm",onInput:l}))))}},"./src/IndicatorMap/sidebar/filters/StringFilter.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>u});var n=r("react"),a=r.n(n),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/utils.ts"),l=r("./node_modules/react-windowed-select/dist/main.js"),i=r.n(l);function c(e,t,r){const n=`#filtres > .filters-dimension[data-dimension="${r.name}"]`,a=document.querySelector(n);if(a&&r.linked_to_indicator){const r=Array.from(a.querySelectorAll("button")).map((e=>({value:e.innerText,pressed:"true"===e.getAttribute("aria-pressed")}))).filter((e=>e.pressed)).map((e=>e.value)),n=t.filter((e=>{var t;return r.includes(null!==(t=e.value)&&void 0!==t?t:"")}));e.current.clearValue(),e.current.setValue(n,"select-option")}}function u({table:e,column:t,reset:r}){const{setters:l,geoFeatures:u,geoFeaturesFilteredByColumn:d}=(0,o.useMapContext)(),[m,p]=(0,n.useState)(null),f=(0,n.useRef)(null);(0,n.useEffect)((()=>{f.current.clearValue(),l.setGeoFeaturesFilters([])}),[r]);const v=(0,n.useMemo)((()=>{var r,n;const a=(null!==(n=null!==(r=d[e.name]&&d[e.name][t.name])&&void 0!==r?r:u[e.name])&&void 0!==n?n:[]).map((e=>e.properties[t.label])),o=Array.from(new Set(a)).sort(((e,t)=>(0,s.normalizeString)((null!=e?e:"").trim()).localeCompare((0,s.normalizeString)((null!=t?t:"").trim())))).map((e=>{var t;let r=null!==(t=null==e?void 0:e.toString())&&void 0!==t?t:"";return""===e?r="vide":null===e&&(r="sans valeur"),{value:e,label:r}}));return o}),[d,u,e,t]);return(0,n.useEffect)((()=>{c(f,v,t),Array.from(document.querySelectorAll("#filtres button.filter-tag")).forEach((e=>e.addEventListener("click",(()=>c(f,v,t)))))}),[]),(0,n.useEffect)((()=>{l.setGeoFeaturesFilters((r=>{let n=r.filter((e=>e.column.name!=t.name));return m&&m.length>0&&(n=n.concat([{column:t,filterType:"select",value:m.map((e=>e.value)),table:e}])),n}))}),[m]),a().createElement(i(),{ref:f,options:v,onChange:p,placeholder:"Sélectionner",isMulti:!0,isClearable:!0,isSearchable:!0,className:"react-select-container",classNamePrefix:"react-select"})}},"./src/IndicatorMap/sidebar/filters/enums.ts":(e,t,r)=>{var n;r.r(t),r.d(t,{FilterType:()=>n}),function(e){e.date="date",e.string="string",e.bool="bool",e.number="number",e.null="null"}(n||(n={}))},"./src/IndicatorMap/territories/useFetchTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r("./src/IndicatorMap/utils.ts"),o=r("./src/IndicatorMap/context.tsx"),s=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function l(){const{mainTerritories:e,page:t,setters:r}=(0,o.useMapContext)();(0,n.useEffect)((()=>{e.length>0&&(()=>{s(this,void 0,void 0,(function*(){const n=new URLSearchParams(`submesh=${t.mesh}&territory=${e.map((e=>e.id)).join(",")}-${t.geoLevel}`).toString(),o=yield(0,a.fetchMapApi)("territories",n);r.setTerritories(o)}))})()}),[t,e])}},"./src/IndicatorMap/territories/useMainTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r("./src/IndicatorMap/utils.ts"),o=r("./src/IndicatorMap/context.tsx"),s=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function l(){const{page:e,setters:t}=(0,o.useMapContext)();(0,n.useEffect)((()=>{(()=>{s(this,void 0,void 0,(function*(){const r=new URLSearchParams(`geo_level=${e.geoLevel}&geo_id=${e.geoCode}`).toString(),n=yield(0,a.fetchMapApi)("main-territory",r);t.setMainTerritories(n)}))})()}),[e])}},"./src/IndicatorMap/territories/usePreciseTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("./node_modules/@turf/bbox/dist/esm/index.js"),a=r("deck.gl"),o=r("react"),s=r("./src/IndicatorMap/context.tsx"),l=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function i(){const{territories:e,outsideTerritories:t,mapRef:r,viewState:i,precisionMode:c,page:u,precision:d,setters:m}=(0,s.useMapContext)(),[p,f]=(0,o.useState)([]);(0,o.useEffect)((()=>{const o=setTimeout((()=>{const o=Object.fromEntries(e.concat(t).map((e=>[e.id,e]))),s=Object.values(o);f(function(e,t,r,o,s){if(null===t)return[];if(!s)return[];const l=new a.WebMercatorViewport({width:t.getContainer().clientWidth,height:t.getContainer().clientHeight,longitude:r.longitude,latitude:r.latitude,zoom:r.zoom}).getBounds();return e.filter((e=>{const[t,r,a,o]=(0,n.bbox)(e);return t<l[2]&&a>l[0]&&r<l[3]&&o>l[1]})).map((e=>e.id)).filter((e=>!Object.keys(o).includes(e)))}(s,r.current,i,d,c))}),500);return()=>clearTimeout(o)}),[e,t,r.current,i,d,c]),(0,o.useEffect)((()=>{p.length>0&&(()=>{l(this,void 0,void 0,(function*(){const e=yield fetch(`/api/geo/precise/?territories=${p.join(",")}&mesh=${u.mesh}`);if(e.ok){const t=yield e.json();m.setPrecision((e=>Object.assign(Object.assign({},e),t)))}}))})()}),[u,p])}},"./src/IndicatorMap/territories/useTerritoriesLayer.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("deck.gl"),a=r("react"),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts"),l=r("./src/IndicatorMap/utils.ts");function i(){var e,t;const{page:r,territories:i,outsideTerritories:c,precision:u,setters:d,rankValues:m,values:p,overviewValues:f,overviewLayers:v,territoryHover:g,hiddenLayers:h}=(0,o.useMapContext)(),b=(0,a.useMemo)((()=>{const e=Object.fromEntries(i.concat(c).map((e=>[e.id,e])));return Object.values(e).map((e=>{var t;return{id:e.id,geometry:null!==(t=u[e.id])&&void 0!==t?t:e.geometry,properties:e.properties}}))}),[i,c,u]),x=(0,a.useCallback)((e=>{var t,r,n;const a=null===(t=m[e.id])||void 0===t?void 0:t.light,o=null===(r=m[e.id])||void 0===r?void 0:r.saturation,i=null===(n=m[e.id])||void 0===n?void 0:n.color;return null==a||null==o||null==i?[...s.NULL_COLOR_RGB,s.OPACITY]:[...(0,l.hsl2rgb)(i,o,a),s.OPACITY]}),[m]);(0,a.useEffect)((()=>{d.setFeaturesForDownload((e=>{const t=structuredClone(e),r=structuredClone(b);return r.forEach((e=>{var t;if(e.id&&f[e.id]){const r=f[e.id],n={};Object.entries(r).forEach((([e,t])=>{n[v[e].name+" - valeur"]=t.value,n[v[e].name+" - label"]=t.label})),n.code=e.id,n.nom=null===(t=p[e.id])||void 0===t?void 0:t.territoryName,e.properties=n}})),t.territories=r,t}))}),[b,f,p]);const y=null!==(t=null===(e=null==g?void 0:g.object)||void 0===e?void 0:e.id)&&void 0!==t?t:null,M=(0,a.useCallback)((e=>{var t;return y&&e.id===y?2.2:(null===(t=e.properties)||void 0===t?void 0:t.name.includes("externe"))?1.5:1}),[y]),E=(0,a.useCallback)((e=>{var t;return y&&e.id===y?[0,0]:(null===(t=e.properties)||void 0===t?void 0:t.name.includes("externe"))?[4,8]:[0,0]}),[y]);return(0,a.useMemo)((()=>{const e=new n.GeoJsonLayer({id:`${r.indicator.name}-fill`,data:[...b],getFillColor:x,visible:!h.has(`${r.indicator.name}-fill`)}),t=new n.GeoJsonLayer({id:`${r.indicator.name}-border`,data:[...b],getFillColor:[0,0,0,0],getLineWidth:M,lineWidthUnits:"pixels",pickable:!0,onHover:e=>{d.setFlowHover(null),d.setTerritoryHover(e)},onClick:e=>{d.setTerritoryClick((t=>{var r,n,a,o;const s=null!==(n=null===(r=null==t?void 0:t.object)||void 0===r?void 0:r.id)&&void 0!==n?n:null,l=null!==(o=null===(a=null==e?void 0:e.object)||void 0===a?void 0:a.id)&&void 0!==o?o:null;return s&&s===l?null:e}))},extensions:[new n.PathStyleExtension({dash:!0})],getDashArray:E});return[e,t]}),[b,x,M,h])}},"./src/IndicatorMap/territories/useZoomOnTerritories.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("./node_modules/@turf/bbox/dist/esm/index.js"),a=r("deck.gl"),o=r("react"),s=r("./src/IndicatorMap/context.tsx"),l=r("./src/IndicatorMap/enums.ts");function i(){const{mainTerritories:e,mapRef:t,viewState:r,setters:i,page:c}=(0,s.useMapContext)();(0,o.useEffect)((()=>{if(0==e.length||!t.current)return;const o={type:"FeatureCollection",features:e.map((e=>({type:"Feature",geometry:e.polygon,properties:{}})))},s=(0,n.bbox)(o),u=[[s[0],s[1]],[s[2],s[3]]],d=new a.WebMercatorViewport(r),{longitude:m,latitude:p,zoom:f}=d.fitBounds(u,{width:t.current.getContainer().clientWidth,height:t.current.getContainer().clientHeight,padding:64});i.setViewState({latitude:p,longitude:m,zoom:Math.min(f,l.PRECISION_LEVEL_BY_MESH[c.mesh]-.1),bearing:0,pitch:0,transitionInterpolator:new a.FlyToInterpolator({speed:2}),transitionDuration:"auto"})}),[e,t.current])}},"./src/IndicatorMap/useAddExcelSheet.ts":(e,t,r)=>{r.r(t),r.d(t,{usePrepareExcelExport:()=>l});var n=r("react"),a=r("./node_modules/wkt/index.js"),o=r("./src/IndicatorMap/context.tsx");function s(e){const{excelFile:t,setters:r}=(0,o.useMapContext)();(0,n.useEffect)((()=>{e.forEach((e=>{const n=t.filter((t=>t.title!==e.title));n.push(e),r.setExcelFile(n)}))}),[e])}function l(){const{values:e,overviewValues:t,overviewLayers:r,secondaryValuesByName:l,geoFeatures:i,geoFeaturesMeta:c,geoFeaturesForTerritories:u,page:d,flows:m,featuresForDownload:p}=(0,o.useMapContext)();!function(e,t,r,a,o,l){s((0,n.useMemo)((()=>{let n=["code géographique","nom du territoire","valeur"];Object.keys(o).forEach((e=>{var t;(null===(t=a[e])||void 0===t?void 0:t.name)&&(n=n.concat(a[e].name))})),Object.keys(l).forEach((e=>{var t;(null===(t=a[e])||void 0===t?void 0:t.name)&&(n=n.concat(a[e].name))}));const s=Object.entries(t).map((([e,t])=>{let n=[e,t.territoryName,t.value];return Object.keys(o).forEach((t=>{var o,s;a[t]&&(n=n.concat(null===(s=null===(o=r[e])||void 0===o?void 0:o[t])||void 0===s?void 0:s.value))})),Object.keys(l).forEach((t=>{var o,s;a[t]&&(n=n.concat(null===(s=null===(o=r[e])||void 0===o?void 0:o[t])||void 0===s?void 0:s.value))})),n})),i=e.title;return[{headers:n,data:s,title:i}]}),[e,t,o,l,a,r]))}(d.indicator,e,t,r,l,u),function(e){s((0,n.useMemo)((()=>{const t=e.map((e=>[e.territory_1.code,e.territory_1.name,e.territory_2.code,e.territory_2.name,e.value,e.oneToTwo,e.twoToOne]));return e.length>0?[{headers:["Territoire 1 - code","Territoire 1 - nom","Territoire 2 - code","Territoire 2 - nom","Flux d'actifs (total)","Flux d'actifs (1 vers 2)","Flux d'actifs (2 vers 1)"],data:t,title:"Flux"}]:[]}),[e]))}(m),function(e,t){const r=Object.fromEntries(t.geo_features.map((e=>[e.name,e.title])));s((0,n.useMemo)((()=>Object.entries(e).filter((([e,t])=>"territories"!==e&&"flows"!==e)).map((([e,t])=>{let n=t.length>0&&t[0].properties?Object.keys(t[0].properties).filter((e=>"display"!=e)):[];const o=t.map((e=>{const t=e.properties?Object.fromEntries(Object.entries(e.properties).filter((([e,t])=>"display"!=e))):{};let r=n.map((e=>t[e]));return r=r.concat([(0,a.stringify)(e)]),r})),s=Object.keys(r).includes(e)?r[e]:e;return n=n.concat(["Emplacement (format WKT)"]),{title:s,headers:n,data:o}}))),[e,t]))}(p,d.indicator)}},"./src/IndicatorMap/useLayers.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("./src/IndicatorMap/flows/useFlowsLayer.ts"),a=r("./src/IndicatorMap/geo-features/useGeoFeaturesLayers.ts"),o=r("./src/IndicatorMap/secondary/useSecondaryLayer.ts"),s=r("./src/IndicatorMap/territories/useTerritoriesLayer.ts");function l(){const e=(0,s.default)(),t=(0,o.default)(),r=(0,a.default)(),l=(0,n.default)();return[...e,...t,...r,...l?[l]:[]]}},"./src/IndicatorMap/useRemoveFocus.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>a});var n=r("react");function a(e){const t=null!==e.current;(0,n.useEffect)((()=>{if(t){const e=document.querySelector(".mapboxgl-canvas");e&&e.removeAttribute("tabindex")}}),[t])}},"./src/IndicatorMap/utils.ts":(e,t,r)=>{r.r(t),r.d(t,{addSpacesToDigit:()=>i,fetchMapApi:()=>o,hsl2rgb:()=>l,modifySvgAttributes:()=>s,normalizeString:()=>c,scaleValue:()=>a});var n=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function a({value:e,target:t,minmax:r,discrete:n=!1,rounded:a=!1}){const o=t[0],s=t[1],l=r[0],i=r[1];if(void 0===e)return o;if(function(e,t,r=2){const n=Math.pow(10,r);return Math.round(e*n)===Math.round(t*n)}(l,i))return s;let c=(e-l)/(i-l)*(s-o)+o;if(n){const e=s-o,t=[o+.2*e,o+.4*e,o+.6*e,o+.8*e,s];let r=t.findIndex((e=>c<=e));if(-1==r)throw Error("wrong index");c=t[r]}return a&&(c=Math.round(c)),c}function o(e,t){return n(this,void 0,void 0,(function*(){const r=yield fetch(`/api/geo/${e}/?${t}`);return r.ok?yield r.json():[]}))}function s(e,t){if(!e)return e;const r=(new DOMParser).parseFromString(e,"image/svg+xml"),n=r.querySelector("svg");return Object.entries(t).forEach((([e,t])=>{n.setAttribute(e,t)})),(new XMLSerializer).serializeToString(r)}function l(e,t,r){const n=r/100,a=t/100*Math.min(n,1-n),o=(t,r=(t+e/30)%12)=>Math.round(255*(n-a*Math.max(Math.min(r-3,9-r,1),-1)));return[o(0),o(8),o(4)]}function i(e){return e.toString().replace(/\B(?=(\d{3})+(?!\d))/g," ")}function c(e){return e.normalize("NFD").replace(/[\u0300-\u036f]/g,"").toLowerCase()}},"./src/IndicatorMap/values/useFetchValues.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>i});var n=r("react"),a=r("./src/IndicatorMap/context.tsx"),o=r("./src/format.ts"),s=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{i(n.next(e))}catch(e){o(e)}}function l(e){try{i(n.throw(e))}catch(e){o(e)}}function i(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,l)}i((n=n.apply(e,t||[])).next())}))};function l(e,t,r){return s(this,void 0,void 0,(function*(){const{mesh:n,geoLevel:a,geoCode:s}=t,l=r.current.map((({dimension:e,db_name:t})=>`&${e}=${t}`)).join(""),i=yield fetch(`/api/indicators/${e.name}/submesh/?territory=${s}-${a}&submesh=${n}${l}`);if(i.ok){const t=yield i.json();return Object.fromEntries(t.map((t=>[t.geocode,{value:t.valeur,valueLabel:(0,o.formatValue)(t.valeur,e,{precise:!0}),territoryName:t.geoname}])))}}))}function i(){const{page:e,setters:t,filters:r}=(0,a.useMapContext)();(0,n.useEffect)((()=>{(()=>{s(this,void 0,void 0,(function*(){const n=yield l(e.indicator,e,r);if(n&&t.setValues(n),e.indicator.secondary_indicator){const r=e.indicator.secondary_indicator,n=yield l(r,e,{current:[],possible:[]});if(n){const e=[...Object.values(n)].sort(((e,t)=>e.value-t.value)),a=[e[0],e[Math.floor(e.length/2)],e[e.length-1]];t.setSecondaryValuesByName((e=>{const t=structuredClone(e);return t[r.name]={values:Object.fromEntries(Object.entries(n).map((([e,t])=>[e,t]))),name:r.name,title:r.title,short_title:r.short_title,details:a},t}))}}}))})()}),[e,r])}},"./src/IndicatorMap/values/useRankValues.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>l});var n=r("react"),a=r("./src/IndicatorMap/utils.ts"),o=r("./src/IndicatorMap/context.tsx"),s=r("./src/IndicatorMap/enums.ts");function l(){const{values:e,setters:t}=(0,o.useMapContext)();(0,n.useEffect)((()=>{const r=Object.values(e).map((e=>e.value)).filter((e=>null!==e)),n=Math.max(...r),o=Math.min(...r),l={};Object.entries(e).forEach((([e,t])=>{if(null===t.value)l[e]={height:null,light:null,saturation:null,color:null};else{const r=(0,a.scaleValue)({value:t.value,target:[10,100],minmax:[o,n]}),i=s.LIGHT_MAX-(0,a.scaleValue)({value:t.value,target:[0,s.LIGHT_MAX-s.LIGHT_MIN],minmax:[o,n],discrete:!0,rounded:!0}),c=(0,a.scaleValue)({value:t.value,target:[s.SATURATION_MIN,s.SATURATION_MAX],minmax:[o,n],discrete:!0,rounded:!0}),u=(0,a.scaleValue)({value:t.value,target:[s.COLOR_MIN,s.COLOR_MAX],minmax:[o,n],discrete:!0,rounded:!0});l[e]={height:r,light:i,saturation:c,color:u}}})),t.setRankValues(l)}),[e])}},"./src/enums.tsx":(e,t,r)=>{var n,a;r.r(t),r.d(t,{COLORS:()=>o,GeoType:()=>a,MeshLevel:()=>n}),function(e){e.fr="fr",e.reg="reg",e.dep="dep",e.epci="epci",e.com="com",e.aom="aom"}(n||(n={})),function(e){e.line="line",e.point="point",e.polygon="polygon"}(a||(a={}));const o={"#6A6AF4":"white","#000091":"white","#E1000F":"white","#B7A73F":"black","#66673D":"white","#68A532":"black","#447049":"white","#00A95F":"black","#297254":"white","#009081":"black","#37635F":"white","#009099":"black","#006A6F":"white","#465F9D":"white","#2F4077":"white","#417DC4":"black","#3558A2":"white","#A558A0":"black","#6E445A":"white","#E18B76":"black","#8D533E":"white","#CE614A":"black","#A94645":"white","#C8AA39":"black","#716043":"white","#C3992A":"black","#695240":"white","#E4794A":"black","#755348":"white","#D1B781":"black","#685C48":"white","#C08C65":"black","#845d48":"white","#BD987A":"black","#745B47":"white","#AEA397":"black","#6A6156":"white","#C9191E":"white"}},"./src/format.ts":(e,t,r)=>{r.r(t),r.d(t,{MILLIONS:()=>a,THOUSANDS:()=>n,formatIndicatorValue:()=>o,formatScaleAndUnite:()=>i,formatValue:()=>c});const n="k",a="M";function o(e,{forceInteger:t=!1,precise:r=!1}={}){if(null==e||isNaN(e))return"-";let o=null;return o=Math.abs(e)>999&&r?new Intl.NumberFormat("fr-FR").format(Math.round(e)):Math.abs(e)>999999?l(s(Math.sign(e)*Math.abs(e)/1e6,t))+a:Math.abs(e)>999?l(s(Math.sign(e)*Math.abs(e)/1e3,t))+n:l(s(e,t)),o=o.replace(".",","),o}const s=(e,t)=>t?e.toFixed(0):e.toFixed(1),l=e=>(e.indexOf(".")>0&&("00"===e.slice(-2)&&(e=e.slice(0,-2)),"0"===e.slice(-1)&&(e=e.slice(0,-1)),"."===e.slice(-1)&&(e=e.slice(0,-1))),e);function i(e,t,{forceInteger:r=!1,precise:n=!1}={}){return o(e,{forceInteger:r,precise:n})+" "+t.unite}function c(e,t,{forceInteger:r=!1,precise:n=!1}={}){return i(e,t,{forceInteger:r,precise:n})}},"./src/utils/Loader.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react"),a=r.n(n);function o({width:e=16}){return a().createElement("span",{style:{display:"inline-block",width:`${e}px`}},a().createElement("svg",{xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:"0 0 100 100",preserveAspectRatio:"xMidYMid"},a().createElement("circle",{cx:"50",cy:"50",r:"35","stroke-width":"10",stroke:"#6a6af4","stroke-dasharray":"180",fill:"none","stroke-linecap":"round"},a().createElement("animateTransform",{attributeName:"transform",type:"rotate",repeatCount:"indefinite",dur:"1.1764705882352942s",keyTimes:"0;1",values:"0 50 50;360 50 50"}))))}},"deck.gl":e=>{e.exports=deck},html2canvas:e=>{e.exports=html2canvas},"mapbox-gl":e=>{e.exports=mapboxgl},react:e=>{e.exports=React},"react-dom":e=>{e.exports=ReactDOM},xlsx:e=>{e.exports=XLSX}},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var r=a[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=n,e=[],o.O=(t,r,n,a)=>{if(!r){var s=1/0;for(u=0;u<e.length;u++){for(var[r,n,a]=e[u],l=!0,i=0;i<r.length;i++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](r[i])))?r.splice(i--,1):(l=!1,a<s&&(s=a));if(l){e.splice(u--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,n,a]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);o.r(a);var s={};t=t||[null,r({}),r([]),r(r)];for(var l=2&n&&e;"object"==typeof l&&!~t.indexOf(l);l=r(l))Object.getOwnPropertyNames(l).forEach((t=>s[t]=()=>e[t]));return s.default=()=>e,o.d(a,s),a},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={indicatorMap:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[s,l,i]=r,c=0;if(s.some((t=>0!==e[t]))){for(n in l)o.o(l,n)&&(o.m[n]=l[n]);if(i)var u=i(o)}for(t&&t(r);c<s.length;c++)a=s[c],o.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return o.O(u)},r=self.webpackChunkreact_components=self.webpackChunkreact_components||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),o.nc=void 0;var s=o.O(void 0,["vendors"],(()=>o("./src/IndicatorMap/index.tsx")));s=o.O(s)})();
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! For license information please see sankeyGraph.bundle.js.LICENSE.txt */
|
|
2
|
+
(()=>{"use strict";var e,t,r,n={"./src/IndicatorCardFilters.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react"),a=r.n(n);const o=({filters:e,currentFilters:t,onClick:r})=>a().createElement("div",{className:"fr-tag-list"},e.map(((e,n)=>a().createElement("button",{key:n,className:"fr-tag","aria-pressed":!!t.includes(e)||void 0,onClick:()=>r(e)},e))))},"./src/Sankey/addLinks.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>a});var n=r("./node_modules/d3-sankey/src/index.js");function a(e,t,r){const a=e.append("defs");e.append("g").attr("fill","none").selectAll("path").data(t).join("path").attr("d",(0,n.sankeyLinkHorizontal)()).attr("stroke",(e=>function(e,t,r){const n=`gradient-${r.source.geoCode}-${r.target.geoCode}`,a=e.append("linearGradient").attr("id",n).attr("gradientUnits","userSpaceOnUse").attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");return a.append("stop").attr("offset","30%").attr("stop-color",t[r.source.geoCode]),a.append("stop").attr("offset","70%").attr("stop-color",t[r.target.geoCode]),`url(#${n})`}(a,r,e))).attr("stroke-opacity",.8).attr("stroke-width",(e=>Math.max(e.width,.5)))}},"./src/Sankey/addNodes.ts":(e,t,r)=>{function n(e,t,r,n){e.append("g").selectAll("rect").data(r).join("rect").attr("x",(e=>e.x0)).attr("y",(e=>e.y0)).attr("height",(e=>Math.max(e.y1-e.y0,1))).attr("width",t.nodeWidth()).attr("fill",(e=>n[e.geoCode]))}r.r(t),r.d(t,{default:()=>n})},"./src/Sankey/addTexts.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("./src/format.ts"),a=r("./src/Sankey/enum.ts"),o=r("d3");function s(e,t,r){e.selectAll("text").data(r).enter().append("text").attr("text-anchor",(e=>"start"==e.position?"end":"start")).attr("x",(e=>{const t="start"===e.position?2*-a.PADDING:a.PADDING;return e.x0+t+(e.x1-e.x0)})).attr("y",(e=>e.y0+(e.y1-e.y0)/2)).each((function(e){const r=o.select(this);r.append("tspan").text(function(e,t){const r=e[t.geoCode].name;return r.length>24?r.slice(0,23)+"…":r}(t,e)).attr("x",r.attr("x")).attr("dy",0),r.append("tspan").text((0,n.formatIndicatorValue)(e.value,{forceInteger:!0})).attr("x",r.attr("x")).attr("dy","1.2em")})).style("font-size","11px").style("fill","black").attr("dy","0.35em")}},"./src/Sankey/addTooltip.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>d,removeHighlight:()=>l});var n=r("./src/Sankey/enum.ts"),a=r("d3");function o(e){e.selectAll("path").attr("opacity",.2),e.selectAll("rect").attr("opacity",.2)}function s(e,t){o(t),a.selectAll("path").filter((t=>t===e)).attr("opacity",1),t.selectAll("rect").filter((t=>[e.source,e.target].includes(t))).attr("opacity",1)}function i(e,t){o(t),t.selectAll("rect").filter((t=>t===e)).attr("opacity",1),t.selectAll("path").filter((t=>"start"===e.position?t.source===e:t.target===e)).attr("opacity",1)}function l(e,t){t&&(e.selectAll("rect").attr("opacity",1),e.selectAll("path").attr("opacity",1))}function c(e,t,r,a,o,s){e.on("mouseover",((e,n)=>{t(n),r(n,a),s(a,!1)})).on("mousemove",(e=>{o([e.clientY+n.PADDING,e.clientX])})).on("mouseout",(()=>{t(null),s(a,!0)}))}function d(e,t,r,n,a){c(e.selectAll("text"),t,i,e,n,a),c(e.selectAll("rect"),t,i,e,n,a),c(e.selectAll("path"),r,s,e,n,a)}},"./src/Sankey/colors.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react");const a=["#417DC4","#CE614A","#C3992A","#A558A0","#34BAB5","#00A95F","#c9191e","#2a401a","#695240","#313178"];function o(e){return(0,n.useMemo)((()=>Object.fromEntries(e.map(((e,t)=>[e,a[t]])))),[e])}},"./src/Sankey/enum.ts":(e,t,r)=>{r.r(t),r.d(t,{PADDING:()=>n,SVG_HEIGHT:()=>o,SVG_WIDTH:()=>a});const n=16,a=1024,o=520},"./src/Sankey/index.tsx":(e,t,r)=>{r.r(t),r.d(t,{default:()=>v});var n=r("react"),a=r.n(n),o=r("./src/Sankey/input.ts"),s=r("./src/Sankey/init.ts"),i=r("./src/Sankey/addNodes.ts"),l=r("./src/Sankey/addLinks.ts"),c=r("./src/Sankey/addTexts.ts"),d=r("./src/Sankey/useFetchData.ts"),u=r("./src/IndicatorCardFilters.tsx"),f=r("./src/Sankey/useDimensions.ts"),p=r("./src/Sankey/useSortAndLimit.ts"),y=r("./src/Sankey/colors.ts"),m=r("./src/Sankey/enum.ts"),g=r("./src/Sankey/addTooltip.ts"),h=r("./node_modules/lodash/lodash.js");function v({indicator:e,mesh:t,territory:r}){const v=(0,n.useRef)(null),[k,S]=(0,n.useState)([0,0]),[_,x]=(0,n.useState)(null),[b,A]=(0,n.useState)(null),{flows:w,territories:O}=(0,d.default)(e,t,r),{dimensions:D,toggleDimension:I,aggregatedFlows:C}=(0,f.default)(w,Object.keys(O)),{order:E,filteredFlows:j}=(0,p.default)(C),M=(0,y.default)(E),G=(0,n.useMemo)((()=>(0,h.debounce)(g.removeHighlight,500)),[]);(0,n.useEffect)((()=>{if(j.length>0&&Object.keys(O).length>0&&v.current){const e=(0,o.default)(j),{svgContainer:t,sankeyGraph:r,nodes:n,links:a}=(0,s.default)(e,E,v);(0,i.default)(t,r,n,M),(0,l.default)(t,a,M),(0,c.default)(t,O,n),(0,g.default)(t,x,A,S,G)}}),[j,O,E,M,G]);const N=!(!_&&!b);return a().createElement("section",{key:`map${t}${r.geoId}`,"aria-describedby":"values-table-section"},a().createElement("div",{className:"fr-tag-list fr-mt-4w"},a().createElement(u.default,{filters:D,currentFilters:D,onClick:I})),a().createElement("div",{style:{position:"relative"}},a().createElement("div",{id:"sankey-tooltip",style:{visibility:N?"visible":"hidden",top:`${k[0]}px`,left:`${k[1]}px`}},_&&a().createElement("div",null,a().createElement("div",null,O[_.geoCode].name),a().createElement("div",null,_.value," actifs")),b&&a().createElement("div",null,a().createElement("div",null,a().createElement("b",null,"Départ")," :"," ",O[b.source.geoCode].name),a().createElement("div",null,a().createElement("b",null,"Arrivée")," :"," ",O[b.target.geoCode].name),a().createElement("div",null,a().createElement("b",null,"Valeur")," : ",b.value," actifs"))),a().createElement("svg",{width:m.SVG_WIDTH,height:m.SVG_HEIGHT,ref:v})))}window.SankeyGraph=v},"./src/Sankey/init.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>s});var n=r("./src/Sankey/enum.ts"),a=r("d3"),o=r("./node_modules/d3-sankey/src/index.js");function s(e,t,r){const s=a.select(r.current);s.selectAll("*").remove();const i=(0,o.sankey)().nodeWidth(n.PADDING).nodePadding(1.5*n.PADDING).nodeId((e=>e.name)).nodeSort(((e,r)=>t.indexOf(e.geoCode)-t.indexOf(r.geoCode))).extent([[16*n.PADDING,n.PADDING],[n.SVG_WIDTH-16*n.PADDING,n.SVG_HEIGHT-n.PADDING]]),{nodes:l,links:c}=i(e);return{sankeyGraph:i,nodes:l,links:c,svgContainer:s}}},"./src/Sankey/input.ts":(e,t,r)=>{function n(e){const t=Array.from(new Set(e.map((e=>e.territory_1_id)))),r=Array.from(new Set(e.map((e=>e.territory_2_id))));return{nodes:[...t.map((e=>({geoCode:e,position:"start",name:e+"-start"}))),...r.map((e=>({geoCode:e,position:"end",name:e+"-end"})))],links:e.map((e=>({source:e.territory_1_id+"-start",target:e.territory_2_id+"-end",value:Math.round(e.value)})))}}r.r(t),r.d(t,{default:()=>n})},"./src/Sankey/useDimensions.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>a});var n=r("react");function a(e,t){const[r,a]=(0,n.useState)([]),o=(0,n.useMemo)((()=>{const t=Array.from(new Set(e.map((e=>e.dimension))));return t.sort(((e,t)=>e.localeCompare(t))),t}),[e]);(0,n.useEffect)((()=>{a(o)}),[o]);const s=(0,n.useMemo)((()=>{const t=e.filter((e=>r.includes(e.dimension)));return Object.values(t.reduce(((e,t)=>{const r=t.territory_1_id,n=t.territory_2_id,a=`${r}-${n}`;return e[a]||(e[a]={territory_1_id:r,territory_2_id:n,value:0}),e[a].value+=t.value,e}),{}))}),[e,r]);return{dimensions:o,toggleDimension:e=>{a((t=>t.includes(e)?t.filter((t=>t!==e)):[...t,e].sort(((e,t)=>e.localeCompare(t)))))},aggregatedFlows:s}}},"./src/Sankey/useFetchData.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react"),a=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function s(e){try{l(n.next(e))}catch(e){o(e)}}function i(e){try{l(n.throw(e))}catch(e){o(e)}}function l(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,i)}l((n=n.apply(e,t||[])).next())}))};function o(e,t,r){const[o,s]=(0,n.useState)([]),[i,l]=(0,n.useState)({}),{geoLevel:c,geoId:d}=r,u=(0,n.useMemo)((()=>JSON.stringify(e)),[e]),f=(0,n.useMemo)((()=>({indicator:e,mesh:t,geoLevel:c,geoCode:d})),[u,t,c,d]);return(0,n.useEffect)((()=>{(()=>{a(this,void 0,void 0,(function*(){const e=yield fetch(`/api/indicators/flows/?prefix=${f.indicator.flows_db_table_prefix}&submesh=${f.mesh}&territory=${f.geoCode}-${f.geoLevel}${f.indicator.flows_dimension?"&dimension="+f.indicator.flows_dimension:""}`);if(e.ok){const t=yield e.json();s(t.flows),l(t.territories)}}))})()}),[f]),{flows:o,territories:i}}},"./src/Sankey/useSortAndLimit.ts":(e,t,r)=>{r.r(t),r.d(t,{default:()=>o});var n=r("react");function a(e,t){const r=e.reduce(((e,r)=>{const n="start"===t?r.territory_1_id:r.territory_2_id;return e[n]||(e[n]=0),e[n]+=r.value,e}),{});return Object.entries(r).sort(((e,t)=>t[1]-e[1])).slice(0,10)}function o(e){const t=(0,n.useMemo)((()=>{const t=a(e,"start"),r=t.map((e=>e[0])),n=a(e.filter((e=>r.includes(e.territory_1_id))),"end"),o=t.concat(n).sort(((e,t)=>t[1]-e[1])).map((e=>e[0]));return[...new Set(o)]}),[e]),r=(0,n.useMemo)((()=>e.filter((e=>t.includes(e.territory_1_id)&&t.includes(e.territory_2_id)))),[t,e]);return{order:t,filteredFlows:r}}},"./src/format.ts":(e,t,r)=>{r.r(t),r.d(t,{MILLIONS:()=>a,THOUSANDS:()=>n,formatIndicatorValue:()=>o,formatScaleAndUnite:()=>l,formatValue:()=>c});const n="k",a="M";function o(e,{forceInteger:t=!1,precise:r=!1}={}){if(null==e||isNaN(e))return"-";let o=null;return o=Math.abs(e)>999&&r?new Intl.NumberFormat("fr-FR").format(Math.round(e)):Math.abs(e)>999999?i(s(Math.sign(e)*Math.abs(e)/1e6,t))+a:Math.abs(e)>999?i(s(Math.sign(e)*Math.abs(e)/1e3,t))+n:i(s(e,t)),o=o.replace(".",","),o}const s=(e,t)=>t?e.toFixed(0):e.toFixed(1),i=e=>(e.indexOf(".")>0&&("00"===e.slice(-2)&&(e=e.slice(0,-2)),"0"===e.slice(-1)&&(e=e.slice(0,-1)),"."===e.slice(-1)&&(e=e.slice(0,-1))),e);function l(e,t,{forceInteger:r=!1,precise:n=!1}={}){return o(e,{forceInteger:r,precise:n})+" "+t.unite}function c(e,t,{forceInteger:r=!1,precise:n=!1}={}){return l(e,t,{forceInteger:r,precise:n})}},d3:e=>{e.exports=d3},react:e=>{e.exports=React}},a={};function o(e){var t=a[e];if(void 0!==t)return t.exports;var r=a[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,o),r.loaded=!0,r.exports}o.m=n,e=[],o.O=(t,r,n,a)=>{if(!r){var s=1/0;for(d=0;d<e.length;d++){for(var[r,n,a]=e[d],i=!0,l=0;l<r.length;l++)(!1&a||s>=a)&&Object.keys(o.O).every((e=>o.O[e](r[l])))?r.splice(l--,1):(i=!1,a<s&&(s=a));if(i){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[r,n,a]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,o.t=function(e,n){if(1&n&&(e=this(e)),8&n)return e;if("object"==typeof e&&e){if(4&n&&e.__esModule)return e;if(16&n&&"function"==typeof e.then)return e}var a=Object.create(null);o.r(a);var s={};t=t||[null,r({}),r([]),r(r)];for(var i=2&n&&e;"object"==typeof i&&!~t.indexOf(i);i=r(i))Object.getOwnPropertyNames(i).forEach((t=>s[t]=()=>e[t]));return s.default=()=>e,o.d(a,s),a},o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e={sankeyGraph:0};o.O.j=t=>0===e[t];var t=(t,r)=>{var n,a,[s,i,l]=r,c=0;if(s.some((t=>0!==e[t]))){for(n in i)o.o(i,n)&&(o.m[n]=i[n]);if(l)var d=l(o)}for(t&&t(r);c<s.length;c++)a=s[c],o.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return o.O(d)},r=self.webpackChunkreact_components=self.webpackChunkreact_components||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),o.nc=void 0;var s=o.O(void 0,["vendors"],(()=>o("./src/Sankey/index.tsx")));s=o.O(s)})();
|