@devgateway/dvz-ui-react 1.4.0 → 1.5.1

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.
Files changed (120) hide show
  1. package/dist/cjs/common.css +1 -1
  2. package/dist/cjs/embeddable/big-number-trend/index.js +1 -1
  3. package/dist/cjs/embeddable/body/index.js +1 -1
  4. package/dist/cjs/embeddable/chart/Bar.js +1 -1
  5. package/dist/cjs/embeddable/chart/Line.js +1 -1
  6. package/dist/cjs/embeddable/chart/colors/ColorProvider.js +1 -1
  7. package/dist/cjs/embeddable/chart/colors/ManualColors.js +1 -1
  8. package/dist/cjs/embeddable/chart/colors/SystemColors.js +1 -1
  9. package/dist/cjs/embeddable/chart/data/Bar.js +1 -1
  10. package/dist/cjs/embeddable/chart/data/Line.js +1 -1
  11. package/dist/cjs/embeddable/chart/data/Utils.js +1 -1
  12. package/dist/cjs/embeddable/d3Map/BaseLayer.js +1 -1
  13. package/dist/cjs/embeddable/d3Map/DataLayer.js +1 -1
  14. package/dist/cjs/embeddable/d3Map/FlowLayer.js +1 -1
  15. package/dist/cjs/embeddable/data/DataContext.js +1 -1
  16. package/dist/cjs/embeddable/featuredtabs/index.js +1 -1
  17. package/dist/cjs/embeddable/filter/index.js +1 -1
  18. package/dist/cjs/embeddable/filtered-posts/NoData.js +11 -0
  19. package/dist/cjs/embeddable/filtered-posts/index.js +1 -0
  20. package/dist/cjs/embeddable/index.js +1 -1
  21. package/dist/cjs/embeddable/inlinelist/index.js +1 -1
  22. package/dist/cjs/embeddable/map/MapDataFrame.js +1 -1
  23. package/dist/cjs/embeddable/map/index.js +2 -2
  24. package/dist/cjs/embeddable/map/map.js +4 -4
  25. package/dist/cjs/embeddable/posts-filter/PostsFilterDropdown.js +1 -0
  26. package/dist/cjs/embeddable/posts-filter/index.js +1 -0
  27. package/dist/cjs/embeddable/posts-filters-reset-button/index.js +1 -0
  28. package/dist/cjs/embeddable/posts-pagination/index.js +1 -0
  29. package/dist/cjs/embeddable/reducers/data-api.js +1 -1
  30. package/dist/cjs/embeddable/reducers/data.js +1 -1
  31. package/dist/cjs/embeddable/showcase/index.js +1 -1
  32. package/dist/cjs/embeddable/time-line/mobile.js +1 -1
  33. package/dist/cjs/embeddable/vertical-featuredtabs/index.js +2 -2
  34. package/dist/cjs/index.js +1 -1
  35. package/dist/cjs/layout/ClassicHeader.js +1 -1
  36. package/dist/cjs/layout/CustomSemanticSearch.js +1 -1
  37. package/dist/cjs/layout/Header.js +3 -3
  38. package/dist/cjs/layout/Layout.js +1 -1
  39. package/dist/cjs/layout/SearchControl.js +1 -1
  40. package/dist/cjs/styles.css +1 -1
  41. package/dist/cjs/translations/am.json.js +1 -0
  42. package/dist/cjs/utils/data.js +1 -1
  43. package/dist/esm/common.css +1 -1
  44. package/dist/esm/embeddable/big-number-trend/index.js +36 -36
  45. package/dist/esm/embeddable/body/index.js +141 -95
  46. package/dist/esm/embeddable/chart/Bar.js +390 -382
  47. package/dist/esm/embeddable/chart/Line.js +101 -102
  48. package/dist/esm/embeddable/chart/colors/ColorProvider.js +42 -39
  49. package/dist/esm/embeddable/chart/colors/ManualColors.js +40 -29
  50. package/dist/esm/embeddable/chart/colors/SystemColors.js +28 -17
  51. package/dist/esm/embeddable/chart/data/Bar.js +112 -114
  52. package/dist/esm/embeddable/chart/data/Line.js +126 -126
  53. package/dist/esm/embeddable/chart/data/Utils.js +32 -26
  54. package/dist/esm/embeddable/d3Map/BaseLayer.js +3 -8
  55. package/dist/esm/embeddable/d3Map/DataLayer.js +2 -9
  56. package/dist/esm/embeddable/d3Map/FlowLayer.js +12 -15
  57. package/dist/esm/embeddable/data/DataContext.js +1 -0
  58. package/dist/esm/embeddable/featuredtabs/index.js +128 -124
  59. package/dist/esm/embeddable/filter/index.js +207 -206
  60. package/dist/esm/embeddable/filtered-posts/NoData.js +31 -0
  61. package/dist/esm/embeddable/filtered-posts/index.js +123 -0
  62. package/dist/esm/embeddable/index.js +34 -31
  63. package/dist/esm/embeddable/inlinelist/index.js +82 -70
  64. package/dist/esm/embeddable/map/MapDataFrame.js +17 -14
  65. package/dist/esm/embeddable/map/index.js +180 -169
  66. package/dist/esm/embeddable/map/map.js +520 -437
  67. package/dist/esm/embeddable/posts-filter/PostsFilterDropdown.js +190 -0
  68. package/dist/esm/embeddable/posts-filter/index.js +215 -0
  69. package/dist/esm/embeddable/posts-filters-reset-button/index.js +33 -0
  70. package/dist/esm/embeddable/posts-pagination/index.js +69 -0
  71. package/dist/esm/embeddable/reducers/data-api.js +40 -25
  72. package/dist/esm/embeddable/reducers/data.js +180 -99
  73. package/dist/esm/embeddable/showcase/index.js +1 -1
  74. package/dist/esm/embeddable/time-line/mobile.js +158 -182
  75. package/dist/esm/embeddable/vertical-featuredtabs/index.js +177 -168
  76. package/dist/esm/index.js +69 -25
  77. package/dist/esm/layout/ClassicHeader.js +62 -62
  78. package/dist/esm/layout/CustomSemanticSearch.js +40 -102
  79. package/dist/esm/layout/Header.js +152 -144
  80. package/dist/esm/layout/Layout.js +4 -3
  81. package/dist/esm/layout/SearchControl.js +130 -113
  82. package/dist/esm/styles.css +1 -1
  83. package/dist/esm/translations/am.json.js +46 -0
  84. package/dist/esm/utils/data.js +4 -9
  85. package/dist/types/dvz-ui/src/countries.d.ts +7 -0
  86. package/dist/types/dvz-ui/src/embeddable/chart/colors/ManualColors.d.ts +1 -1
  87. package/dist/types/dvz-ui/src/embeddable/chart/colors/SystemColors.d.ts +1 -1
  88. package/dist/types/dvz-ui/src/embeddable/data/DataContext.d.ts +1 -0
  89. package/dist/types/dvz-ui/src/embeddable/featuredtabs/index.d.ts +1 -0
  90. package/dist/types/dvz-ui/src/embeddable/filtered-posts/NoData.d.ts +7 -0
  91. package/dist/types/dvz-ui/src/embeddable/filtered-posts/index.d.ts +21 -0
  92. package/dist/types/dvz-ui/src/embeddable/inlinelist/index.d.ts +2 -0
  93. package/dist/types/dvz-ui/src/embeddable/map/MapDataFrame.d.ts +1 -6
  94. package/dist/types/dvz-ui/src/embeddable/map/map.d.ts +1 -0
  95. package/dist/types/dvz-ui/src/embeddable/posts-filter/PostsFilterDropdown.d.ts +21 -0
  96. package/dist/types/dvz-ui/src/embeddable/posts-filter/index.d.ts +25 -0
  97. package/dist/types/dvz-ui/src/embeddable/posts-filters-reset-button/index.d.ts +3 -0
  98. package/dist/types/dvz-ui/src/embeddable/posts-pagination/index.d.ts +10 -0
  99. package/dist/types/dvz-ui/src/embeddable/reducers/data-api.d.ts +11 -0
  100. package/dist/types/dvz-ui/src/embeddable/reducers/post-reducer.d.ts +158 -0
  101. package/dist/types/dvz-ui/src/embeddable/time-line/mobile.d.ts +1 -2
  102. package/dist/types/dvz-ui/src/embeddable/vertical-featuredtabs/index.d.ts +1 -0
  103. package/dist/types/dvz-ui/src/index.d.ts +3 -0
  104. package/dist/types/dvz-ui/src/layout/Header.d.ts +2 -2
  105. package/dist/types/dvz-ui/src/translations/am.json.d.ts +39 -0
  106. package/package.json +7 -5
  107. package/dist/cjs/embeddable/posts-with-filters/DropDownFilter.js +0 -1
  108. package/dist/cjs/embeddable/posts-with-filters/Post.js +0 -1
  109. package/dist/cjs/embeddable/posts-with-filters/index.js +0 -1
  110. package/dist/esm/embeddable/posts-with-filters/DropDownFilter.js +0 -25
  111. package/dist/esm/embeddable/posts-with-filters/Post.js +0 -51
  112. package/dist/esm/embeddable/posts-with-filters/index.js +0 -206
  113. package/dist/types/dvz-ui/src/embeddable/posts-with-filters/DropDownFilter.d.ts +0 -4
  114. package/dist/types/dvz-ui/src/embeddable/posts-with-filters/Post.d.ts +0 -5
  115. package/dist/types/dvz-ui/src/embeddable/posts-with-filters/index.d.ts +0 -21
  116. /package/dist/cjs/{utils/countries.js → countries.js} +0 -0
  117. /package/dist/cjs/embeddable/{posts-with-filters → filtered-posts}/utils.js +0 -0
  118. /package/dist/esm/{utils/countries.js → countries.js} +0 -0
  119. /package/dist/esm/embeddable/{posts-with-filters → filtered-posts}/utils.js +0 -0
  120. /package/dist/types/dvz-ui/src/embeddable/{posts-with-filters → filtered-posts}/utils.d.ts +0 -0
@@ -1,5 +1,5 @@
1
- import { jsx as o, jsxs as E } from "react/jsx-runtime";
2
- import { useRef as q, useState as A } from "react";
1
+ import { jsx as o, jsxs as A } from "react/jsx-runtime";
2
+ import { useRef as V, useState as q } from "react";
3
3
  import { Container as H } from "semantic-ui-react";
4
4
  import J from "../data/DataProvider.js";
5
5
  import $ from "../data/DataConsumer.js";
@@ -10,14 +10,14 @@ import G from "string-template";
10
10
  const K = (f) => {
11
11
  const {
12
12
  editing: c = !1,
13
- unique: h,
13
+ unique: g,
14
14
  intl: u,
15
- childContent: g,
15
+ childContent: h,
16
16
  "data-csv": m = "",
17
17
  "data-dvz-proxy-dataset-id": b,
18
18
  "data-no-data-message": T = "No data matches your selection",
19
- "data-view-mode": F = "info",
20
- "data-height": v,
19
+ "data-view-mode": v = "info",
20
+ "data-height": F,
21
21
  "data-app": x,
22
22
  "data-measures": C = "{}",
23
23
  "data-format": z = "{}",
@@ -31,15 +31,15 @@ const K = (f) => {
31
31
  "data-dimension1": r,
32
32
  "data-show-percentage-change": S = "false",
33
33
  "data-wait-for-filters": D = "false",
34
- "data-no-data-text": I = "-"
35
- } = f, w = u.locale, j = q(null), s = (n) => c ? n : decodeURIComponent(n), l = (n) => {
34
+ "data-no-data-text": w = "-"
35
+ } = f, I = u.locale, j = V(null), s = (n) => c ? n : decodeURIComponent(n), l = (n) => {
36
36
  try {
37
37
  return JSON.parse(s(n));
38
38
  } catch {
39
39
  console.error("error parsing value:" + n);
40
40
  }
41
41
  return null;
42
- }, t = l(z), O = t ? {
42
+ }, t = l(z), E = t ? {
43
43
  style: t.style === "compacted" ? "decimal" : t.style,
44
44
  notation: t.style === "compacted" ? "compact" : "standard",
45
45
  currency: t.currency,
@@ -50,31 +50,31 @@ const K = (f) => {
50
50
  currency: "USD",
51
51
  minimumFractionDigits: 2,
52
52
  maximumFractionDigits: 2
53
- }, [X, Y] = A(F), V = c ? v - 80 : v - 40, P = {}, M = l(N) || {};
53
+ }, [X, Y] = q(v), O = c ? F - 80 : F - 40, P = {}, M = l(N) || {};
54
54
  M && M.forEach && M.forEach((n) => {
55
55
  n.value != null && n.value.filter((U) => U != null && U.toString().trim() != "").length > 0 && (P[n.param] = n.value);
56
56
  }), b && (P.dvzProxyDatasetId = b);
57
57
  const R = [];
58
- return r != "none" && R.push(r), /* @__PURE__ */ o("div", { ref: j, children: /* @__PURE__ */ o(H, { className: "chart container big-number-trend-container", style: { height: v + "px" }, fluid: !0, children: /* @__PURE__ */ o(
58
+ return r != "none" && R.push(r), /* @__PURE__ */ o("div", { ref: j, children: /* @__PURE__ */ o(H, { className: "chart container big-number-trend-container", style: { height: F + "px" }, fluid: !0, children: /* @__PURE__ */ o(
59
59
  J,
60
60
  {
61
- style: { height: `${V}px` },
61
+ style: { height: `${O}px` },
62
62
  params: P,
63
63
  app: x,
64
64
  group: y,
65
65
  csv: m,
66
66
  editing: c,
67
67
  waitForFilters: D === "true",
68
- store: [x, h, ...R],
68
+ store: [x, g, ...R],
69
69
  source: R.join("/"),
70
70
  children: /* @__PURE__ */ o($, { children: /* @__PURE__ */ o(
71
71
  L,
72
72
  {
73
73
  editing: c,
74
- locale: w,
74
+ locale: I,
75
75
  intl: u,
76
76
  app: x,
77
- format: O,
77
+ format: E,
78
78
  dimension1: r,
79
79
  measure: l(C)[0] || null,
80
80
  label: p,
@@ -83,7 +83,7 @@ const K = (f) => {
83
83
  labelFontSize: a,
84
84
  percentFontSize: d,
85
85
  showPercentageChange: S == "true" || S == !0,
86
- noDataText: I
86
+ noDataText: w
87
87
  }
88
88
  ) })
89
89
  }
@@ -91,14 +91,14 @@ const K = (f) => {
91
91
  }, L = (f) => {
92
92
  const {
93
93
  editing: c,
94
- app: h,
94
+ app: g,
95
95
  measure: u,
96
- dimension1: g,
96
+ dimension1: h,
97
97
  data: m,
98
98
  format: b,
99
99
  label: T,
100
- textColor: F,
101
- bigNumberFontSize: v,
100
+ textColor: v,
101
+ bigNumberFontSize: F,
102
102
  percentFontSize: x,
103
103
  labelFontSize: C,
104
104
  showPercentageChange: z,
@@ -106,7 +106,7 @@ const K = (f) => {
106
106
  noDataText: N
107
107
  } = f;
108
108
  let e = [], i, a;
109
- if (h == "csv") {
109
+ if (g == "csv") {
110
110
  const { data: s, meta: { fields: l } } = m;
111
111
  i = l[0], a = l[1], e = m.data.map((t) => ({
112
112
  value: t[i],
@@ -114,35 +114,35 @@ const K = (f) => {
114
114
  [i]: t[i]
115
115
  }));
116
116
  } else
117
- e = !m.children || m.children.length == 0 ? [] : m.children, a = u, i = g, e = e.map((s) => ({
117
+ e = !m.children || m.children.length == 0 ? [] : m.children, a = u, i = h, e = e.map((s) => ({
118
118
  value: s.value,
119
119
  [a]: s[a],
120
120
  [i]: s.value
121
121
  }));
122
122
  let d = null, p = null, r, S, D;
123
123
  e.length > 0 && (e = e.sort((s, l) => B(!1, y.locale, s.value, l.value)), d = e[e.length - 1][a], e.length > 1 && (p = e[e.length - 2][a]), D = y.formatNumber(b.style === "percent" ? d / 100 : d, { ...b }), p && (r = (d - p) / p, S = y.formatNumber(r, { style: "percent", minimumFractionDigits: 2, maximumFractionDigits: 2 }))), d == null && (D = N);
124
- const I = {
125
- color: decodeURIComponent(F),
126
- fontSize: v + "px"
127
- }, w = {
128
- color: decodeURIComponent(F),
124
+ const w = {
125
+ color: decodeURIComponent(v),
126
+ fontSize: F + "px"
127
+ }, I = {
128
+ color: decodeURIComponent(v),
129
129
  fontSize: x + "px"
130
130
  }, j = {
131
- color: decodeURIComponent(F),
131
+ color: decodeURIComponent(v),
132
132
  fontSize: C + "px"
133
133
  };
134
- return /* @__PURE__ */ E("div", { className: "trend", children: [
134
+ return /* @__PURE__ */ A("div", { className: "trend", children: [
135
135
  /* @__PURE__ */ o("div", { className: "label", style: j, children: G(T, e[e.length - 1]) }),
136
- /* @__PURE__ */ E("div", { className: "number-and-icon", children: [
137
- /* @__PURE__ */ o("span", { className: "number", style: I, children: D }),
138
- r && /* @__PURE__ */ o("div", { className: r > 0 ? "icon trend up" : "icon trend down" })
136
+ /* @__PURE__ */ A("div", { className: "number-and-icon", children: [
137
+ /* @__PURE__ */ o("span", { className: "number", style: w, children: D }),
138
+ r && /* @__PURE__ */ o("img", { src: r > 0 ? "/trend-up.svg" : "/trend-down.svg", alt: "Arrow", className: "icon" })
139
139
  ] }),
140
- z && r && /* @__PURE__ */ o("div", { className: "percentage", style: w, children: S })
140
+ z && r && /* @__PURE__ */ o("div", { className: "percentage", style: I, children: S })
141
141
  ] });
142
142
  }, Q = (f, c) => {
143
- const { "data-app": h, "data-group": u } = c, g = f.getIn(["data", "measures", h, u]);
144
- return g ? {
145
- injectedMeasures: g
143
+ const { "data-app": g, "data-group": u } = c, h = f.getIn(["data", "measures", g, u]);
144
+ return h ? {
145
+ injectedMeasures: h
146
146
  } : {};
147
147
  }, W = {}, se = k(Q, W)(K);
148
148
  export {
@@ -1,47 +1,69 @@
1
1
  var v = Object.defineProperty;
2
- var O = (g, d, s) => d in g ? v(g, d, { enumerable: !0, configurable: !0, writable: !0, value: s }) : g[d] = s;
3
- var p = (g, d, s) => O(g, typeof d != "symbol" ? d + "" : d, s);
4
- import { jsx as l, jsxs as b } from "react/jsx-runtime";
5
- import C from "react";
6
- import { Container as w } from "semantic-ui-react";
7
- import L from "./Background.js";
2
+ var C = (g, p, s) => p in g ? v(g, p, { enumerable: !0, configurable: !0, writable: !0, value: s }) : g[p] = s;
3
+ var u = (g, p, s) => C(g, typeof p != "symbol" ? p + "" : p, s);
4
+ import { jsx as o, jsxs as f } from "react/jsx-runtime";
5
+ import O from "react";
6
+ import { Container as L } from "semantic-ui-react";
7
+ import w from "./Background.js";
8
8
  import S from "./Stomach.js";
9
9
  import E from "./Liver.js";
10
10
  import N from "./Bounds.js";
11
- import T from "./Blood.js";
12
- import f from "./Lungs.js";
13
- import k from "./Head.js";
14
- import A from "./Eyes.js";
11
+ import A from "./Blood.js";
12
+ import b from "./Lungs.js";
13
+ import T from "./Head.js";
14
+ import k from "./Eyes.js";
15
15
  import D from "./Brain.js";
16
16
  import B from "./Heart.js";
17
17
  import q from "./Erectile.js";
18
- import * as u from "d3";
19
- import Y from "./Ectopic.js";
20
- import { injectIntl as z, FormattedMessage as x } from "react-intl";
21
- import $ from "../../translations/en.json.js";
22
- import j from "../../translations/fr.json.js";
18
+ import * as y from "d3";
19
+ import W from "./Ectopic.js";
20
+ import { injectIntl as $, FormattedMessage as x } from "react-intl";
21
+ import Y from "../../translations/en.json.js";
22
+ import z from "../../translations/fr.json.js";
23
+ import G from "../../translations/am.json.js";
23
24
  import M from "../../utils/deviceType.js";
24
- class H extends C.Component {
25
+ class I extends O.Component {
25
26
  constructor(s) {
26
27
  super(s);
27
- p(this, "mobileOptions", {
28
+ u(this, "localeYDims", {
29
+ en: "60",
30
+ fr: "40",
31
+ am: "40"
32
+ });
33
+ u(this, "localeXdims", {
34
+ en: "-250",
35
+ fr: "-280",
36
+ am: "-280"
37
+ });
38
+ u(this, "titleDims", {
39
+ am: 160,
40
+ fr: 180,
41
+ en: 180
42
+ });
43
+ u(this, "titleLineWidths", {
28
44
  Cancers: {
29
- x: 180,
45
+ am: 125,
46
+ // Wider for Amharic text
47
+ fr: 58,
48
+ en: 58
49
+ },
50
+ OtherConditions: {
51
+ am: 158,
52
+ // Much wider for Amharic text
53
+ fr: 118,
54
+ en: 118
55
+ }
56
+ });
57
+ u(this, "mobileOptions", {
58
+ Cancers: {
59
+ x: this.titleDims[this.props.intl.locale],
30
60
  y: 25
31
61
  },
32
62
  OtherConditions: {
33
- x: 320,
63
+ x: this.isIphone() && this.props.intl.locale === "am" ? 370 : 350,
34
64
  y: 25
35
65
  },
36
- viewBoxDims: "0 0 500 520"
37
- });
38
- p(this, "localeYDims", {
39
- en: "60",
40
- fr: "40"
41
- });
42
- p(this, "localeXdims", {
43
- en: "-250",
44
- fr: "-280"
66
+ viewBoxDims: "0 0 550 520"
45
67
  });
46
68
  this.state = {
47
69
  counter: 0,
@@ -49,7 +71,11 @@ class H extends C.Component {
49
71
  isClicked: !1,
50
72
  selectedOption: "Cancers",
51
73
  orientation: this.getScreenOrientation()
52
- }, this.onMouseOut = this.onMouseOut.bind(this), this.onMouseOver = this.onMouseOver.bind(this), this.updateLayout = this.updateLayout.bind(this), this.updateSvgLabels = this.updateSvgLabels.bind(this), this.handleTextClick = this.handleTextClick.bind(this), this.handleOrientationChange = this.handleOrientationChange.bind(this);
74
+ }, this.onMouseOut = this.onMouseOut.bind(this), this.onMouseOver = this.onMouseOver.bind(this), this.updateLayout = this.updateLayout.bind(this), this.updateSvgLabels = this.updateSvgLabels.bind(this), this.handleTextClick = this.handleTextClick.bind(this), this.handleOrientationChange = this.handleOrientationChange.bind(this), this.messages = {
75
+ en: Y,
76
+ fr: z,
77
+ am: G
78
+ };
53
79
  }
54
80
  updateLayout() {
55
81
  this.setState({ isMobile: ["mobile", "tablet"].includes(M()) });
@@ -58,6 +84,10 @@ class H extends C.Component {
58
84
  var s;
59
85
  return ((s = window.screen.orientation) == null ? void 0 : s.type) || (window.innerWidth > window.innerHeight ? "landscape-primary" : "portrait-primary");
60
86
  }
87
+ isIphone() {
88
+ const s = navigator.userAgent.toLowerCase();
89
+ return /iphone/i.test(s);
90
+ }
61
91
  handleOrientationChange() {
62
92
  setTimeout(() => {
63
93
  this.setState({ orientation: this.getScreenOrientation() }, () => {
@@ -67,28 +97,30 @@ class H extends C.Component {
67
97
  }
68
98
  handleTextClick(s) {
69
99
  if (!this.state.isMobile) return;
70
- const t = s.target.closest("svg"), e = s.target.closest(".title"), r = s.target.closest(".title-rect");
71
- if (e || r) {
72
- [...t.querySelectorAll(".title, .title-rect, .title-line")].forEach(
73
- (c) => c.classList.remove("on")
100
+ const e = s.target.closest("svg"), t = s.target.closest(".title"), r = s.target.closest(".title-rect");
101
+ if (t || r) {
102
+ [...e.querySelectorAll(".title, .title-rect, .title-line")].forEach(
103
+ (a) => a.classList.remove("on")
74
104
  );
75
- const m = e || r;
76
- m.classList.add("on");
77
- const o = m.closest("g").querySelector(".title-line");
78
- o && o.classList.add("on"), this.setState({
79
- selectedOption: e ? e.innerHTML : r.nextSibling.innerHTML
105
+ const d = t || r, i = d.getAttribute("data-option");
106
+ d.classList.add("on");
107
+ const c = d.closest("g"), h = c.querySelector(".title-rect"), n = c.querySelector(".title");
108
+ h && h.classList.add("on"), n && n.classList.add("on");
109
+ const m = c.querySelector(".title-line");
110
+ m && m.classList.add("on"), i && this.setState({
111
+ selectedOption: i
80
112
  });
81
113
  }
82
114
  }
83
115
  onMouseOut() {
84
- u.select(".body.parts").selectAll("g.system").transition().duration(0).delay(200).style("opacity", 1), u.select(".body.parts").selectAll("circle").remove(), u.select(".body.parts").selectAll("line").remove();
116
+ y.select(".body.parts").selectAll("g.system").transition().duration(0).delay(200).style("opacity", 1), y.select(".body.parts").selectAll("circle").remove(), y.select(".body.parts").selectAll("line").remove();
85
117
  }
86
- onMouseOver(s, t, e) {
87
- const r = u.select(".body.parts"), m = r.select(s);
88
- s && (r.selectAll("g.system").transition().duration(200).style("opacity", 0), m.transition().style("opacity", 1));
89
- const o = t.node().getBBox();
90
- let c, h, n, y;
91
- o.x < 0 ? (c = o.x + o.width + 5, n = c > 0 ? 30 : -5, h = o.y + o.height / 2, y = o.y + o.height / 2) : (c = o.x - 5, n = 140, h = o.y + o.height / 2, y = o.y + o.height / 2), r.select("svg").append("line").attr("x1", c).attr("y1", h).attr("x2", c).attr("y2", h).transition().duration(100).attr("x2", n).attr("y2", y), r.select("svg").append("line").attr("x1", n).attr("y1", o.y + o.height / 2).attr("x2", n).attr("y2", o.y + o.height / 2).transition().duration(100).delay(100).attr("x2", e.tx).attr("y2", e.ty), r.select("svg").append("circle").attr("r", 0).attr("cx", e.tx).attr("cy", e.ty).attr("opacity", 0.6).attr("fill", "#000").transition().delay(200).duration(30).attr("r", 6);
118
+ onMouseOver(s, e, t) {
119
+ const r = y.select(".body.parts"), d = r.select(s);
120
+ s && (r.selectAll("g.system").transition().duration(200).style("opacity", 0), d.transition().style("opacity", 1));
121
+ const i = e.node().getBBox();
122
+ let c, h, n, m;
123
+ i.x < 0 ? (c = i.x + i.width + 5, n = c > 0 ? 30 : -5, h = i.y + i.height / 2, m = i.y + i.height / 2) : (c = i.x - 5, n = 140, h = i.y + i.height / 2, m = i.y + i.height / 2), r.select("svg").append("line").attr("x1", c).attr("y1", h).attr("x2", c).attr("y2", h).transition().duration(100).attr("x2", n).attr("y2", m), r.select("svg").append("line").attr("x1", n).attr("y1", i.y + i.height / 2).attr("x2", n).attr("y2", i.y + i.height / 2).transition().duration(100).delay(100).attr("x2", t.tx).attr("y2", t.ty), r.select("svg").append("circle").attr("r", 0).attr("cx", t.tx).attr("cy", t.ty).attr("opacity", 0.6).attr("fill", "#000").transition().delay(200).duration(30).attr("r", 6);
92
124
  }
93
125
  componentDidMount() {
94
126
  window.addEventListener("resize", this.updateLayout), window.screen.orientation ? window.screen.orientation.addEventListener(
@@ -97,19 +129,21 @@ class H extends C.Component {
97
129
  ) : window.addEventListener("resize", this.handleOrientationChange), this.updateLayout(), this.updateSvgLabels(), this.addOnClassToSelectedElements();
98
130
  }
99
131
  addOnClassToSelectedElements() {
100
- const { selectedOption: s } = this.state, t = document.querySelector("svg");
101
- let e, r;
102
- s === "Cancers" ? (e = t.querySelector(".title"), r = t.querySelector(".title-line")) : s === "OtherConditions" && (e = t.querySelectorAll(".title")[1], r = t.querySelectorAll(".title-line")[1]), e && r && (e.classList.add("on"), r.classList.add("on"));
132
+ const { selectedOption: s } = this.state, e = document.querySelector("svg");
133
+ if (!e) return;
134
+ [...e.querySelectorAll(".title, .title-rect, .title-line")].forEach(
135
+ (i) => i.classList.remove("on")
136
+ );
137
+ const t = e.querySelector(`[data-option="${s}"].title`), r = e.querySelector(`[data-option="${s}"].title-rect`);
138
+ let d = null;
139
+ if (t || r) {
140
+ const i = (t || r).closest("g");
141
+ d = i ? i.querySelector(".title-line") : null;
142
+ }
143
+ t && t.classList.add("on"), r && r.classList.add("on"), d && d.classList.add("on");
103
144
  }
104
145
  updateSvgLabels() {
105
- const s = u.select(".body.parts");
106
- let t = {
107
- en: $,
108
- fr: j
109
- };
110
- const e = this.props.intl;
111
- t = t[e.locale];
112
- const r = [
146
+ const s = y.select(".body.parts"), e = this.props.intl, t = this.messages[e.locale], r = [
113
147
  {
114
148
  label: e.formatMessage({
115
149
  id: "oropharyngeal.cancer",
@@ -218,7 +252,7 @@ class H extends C.Component {
218
252
  tx: 85,
219
253
  ty: 275
220
254
  }
221
- ], m = [
255
+ ], d = [
222
256
  {
223
257
  label: e.formatMessage({
224
258
  id: "stroke",
@@ -383,20 +417,20 @@ class H extends C.Component {
383
417
  }
384
418
  ];
385
419
  s.select("svg").selectAll("text.label").remove();
386
- const { selectedOption: o, isMobile: c } = this.state, h = o === "Cancers" ? r : m;
420
+ const { selectedOption: i, isMobile: c } = this.state, h = i === "Cancers" ? r : d;
387
421
  let n = 60;
388
- const y = (a, i) => c ? 160 : -250;
389
- e.locale === "en" ? c ? s.select("svg").selectAll("text.label").data(h).enter().append("text").attr("class", "label").attr("x", y).attr("y", (a, i) => n + i * 25).text((a) => a.label) : (n = 90, s.select("svg").selectAll("text.left").data(r).enter().append("text").attr("class", "label").attr("x", (a, i) => -250).attr("y", (a, i) => n + i * 25).text((a) => a.label), s.select("svg").selectAll("text.rigth").data(m).enter().append("text").attr("class", "label").attr("x", (a, i) => 200).attr("y", (a, i) => n + i * 25).text((a) => a.label)) : c ? s.select("svg").selectAll("text.label").data(h).enter().append("text").attr("class", "label").attr("x", y).attr("y", (a, i) => n + i * 25).text((a) => a.label) : (s.select("svg").selectAll("text.left").data(r).enter().append("text").attr("class", "label").attr("x", (a, i) => -280).attr("y", (a, i) => n + i * 25).text((a) => a.label), s.select("svg").selectAll("text.right").data(m).enter().append("text").attr("class", "label").attr("x", (a, i) => 200).attr("y", (a, i) => n + i * 25).text((a) => a.label)), s.select("svg").selectAll("text.label").on("mouseover", (a, i) => {
390
- this.onMouseOver(i.selector, u.select(a.currentTarget), i, {
391
- tx: i.tx,
392
- ty: i.ty
422
+ const m = (a, l) => c && this.props.intl.locale === "am" ? 140 : c ? 160 : -250;
423
+ e.locale === "en" ? c ? s.select("svg").selectAll("text.label").data(h).enter().append("text").attr("class", "label").attr("x", m).attr("y", (a, l) => n + l * 25).text((a) => a.label) : (n = 90, s.select("svg").selectAll("text.left").data(r).enter().append("text").attr("class", "label").attr("x", (a, l) => -250).attr("y", (a, l) => n + l * 25).text((a) => a.label), s.select("svg").selectAll("text.right").data(d).enter().append("text").attr("class", "label").attr("x", (a, l) => 200).attr("y", (a, l) => n + l * 25).text((a) => a.label)) : (e.locale === "fr" || e.locale === "am") && (c ? s.select("svg").selectAll("text.label").data(h).enter().append("text").attr("class", "label").attr("x", m).attr("y", (a, l) => n + l * 25).text((a) => a.label) : (s.select("svg").selectAll("text.left").data(r).enter().append("text").attr("class", "label").attr("x", (a, l) => -280).attr("y", (a, l) => n + l * 25).text((a) => a.label), s.select("svg").selectAll("text.right").data(d).enter().append("text").attr("class", "label").attr("x", (a, l) => 200).attr("y", (a, l) => n + l * 25).text((a) => a.label))), s.select("svg").selectAll("text.label").on("mouseover", (a, l) => {
424
+ this.onMouseOver(l.selector, y.select(a.currentTarget), l, {
425
+ tx: l.tx,
426
+ ty: l.ty
393
427
  });
394
- }).on("mouseout", (a, i) => {
428
+ }).on("mouseout", (a, l) => {
395
429
  this.onMouseOut();
396
430
  });
397
431
  }
398
- componentDidUpdate(s, t) {
399
- (t.selectedOption !== this.state.selectedOption || t.orientation !== this.state.orientation) && (this.updateSvgLabels(), this.addOnClassToSelectedElements());
432
+ componentDidUpdate(s, e) {
433
+ (e.selectedOption !== this.state.selectedOption || e.orientation !== this.state.orientation) && (this.updateSvgLabels(), this.addOnClassToSelectedElements());
400
434
  }
401
435
  componentWillUnmount() {
402
436
  window.removeEventListener("resize", this.updateLayout), window.screen.orientation ? window.screen.orientation.removeEventListener(
@@ -405,31 +439,32 @@ class H extends C.Component {
405
439
  ) : window.removeEventListener("resize", this.handleOrientationChange);
406
440
  }
407
441
  render() {
408
- return /* @__PURE__ */ l(w, { className: "body parts", children: /* @__PURE__ */ b(
442
+ return /* @__PURE__ */ o(L, { className: "body parts", children: /* @__PURE__ */ f(
409
443
  "svg",
410
444
  {
411
445
  className: "body root",
412
446
  viewBox: this.state.isMobile ? this.mobileOptions.viewBoxDims : "-300 0 900 520",
413
447
  xmlns: "http://www.w3.org/2000/svg",
414
448
  children: [
415
- /* @__PURE__ */ l(L, { className: "backGround" }),
416
- /* @__PURE__ */ l(N, { className: "system bounds" }),
417
- /* @__PURE__ */ l(k, { className: "system head" }),
418
- /* @__PURE__ */ l(f, { className: "system larynx" }),
419
- /* @__PURE__ */ l(f, { className: "system lungs" }),
420
- /* @__PURE__ */ l(S, { className: "system stomach" }),
421
- /* @__PURE__ */ l(E, { className: "system liver" }),
422
- /* @__PURE__ */ l(D, { className: "system brain" }),
423
- /* @__PURE__ */ l(A, { className: "system eyes" }),
424
- /* @__PURE__ */ l(T, { className: "system blood" }),
425
- /* @__PURE__ */ l(B, { className: "system heart" }),
426
- /* @__PURE__ */ l(q, { className: "system erectile" }),
427
- /* @__PURE__ */ l(Y, { className: "system Ectopic" }),
428
- /* @__PURE__ */ b("g", { onClick: this.handleTextClick, children: [
429
- /* @__PURE__ */ l(
449
+ /* @__PURE__ */ o(w, { className: "backGround" }),
450
+ /* @__PURE__ */ o(N, { className: "system bounds" }),
451
+ /* @__PURE__ */ o(T, { className: "system head" }),
452
+ /* @__PURE__ */ o(b, { className: "system larynx" }),
453
+ /* @__PURE__ */ o(b, { className: "system lungs" }),
454
+ /* @__PURE__ */ o(S, { className: "system stomach" }),
455
+ /* @__PURE__ */ o(E, { className: "system liver" }),
456
+ /* @__PURE__ */ o(D, { className: "system brain" }),
457
+ /* @__PURE__ */ o(k, { className: "system eyes" }),
458
+ /* @__PURE__ */ o(A, { className: "system blood" }),
459
+ /* @__PURE__ */ o(B, { className: "system heart" }),
460
+ /* @__PURE__ */ o(q, { className: "system erectile" }),
461
+ /* @__PURE__ */ o(W, { className: "system Ectopic" }),
462
+ /* @__PURE__ */ f("g", { onClick: this.handleTextClick, children: [
463
+ /* @__PURE__ */ o(
430
464
  "rect",
431
465
  {
432
466
  className: "title-rect",
467
+ "data-option": "Cancers",
433
468
  x: this.state.isMobile ? this.mobileOptions.Cancers.x - 20 : "",
434
469
  y: this.state.isMobile ? this.mobileOptions.Cancers.y - 20 : this.localeYDims[this.props.intl.locale],
435
470
  rx: "5",
@@ -438,32 +473,41 @@ class H extends C.Component {
438
473
  height: "30"
439
474
  }
440
475
  ),
441
- /* @__PURE__ */ l(
476
+ /* @__PURE__ */ o(
442
477
  "text",
443
478
  {
444
479
  x: this.state.isMobile ? this.mobileOptions.Cancers.x : this.localeXdims[this.props.intl.locale],
445
480
  y: this.state.isMobile ? this.mobileOptions.Cancers.y : this.localeYDims[this.props.intl.locale],
446
481
  className: "title",
447
- children: /* @__PURE__ */ l(x, { id: "ailments.title", defaultMessage: "Cancers" })
482
+ "data-option": "Cancers",
483
+ children: /* @__PURE__ */ o(
484
+ x,
485
+ {
486
+ id: "ailments.title",
487
+ defaultMessage: "{cancers}",
488
+ values: { cancers: this.messages[this.props.intl.locale]["ailments.title"] }
489
+ }
490
+ )
448
491
  }
449
492
  ),
450
- this.state.isMobile && /* @__PURE__ */ l(
493
+ this.state.isMobile && /* @__PURE__ */ o(
451
494
  "rect",
452
495
  {
453
496
  className: "title-line",
454
497
  x: this.state.isMobile ? this.mobileOptions.Cancers.x - 18 : "-250",
455
498
  y: this.state.isMobile ? this.mobileOptions.Cancers.y + 7 : "",
456
- width: "58",
499
+ width: this.titleLineWidths.Cancers[this.props.intl.locale] || this.titleLineWidths.Cancers.en,
457
500
  height: "3",
458
501
  fill: "#E5EBED"
459
502
  }
460
503
  )
461
504
  ] }),
462
- /* @__PURE__ */ b("g", { onClick: this.handleTextClick, children: [
463
- /* @__PURE__ */ l(
505
+ /* @__PURE__ */ f("g", { onClick: this.handleTextClick, children: [
506
+ /* @__PURE__ */ o(
464
507
  "rect",
465
508
  {
466
509
  className: "title-rect",
510
+ "data-option": "OtherConditions",
467
511
  x: this.state.isMobile ? this.mobileOptions.OtherConditions.x - 65 : "",
468
512
  y: this.state.isMobile ? this.mobileOptions.OtherConditions.y - 20 : this.localeYDims[this.props.intl.locale],
469
513
  rx: "5",
@@ -472,28 +516,30 @@ class H extends C.Component {
472
516
  height: "30"
473
517
  }
474
518
  ),
475
- /* @__PURE__ */ l(
519
+ /* @__PURE__ */ o(
476
520
  "text",
477
521
  {
478
522
  x: this.state.isMobile ? this.mobileOptions.OtherConditions.x - 50 : "200",
479
523
  y: this.state.isMobile ? this.mobileOptions.OtherConditions.y : this.localeYDims[this.props.intl.locale],
480
524
  className: "title",
481
- children: /* @__PURE__ */ l(
525
+ "data-option": "OtherConditions",
526
+ children: /* @__PURE__ */ o(
482
527
  x,
483
528
  {
484
529
  id: "ailments.otherConditions",
485
- defaultMessage: "Other conditions"
530
+ defaultMessage: "{otherConditions}",
531
+ values: { otherConditions: this.messages[this.props.intl.locale]["ailments.otherConditions"] }
486
532
  }
487
533
  )
488
534
  }
489
535
  ),
490
- this.state.isMobile && /* @__PURE__ */ l(
536
+ this.state.isMobile && /* @__PURE__ */ o(
491
537
  "rect",
492
538
  {
493
539
  className: "title-line",
494
540
  x: this.state.isMobile ? this.mobileOptions.OtherConditions.x - 68 : "200",
495
541
  y: this.state.isMobile ? this.mobileOptions.OtherConditions.y + 7 : "60",
496
- width: "118",
542
+ width: this.titleLineWidths.OtherConditions[this.props.intl.locale] || this.titleLineWidths.OtherConditions.en,
497
543
  height: "3",
498
544
  fill: "#E5EBED"
499
545
  }
@@ -504,7 +550,7 @@ class H extends C.Component {
504
550
  ) });
505
551
  }
506
552
  }
507
- const oe = z(H);
553
+ const ne = $(I);
508
554
  export {
509
- oe as default
555
+ ne as default
510
556
  };