maidr 1.0.0

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 (206) hide show
  1. package/.Rbuildignore +1 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.json +6 -0
  4. package/.github/workflows/build.yml +20 -0
  5. package/.prettierignore +3 -0
  6. package/.prettierrc.json +7 -0
  7. package/.vscode/extensions.json +25 -0
  8. package/.vscode/settings.json +30 -0
  9. package/.vscode/tasks.json +57 -0
  10. package/CHANGELOG.md +7 -0
  11. package/CITATION.cff +21 -0
  12. package/CONTRIBUTING.md +87 -0
  13. package/LICENSE.md +595 -0
  14. package/README.md +341 -0
  15. package/dist/maidr.js +8851 -0
  16. package/dist/maidr.min.js +1 -0
  17. package/dist/styles.css +244 -0
  18. package/dist/styles.min.css +1 -0
  19. package/docs/Audio.html +1398 -0
  20. package/docs/Constants.html +256 -0
  21. package/docs/Description.html +582 -0
  22. package/docs/Helper.html +364 -0
  23. package/docs/LogError.html +905 -0
  24. package/docs/Menu.html +665 -0
  25. package/docs/Position.html +174 -0
  26. package/docs/Resources.html +338 -0
  27. package/docs/Review.html +333 -0
  28. package/docs/Tracker.html +965 -0
  29. package/docs/audio.js.html +635 -0
  30. package/docs/constants.js.html +1242 -0
  31. package/docs/display.js.html +1184 -0
  32. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  33. package/docs/fonts/OpenSans-Bold-webfont.svg +1830 -0
  34. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  35. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  36. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +1830 -0
  37. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  38. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  39. package/docs/fonts/OpenSans-Italic-webfont.svg +1830 -0
  40. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  41. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  42. package/docs/fonts/OpenSans-Light-webfont.svg +1831 -0
  43. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  44. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  45. package/docs/fonts/OpenSans-LightItalic-webfont.svg +1835 -0
  46. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  47. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  48. package/docs/fonts/OpenSans-Regular-webfont.svg +1831 -0
  49. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  50. package/docs/fonts/OpenSans-Semibold-webfont.eot +0 -0
  51. package/docs/fonts/OpenSans-Semibold-webfont.svg +1830 -0
  52. package/docs/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  53. package/docs/fonts/OpenSans-Semibold-webfont.woff +0 -0
  54. package/docs/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  55. package/docs/fonts/OpenSans-SemiboldItalic-webfont.svg +1830 -0
  56. package/docs/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  57. package/docs/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  58. package/docs/index.html +66 -0
  59. package/docs/scripts/linenumber.js +25 -0
  60. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  61. package/docs/scripts/prettify/lang-css.js +2 -0
  62. package/docs/scripts/prettify/prettify.js +28 -0
  63. package/docs/styles/jsdoc-default.css +692 -0
  64. package/docs/styles/prettify-jsdoc.css +111 -0
  65. package/docs/styles/prettify-tomorrow.css +132 -0
  66. package/examples/dev_charts/barplot.html +1056 -0
  67. package/examples/dev_charts/boxplot.html +1856 -0
  68. package/examples/dev_charts/boxplot_flipped.svg +727 -0
  69. package/examples/dev_charts/heatmap.html +1217 -0
  70. package/examples/dev_charts/scatterplot/displ.js +18 -0
  71. package/examples/dev_charts/scatterplot/histogram_for_residual.svg +595 -0
  72. package/examples/dev_charts/scatterplot/hwy.js +15 -0
  73. package/examples/dev_charts/scatterplot/layers/point_layer.json +938 -0
  74. package/examples/dev_charts/scatterplot/layers/smooth_layer.json +322 -0
  75. package/examples/dev_charts/scatterplot/point_layer.js +938 -0
  76. package/examples/dev_charts/scatterplot/prediction_array.js +31 -0
  77. package/examples/dev_charts/scatterplot/prediction_array.json +31 -0
  78. package/examples/dev_charts/scatterplot/residual_array.js +29 -0
  79. package/examples/dev_charts/scatterplot/residual_array.json +29 -0
  80. package/examples/dev_charts/scatterplot/scatterplot.svg +1428 -0
  81. package/examples/dev_charts/scatterplot/scatterplot_data.html +2838 -0
  82. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_point_only.svg +1393 -0
  83. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_bestfit.svg +1424 -0
  84. package/examples/dev_charts/scatterplot/scatterplot_no_jitter_with_loess_curve.svg +1402 -0
  85. package/examples/dev_charts/scatterplot/smooth_layer.js +322 -0
  86. package/examples/dev_charts/scatterplot.html +4560 -0
  87. package/examples/dodged_bar/dodged_bar.png +0 -0
  88. package/examples/dodged_bar/dodged_bar.svg +198 -0
  89. package/examples/dodged_bar/schema.json +41 -0
  90. package/examples/histogram/histogram_tutorial.svg +482 -0
  91. package/examples/histogram/histogram_tutorial_raw_data.json +362 -0
  92. package/examples/histogram/histogram_user_study.svg +578 -0
  93. package/examples/histogram/histogram_user_study_raw_data.json +362 -0
  94. package/examples/lineplot/lineplot_sample.svg +126 -0
  95. package/examples/lineplot/lineplot_sample_raw_data.json +1 -0
  96. package/examples/lineplot/point+lineplot_sample.svg +700 -0
  97. package/examples/other/audio_oscillator_boxplot.js +95 -0
  98. package/examples/other/barplot_labels.svg +314 -0
  99. package/examples/other/barplot_user_study.svg +313 -0
  100. package/examples/other/boxplot.html +927 -0
  101. package/examples/other/boxplot_data_frame.html +568 -0
  102. package/examples/other/boxplot_label.svg +751 -0
  103. package/examples/other/braille-display_boxplot.js +79 -0
  104. package/examples/other/control_boxplot.js +55 -0
  105. package/examples/other/draft.js +56 -0
  106. package/examples/other/getData.html +400 -0
  107. package/examples/other/getData.js +41 -0
  108. package/examples/other/ggplot_to_svg.R +371 -0
  109. package/examples/other/heatmap.svg +582 -0
  110. package/examples/other/heatmap_label.svg +608 -0
  111. package/examples/other/multiple_barplot.html +2250 -0
  112. package/examples/other/new_scatterplot_user_study_point_layer.json +122 -0
  113. package/examples/other/py_binder_output.html +1167 -0
  114. package/examples/other/scatterplot_label.svg +1429 -0
  115. package/examples/other/seaborn_plot.py +9 -0
  116. package/examples/other/svglite_bar.svg +136 -0
  117. package/examples/other/tutorial_boxplot.svg +727 -0
  118. package/examples/other/tutorial_boxplot_data.json +72 -0
  119. package/examples/other/user_study_boxplot.svg +676 -0
  120. package/examples/stacked_bar/schema.json +41 -0
  121. package/examples/stacked_bar/stack_bar.png +0 -0
  122. package/examples/stacked_bar/stacked_bar.svg +180 -0
  123. package/examples/stacked_normalized_bar/stacked_normalized_bar.png +0 -0
  124. package/examples/stacked_normalized_bar/stacked_normalized_bar.svg +189 -0
  125. package/examples/static/barplot.svg +263 -0
  126. package/examples/static/barplot_diamonds_gridSVG.svg +254 -0
  127. package/examples/static/boxplot.svg +424 -0
  128. package/examples/static/heatmap.svg +373 -0
  129. package/examples/static/heatmap_penguins_table.html +486 -0
  130. package/examples/static/scatterplot.svg +530 -0
  131. package/examples/svglite/task_heatmap.html +802 -0
  132. package/examples/svglite/task_heatmap.svg +111 -0
  133. package/examples/svglite/tutorial_bar.svg +136 -0
  134. package/examples/svglite/tutorial_bar_plot.html +504 -0
  135. package/examples/svglite/tutorial_boxplot.html +1850 -0
  136. package/examples/svglite/tutorial_boxplot.svg +727 -0
  137. package/examples/svglite/tutorial_scatterplot.html +3135 -0
  138. package/examples/svglite/tutorial_scatterplot.svg +311 -0
  139. package/gulpfile.js +49 -0
  140. package/index.html +40 -0
  141. package/jsconfig.json +10 -0
  142. package/jsdoc.json +19 -0
  143. package/package.json +47 -0
  144. package/src/css/styles.css +241 -0
  145. package/src/js/__tests__/audio.test.js +49 -0
  146. package/src/js/__tests__/constants.test.js +622 -0
  147. package/src/js/audio.js +575 -0
  148. package/src/js/barplot.js +254 -0
  149. package/src/js/boxplot.js +682 -0
  150. package/src/js/constants.js +1182 -0
  151. package/src/js/controls.js +3182 -0
  152. package/src/js/display.js +1124 -0
  153. package/src/js/heatmap.js +411 -0
  154. package/src/js/histogram.js +134 -0
  155. package/src/js/init.js +427 -0
  156. package/src/js/lineplot.js +219 -0
  157. package/src/js/scatterplot.js +619 -0
  158. package/src/js/segmented.js +268 -0
  159. package/user_study_pilot/binder_test.html +526 -0
  160. package/user_study_pilot/data/barplot_user_study.svg +492 -0
  161. package/user_study_pilot/data/barplot_user_study_raw_data.json +22 -0
  162. package/user_study_pilot/data/boxplot_tutorial.json +72 -0
  163. package/user_study_pilot/data/boxplot_tutorial_horizontal.svg +727 -0
  164. package/user_study_pilot/data/boxplot_user_study.json +52 -0
  165. package/user_study_pilot/data/boxplot_user_study_vertical.svg +675 -0
  166. package/user_study_pilot/data/boxplot_user_study_vertical_horizontal.svg +676 -0
  167. package/user_study_pilot/data/heatmap_user_study.svg +719 -0
  168. package/user_study_pilot/data/heatmap_user_study_raw_data.json +127 -0
  169. package/user_study_pilot/data/new_barplot_user_study.svg +269 -0
  170. package/user_study_pilot/data/new_heatmap_user_study.svg +367 -0
  171. package/user_study_pilot/data/new_scatterplot_user_study.svg +603 -0
  172. package/user_study_pilot/data/new_scatterplot_user_study_point_layer.json +122 -0
  173. package/user_study_pilot/data/scatterplot_user_study (1).svg +321 -0
  174. package/user_study_pilot/data/scatterplot_user_study.svg +603 -0
  175. package/user_study_pilot/data/scatterplot_user_study_point_layer.json +122 -0
  176. package/user_study_pilot/data/scatterplot_user_study_smooth_layer.json +322 -0
  177. package/user_study_pilot/intro.html +215 -0
  178. package/user_study_pilot/jaws_settings/Chrome.JDF +10 -0
  179. package/user_study_pilot/jaws_settings/Firefox.JDF +10 -0
  180. package/user_study_pilot/jaws_settings/backup_utf8/Chrome.JDF +10 -0
  181. package/user_study_pilot/jaws_settings/backup_utf8/Firefox.JDF +10 -0
  182. package/user_study_pilot/jaws_settings/backup_utf8/msedge.JDF +10 -0
  183. package/user_study_pilot/jaws_settings/msedge.JDF +10 -0
  184. package/user_study_pilot/nvda_settings/chrome.dic +10 -0
  185. package/user_study_pilot/nvda_settings/default.dic +10 -0
  186. package/user_study_pilot/nvda_settings/firefox.dic +10 -0
  187. package/user_study_pilot/nvda_settings/msedge.dic +10 -0
  188. package/user_study_pilot/scatterplot.html +4560 -0
  189. package/user_study_pilot/seaborn_test.html +1059 -0
  190. package/user_study_pilot/svglite_test.html +534 -0
  191. package/user_study_pilot/task1_bar_plot.html +1111 -0
  192. package/user_study_pilot/task2_heatmap.html +1661 -0
  193. package/user_study_pilot/task3_boxplot_horizontal.html +1690 -0
  194. package/user_study_pilot/task3_boxplot_vertical.html +1689 -0
  195. package/user_study_pilot/task4_scatterplot.html +2091 -0
  196. package/user_study_pilot/tutorial1_bar_plot.html +1159 -0
  197. package/user_study_pilot/tutorial2_heatmap.html +1276 -0
  198. package/user_study_pilot/tutorial3_boxplot_horizontal.html +1861 -0
  199. package/user_study_pilot/tutorial3_boxplot_vertical.html +1807 -0
  200. package/user_study_pilot/tutorial4_scatterplot.html +5893 -0
  201. package/user_study_pilot/tutorial5_histogram.html +1553 -0
  202. package/user_study_pilot/tutorial6_lineplot.html +1011 -0
  203. package/user_study_pilot/tutorial7_stacked.html +763 -0
  204. package/user_study_pilot/tutorial8_stacked_normalized.html +796 -0
  205. package/user_study_pilot/tutorial9_dodged_bar.html +831 -0
  206. package/user_study_pilot/voiceover_settings/user_study_VoiceOver Archive.voprefs +573 -0
@@ -0,0 +1,311 @@
1
+ <?xml version='1.0' encoding='UTF-8' ?>
2
+ <svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' class='svglite' width='720.00pt' height='576.00pt' viewBox='0 0 720.00 576.00'>
3
+ <defs>
4
+ <style type='text/css'><![CDATA[
5
+ .svglite line, .svglite polyline, .svglite polygon, .svglite path, .svglite rect, .svglite circle {
6
+ fill: none;
7
+ stroke: #000000;
8
+ stroke-linecap: round;
9
+ stroke-linejoin: round;
10
+ stroke-miterlimit: 10.00;
11
+ }
12
+ .svglite text {
13
+ white-space: pre;
14
+ }
15
+ ]]></style>
16
+ </defs>
17
+ <rect width='100%' height='100%' style='stroke: none; fill: #FFFFFF;'/>
18
+ <defs>
19
+ <clipPath id='cpMC4wMHw3MjAuMDB8MC4wMHw1NzYuMDA='>
20
+ <rect x='0.00' y='0.00' width='720.00' height='576.00' />
21
+ </clipPath>
22
+ </defs>
23
+ <g clip-path='url(#cpMC4wMHw3MjAuMDB8MC4wMHw1NzYuMDA=)'>
24
+ <rect x='0.00' y='0.00' width='720.00' height='576.00' style='stroke-width: 1.07; stroke: #FFFFFF; fill: #FFFFFF;' />
25
+ </g>
26
+ <defs>
27
+ <clipPath id='cpMzMuMTR8NzE0LjUyfDIzLjE4fDU0NC41MA=='>
28
+ <rect x='33.14' y='23.18' width='681.38' height='521.33' />
29
+ </clipPath>
30
+ </defs>
31
+ <g clip-path='url(#cpMzMuMTR8NzE0LjUyfDIzLjE4fDU0NC41MA==)'>
32
+ <rect x='33.14' y='23.18' width='681.38' height='521.33' style='stroke-width: 1.07; stroke: none; fill: #EBEBEB;' />
33
+ <polyline points='33.14,476.38 714.52,476.38 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
34
+ <polyline points='33.14,328.27 714.52,328.27 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
35
+ <polyline points='33.14,180.17 714.52,180.17 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
36
+ <polyline points='33.14,32.06 714.52,32.06 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
37
+ <polyline points='52.64,544.50 52.64,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
38
+ <polyline points='167.35,544.50 167.35,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
39
+ <polyline points='282.06,544.50 282.06,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
40
+ <polyline points='396.77,544.50 396.77,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
41
+ <polyline points='511.48,544.50 511.48,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
42
+ <polyline points='626.19,544.50 626.19,23.18 ' style='stroke-width: 0.53; stroke: #FFFFFF; stroke-linecap: butt;' />
43
+ <polyline points='33.14,402.32 714.52,402.32 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
44
+ <polyline points='33.14,254.22 714.52,254.22 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
45
+ <polyline points='33.14,106.12 714.52,106.12 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
46
+ <polyline points='109.99,544.50 109.99,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
47
+ <polyline points='224.71,544.50 224.71,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
48
+ <polyline points='339.42,544.50 339.42,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
49
+ <polyline points='454.13,544.50 454.13,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
50
+ <polyline points='568.84,544.50 568.84,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
51
+ <polyline points='683.55,544.50 683.55,23.18 ' style='stroke-width: 1.07; stroke: #FFFFFF; stroke-linecap: butt;' />
52
+ <circle cx='87.05' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
53
+ <circle cx='87.05' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
54
+ <circle cx='109.99' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
55
+ <circle cx='109.99' cy='254.22' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
56
+ <circle cx='201.76' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
57
+ <circle cx='201.76' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
58
+ <circle cx='236.18' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
59
+ <circle cx='87.05' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
60
+ <circle cx='87.05' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
61
+ <circle cx='109.99' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
62
+ <circle cx='109.99' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
63
+ <circle cx='201.76' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
64
+ <circle cx='201.76' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
65
+ <circle cx='236.18' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
66
+ <circle cx='236.18' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
67
+ <circle cx='201.76' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
68
+ <circle cx='236.18' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
69
+ <circle cx='362.36' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
70
+ <circle cx='488.54' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
71
+ <circle cx='488.54' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
72
+ <circle cx='488.54' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
73
+ <circle cx='534.42' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
74
+ <circle cx='568.84' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
75
+ <circle cx='534.42' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
76
+ <circle cx='534.42' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
77
+ <circle cx='591.78' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
78
+ <circle cx='591.78' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
79
+ <circle cx='683.55' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
80
+ <circle cx='488.54' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
81
+ <circle cx='488.54' cy='491.19' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
82
+ <circle cx='534.42' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
83
+ <circle cx='626.19' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
84
+ <circle cx='155.88' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
85
+ <circle cx='155.88' cy='254.22' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
86
+ <circle cx='236.18' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
87
+ <circle cx='282.06' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
88
+ <circle cx='293.53' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
89
+ <circle cx='155.88' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
90
+ <circle cx='224.71' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
91
+ <circle cx='259.12' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
92
+ <circle cx='259.12' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
93
+ <circle cx='259.12' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
94
+ <circle cx='259.12' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
95
+ <circle cx='259.12' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
96
+ <circle cx='316.47' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
97
+ <circle cx='316.47' cy='387.51' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
98
+ <circle cx='316.47' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
99
+ <circle cx='339.42' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
100
+ <circle cx='305.00' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
101
+ <circle cx='305.00' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
102
+ <circle cx='327.94' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
103
+ <circle cx='327.94' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
104
+ <circle cx='419.71' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
105
+ <circle cx='419.71' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
106
+ <circle cx='419.71' cy='520.81' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
107
+ <circle cx='477.07' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
108
+ <circle cx='477.07' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
109
+ <circle cx='327.94' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
110
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
111
+ <circle cx='419.71' cy='520.81' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
112
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
113
+ <circle cx='477.07' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
114
+ <circle cx='534.42' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
115
+ <circle cx='557.37' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
116
+ <circle cx='419.71' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
117
+ <circle cx='419.71' cy='520.81' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
118
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
119
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
120
+ <circle cx='419.71' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
121
+ <circle cx='419.71' cy='520.81' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
122
+ <circle cx='477.07' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
123
+ <circle cx='477.07' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
124
+ <circle cx='534.42' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
125
+ <circle cx='557.37' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
126
+ <circle cx='408.24' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
127
+ <circle cx='500.01' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
128
+ <circle cx='500.01' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
129
+ <circle cx='339.42' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
130
+ <circle cx='339.42' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
131
+ <circle cx='339.42' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
132
+ <circle cx='339.42' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
133
+ <circle cx='408.24' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
134
+ <circle cx='454.13' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
135
+ <circle cx='362.36' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
136
+ <circle cx='362.36' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
137
+ <circle cx='408.24' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
138
+ <circle cx='408.24' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
139
+ <circle cx='408.24' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
140
+ <circle cx='500.01' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
141
+ <circle cx='500.01' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
142
+ <circle cx='316.47' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
143
+ <circle cx='316.47' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
144
+ <circle cx='339.42' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
145
+ <circle cx='339.42' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
146
+ <circle cx='408.24' cy='387.51' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
147
+ <circle cx='408.24' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
148
+ <circle cx='408.24' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
149
+ <circle cx='408.24' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
150
+ <circle cx='500.01' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
151
+ <circle cx='64.11' cy='209.79' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
152
+ <circle cx='64.11' cy='224.60' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
153
+ <circle cx='64.11' cy='224.60' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
154
+ <circle cx='64.11' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
155
+ <circle cx='64.11' cy='224.60' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
156
+ <circle cx='87.05' cy='194.98' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
157
+ <circle cx='87.05' cy='165.36' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
158
+ <circle cx='87.05' cy='165.36' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
159
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
160
+ <circle cx='155.88' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
161
+ <circle cx='155.88' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
162
+ <circle cx='155.88' cy='254.22' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
163
+ <circle cx='155.88' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
164
+ <circle cx='167.35' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
165
+ <circle cx='167.35' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
166
+ <circle cx='259.12' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
167
+ <circle cx='109.99' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
168
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
169
+ <circle cx='109.99' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
170
+ <circle cx='109.99' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
171
+ <circle cx='190.29' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
172
+ <circle cx='190.29' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
173
+ <circle cx='190.29' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
174
+ <circle cx='224.71' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
175
+ <circle cx='305.00' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
176
+ <circle cx='339.42' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
177
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
178
+ <circle cx='419.71' cy='520.81' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
179
+ <circle cx='419.71' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
180
+ <circle cx='534.42' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
181
+ <circle cx='580.31' cy='491.19' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
182
+ <circle cx='339.42' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
183
+ <circle cx='362.36' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
184
+ <circle cx='385.30' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
185
+ <circle cx='408.24' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
186
+ <circle cx='500.01' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
187
+ <circle cx='500.01' cy='461.57' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
188
+ <circle cx='500.01' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
189
+ <circle cx='339.42' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
190
+ <circle cx='339.42' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
191
+ <circle cx='408.24' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
192
+ <circle cx='454.13' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
193
+ <circle cx='155.88' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
194
+ <circle cx='155.88' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
195
+ <circle cx='167.35' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
196
+ <circle cx='167.35' cy='224.60' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
197
+ <circle cx='282.06' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
198
+ <circle cx='282.06' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
199
+ <circle cx='224.71' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
200
+ <circle cx='224.71' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
201
+ <circle cx='282.06' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
202
+ <circle cx='259.12' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
203
+ <circle cx='259.12' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
204
+ <circle cx='339.42' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
205
+ <circle cx='522.95' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
206
+ <circle cx='236.18' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
207
+ <circle cx='316.47' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
208
+ <circle cx='316.47' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
209
+ <circle cx='316.47' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
210
+ <circle cx='488.54' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
211
+ <circle cx='167.35' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
212
+ <circle cx='167.35' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
213
+ <circle cx='167.35' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
214
+ <circle cx='167.35' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
215
+ <circle cx='167.35' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
216
+ <circle cx='167.35' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
217
+ <circle cx='132.94' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
218
+ <circle cx='132.94' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
219
+ <circle cx='167.35' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
220
+ <circle cx='167.35' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
221
+ <circle cx='167.35' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
222
+ <circle cx='167.35' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
223
+ <circle cx='167.35' cy='328.27' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
224
+ <circle cx='167.35' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
225
+ <circle cx='190.29' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
226
+ <circle cx='190.29' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
227
+ <circle cx='270.59' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
228
+ <circle cx='270.59' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
229
+ <circle cx='339.42' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
230
+ <circle cx='419.71' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
231
+ <circle cx='132.94' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
232
+ <circle cx='132.94' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
233
+ <circle cx='155.88' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
234
+ <circle cx='155.88' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
235
+ <circle cx='224.71' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
236
+ <circle cx='224.71' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
237
+ <circle cx='282.06' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
238
+ <circle cx='132.94' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
239
+ <circle cx='132.94' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
240
+ <circle cx='155.88' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
241
+ <circle cx='155.88' cy='239.41' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
242
+ <circle cx='224.71' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
243
+ <circle cx='224.71' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
244
+ <circle cx='259.12' cy='298.65' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
245
+ <circle cx='87.05' cy='254.22' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
246
+ <circle cx='87.05' cy='209.79' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
247
+ <circle cx='87.05' cy='180.17' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
248
+ <circle cx='87.05' cy='150.55' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
249
+ <circle cx='87.05' cy='180.17' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
250
+ <circle cx='419.71' cy='476.38' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
251
+ <circle cx='534.42' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
252
+ <circle cx='190.29' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
253
+ <circle cx='190.29' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
254
+ <circle cx='190.29' cy='372.70' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
255
+ <circle cx='270.59' cy='446.76' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
256
+ <circle cx='270.59' cy='417.13' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
257
+ <circle cx='339.42' cy='431.94' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
258
+ <circle cx='339.42' cy='402.32' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
259
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
260
+ <circle cx='109.99' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
261
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
262
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
263
+ <circle cx='201.76' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
264
+ <circle cx='98.52' cy='46.87' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
265
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
266
+ <circle cx='109.99' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
267
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
268
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
269
+ <circle cx='167.35' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
270
+ <circle cx='167.35' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
271
+ <circle cx='201.76' cy='357.89' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
272
+ <circle cx='201.76' cy='343.08' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
273
+ <circle cx='98.52' cy='46.87' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
274
+ <circle cx='98.52' cy='91.31' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
275
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
276
+ <circle cx='109.99' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
277
+ <circle cx='167.35' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
278
+ <circle cx='167.35' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
279
+ <circle cx='87.05' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
280
+ <circle cx='87.05' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
281
+ <circle cx='109.99' cy='283.84' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
282
+ <circle cx='109.99' cy='269.03' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
283
+ <circle cx='201.76' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
284
+ <circle cx='201.76' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
285
+ <circle cx='293.53' cy='313.46' r='1.95' style='stroke-width: 0.71; fill: #000000;' />
286
+ <polyline points='64.11,208.41 71.95,217.03 79.79,225.45 87.63,233.66 95.47,241.62 103.31,249.33 111.16,256.83 119.00,264.09 126.84,271.13 134.68,277.94 142.52,284.55 150.36,290.97 158.20,297.19 166.04,303.16 173.88,308.88 181.72,314.42 189.57,319.80 197.41,324.88 205.25,329.48 213.09,333.75 220.93,337.83 228.77,341.85 236.61,345.96 244.45,350.05 252.29,353.97 260.13,357.77 267.98,361.48 275.82,365.15 283.66,368.79 291.50,372.47 299.34,376.20 307.18,380.03 315.02,384.00 322.86,388.13 330.70,392.49 338.54,397.19 346.39,402.15 354.23,407.25 362.07,412.35 369.91,417.32 377.75,422.04 385.59,426.38 393.43,430.21 401.27,433.40 409.11,435.83 416.95,437.81 424.80,439.58 432.64,441.12 440.48,442.42 448.32,443.46 456.16,444.21 464.00,444.68 471.84,444.82 479.68,444.64 487.52,444.11 495.36,443.25 503.21,442.10 511.05,440.66 518.89,438.93 526.73,436.91 534.57,434.60 542.41,432.01 550.25,429.12 558.09,425.95 565.93,422.49 573.77,418.74 581.62,414.71 589.46,410.39 597.30,405.78 605.14,400.88 612.98,395.70 620.82,390.22 628.66,384.47 636.50,378.42 644.34,372.09 652.18,365.48 660.03,358.58 667.87,351.39 675.71,343.91 683.55,336.16 ' style='stroke-width: 2.13; stroke: #3366FF; stroke-linecap: butt;' />
287
+ </g>
288
+ <g clip-path='url(#cpMC4wMHw3MjAuMDB8MC4wMHw1NzYuMDA=)'>
289
+ <text x='28.21' y='405.47' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='9.79px' lengthAdjust='spacingAndGlyphs'>20</text>
290
+ <text x='28.21' y='257.37' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='9.79px' lengthAdjust='spacingAndGlyphs'>30</text>
291
+ <text x='28.21' y='109.27' text-anchor='end' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='9.79px' lengthAdjust='spacingAndGlyphs'>40</text>
292
+ <polyline points='30.40,402.32 33.14,402.32 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
293
+ <polyline points='30.40,254.22 33.14,254.22 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
294
+ <polyline points='30.40,106.12 33.14,106.12 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
295
+ <polyline points='109.99,547.24 109.99,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
296
+ <polyline points='224.71,547.24 224.71,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
297
+ <polyline points='339.42,547.24 339.42,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
298
+ <polyline points='454.13,547.24 454.13,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
299
+ <polyline points='568.84,547.24 568.84,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
300
+ <polyline points='683.55,547.24 683.55,544.50 ' style='stroke-width: 1.07; stroke: #333333; stroke-linecap: butt;' />
301
+ <text x='109.99' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>2</text>
302
+ <text x='224.71' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>3</text>
303
+ <text x='339.42' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>4</text>
304
+ <text x='454.13' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>5</text>
305
+ <text x='568.84' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>6</text>
306
+ <text x='683.55' y='555.74' text-anchor='middle' style='font-size: 8.80px;fill: #4D4D4D; font-family: "Arial";' textLength='4.90px' lengthAdjust='spacingAndGlyphs'>7</text>
307
+ <text x='373.83' y='568.20' text-anchor='middle' style='font-size: 11.00px; font-family: "Arial";' textLength='103.97px' lengthAdjust='spacingAndGlyphs'>Engine Displacement</text>
308
+ <text transform='translate(13.36,283.84) rotate(-90)' text-anchor='middle' style='font-size: 11.00px; font-family: "Arial";' textLength='83.77px' lengthAdjust='spacingAndGlyphs'>Highway Mileage</text>
309
+ <text x='33.14' y='14.93' style='font-size: 13.20px; font-family: "Arial";' textLength='250.03px' lengthAdjust='spacingAndGlyphs'>Highway Mileage by Engine Displacement.</text>
310
+ </g>
311
+ </svg>
package/gulpfile.js ADDED
@@ -0,0 +1,49 @@
1
+ // gulpfile.js
2
+ // This is the config for gulp, which is a task runner.
3
+ // It takes all the JS and CSS files and bundles them into one JS file and one CSS file.
4
+ // To run: navigate to the root directory of this project and run "gulp"
5
+
6
+ var gulp = require('gulp');
7
+ var concat = require('gulp-concat');
8
+ var terser = require('gulp-terser');
9
+ var rename = require('gulp-rename');
10
+ var concatCss = require('gulp-concat-css');
11
+ var cleanCss = require('gulp-clean-css');
12
+
13
+ // js
14
+ gulp.task('scripts', function () {
15
+ return gulp
16
+ .src([
17
+ './src/js/constants.js',
18
+ './src/js/audio.js',
19
+ './src/js/display.js',
20
+ './src/js/barplot.js',
21
+ './src/js/boxplot.js',
22
+ './src/js/heatmap.js',
23
+ './src/js/scatterplot.js',
24
+ './src/js/histogram.js',
25
+ './src/js/lineplot.js',
26
+ './src/js/segmented.js',
27
+ './src/js/controls.js',
28
+ './src/js/init.js',
29
+ ]) // order matters here
30
+ .pipe(concat('maidr.js'))
31
+ .pipe(gulp.dest('dist'))
32
+ .pipe(terser())
33
+ .pipe(rename({ extname: '.min.js' }))
34
+ .pipe(gulp.dest('dist'));
35
+ });
36
+
37
+ // css
38
+ gulp.task('styles', function () {
39
+ return gulp
40
+ .src('src/css/*.css')
41
+ .pipe(concatCss('styles.css'))
42
+ .pipe(gulp.dest('dist')) // destination folder for unminified version
43
+ .pipe(cleanCss())
44
+ .pipe(rename({ extname: '.min.css' }))
45
+ .pipe(gulp.dest('dist')); // destination folder for minified version
46
+ });
47
+
48
+ // default task now runs both scripts and styles tasks
49
+ gulp.task('default', gulp.series('scripts', 'styles'));
package/index.html ADDED
@@ -0,0 +1,40 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>User Test Site for Accessible Visualization</title>
8
+ </head>
9
+
10
+ <body>
11
+ <h1>Sample Accessible Visualization</h1>
12
+
13
+ <p>
14
+ The following graphs demonstrate multimodal access and interactive data
15
+ representation for some widely used visualizations.
16
+ </p>
17
+ <p>
18
+ This work has been developed by the Accessible Computing Lab directed by
19
+ <a href="https://ischool.illinois.edu/people/jooyoung-seo" target="_blank"
20
+ >Dr. JooYoung Seo</a
21
+ >
22
+ in the School of Information Sciences at the University of Illinois at
23
+ Urbana-Champaign.
24
+ </p>
25
+
26
+ <ul>
27
+ <li><a href="dev_charts/barplot.html" target="_blank">Bar plot.</a></li>
28
+ <li><a href="dev_charts/heatmap.html" target="_blank">Heat map.</a></li>
29
+ <li><a href="dev_charts/boxplot.html" target="_blank">Box plot.</a></li>
30
+ <li>
31
+ <a href="dev_charts/scatterplot.html" target="_blank">Scatter plot.</a>
32
+ </li>
33
+ </ul>
34
+
35
+ <footer>
36
+ © 2023 Accessible Computing Lab at the University of Illinois at
37
+ Urbana-Champaign All Rights Reserved
38
+ </footer>
39
+ </body>
40
+ </html>
package/jsconfig.json ADDED
@@ -0,0 +1,10 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "es6"
5
+ },
6
+ "include": [
7
+ "src/**/*"
8
+ ],
9
+ "exclude": ["node_modules"]
10
+ }
package/jsdoc.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "source": {
3
+ "include": ["./src/js"],
4
+ "includePattern": ".+\\.js(doc|x)?$",
5
+ "excludePattern": "(^|\\/|\\\\)_"
6
+ },
7
+ "plugins": [],
8
+ "templates": {
9
+ "cleverLinks": false,
10
+ "monospaceLinks": false
11
+ },
12
+ "opts": {
13
+ "destination": "./docs/",
14
+ "encoding": "utf8",
15
+ "private": true,
16
+ "recurse": true,
17
+ "template": "node_modules/minami"
18
+ }
19
+ }
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "maidr",
3
+ "version": "1.0.0",
4
+ "description": "maidr: Multimodal Access and Interactive Data Representation. maidr is a system for non-visual access and control of statistical charts. It aims to provide an inclusive experience for users with visual impairments by offering multiple modes of interaction: braille, text, and sonification. This comprehensive approach enhances the accessibility of data visualization and encourages a multi-model exploration on visualization. Check out the current build: [MAIDR Demo](https://uiuc-ischool-accessible-computing-lab.github.io/maidr/user_study_pilot/intro.html).",
5
+ "main": "webpack.config.js",
6
+ "scripts": {
7
+ "build": "gulp",
8
+ "test": "jest",
9
+ "lint": "eslint .",
10
+ "format": "prettier --write .",
11
+ "docs": "jsdoc -c jsdoc.json"
12
+ },
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "git+https://github.com/uiuc-ischool-accessible-computing-lab/maidr.git"
16
+ },
17
+ "keywords": [],
18
+ "author": "JooYoung Seo",
19
+ "license": "GPL-3.0",
20
+ "bugs": {
21
+ "url": "https://github.com/uiuc-ischool-accessible-computing-lab/maidr/issues"
22
+ },
23
+ "homepage": "https://github.com/uiuc-ischool-accessible-computing-lab/maidr#readme",
24
+ "devDependencies": {
25
+ "eslint": "^8.43.0",
26
+ "eslint-config-prettier": "^8.8.0",
27
+ "eslint-plugin-prettier": "^4.2.1",
28
+ "gulp": "^4.0.2",
29
+ "gulp-clean-css": "^4.3.0",
30
+ "gulp-concat": "^2.6.1",
31
+ "gulp-concat-css": "^3.1.0",
32
+ "gulp-rename": "^2.0.0",
33
+ "gulp-terser": "^2.1.0",
34
+ "jest": "^29.7.0",
35
+ "jest-environment-jsdom": "^29.7.0",
36
+ "jsdoc": "^4.0.2",
37
+ "prettier": "^2.8.8"
38
+ },
39
+ "dependencies": {
40
+ "mi": "^1.0.0",
41
+ "minami": "^1.2.3",
42
+ "taffydb": "^2.7.3"
43
+ },
44
+ "jest": {
45
+ "testEnvironment": "jsdom"
46
+ }
47
+ }