@madie/madie-design-system 1.2.76 → 1.2.78

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 (249) hide show
  1. package/components/MadieDialog/index.jsx +2 -2
  2. package/components/RichTextEditor/index.jsx +88 -65
  3. package/coverage/clover.xml +602 -416
  4. package/coverage/coverage-final.json +39 -36
  5. package/coverage/lcov-report/InputLabel/index.html +5 -5
  6. package/coverage/lcov-report/InputLabel/index.jsx.html +7 -7
  7. package/coverage/lcov-report/MadieTooltip/index.html +36 -21
  8. package/coverage/lcov-report/MadieTooltip/index.jsx.html +34 -37
  9. package/coverage/lcov-report/MadieTooltip/index.scss.html +274 -0
  10. package/coverage/lcov-report/MadieTooltipIcon/index.html +21 -21
  11. package/coverage/lcov-report/MadieTooltipIcon/index.jsx.html +14 -14
  12. package/coverage/lcov-report/TextField/index.html +17 -17
  13. package/coverage/lcov-report/TextField/index.jsx.html +19 -103
  14. package/coverage/lcov-report/index.html +253 -118
  15. package/coverage/lcov-report/react/components/Accordion/index.html +2 -2
  16. package/coverage/lcov-report/react/components/Accordion/index.jsx.html +15 -15
  17. package/coverage/lcov-report/react/components/Alert/index.html +116 -0
  18. package/coverage/lcov-report/react/components/Alert/index.js.html +250 -0
  19. package/coverage/lcov-report/react/components/AutoComplete/AutoComplete.jsx.html +868 -0
  20. package/coverage/lcov-report/react/components/AutoComplete/index.html +116 -0
  21. package/coverage/lcov-report/react/components/Breadcrumb/index.html +116 -0
  22. package/coverage/lcov-report/react/components/Breadcrumb/index.js.html +361 -0
  23. package/coverage/lcov-report/react/components/Button/index.html +2 -2
  24. package/coverage/lcov-report/react/components/Button/index.js.html +18 -18
  25. package/coverage/lcov-report/react/components/DateField/DateField.jsx.html +36 -123
  26. package/coverage/lcov-report/react/components/DateField/index.html +16 -16
  27. package/coverage/lcov-report/react/components/DateTimeField/DateTimeField.jsx.html +56 -14
  28. package/coverage/lcov-report/react/components/DateTimeField/index.html +10 -10
  29. package/coverage/lcov-report/react/components/Dropdown/index.html +116 -0
  30. package/coverage/lcov-report/react/components/Dropdown/index.js.html +340 -0
  31. package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +1 -1
  32. package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +1 -1
  33. package/coverage/lcov-report/react/components/Error/error.js.html +1 -1
  34. package/coverage/lcov-report/react/components/Error/index.html +1 -1
  35. package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +1 -1
  36. package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +1 -1
  37. package/coverage/lcov-report/react/components/Footer/footer.js.html +1 -1
  38. package/coverage/lcov-report/react/components/Footer/index.html +1 -1
  39. package/coverage/lcov-report/react/components/FormControlLabel/index.html +116 -0
  40. package/coverage/lcov-report/react/components/FormControlLabel/index.jsx.html +154 -0
  41. package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +1 -1
  42. package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +1 -1
  43. package/coverage/lcov-report/react/components/Infotip/index.html +1 -1
  44. package/coverage/lcov-report/react/components/Infotip/index.js.html +1 -1
  45. package/coverage/lcov-report/react/components/InputLabel/index.html +6 -6
  46. package/coverage/lcov-report/react/components/InputLabel/index.jsx.html +8 -8
  47. package/coverage/lcov-report/react/components/Instant/index.html +116 -0
  48. package/coverage/lcov-report/react/components/Instant/index.jsx.html +886 -0
  49. package/coverage/lcov-report/react/components/Link/index.html +116 -0
  50. package/coverage/lcov-report/react/components/Link/index.js.html +268 -0
  51. package/coverage/lcov-report/react/components/MadieAlert/index.html +16 -16
  52. package/coverage/lcov-report/react/components/MadieAlert/index.jsx.html +875 -149
  53. package/coverage/lcov-report/{DateTimeField → react/components/MadieConfirmDialog}/index.html +19 -19
  54. package/coverage/lcov-report/react/components/MadieConfirmDialog/index.jsx.html +277 -0
  55. package/coverage/lcov-report/react/components/MadieDeleteDialog/index.html +4 -4
  56. package/coverage/lcov-report/react/components/MadieDeleteDialog/index.jsx.html +17 -11
  57. package/coverage/lcov-report/react/components/MadieDialog/index.html +18 -18
  58. package/coverage/lcov-report/react/components/MadieDialog/index.jsx.html +233 -92
  59. package/coverage/lcov-report/react/components/MadieDiscardDialog/index.html +2 -2
  60. package/coverage/lcov-report/react/components/MadieDiscardDialog/index.jsx.html +4 -4
  61. package/coverage/lcov-report/react/components/MadieSpinner/index.html +2 -2
  62. package/coverage/lcov-report/react/components/MadieSpinner/index.jsx.html +4 -4
  63. package/coverage/lcov-report/react/components/MadieTooltip/index.html +2 -2
  64. package/coverage/lcov-report/react/components/MadieTooltip/index.jsx.html +6 -6
  65. package/coverage/lcov-report/react/components/MadieTooltip/index.scss.html +274 -0
  66. package/coverage/lcov-report/react/components/MadieTooltipIcon/index.html +2 -2
  67. package/coverage/lcov-report/react/components/MadieTooltipIcon/index.jsx.html +4 -4
  68. package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +553 -0
  69. package/coverage/lcov-report/react/components/Modal/index.html +131 -0
  70. package/coverage/lcov-report/react/components/Modal/index.jsx.html +139 -0
  71. package/coverage/lcov-report/react/components/NumberInput/index.html +116 -0
  72. package/coverage/lcov-report/react/components/NumberInput/index.jsx.html +310 -0
  73. package/coverage/lcov-report/react/components/Pagination/index.html +2 -2
  74. package/coverage/lcov-report/react/components/Pagination/index.jsx.html +6 -6
  75. package/coverage/lcov-report/react/components/Popover/index.html +6 -6
  76. package/coverage/lcov-report/react/components/Popover/index.js.html +17 -14
  77. package/coverage/lcov-report/react/components/RadioButton/RadioButton.jsx.html +490 -0
  78. package/coverage/lcov-report/react/components/RadioButton/index.html +116 -0
  79. package/coverage/lcov-report/react/components/ReadOnlyTextField/index.html +6 -6
  80. package/coverage/lcov-report/react/components/ReadOnlyTextField/index.jsx.html +25 -193
  81. package/coverage/lcov-report/react/components/RichTextEditor/index.html +116 -0
  82. package/coverage/lcov-report/react/components/RichTextEditor/index.jsx.html +922 -0
  83. package/coverage/lcov-report/react/components/Search/index.html +116 -0
  84. package/coverage/lcov-report/react/components/Search/index.js.html +343 -0
  85. package/coverage/lcov-report/react/components/Select/index.html +10 -10
  86. package/coverage/lcov-report/react/components/Select/index.jsx.html +35 -23
  87. package/coverage/lcov-report/react/components/Tabs/Tab.js.html +11 -11
  88. package/coverage/lcov-report/react/components/Tabs/TabPanel.js.html +208 -0
  89. package/coverage/lcov-report/react/components/Tabs/index.html +34 -19
  90. package/coverage/lcov-report/react/components/Tabs/index.js.html +114 -51
  91. package/coverage/lcov-report/react/components/TextArea/index.html +10 -10
  92. package/coverage/lcov-report/react/components/TextArea/index.jsx.html +93 -9
  93. package/coverage/lcov-report/react/components/TextField/index.html +12 -12
  94. package/coverage/lcov-report/react/components/TextField/index.jsx.html +171 -63
  95. package/coverage/lcov-report/react/components/TextInput/index.html +116 -0
  96. package/coverage/lcov-report/react/components/TextInput/index.js.html +496 -0
  97. package/coverage/lcov-report/{DateTimeField/DateTimeField.jsx.html → react/components/TimeField/TimeField.jsx.html} +109 -76
  98. package/coverage/lcov-report/react/components/TimeField/index.html +116 -0
  99. package/coverage/lcov-report/react/components/Toast/index.html +2 -2
  100. package/coverage/lcov-report/react/components/Toast/index.jsx.html +9 -9
  101. package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +1 -1
  102. package/coverage/lcov-report/react/components/Tooltip/index.html +1 -1
  103. package/coverage/lcov-report/react/components/Tooltip/index.js.html +1 -1
  104. package/coverage/lcov-report/react/components/Tooltip/position.js.html +1 -1
  105. package/coverage/lcov-report/react/components/TruncateText/index.html +116 -0
  106. package/coverage/lcov-report/react/components/TruncateText/index.js.html +241 -0
  107. package/coverage/lcov-report/react/components/index.html +116 -0
  108. package/coverage/lcov-report/react/components/index.js.html +547 -0
  109. package/coverage/lcov-report/react/index.html +18 -18
  110. package/coverage/lcov-report/react/index.js.html +20 -26
  111. package/coverage/lcov-report/react/lib/Chevron.jsx.html +5 -5
  112. package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +41 -41
  113. package/coverage/lcov-report/react/lib/index.html +2 -2
  114. package/coverage/lcov-report/react/themes/actionCenterTheme.js.html +175 -0
  115. package/coverage/lcov-report/react/themes/index.html +116 -0
  116. package/coverage/lcov.info +1252 -798
  117. package/dist/browser.js +1 -1
  118. package/dist/index.js +1 -1
  119. package/dist/react/index.js +2 -2
  120. package/dist/react/index.js.map +1 -1
  121. package/package.json +1 -1
  122. package/storybook-static/1606.9527419c.iframe.bundle.js +76 -0
  123. package/storybook-static/1606.9527419c.iframe.bundle.js.LICENSE.txt +8 -0
  124. package/storybook-static/1606.9527419c.iframe.bundle.js.map +1 -0
  125. package/storybook-static/1822.72412063.iframe.bundle.js +2 -0
  126. package/storybook-static/1822.72412063.iframe.bundle.js.LICENSE.txt +5 -0
  127. package/storybook-static/2247.8b06a622.iframe.bundle.js +87 -0
  128. package/storybook-static/2247.8b06a622.iframe.bundle.js.LICENSE.txt +9 -0
  129. package/storybook-static/2247.8b06a622.iframe.bundle.js.map +1 -0
  130. package/storybook-static/2360.690c5cd8.iframe.bundle.js +1 -0
  131. package/storybook-static/2505.5a3351ca.iframe.bundle.js +2 -0
  132. package/storybook-static/2505.5a3351ca.iframe.bundle.js.LICENSE.txt +9 -0
  133. package/storybook-static/2543.64e1c8c6.iframe.bundle.js +2 -0
  134. package/storybook-static/2543.64e1c8c6.iframe.bundle.js.LICENSE.txt +8 -0
  135. package/storybook-static/2763.e9244c7e.iframe.bundle.js +1 -0
  136. package/storybook-static/3009.7080427c.iframe.bundle.js +1 -0
  137. package/storybook-static/312.98473fc0.iframe.bundle.js +2 -0
  138. package/storybook-static/312.98473fc0.iframe.bundle.js.LICENSE.txt +17 -0
  139. package/storybook-static/3264.1483ccad.iframe.bundle.js +1 -0
  140. package/storybook-static/3461.b9b84310.iframe.bundle.js +29 -0
  141. package/storybook-static/3461.b9b84310.iframe.bundle.js.map +1 -0
  142. package/storybook-static/4246.3dee0bc1.iframe.bundle.js +1 -0
  143. package/storybook-static/4683.334f6a20.iframe.bundle.js +1 -0
  144. package/storybook-static/4753.b31cfa9b.iframe.bundle.js +1 -0
  145. package/storybook-static/4788.aa09e5f9.iframe.bundle.js +1 -0
  146. package/storybook-static/5043.53f3bb0c.iframe.bundle.js +2 -0
  147. package/storybook-static/5043.53f3bb0c.iframe.bundle.js.LICENSE.txt +1 -0
  148. package/storybook-static/5467.8b66ac25.iframe.bundle.js +1 -0
  149. package/storybook-static/6357.6600668a.iframe.bundle.js +1 -0
  150. package/storybook-static/651.1fcfd284.iframe.bundle.js +1 -0
  151. package/storybook-static/6520.84e91a57.iframe.bundle.js +2 -0
  152. package/storybook-static/6520.84e91a57.iframe.bundle.js.LICENSE.txt +19 -0
  153. package/storybook-static/6958.8a916fa2.iframe.bundle.js +1 -0
  154. package/storybook-static/7599.3f695d6a.iframe.bundle.js +1 -0
  155. package/storybook-static/7648.6ac96dea.iframe.bundle.js +1 -0
  156. package/storybook-static/7737.8a6a8e54.iframe.bundle.js +1 -0
  157. package/storybook-static/8255.e2a8ed59.iframe.bundle.js +2 -0
  158. package/storybook-static/8255.e2a8ed59.iframe.bundle.js.LICENSE.txt +9 -0
  159. package/storybook-static/8735.566590af.iframe.bundle.js +2 -0
  160. package/storybook-static/8735.566590af.iframe.bundle.js.LICENSE.txt +29 -0
  161. package/storybook-static/9010.9ac07800.iframe.bundle.js +1 -0
  162. package/storybook-static/9060.b9282f66.iframe.bundle.js +1 -0
  163. package/storybook-static/9249.28266e92.iframe.bundle.js +1 -0
  164. package/storybook-static/9859.25828a48.iframe.bundle.js +2 -0
  165. package/storybook-static/9859.25828a48.iframe.bundle.js.LICENSE.txt +9 -0
  166. package/storybook-static/Accordion-Accordion-stories.dbeb9f2a.iframe.bundle.js +2 -0
  167. package/storybook-static/Accordion-Accordion-stories.dbeb9f2a.iframe.bundle.js.LICENSE.txt +9 -0
  168. package/storybook-static/AutoComplete-AutoComplete-stories.3fa69ad4.iframe.bundle.js +1 -0
  169. package/storybook-static/Button-Button-stories.c56437c4.iframe.bundle.js +1 -0
  170. package/storybook-static/DateField-DateField-stories.9e1b9e5c.iframe.bundle.js +1 -0
  171. package/storybook-static/DateTimeField-DateTimeField-stories.4d184efd.iframe.bundle.js +1 -0
  172. package/storybook-static/Instant-Instant-stories.cdd1bf7f.iframe.bundle.js +1 -0
  173. package/storybook-static/MadieAlert-MadieAlert-stories.b0a784a8.iframe.bundle.js +1 -0
  174. package/storybook-static/MadieConfirmDialog-MadieConfirmDialog-stories.2629a704.iframe.bundle.js +1 -0
  175. package/storybook-static/MadieDeleteDialog-MadieDeleteDialog-stories.0f91e77f.iframe.bundle.js +1 -0
  176. package/storybook-static/MadieDialog-MadieDialog-stories.1e63ebb3.iframe.bundle.js +1 -0
  177. package/storybook-static/MadieDiscardDialog-MadieDiscardDialog-stories.4632ec72.iframe.bundle.js +1 -0
  178. package/storybook-static/MadieSpinner-MadieSpinner-stories.6c47900d.iframe.bundle.js +30 -0
  179. package/storybook-static/MadieSpinner-MadieSpinner-stories.6c47900d.iframe.bundle.js.LICENSE.txt +8 -0
  180. package/storybook-static/MadieSpinner-MadieSpinner-stories.6c47900d.iframe.bundle.js.map +1 -0
  181. package/storybook-static/MadieTooltip-MadieTooltip-stories.0c8fb8f7.iframe.bundle.js +2 -0
  182. package/storybook-static/MadieTooltip-MadieTooltip-stories.0c8fb8f7.iframe.bundle.js.LICENSE.txt +9 -0
  183. package/storybook-static/MadieTooltipIcon-MadieTooltipIcon-stories.b33f0165.iframe.bundle.js +2 -0
  184. package/storybook-static/MadieTooltipIcon-MadieTooltipIcon-stories.b33f0165.iframe.bundle.js.LICENSE.txt +9 -0
  185. package/storybook-static/Modal-Modal-stories.1c8c1dcd.iframe.bundle.js +2 -0
  186. package/storybook-static/Modal-Modal-stories.1c8c1dcd.iframe.bundle.js.LICENSE.txt +19 -0
  187. package/storybook-static/NumberInput-NumberInput-stories.b642f330.iframe.bundle.js +1 -0
  188. package/storybook-static/Pagination-Pagination-stories.dc63a146.iframe.bundle.js +1 -0
  189. package/storybook-static/Popover-Popover-stories.680cce19.iframe.bundle.js +1 -0
  190. package/storybook-static/RadioButton-RadioButton-stories.5daa020f.iframe.bundle.js +1 -0
  191. package/storybook-static/ReadOnlyTextField-ReadOnlyTextField-stories.281af1c9.iframe.bundle.js +1 -0
  192. package/storybook-static/RichTextEditor-RichTextEditor-stories.f2f6efd0.iframe.bundle.js +1 -0
  193. package/storybook-static/Search-Search-stories.ce9d2b51.iframe.bundle.js +1 -0
  194. package/storybook-static/Select-Select-stories.1ba58501.iframe.bundle.js +1 -0
  195. package/storybook-static/Tabs-Tabs-stories.e9bf42ff.iframe.bundle.js +1 -0
  196. package/storybook-static/TextArea-TextArea-stories.9bb45748.iframe.bundle.js +1 -0
  197. package/storybook-static/TextField-TextField-stories.e5c08a5e.iframe.bundle.js +1 -0
  198. package/storybook-static/TimeField-TimeField-stories.760f9db5.iframe.bundle.js +1 -0
  199. package/storybook-static/Toast-Toast-stories.160e8bf1.iframe.bundle.js +1 -0
  200. package/storybook-static/TruncateText-TruncateText-stories.2da57e6a.iframe.bundle.js +1 -0
  201. package/storybook-static/favicon.svg +1 -0
  202. package/storybook-static/iframe.html +531 -0
  203. package/storybook-static/index.html +152 -0
  204. package/storybook-static/index.json +1 -0
  205. package/storybook-static/main.18ce3a87.iframe.bundle.js +1 -0
  206. package/storybook-static/nunito-sans-bold-italic.woff2 +0 -0
  207. package/storybook-static/nunito-sans-bold.woff2 +0 -0
  208. package/storybook-static/nunito-sans-italic.woff2 +0 -0
  209. package/storybook-static/nunito-sans-regular.woff2 +0 -0
  210. package/storybook-static/project.json +1 -0
  211. package/storybook-static/runtime~main.6bbd8126.iframe.bundle.js +1 -0
  212. package/storybook-static/sb-addons/docs-2/manager-bundle.js +151 -0
  213. package/storybook-static/sb-addons/links-1/manager-bundle.js +3 -0
  214. package/storybook-static/sb-addons/storybook-core-server-presets-0/common-manager-bundle.js +188 -0
  215. package/storybook-static/sb-common-assets/favicon.svg +1 -0
  216. package/storybook-static/sb-common-assets/nunito-sans-bold-italic.woff2 +0 -0
  217. package/storybook-static/sb-common-assets/nunito-sans-bold.woff2 +0 -0
  218. package/storybook-static/sb-common-assets/nunito-sans-italic.woff2 +0 -0
  219. package/storybook-static/sb-common-assets/nunito-sans-regular.woff2 +0 -0
  220. package/storybook-static/sb-manager/globals-module-info.js +797 -0
  221. package/storybook-static/sb-manager/globals-runtime.js +69459 -0
  222. package/storybook-static/sb-manager/globals.js +34 -0
  223. package/storybook-static/sb-manager/runtime.js +13003 -0
  224. package/storybook-static/sb-preview/globals.js +25 -0
  225. package/storybook-static/sb-preview/runtime.js +43237 -0
  226. package/storybook-static/static/media/FontAwesome.91f80bba.otf +0 -0
  227. package/storybook-static/static/media/Rubik-Bold.31bbd4d2.ttf +0 -0
  228. package/storybook-static/static/media/Rubik-Light.c90e2014.ttf +0 -0
  229. package/storybook-static/static/media/Rubik-Medium.5daa89aa.ttf +0 -0
  230. package/storybook-static/static/media/Rubik-Regular.cdf97d58.ttf +0 -0
  231. package/storybook-static/static/media/bitter-bold.24bf01e4.woff2 +0 -0
  232. package/storybook-static/static/media/bitter-italic.34644574.woff2 +0 -0
  233. package/storybook-static/static/media/bitter-regular.f4e2f1f1.woff2 +0 -0
  234. package/storybook-static/static/media/fontawesome-webfont.1e59d233.ttf +0 -0
  235. package/storybook-static/static/media/fontawesome-webfont.20fd1704.woff2 +0 -0
  236. package/storybook-static/static/media/fontawesome-webfont.8b43027f.eot +0 -0
  237. package/storybook-static/static/media/fontawesome-webfont.c1e38fd9.svg +2671 -0
  238. package/storybook-static/static/media/fontawesome-webfont.f691f37e.woff +0 -0
  239. package/storybook-static/static/media/opensans-bold-webfont.92e570c6.woff2 +0 -0
  240. package/storybook-static/static/media/opensans-italic-webfont.72daa33a.woff2 +0 -0
  241. package/storybook-static/static/media/opensans-regular-webfont.ca4dd835.woff2 +0 -0
  242. package/storybook-static/static/media/opensans-semibold-webfont.17ded75f.woff2 +0 -0
  243. package/test/components/MadieDeleteDialog.test.js +1 -1
  244. package/test/components/RichTextEditor.test.js +257 -37
  245. package/.idea/inspectionProfiles/Project_Default.xml +0 -6
  246. package/.idea/misc.xml +0 -6
  247. package/.idea/modules.xml +0 -8
  248. package/.idea/react.iml +0 -9
  249. package/.idea/vcs.xml +0 -6
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">97.14% </span>
26
+ <span class="strong">98.9% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>34/35</span>
28
+ <span class='fraction'>90/91</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">78.37% </span>
33
+ <span class="strong">87.95% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>29/37</span>
35
+ <span class='fraction'>73/83</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
40
  <span class="strong">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>7/7</span>
42
+ <span class='fraction'>23/23</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
47
  <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>34/34</span>
49
+ <span class='fraction'>87/87</span>
50
50
  </div>
51
51
 
52
52
 
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -223,7 +223,249 @@
223
223
  <a name='L158'></a><a href='#L158'>158</a>
224
224
  <a name='L159'></a><a href='#L159'>159</a>
225
225
  <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
227
469
  <span class="cline-any cline-neutral">&nbsp;</span>
228
470
  <span class="cline-any cline-neutral">&nbsp;</span>
229
471
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -238,68 +480,147 @@
238
480
  <span class="cline-any cline-neutral">&nbsp;</span>
239
481
  <span class="cline-any cline-neutral">&nbsp;</span>
240
482
  <span class="cline-any cline-neutral">&nbsp;</span>
241
- <span class="cline-any cline-yes">1x</span>
242
483
  <span class="cline-any cline-neutral">&nbsp;</span>
243
484
  <span class="cline-any cline-neutral">&nbsp;</span>
485
+ <span class="cline-any cline-yes">11x</span>
244
486
  <span class="cline-any cline-neutral">&nbsp;</span>
245
487
  <span class="cline-any cline-neutral">&nbsp;</span>
246
488
  <span class="cline-any cline-neutral">&nbsp;</span>
247
489
  <span class="cline-any cline-neutral">&nbsp;</span>
248
490
  <span class="cline-any cline-neutral">&nbsp;</span>
249
491
  <span class="cline-any cline-neutral">&nbsp;</span>
250
- <span class="cline-any cline-yes">12x</span>
251
- <span class="cline-any cline-yes">12x</span>
252
492
  <span class="cline-any cline-neutral">&nbsp;</span>
253
- <span class="cline-any cline-yes">12x</span>
254
- <span class="cline-any cline-yes">3x</span>
255
- <span class="cline-any cline-yes">14x</span>
256
- <span class="cline-any cline-yes">14x</span>
257
- <span class="cline-any cline-yes">14x</span>
258
- <span class="cline-any cline-yes">4x</span>
493
+ <span class="cline-any cline-yes">11x</span>
494
+ <span class="cline-any cline-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-yes">11x</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-neutral">&nbsp;</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-neutral">&nbsp;</span>
509
+ <span class="cline-any cline-neutral">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-yes">11x</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-yes">24x</span>
514
+ <span class="cline-any cline-yes">24x</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-yes">24x</span>
517
+ <span class="cline-any cline-yes">71x</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-yes">61x</span>
520
+ <span class="cline-any cline-yes">31x</span>
521
+ <span class="cline-any cline-yes">31x</span>
522
+ <span class="cline-any cline-neutral">&nbsp;</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-neutral">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-yes">31x</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-yes">61x</span>
530
+ <span class="cline-any cline-yes">61x</span>
531
+ <span class="cline-any cline-yes">16x</span>
532
+ <span class="cline-any cline-yes">45x</span>
259
533
  <span class="cline-any cline-yes">10x</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-yes">24x</span>
538
+ <span class="cline-any cline-neutral">&nbsp;</span>
539
+ <span class="cline-any cline-yes">24x</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-neutral">&nbsp;</span>
543
+ <span class="cline-any cline-yes">24x</span>
544
+ <span class="cline-any cline-yes">71x</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-yes">71x</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-yes">71x</span>
551
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
552
  <span class="cline-any cline-yes">10x</span>
261
553
  <span class="cline-any cline-neutral">&nbsp;</span>
262
554
  <span class="cline-any cline-neutral">&nbsp;</span>
263
555
  <span class="cline-any cline-neutral">&nbsp;</span>
264
- <span class="cline-any cline-yes">5x</span>
556
+ <span class="cline-any cline-yes">71x</span>
557
+ <span class="cline-any cline-yes">16x</span>
558
+ <span class="cline-any cline-yes">37x</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-yes">37x</span>
561
+ <span class="cline-any cline-yes">33x</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-yes">33x</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-neutral">&nbsp;</span>
567
+ <span class="cline-any cline-neutral">&nbsp;</span>
568
+ <span class="cline-any cline-yes">19x</span>
265
569
  <span class="cline-any cline-neutral">&nbsp;</span>
266
570
  <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-yes">55x</span>
267
573
  <span class="cline-any cline-yes">10x</span>
268
- <span class="cline-any cline-yes">1x</span>
269
- <span class="cline-any cline-yes">9x</span>
574
+ <span class="cline-any cline-yes">45x</span>
270
575
  <span class="cline-any cline-neutral">&nbsp;</span>
271
576
  <span class="cline-any cline-neutral">&nbsp;</span>
272
577
  <span class="cline-any cline-neutral">&nbsp;</span>
273
- <span class="cline-any cline-yes">8x</span>
274
- <span class="cline-any cline-yes">1x</span>
275
578
  <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-yes">35x</span>
276
580
  <span class="cline-any cline-neutral">&nbsp;</span>
277
581
  <span class="cline-any cline-neutral">&nbsp;</span>
278
- <span class="cline-any cline-yes">1x</span>
279
582
  <span class="cline-any cline-neutral">&nbsp;</span>
280
- <span class="cline-any cline-yes">14x</span>
583
+ <span class="cline-any cline-yes">10x</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-yes">10x</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-yes">71x</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-neutral">&nbsp;</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-yes">24x</span>
596
+ <span class="cline-any cline-yes">24x</span>
597
+ <span class="cline-any cline-neutral">&nbsp;</span>
598
+ <span class="cline-any cline-neutral">&nbsp;</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-yes">11x</span>
607
+ <span class="cline-any cline-yes">51x</span>
608
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
609
  <span class="cline-any cline-neutral">&nbsp;</span>
282
- <span class="cline-any cline-yes">3x</span>
283
610
  <span class="cline-any cline-neutral">&nbsp;</span>
284
611
  <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">12x</span>
286
- <span class="cline-any cline-yes">5x</span>
287
- <span class="cline-any cline-yes">3x</span>
288
612
  <span class="cline-any cline-neutral">&nbsp;</span>
289
613
  <span class="cline-any cline-neutral">&nbsp;</span>
290
614
  <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-yes">12x</span>
615
+ <span class="cline-any cline-yes">11x</span>
292
616
  <span class="cline-any cline-neutral">&nbsp;</span>
293
617
  <span class="cline-any cline-neutral">&nbsp;</span>
294
618
  <span class="cline-any cline-neutral">&nbsp;</span>
295
619
  <span class="cline-any cline-neutral">&nbsp;</span>
296
620
  <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-yes">12x</span>
298
- <span class="cline-any cline-yes">12x</span>
299
- <span class="cline-any cline-yes">12x</span>
300
621
  <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-yes">12x</span>
302
622
  <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-yes">11x</span>
303
624
  <span class="cline-any cline-neutral">&nbsp;</span>
304
625
  <span class="cline-any cline-neutral">&nbsp;</span>
305
626
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -308,14 +629,111 @@
308
629
  <span class="cline-any cline-neutral">&nbsp;</span>
309
630
  <span class="cline-any cline-neutral">&nbsp;</span>
310
631
  <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-neutral">&nbsp;</span>
635
+ <span class="cline-any cline-yes">46x</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-neutral">&nbsp;</span>
643
+ <span class="cline-any cline-yes">46x</span>
644
+ <span class="cline-any cline-neutral">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-yes">46x</span>
647
+ <span class="cline-any cline-yes">30x</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-yes">46x</span>
652
+ <span class="cline-any cline-yes">16x</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</span>
661
+ <span class="cline-any cline-neutral">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-yes">46x</span>
678
+ <span class="cline-any cline-yes">16x</span>
679
+ <span class="cline-any cline-yes">16x</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-yes">16x</span>
682
+ <span class="cline-any cline-yes">21x</span>
683
+ <span class="cline-any cline-yes">20x</span>
684
+ <span class="cline-any cline-yes">20x</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-yes">20x</span>
687
+ <span class="cline-any cline-yes">5x</span>
688
+ <span class="cline-any cline-neutral">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-neutral">&nbsp;</span>
692
+ <span class="cline-any cline-yes">16x</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-neutral">&nbsp;</span>
696
+ <span class="cline-any cline-neutral">&nbsp;</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-yes">46x</span>
700
+ <span class="cline-any cline-yes">8x</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-yes">46x</span>
311
706
  <span class="cline-any cline-yes">1x</span>
312
707
  <span class="cline-any cline-neutral">&nbsp;</span>
313
708
  <span class="cline-any cline-neutral">&nbsp;</span>
314
709
  <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-yes">46x</span>
711
+ <span class="cline-any cline-yes">10x</span>
712
+ <span class="cline-any cline-yes">10x</span>
713
+ <span class="cline-any cline-neutral">&nbsp;</span>
714
+ <span class="cline-any cline-yes">46x</span>
715
+ <span class="cline-any cline-yes">10x</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-neutral">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-yes">46x</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
728
  <span class="cline-any cline-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-yes">63x</span>
316
730
  <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-yes">63x</span>
317
732
  <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-yes">51x</span>
734
+ <span class="cline-any cline-yes">51x</span>
318
735
  <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-yes">51x</span>
319
737
  <span class="cline-any cline-neutral">&nbsp;</span>
320
738
  <span class="cline-any cline-neutral">&nbsp;</span>
321
739
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -326,6 +744,11 @@
326
744
  <span class="cline-any cline-neutral">&nbsp;</span>
327
745
  <span class="cline-any cline-neutral">&nbsp;</span>
328
746
  <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-yes">8x</span>
748
+ <span class="cline-any cline-yes">8x</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
752
  <span class="cline-any cline-neutral">&nbsp;</span>
330
753
  <span class="cline-any cline-neutral">&nbsp;</span>
331
754
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -336,15 +759,15 @@
336
759
  <span class="cline-any cline-neutral">&nbsp;</span>
337
760
  <span class="cline-any cline-neutral">&nbsp;</span>
338
761
  <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-yes">3x</span>
340
- <span class="cline-any cline-yes">3x</span>
341
- <span class="cline-any cline-yes">3x</span>
342
762
  <span class="cline-any cline-neutral">&nbsp;</span>
343
763
  <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-yes">4x</span>
765
+ <span class="cline-any cline-yes">4x</span>
344
766
  <span class="cline-any cline-neutral">&nbsp;</span>
345
767
  <span class="cline-any cline-neutral">&nbsp;</span>
346
768
  <span class="cline-any cline-neutral">&nbsp;</span>
347
769
  <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-yes">4x</span>
348
771
  <span class="cline-any cline-neutral">&nbsp;</span>
349
772
  <span class="cline-any cline-neutral">&nbsp;</span>
350
773
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -363,6 +786,8 @@
363
786
  <span class="cline-any cline-neutral">&nbsp;</span>
364
787
  <span class="cline-any cline-neutral">&nbsp;</span>
365
788
  <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-yes">46x</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
791
  <span class="cline-any cline-neutral">&nbsp;</span>
367
792
  <span class="cline-any cline-neutral">&nbsp;</span>
368
793
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -374,22 +799,83 @@
374
799
  <span class="cline-any cline-neutral">&nbsp;</span>
375
800
  <span class="cline-any cline-neutral">&nbsp;</span>
376
801
  <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-yes">63x</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-neutral">&nbsp;</span>
377
813
  <span class="cline-any cline-neutral">&nbsp;</span>
378
814
  <span class="cline-any cline-neutral">&nbsp;</span>
379
815
  <span class="cline-any cline-neutral">&nbsp;</span>
380
816
  <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-yes">1x</span>
381
819
  <span class="cline-any cline-yes">1x</span>
382
820
  <span class="cline-any cline-neutral">&nbsp;</span>
383
821
  <span class="cline-any cline-neutral">&nbsp;</span>
384
822
  <span class="cline-any cline-neutral">&nbsp;</span>
385
823
  <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { useEffect, useState } from "react";
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-neutral">&nbsp;</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-neutral">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-neutral">&nbsp;</span>
834
+ <span class="cline-any cline-neutral">&nbsp;</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-neutral">&nbsp;</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-neutral">&nbsp;</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-yes">11x</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-neutral">&nbsp;</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-neutral">&nbsp;</span>
854
+ <span class="cline-any cline-neutral">&nbsp;</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-neutral">&nbsp;</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-neutral">&nbsp;</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-yes">11x</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import React, { useEffect, useState, useMemo } from "react";
387
871
  &nbsp;
388
872
  import ErrorIcon from "@mui/icons-material/Error"; // warning
389
873
  import InfoIcon from "@mui/icons-material/Info"; // info
390
874
  import CancelIcon from "@mui/icons-material/Cancel"; // error
391
875
  import CheckCircleIcon from "@mui/icons-material/CheckCircle"; //success
392
876
  import ContentCopyIcon from "@mui/icons-material/ContentCopy"; //copy
877
+ import FullscreenExitRoundedIcon from "@mui/icons-material/FullscreenExitRounded";
878
+ import WarningRoundedIcon from "@mui/icons-material/WarningRounded";
393
879
  import Tooltip from "@mui/material/Tooltip";
394
880
  import { IconButton } from "@mui/material";
395
881
  import ClearIcon from "@mui/icons-material/Clear";
@@ -397,138 +883,363 @@ import Toast from "../Toast/index";
397
883
  import classNames from "classnames";
398
884
  import PropTypes from "prop-types";
399
885
  &nbsp;
400
- // warning, info, error, success
401
- const MadieAlert = ({
402
- type = <span class="branch-0 cbranch-no" title="branch not covered" >"warning",</span>
403
- visible = <span class="branch-0 cbranch-no" title="branch not covered" >true,</span>
404
- content,
405
- canClose = <span class="branch-0 cbranch-no" title="branch not covered" >true,</span>
406
- alertProps, // props to pass to outer component
407
- closeButtonProps, // props to pass to close button
408
- copyButton,
409
- }) =&gt; {
410
- const [copyText, setCopyText] = useState("");
411
- const [toastOpen, setToastOpen] = useState(false);
412
- &nbsp;
413
- const copyButtonBuilder = (content) =&gt; {
414
- const traversal = (contentNode, parentNode = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> =&gt; {
415
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!contentNode) <span class="cstat-no" title="statement not covered" >return "";</span>
416
- let result = contentNode.type === "ul" ? "\n" : "";
417
- if (Array.isArray(contentNode.props?.children)) {
418
- contentNode.props.children.forEach((child, index) =&gt; {
419
- result += traversal(child, false);
886
+ // Define icon mapping outside component to avoid recreation on each render
887
+ const typeToIconMap = {
888
+ warning: ErrorIcon,
889
+ info: InfoIcon,
890
+ error: CancelIcon,
891
+ success: CheckCircleIcon,
892
+ };
893
+ &nbsp;
894
+ // Common button styles
895
+ const buttonBaseSx = {
896
+ marginLeft: "auto",
897
+ };
898
+ &nbsp;
899
+ const buttonWithDividerSx = {
900
+ ...buttonBaseSx,
901
+ "&amp;:after": {
902
+ content: `''`,
903
+ position: "absolute",
904
+ left: "0px",
905
+ width: "1px",
906
+ height: "40px",
907
+ backgroundColor: "#B0B0B0",
908
+ pointerEvents: "none",
909
+ },
910
+ };
911
+ &nbsp;
912
+ // Extract alert content processing to a separate function
913
+ const processContent = (content) =&gt; {
914
+ // Counts errors/warnings in ul/li elements
915
+ const countUlLiChildren = (element) =&gt; {
916
+ const counts = { ul: 0, li: 0 };
917
+ &nbsp;
918
+ const traverse = (el) =&gt; {
919
+ if (!el || typeof el !== "object") return;
920
+ &nbsp;
921
+ if (el.type === "ul" || el.type === "li") {
922
+ const children = el.props?.children;
923
+ const childCount = Array.isArray(children)
924
+ ? children.length
925
+ : children
926
+ ? 1
927
+ : <span class="branch-1 cbranch-no" title="branch not covered" >0;</span>
928
+ counts[el.type] += childCount;
929
+ }
930
+ &nbsp;
931
+ const children = el.props?.children;
932
+ if (Array.isArray(children)) {
933
+ children.forEach(traverse);
934
+ } else if (children &amp;&amp; typeof children === "object") {
935
+ traverse(children);
936
+ }
937
+ };
938
+ &nbsp;
939
+ traverse(element);
940
+ &nbsp;
941
+ return counts.li &gt; counts.ul ? counts.li : counts.ul;
942
+ };
943
+ &nbsp;
944
+ // Converts content to text for copying - improved to avoid unwanted characters
945
+ const buildCopyText = (contentNode, parentNode = <span class="branch-0 cbranch-no" title="branch not covered" >true)</span> =&gt; {
946
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!contentNode) <span class="cstat-no" title="statement not covered" >return "";</span>
947
+ &nbsp;
948
+ // Initialize result string
949
+ let result = "";
950
+ &nbsp;
951
+ // Handle specific node types that need special formatting
952
+ if (contentNode.type === "ul") {
953
+ // Start ul with a newline
954
+ result = "\n";
955
+ }
956
+ &nbsp;
957
+ // Process children based on their type
958
+ if (Array.isArray(contentNode.props?.children)) {
959
+ contentNode.props.children.forEach((child, index) =&gt; {
960
+ const childText = buildCopyText(child, false);
961
+ // Only add non-empty text
962
+ if (childText.trim()) {
963
+ result += childText;
964
+ &nbsp;
965
+ // Add line breaks after certain elements
420
966
  if (
421
- (parentNode &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >index == 1)</span> ||
967
+ (parentNode &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >index === 1)</span> ||
422
968
  contentNode.type === "ul"
423
969
  ) {
424
970
  result += "\n";
425
971
  }
426
- });
427
- } else if (typeof contentNode.props?.children === "object") {
428
- result += traversal(contentNode.props.children, false);
429
- } else if (
430
- typeof contentNode.props?.children === "string" ||
431
- typeof contentNode.props?.children === "number"
432
- ) {
433
- result += contentNode.props.children.toString();
434
- } else <span class="missing-if-branch" title="else path not taken" >E</span>if (
435
- typeof contentNode === "string" ||
436
- <span class="branch-1 cbranch-no" title="branch not covered" > typeof contentNode === "number"</span>
437
- ) {
438
- result += contentNode.toString();
439
- }
440
- return result;
441
- };
442
- return traversal(content, false).trim();
972
+ }
973
+ });
974
+ } else if (typeof contentNode.props?.children === "object") {
975
+ result += buildCopyText(contentNode.props.children, false);
976
+ } else if (
977
+ typeof contentNode.props?.children === "string" ||
978
+ typeof contentNode.props?.children === "number"
979
+ ) {
980
+ // Clean the string by trimming and normalizing whitespace
981
+ result += contentNode.props.children
982
+ .toString()
983
+ .replace(/\s+/g, " ")
984
+ .trim();
985
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>if (
986
+ typeof contentNode === "string" ||
987
+ <span class="branch-1 cbranch-no" title="branch not covered" > typeof contentNode === "number"</span>
988
+ ) {
989
+ // Clean the string by trimming and normalizing whitespace
990
+ result += contentNode.toString().replace(/\s+/g, " ").trim();
991
+ }
992
+ &nbsp;
993
+ return result;
994
+ };
995
+ &nbsp;
996
+ // Process content and ensure we trim the final result
997
+ const rawText = buildCopyText(content, false);
998
+ return {
999
+ errorCount: countUlLiChildren(content),
1000
+ copyText: rawText
1001
+ .replace(/\s+\n/g, "\n")
1002
+ .replace(/\n\s+/g, "\n")
1003
+ .trim(),
1004
+ };
1005
+ };
1006
+ &nbsp;
1007
+ // Define ActionButton as a separate component outside MadieAlert
1008
+ const ActionButton = ({ tooltip, onClick, icon, testId, sx }) =&gt; (
1009
+ &lt;Tooltip title={tooltip} data-testid={`${testId}-tooltip`} arrow&gt;
1010
+ &lt;IconButton onClick={onClick} sx={sx} data-testid={testId}&gt;
1011
+ {icon}
1012
+ &lt;/IconButton&gt;
1013
+ &lt;/Tooltip&gt;
1014
+ );
1015
+ &nbsp;
1016
+ // Add PropTypes for ActionButton
1017
+ ActionButton.propTypes = {
1018
+ tooltip: PropTypes.string.isRequired,
1019
+ onClick: PropTypes.func.isRequired,
1020
+ icon: PropTypes.node.isRequired,
1021
+ testId: PropTypes.string.isRequired,
1022
+ sx: PropTypes.object,
1023
+ };
1024
+ &nbsp;
1025
+ const MadieAlert = ({
1026
+ type = "warning",
1027
+ visible = true,
1028
+ content,
1029
+ canClose = true,
1030
+ minimizeAlerts = <span class="branch-0 cbranch-no" title="branch not covered" >false,</span>
1031
+ alertProps,
1032
+ closeButtonProps,
1033
+ copyButton,
1034
+ alerts = <span class="branch-0 cbranch-no" title="branch not covered" >null,</span>
1035
+ }) =&gt; {
1036
+ // Consolidate related state
1037
+ const [state, setState] = useState({
1038
+ toastOpen: false,
1039
+ copyText: "",
1040
+ minimizedAlerts: {},
1041
+ individualErrors: {},
1042
+ });
1043
+ &nbsp;
1044
+ // Create alias for readability
1045
+ const { toastOpen, copyText, minimizedAlerts, individualErrors } = state;
1046
+ &nbsp;
1047
+ // Use a single update function
1048
+ const updateState = (updates) =&gt; {
1049
+ setState((prev) =&gt; ({ ...prev, ...updates }));
443
1050
  };
444
1051
  &nbsp;
1052
+ // Prepare alerts array once
1053
+ const alertsArray = useMemo(() =&gt; {
1054
+ return (
1055
+ alerts || [
1056
+ {
1057
+ type,
1058
+ visible,
1059
+ content,
1060
+ canClose,
1061
+ alertProps,
1062
+ closeButtonProps,
1063
+ copyButton,
1064
+ },
1065
+ ]
1066
+ );
1067
+ }, [
1068
+ alerts,
1069
+ type,
1070
+ visible,
1071
+ content,
1072
+ canClose,
1073
+ alertProps,
1074
+ closeButtonProps,
1075
+ copyButton,
1076
+ ]);
1077
+ &nbsp;
1078
+ // Process all alerts content once
445
1079
  useEffect(() =&gt; {
446
- if (content &amp;&amp; copyButton) {
447
- setCopyText(copyButtonBuilder(content));
448
- }
449
- }, [content]);
450
- // we have four states to render for
451
- const typeSelect = {
452
- warning: ErrorIcon,
453
- info: InfoIcon,
454
- error: CancelIcon,
455
- success: CheckCircleIcon,
1080
+ const newIndividualErrors = {};
1081
+ let totalCopyText = "";
1082
+ &nbsp;
1083
+ alertsArray.forEach((alert, index) =&gt; {
1084
+ if (alert.content &amp;&amp; alert.visible !== false) {
1085
+ const processed = processContent(alert.content);
1086
+ newIndividualErrors[index] = processed.errorCount;
1087
+ &nbsp;
1088
+ if (alert.copyButton) {
1089
+ totalCopyText += processed.copyText + "\n\n";
1090
+ }
1091
+ }
1092
+ });
1093
+ &nbsp;
1094
+ updateState({
1095
+ individualErrors: newIndividualErrors,
1096
+ copyText: totalCopyText.trim(),
1097
+ });
1098
+ }, [alertsArray]);
1099
+ &nbsp;
1100
+ // Utility functions for managing minimized state
1101
+ const minimizeAlert = (index) =&gt; {
1102
+ updateState({
1103
+ minimizedAlerts: { ...minimizedAlerts, [index]: true },
1104
+ });
456
1105
  };
457
- const Icon = typeSelect[type];
458
- const alertClass = classNames("madie-alert", type);
459
- const iconClass = classNames("alert-icon", type);
460
1106
  &nbsp;
461
- return (
462
- visible &amp;&amp; (
463
- &lt;div className={alertClass} {...alertProps}&gt;
464
- &lt;Toast
465
- toastKey="copy-success-toast"
466
- data-testid="copy-success"
467
- toastType="success"
468
- open={toastOpen}
469
- message="Copied to clipboard!"
470
- onClose={() =&gt; {
471
- setToastOpen(false);
472
- }}
473
- autoHideDuration={1500}
474
- /&gt;
475
- &lt;Icon className={iconClass} /&gt;
476
- &lt;div id="content"&gt;{content &amp;&amp; content}&lt;/div&gt;
477
- {copyButton &amp;&amp; (
478
- &lt;Tooltip
479
- data-testid="copy-button-tooltip"
480
- title={"Copy Text"}
481
- arrow
482
- &gt;
483
- &lt;IconButton
484
- sx={{
485
- marginLeft: "auto",
486
- "&amp;:after": {
487
- content: `''`,
488
- position: "absolute",
489
- left: "0px",
490
- width: "1px",
491
- height: "40px",
492
- backgroundColor: "#B0B0B0",
493
- pointerEvents: "none",
494
- },
495
- }}
496
- &gt;
497
- &lt;ContentCopyIcon
498
- onClick={(e) =&gt; {
499
- e.preventDefault();
500
- navigator.clipboard.writeText(copyText);
501
- setToastOpen(true);
502
- }}
1107
+ const restoreAllAlerts = () =&gt; {
1108
+ updateState({ minimizedAlerts: {} });
1109
+ };
1110
+ &nbsp;
1111
+ // Calculate minimized alerts info
1112
+ const minimizedIndices = Object.keys(minimizedAlerts)
1113
+ .filter((key) =&gt; minimizedAlerts[key])
1114
+ .map((key) =&gt; parseInt(key));
1115
+ &nbsp;
1116
+ const totalMinimizedErrors = minimizedIndices.reduce(
1117
+ (sum, index) =&gt; sum + (individualErrors[index] || 0),
1118
+ 0,
1119
+ );
1120
+ &nbsp;
1121
+ // Render alert content
1122
+ const renderAlert = (alert, index) =&gt; {
1123
+ const {
1124
+ type = <span class="branch-0 cbranch-no" title="branch not covered" >"warning",</span>
1125
+ visible = true,
1126
+ content,
1127
+ canClose = true,
1128
+ alertProps = {},
1129
+ closeButtonProps = {},
1130
+ copyButton = false,
1131
+ } = alert;
1132
+ &nbsp;
1133
+ if (!visible || minimizedAlerts[index]) return null;
1134
+ &nbsp;
1135
+ const Icon = typeToIconMap[type];
1136
+ const alertClass = classNames("madie-alert", type);
1137
+ &nbsp;
1138
+ return (
1139
+ &lt;div key={index} className={alertClass} {...alertProps}&gt;
1140
+ &lt;Icon className={classNames("alert-icon", type)} /&gt;
1141
+ &lt;div id="content" data-alert-index={index}&gt;
1142
+ {content}
1143
+ &lt;/div&gt;
1144
+ &nbsp;
1145
+ {minimizeAlerts &amp;&amp; (
1146
+ &lt;ActionButton
1147
+ tooltip="Minimize"
1148
+ onClick={(e) =&gt; {
1149
+ e.preventDefault();
1150
+ minimizeAlert(index);
1151
+ }}
1152
+ icon={
1153
+ &lt;FullscreenExitRoundedIcon
503
1154
  sx={{ color: "#242424" }}
504
1155
  /&gt;
505
- &lt;/IconButton&gt;
506
- &lt;/Tooltip&gt;
1156
+ }
1157
+ testId={`minimize-button-${index}`}
1158
+ sx={buttonWithDividerSx}
1159
+ /&gt;
507
1160
  )}
508
- {canClose &amp;&amp; (
509
- &lt;IconButton
510
- sx={{
511
- marginLeft: "auto",
512
- "&amp;:after": {
513
- content: `''`,
514
- position: "absolute",
515
- left: "0px",
516
- width: "1px",
517
- height: "40px",
518
- backgroundColor: "#B0B0B0",
519
- pointerEvents: "none",
520
- },
1161
+ &nbsp;
1162
+ {copyButton &amp;&amp; (
1163
+ &lt;ActionButton
1164
+ tooltip="Copy"
1165
+ onClick={(e) =&gt; {
1166
+ e.preventDefault();
1167
+ navigator.clipboard.writeText(
1168
+ copyButton
1169
+ ? processContent(content).copyText
1170
+ : <span class="branch-1 cbranch-no" title="branch not covered" >copyText,</span>
1171
+ );
1172
+ updateState({ toastOpen: true });
521
1173
  }}
522
- {...closeButtonProps}
523
- &gt;
1174
+ icon={&lt;ContentCopyIcon sx={{ color: "#242424" }} /&gt;}
1175
+ testId="copy-button"
1176
+ sx={
1177
+ !minimizeAlerts ? buttonWithDividerSx : buttonBaseSx
1178
+ }
1179
+ /&gt;
1180
+ )}
1181
+ &nbsp;
1182
+ {canClose &amp;&amp; (
1183
+ &lt;IconButton sx={buttonWithDividerSx} {...closeButtonProps}&gt;
524
1184
  &lt;ClearIcon sx={{ color: "#242424" }} /&gt;
525
1185
  &lt;/IconButton&gt;
526
1186
  )}
527
1187
  &lt;/div&gt;
528
- )
1188
+ );
1189
+ };
1190
+ &nbsp;
1191
+ return (
1192
+ &lt;div&gt;
1193
+ &lt;Toast
1194
+ toastKey="copy-success-toast"
1195
+ data-testid="copy-success"
1196
+ toastType="success"
1197
+ open={toastOpen}
1198
+ message="Copied to clipboard!"
1199
+ onClose={() =&gt; updateState({ toastOpen: false })}
1200
+ autoHideDuration={1500}
1201
+ /&gt;
1202
+ &nbsp;
1203
+ {/* Render visible alerts */}
1204
+ {alertsArray.map((alert, index) =&gt; renderAlert(alert, index))}
1205
+ &nbsp;
1206
+ {/* Show minimized indicator if any alerts are minimized */}
1207
+ {minimizedIndices.length &gt; 0 &amp;&amp; (
1208
+ &lt;div
1209
+ style={{
1210
+ position: "absolute",
1211
+ right: "32px",
1212
+ top: "10px",
1213
+ display: "flex",
1214
+ alignItems: "center",
1215
+ cursor: "pointer",
1216
+ }}
1217
+ data-testid="minimized-alert"
1218
+ className="minimized-alert"
1219
+ onClick={(e) =&gt; {
1220
+ e.preventDefault();
1221
+ restoreAllAlerts();
1222
+ }}
1223
+ &gt;
1224
+ &lt;WarningRoundedIcon
1225
+ sx={{ color: "yellow", marginRight: "5px" }}
1226
+ /&gt;
1227
+ &lt;span
1228
+ data-testid="minimized-alert-text"
1229
+ style={{ color: "white", fontSize: "16px" }}
1230
+ &gt;
1231
+ Display Alerts{" "}
1232
+ {totalMinimizedErrors &gt; 0
1233
+ ? `(${totalMinimizedErrors})`
1234
+ : ""}
1235
+ &lt;/span&gt;
1236
+ &lt;/div&gt;
1237
+ )}
1238
+ &lt;/div&gt;
529
1239
  );
530
1240
  };
531
1241
  &nbsp;
1242
+ // PropTypes definition
532
1243
  MadieAlert.propTypes = {
533
1244
  type: PropTypes.string,
534
1245
  visible: PropTypes.bool,
@@ -537,9 +1248,24 @@ MadieAlert.propTypes = {
537
1248
  alertProps: PropTypes.object,
538
1249
  closeButtonProps: PropTypes.object,
539
1250
  copyButton: PropTypes.bool,
1251
+ minimizeAlerts: PropTypes.bool,
1252
+ alerts: PropTypes.arrayOf(
1253
+ PropTypes.shape({
1254
+ type: PropTypes.string,
1255
+ visible: PropTypes.bool,
1256
+ content: PropTypes.node,
1257
+ canClose: PropTypes.bool,
1258
+ alertProps: PropTypes.object,
1259
+ closeButtonProps: PropTypes.object,
1260
+ copyButton: PropTypes.bool,
1261
+ }),
1262
+ ),
540
1263
  };
1264
+ &nbsp;
541
1265
  MadieAlert.defaultProps = {
542
1266
  copyButton: false,
1267
+ minimizeAlerts: false,
1268
+ alerts: null,
543
1269
  };
544
1270
  &nbsp;
545
1271
  export default MadieAlert;
@@ -550,7 +1276,7 @@ export default MadieAlert;
550
1276
  <div class='footer quiet pad2 space-top1 center small'>
551
1277
  Code coverage generated by
552
1278
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
553
- at 2024-09-06T13:47:41.021Z
1279
+ at 2025-06-17T20:32:27.082Z
554
1280
  </div>
555
1281
  <script src="../../../prettify.js"></script>
556
1282
  <script>