@baravak/risloo-profile-cli 4.2.3 → 4.2.5

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.
@@ -1,6 +1,6 @@
1
1
  const { Profile, FS } = require("../Profile");
2
2
 
3
- class _16PF extends Profile {
3
+ class _16PF93 extends Profile {
4
4
  // Number of pages
5
5
  static pages = 1;
6
6
 
@@ -18,7 +18,7 @@ class _16PF extends Profile {
18
18
  L10: { eng: "m", fr: "M", right: "عمل‌گرا", left: "کولی‌باز" },
19
19
  L11: { eng: "n", fr: "N", right: "بی‌ظرافت", left: "ظرافت" },
20
20
  L12: { eng: "o", fr: "O", right: "اطمینان به خود", left: "مستعد احساس گناه" },
21
- L13: { eng: "q1", fr: "Q1", right: "باز بودن نسبت به تغییر", left: "بنیادگرا" },
21
+ L13: { eng: "q1", fr: "Q1", right: "محافظه‌کار", left: "بنیادگرا" },
22
22
  L14: { eng: "q2", fr: "Q2", right: "متکی بر خود", left: "مسلط به دیگران" },
23
23
  L15: { eng: "q3", fr: "Q3", right: "اختلال‌مدار", left: "کمال‌گرا" },
24
24
  L16: { eng: "q4", fr: "Q4", right: "آرام", left: "اضطراب" },
@@ -42,7 +42,7 @@ class _16PF extends Profile {
42
42
  multiProfile: false /* Whether the sample has multiple profiles or not */,
43
43
  questions: false /* Determines whether to get questions from inital dataset or not */,
44
44
  defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
45
- fields: ["marital_status"] /* In case you want to get some additional fields and show in the profile */,
45
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
46
46
  },
47
47
  /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
48
48
  /* calculating its dimensions carefully is of great importance */
@@ -155,4 +155,4 @@ class _16PF extends Profile {
155
155
  }
156
156
  }
157
157
 
158
- module.exports = _16PF;
158
+ module.exports = _16PF93;
@@ -0,0 +1,114 @@
1
+ const { Profile, FS } = require("../Profile");
2
+
3
+ class _16PF9A extends Profile {
4
+ // Number of pages
5
+ static pages = 1;
6
+
7
+ // Labels of the sample
8
+ labels = {
9
+ L1: { eng: "a", fr: "A", right: "مردم‌گریزی", left: "مردم‌آمیزی" },
10
+ L2: { eng: "b", fr: "B", right: "استدلال عینی", left: "استدلال انتزاعی" },
11
+ L3: { eng: "c", fr: "C", right: "ناپایداری هیجانی", left: "پایداری هیجانی" },
12
+ L4: { eng: "e", fr: "E", right: "سلطه‌پذیری", left: "سلطه‌گری" },
13
+ L5: { eng: "f", fr: "F", right: "دل‌مردگی", left: "سرزندگی" },
14
+ L6: { eng: "g", fr: "G", right: "مصلحت‌گرا", left: "باوجدان" },
15
+ L7: { eng: "h", fr: "H", right: "ترسو", left: "جسور" },
16
+ L8: { eng: "i", fr: "I", right: "یکدنده", left: "حساس" },
17
+ L9: { eng: "l", fr: "L", right: "زودباور", left: "شکاک" },
18
+ L10: { eng: "m", fr: "M", right: "عمل‌گرا", left: "کولی‌باز" },
19
+ L11: { eng: "n", fr: "N", right: "بی‌ظرافت", left: "ظرافت" },
20
+ L12: { eng: "o", fr: "O", right: "اطمینان به خود", left: "مستعد احساس گناه" },
21
+ L13: { eng: "q1", fr: "Q1", right: "باز بودن نسبت به تغییر", left: "بنیادگرا" },
22
+ L14: { eng: "q2", fr: "Q2", right: "متکی بر خود", left: "مسلط به دیگران" },
23
+ L15: { eng: "q3", fr: "Q3", right: "اختلال‌مدار", left: "کمال‌گرا" },
24
+ L16: { eng: "q4", fr: "Q4", right: "آرام", left: "اضطراب" },
25
+ L17: { eng: "extraversion", fr: "برون‌گرایی" },
26
+ L18: { eng: "anxiety", fr: "اضطراب" },
27
+ L19: { eng: "flexibility", fr: "یک‌دندگی" },
28
+ L20: { eng: "independence", fr: "استقلال" },
29
+ L21: { eng: "selfcontrol", fr: "کنترل بالا" },
30
+ L22: { eng: "adjustment", fr: "سازگاری" },
31
+ L23: { eng: "leadership", fr: "قدرت رهبری" },
32
+ L24: { eng: "creativity", fr: "خلاقیت" },
33
+ L25: { eng: "status", fr: "وضعیت" },
34
+ };
35
+
36
+ profileSpec = {
37
+ /* "sample" determines some important info about the sample and profile */
38
+ /* Default prerequisites: 1. gender, 2. age, 3. education */
39
+ /* "prerequisites" is synonym to "fields" in our program */
40
+ sample: {
41
+ name: "پرسشنامه شخصیت کتل" /* Name of the sample */,
42
+ multiProfile: false /* Whether the sample has multiple profiles or not */,
43
+ questions: false /* Determines whether to get questions from inital dataset or not */,
44
+ defaultFields: true /* Determines whether to have default prerequisites in the profile or not */,
45
+ fields: [] /* In case you want to get some additional fields and show in the profile */,
46
+ },
47
+ /* "profile" determines the dimensions of the drawn profile (to be used in svg tag viewbox) */
48
+ /* calculating its dimensions carefully is of great importance */
49
+ profile: {
50
+ get dimensions() {
51
+ return {
52
+ width: 522 + 2 * this.padding.x,
53
+ height: 557 + 2 * this.padding.y,
54
+ };
55
+ },
56
+ padding: {
57
+ x: 190.5,
58
+ y: 78.5,
59
+ },
60
+ },
61
+ items: {
62
+ minValue: 1,
63
+ maxValue: 10,
64
+ offsetY: 33.8,
65
+ widthCoeff: 16.2,
66
+ fillAndOpacity: {
67
+ 1: { fill: "#1D4ED8", opacity: 1 },
68
+ 2: { fill: "#1D4ED8", opacity: 0.9 },
69
+ 3: { fill: "#1D4ED8", opacity: 0.8 },
70
+ 4: { fill: "#1D4ED8", opacity: 0.7 },
71
+ 5: { fill: "#9CA3AF", opacity: 1 },
72
+ 6: { fill: "#9CA3AF", opacity: 1 },
73
+ 7: { fill: "#0E7490", opacity: 0.7 },
74
+ 8: { fill: "#0E7490", opacity: 0.8 },
75
+ 9: { fill: "#0E7490", opacity: 0.9 },
76
+ 10: { fill: "#0E7490", opacity: 1 },
77
+ },
78
+ label: {
79
+ offsetX: 16.2,
80
+ },
81
+ },
82
+ /* "labels" part which has to be provided for each profile */
83
+ labels: Object.values(this.labels),
84
+ };
85
+
86
+ constructor(dataset, options, config = {}) {
87
+ super();
88
+ this._init(dataset, options, config);
89
+ }
90
+
91
+ _calcContext() {
92
+ const {
93
+ spec: { parameters: spec },
94
+ dataset,
95
+ } = this;
96
+
97
+ const { items: itemsSpec } = spec;
98
+
99
+ const status = dataset.score.pop().mark;
100
+
101
+ const genderValue = dataset.info.fields.find((f) => f["eng"] === "gender").value;
102
+
103
+ const items = dataset.score.slice(0, 16).map((data) => ({
104
+ label: data.label,
105
+ mark: data.mark,
106
+ offset: (data.mark - 1) * itemsSpec.widthCoeff,
107
+ ...itemsSpec.fillAndOpacity[data.mark],
108
+ }));
109
+
110
+ return [{ items, status }];
111
+ }
112
+ }
113
+
114
+ module.exports = _16PF9A;
@@ -6,24 +6,28 @@ class YSQ93 extends Profile {
6
6
 
7
7
  // Labels of the sample
8
8
  labels = {
9
- L1: { eng: "ed", fr: "محرومیت هیجانی" },
10
- L2: { eng: "ab", fr: "رهاشدگی / بی‌ثباتی" },
11
- L3: { eng: "ma", fr: "بی‌اعتمادی / بدرفتاری" },
12
- L4: { eng: "si", fr: "انزوای اجتماعی / بی‌گانگی" },
13
- L5: { eng: "ds", fr: "نقص / شرم" },
14
- L6: { eng: "fa", fr: "شکست" },
15
- L7: { eng: "ai", fr: "وابستگی / بی‌کفایتی" },
16
- L8: { eng: "vu", fr: "آسیب‌پذیری نسبت به ضرر یا بیماری" },
17
- L9: { eng: "eu", fr: "گرفتار / خویشتن تحول‌نیافته" },
18
- L10: { eng: "sb", fr: "اطاعت" },
19
- L11: { eng: "ss", fr: "ایثارگری" },
20
- L12: { eng: "ei", fr: "بازداری هیجانی" },
21
- L13: { eng: "us", fr: "معیارهای سخت‌گیرانه" },
22
- L14: { eng: "et", fr: "استحقاق / بزرگ‌منشی" },
23
- L15: { eng: "is", fr: "خویشتن‌داری / خودانضباطی ناکافی" },
24
- L16: { eng: "as", fr: "پذیرش‌جویی / جلب توجه" },
25
- L17: { eng: "np", fr: "منفی‌گرایی / بدبینی" },
26
- L18: { eng: "pu", fr: "تنبیه" },
9
+ L1: { eng: "ab", fr: "رهاشدگی (بی‌ثباتی)" , append_rows:0},
10
+ L2: { eng: "ma", fr: "بی‌اعتمادی (سوءاستفاده)" , append_rows:0},
11
+ L3: { eng: "ed", fr: "محرومیت عاطفی" , append_rows:0},
12
+ L4: { eng: "ds", fr: "نقص (شرم)" , append_rows:0},
13
+ L5: { eng: "si", fr: "انزوای اجتماعی (احساس بیگانگی)", append_rows:0},
14
+
15
+ L6: { eng: "ai", fr: "وابستگی (بی‌کفایتی)" , append_rows:38 * 1},
16
+ L7: { eng: "vu", fr: "آسیب‌پذیری در برابر خطر" , append_rows:38 * 1},
17
+ L8: { eng: "eu", fr: "گرفتارشدگی (خودتحول‌نایافتگی)" , append_rows:38 * 1},
18
+ L9: { eng: "fa", fr: "شکست" , append_rows:38 * 1},
19
+
20
+ L10: { eng: "et", fr: "محق‌بودن (خودبزرگ‌بینی)" , append_rows:38 * 2},
21
+ L11: { eng: "is", fr: "خودمهارگری ناکافی" , append_rows:38 * 2},
22
+
23
+ L12: { eng: "sb", fr: "انقیاد (اطاعت)" , append_rows:38 * 3},
24
+ L13: { eng: "ss", fr: "از خودگذشتگی" , append_rows:38 * 3},
25
+ L14: { eng: "as", fr: "تأییدخواهی یا تصدیق‌خواهی" , append_rows:38 * 3},
26
+
27
+ L15: { eng: "np", fr: "منفی‌خوانی یا بدبینی" , append_rows:38 * 4},
28
+ L16: { eng: "ei", fr: "بیش‌مهارگری (بازداری هیجانی)" , append_rows:38 * 4},
29
+ L17: { eng: "us", fr: "استانداردهای سخت‌گیرانه" , append_rows:38 * 4},
30
+ L18: { eng: "pu", fr: "تنبیه‌گری" , append_rows:38 * 4},
27
31
  };
28
32
 
29
33
  profileSpec = {
@@ -42,13 +46,13 @@ class YSQ93 extends Profile {
42
46
  profile: {
43
47
  get dimensions() {
44
48
  return {
45
- width: 815 + 2 * this.padding.x,
46
- height: 609 + 2 * this.padding.y,
49
+ width: 887 + 2 * this.padding.x,
50
+ height: 666 + 2 * this.padding.y,
47
51
  };
48
52
  },
49
53
  padding: {
50
- x: 44,
51
- y: 52.5,
54
+ x: 8,
55
+ y: 24,
52
56
  },
53
57
  },
54
58
 
@@ -0,0 +1,57 @@
1
+ {{#> layout}}
2
+
3
+ <g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
4
+ <g transform="translate(121.5, 23.5)">
5
+ <g transform="translate(64.6, -23)">
6
+ {{#if (boolean status '!==' "invalid")}}
7
+ <rect x="0" y="0" width="46.8" height="16.2" rx="3.6" fill="#FEE2E2" />
8
+ <text x="23.4" y="8.1" fill="#B91C1C" font-size="12.6" font-weight="400" text-anchor="middle" dy="3">نامعتبر</text>
9
+ {{/if}}
10
+ </g>
11
+ <text x="8" y="-20" dy="1em" font-size="12" font-weight="400" fill="#155E75" text-anchor="middle">10</text>
12
+ <text x="168" y="-20" dy="1em" font-size="12" font-weight="400" fill="#155E75" text-anchor="middle">0</text>
13
+
14
+ <rect x="0" y="0" width="16" height="514" fill="#1D4ED8" fill-opacity="0.1" rx="3.6" />
15
+ <rect x="16" y="0" width="16" height="514" fill="#1D4ED8" fill-opacity="0.07" rx="3.6" />
16
+ <rect x="32" y="0" width="16" height="514" fill="#1D4ED8" fill-opacity="0.05" rx="3.6" />
17
+
18
+ <rect x="48" y="0" width="16" height="514" fill="#E5E7EB" fill-opacity="0.2" rx="3.6" />
19
+ <rect x="64" y="0" width="16" height="514" fill="#E5E7EB" fill-opacity="0.1" rx="3.6" />
20
+
21
+ <rect x="96" y="0" width="16" height="514" fill="#E5E7EB" fill-opacity="0.1" rx="3.6" />
22
+ <rect x="112" y="0" width="16" height="514" fill="#E5E7EB" fill-opacity="0.2" rx="3.6" />
23
+
24
+ <rect x="128" y="0" width="16" height="514" fill="#0E7490" fill-opacity="0.05" rx="3.6" />
25
+ <rect x="144" y="0" width="16" height="514" fill="#0E7490" fill-opacity="0.07" rx="3.6" />
26
+ <rect x="160" y="0" width="16" height="514" fill="#0E7490" fill-opacity="0.1" rx="3.6" />
27
+ {{!-- {{#each items as | item index |}}
28
+ {{#with @root.spec.items as | itemsSpec |}}
29
+ <g transform="translate(0, {{math index '*' itemsSpec.offsetY}})">
30
+ <g transform="translate(0, 7.2)">
31
+ <line x1="18" y1="0" x2="-147.6" y2="0" stroke="#E4E4E7" />
32
+ <g font-size="14.4" font-weight="400">
33
+ <text x="220" y="0" fill="#71717A" font-weight="500" text-anchor="middle" dy="3">{{item.label.fr}}</text>
34
+ <text x="32.4" y="0" fill="#1E40AF" text-anchor="end" dy="3">{{item.label.right}}</text>
35
+ <text x="-162.5" y="0" fill="#155E75" text-anchor="start" dy="3">{{item.label.left}}</text>
36
+ </g>
37
+ </g>
38
+ <g transform="translate(-{{item.offset}}, 0)">
39
+ <rect x="0" y="0" width="16.2" height="16.2" fill="{{item.fill}}" fill-opacity="{{item.opacity}}" rx="3.6" />
40
+ <text x="8.1" y="8.1" fill="#FFFFFF" font-size="12.6" font-weight="400" text-anchor="middle" dy="3.5">{{item.mark}}</text>
41
+ </g>
42
+ </g>
43
+ {{/with}}
44
+ {{/each}} --}}
45
+ </g>
46
+ <g transform="translate(0, 21.5)">
47
+ {{#each items as | item index |}}
48
+ <g transform="translate(0, {{math 33.3 '*' index}})">
49
+ <line x1="119.5" y1="10" x2="121.5" y2="10" stroke="#D1D5DB" stroke-width="2" />
50
+ <line x1="121.5" y1="10" x2="297.5" y2="10" stroke="#E5E7EB" stroke-width="2" />
51
+ <line x1="297.5" y1="10" x2="299.5" y2="10" stroke="#D1D5DB" stroke-width="2" />
52
+ </g>
53
+ {{/each}}
54
+ </g>
55
+ </g>
56
+
57
+ {{/layout}}
@@ -15,13 +15,9 @@
15
15
  </defs>
16
16
 
17
17
  <g transform="translate({{spec.profile.padding.x}}, {{spec.profile.padding.y}})">
18
- <g transform="translate(0,41)">
18
+ <g transform="translate(72,41)">
19
19
  {{#each items as |item index|}}
20
- <g transform="translate(0,{{math 32 '*' index}})">
21
- {{!-- <rect height="16" width="148" transform="translate(88,0)" opacity=".1" />
22
- <rect height="16" width="32" transform="translate(204,0)" opacity=".1" />
23
- <rect height="16" width="5" transform="translate(191,0)" opacity=".1" />
24
- <rect height="16" width="50" transform="translate(133,0)" opacity=".1" /> --}}
20
+ <g transform="translate(0,{{math item.label.append_rows '+' (math 26 '*' index)}})">
25
21
  <text x="181" y="0" text-anchor="start" dy=".85em" font-size="13" font-weight="{{ternary item.warn '700' '400'}}" fill="{{ternary item.warn (ternary item.is_critical '#E11D48' '#1F2937') '#4B5563'}}">{{item.label.fr}}</text>
26
22
  <text x="191" y="0" text-anchor="end" dy=".9em" font-size="13" font-weight="{{ternary item.warn '700' '400'}}" fill="{{ternary item.warn (ternary item.is_critical '#E11D48' '#1F2937') '#4B5563'}}">-</text>
27
23
  <text x="220" y="0" text-anchor="middle" dy="1em" font-size="13" font-weight="{{ternary item.warn '700' '400'}}" fill="{{ternary item.warn (ternary item.is_critical '#E11D48' '#1F2937') '#4B5563'}}">{{item.up}}</text>
@@ -62,25 +58,53 @@
62
58
  </g>
63
59
  {{/each}}
64
60
  <text x="291" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="400" fill="#9CA3AF">5</text>
65
- <line x1="291" y1="-16" x2="291" y2="568" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
61
+ <line x1="291" y1="-16" x2="291" y2="625" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
66
62
  <text x="341" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="400" fill="#9CA3AF">10</text>
67
- <line x1="341" y1="-16" x2="341" y2="568" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
63
+ <line x1="341" y1="-16" x2="341" y2="625" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
68
64
  <text x="391" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="500" fill="#6B7280">15</text>
69
- <line x1="391" y1="-16" x2="391" y2="568" stroke="#6B7280"/>
65
+ <line x1="391" y1="-16" x2="391" y2="625" stroke="#6B7280"/>
70
66
  <text x="441" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="400" fill="#9CA3AF">20</text>
71
- <line x1="441" y1="-16" x2="441" y2="568" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
67
+ <line x1="441" y1="-16" x2="441" y2="625" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
72
68
  <text x="491" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="400" fill="#9CA3AF">25</text>
73
- <line x1="491" y1="-16" x2="491" y2="568" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
69
+ <line x1="491" y1="-16" x2="491" y2="625" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
74
70
  <text x="541" y="-42" text-anchor="middle" dy="1em" font-size="12" font-weight="400" fill="#9CA3AF">30</text>
75
- <line x1="541" y1="-16" x2="541" y2="568" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
71
+ <line x1="541" y1="-16" x2="541" y2="625" stroke="#E5E7EB" stroke-linecap="round" stroke-dasharray="6 6"/>
76
72
  {{#each items as |item index|}}
77
- <g transform="translate(0,{{math 32 '*' index}})">
73
+ <g transform="translate(0,{{math item.label.append_rows '+' (math 26 '*' index)}})">
78
74
  {{bar (math item.mark '*' 10) 16 (object tr=2 br=2 bl=0 tl=0) (toRad 0) fill=fill transform="translate(241,0)"}}
79
75
  <text x="{{math (math item.mark '*' 10) '+' 235}}" y="0" text-anchor="start" dy=".85em" font-size="16" font-weight="500" fill="#FFFFFF">{{item.mark}}</text>
80
76
  </g>
81
77
  {{/each}}
82
78
  </g>
83
- <rect x="240" y="25" width="1" height="584" rx="0.25" fill="#FFFFFF" stroke-linecap="round" style="filter: drop-shadow(1px 0px 3px rgba(0,0,0, 1));"/>
79
+ <rect x="312" y="25" width="1" height="641" rx="0.25" fill="#FFFFFF" stroke-linecap="round" style="filter: drop-shadow(1px 0px 3px rgba(0,0,0, 1));"/>
80
+ <g transform="translate(0, 47)">
81
+ {{bar 48 108 (object tr=4 br=4 bl=4 tl=4) (toRad 0) fill="#F9FAFB"}}
82
+ <text transform="rotate(-90, 0, 0)" x="-8" y="16" text-anchor="start" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">انفصال و طردشدگی</text>
83
+ </g>
84
+
85
+ <g transform="translate(0, 212)">
86
+ {{bar 48 85 (object tr=4 br=4 bl=4 tl=4) (toRad 0) fill="#F9FAFB"}}
87
+ <text transform="rotate(-90, 0, 0)" x="-42.5" y="8" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">استقلال و</text>
88
+ <text transform="rotate(-90, 0, 0)" x="-42.5" y="24" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">عملکرد معیوب</text>
89
+ </g>
90
+
91
+ <g transform="translate(0, 328)">
92
+ {{bar 48 85 (object tr=4 br=4 bl=4 tl=4) (toRad 0) fill="#F9FAFB"}}
93
+ <text transform="rotate(-90, 0, 0)" x="-42.5" y="8" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">محدودیت‌های</text>
94
+ <text transform="rotate(-90, 0, 0)" x="-42.5" y="24" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">آسیب‌زا</text>
95
+ </g>
96
+
97
+ <g transform="translate(0, 445)">
98
+ {{bar 48 64 (object tr=4 br=4 bl=4 tl=4) (toRad 0) fill="#F9FAFB"}}
99
+ <text transform="rotate(-90, 0, 0)" x="-32" y="8" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">جهت‌گیری</text>
100
+ <text transform="rotate(-90, 0, 0)" x="-32" y="24" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">دگرسو</text>
101
+ </g>
102
+
103
+ <g transform="translate(0, 557)">
104
+ {{bar 48 91 (object tr=4 br=4 bl=4 tl=4) (toRad 0) fill="#F9FAFB"}}
105
+ <text transform="rotate(-90, 0, 0)" x="-45.5" y="8" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">گوش‌ به زنگیِ</text>
106
+ <text transform="rotate(-90, 0, 0)" x="-45.5" y="24" text-anchor="middle" dy=".85em" font-size="12" font-weight="400" fill="#4B5563">افراطی و بازداری</text>
107
+ </g>
84
108
  </g>
85
109
 
86
110
  {{/layout}}