@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
@@ -132,7 +132,7 @@ describe("MadieDeleteDialog", () => {
132
132
  queryByText("This Action cannot be undone.")
133
133
  ).not.toBeInTheDocument();
134
134
  expect(
135
- queryByText("<p><strong>test &</strong></p><p>test2</p>"),
135
+ queryByText("<p><strong>test &</strong></p><p>test2</p>")
136
136
  ).not.toBeInTheDocument();
137
137
  expect(getByText("test &")).toBeInTheDocument();
138
138
  expect(getByText("test2")).toBeInTheDocument();
@@ -1,34 +1,42 @@
1
1
  import React from "react";
2
- import { render, screen, fireEvent, waitFor } from "@testing-library/react";
2
+ import {
3
+ render,
4
+ screen,
5
+ fireEvent,
6
+ waitFor,
7
+ act,
8
+ } from "@testing-library/react";
3
9
  import userEvent from "@testing-library/user-event";
4
- import RichTextEditor from "../../components/RichTextEditor/index";
10
+ import RichTextEditor, { MenuBar } from "../../components/RichTextEditor/index";
5
11
  import DOMPurify from "dompurify";
6
12
 
7
13
  beforeAll(() => {
8
- Element.prototype.getClientRects = jest.fn(() => [{
9
- top: 0,
10
- left: 0,
11
- bottom: 0,
12
- right: 0,
13
- width: 0,
14
- height: 0
15
- }]);
16
-
17
- Element.prototype.scrollIntoView = jest.fn();
18
-
19
- window.getSelection = jest.fn(() => ({
20
- removeAllRanges: jest.fn(),
21
- addRange: jest.fn(),
22
- }));
23
-
24
- Element.prototype.getBoundingClientRect = jest.fn(() => ({
25
- top: 0,
26
- left: 0,
27
- bottom: 0,
28
- right: 0,
29
- width: 0,
30
- height: 0
31
- }));
14
+ Element.prototype.getClientRects = jest.fn(() => [
15
+ {
16
+ top: 0,
17
+ left: 0,
18
+ bottom: 0,
19
+ right: 0,
20
+ width: 0,
21
+ height: 0,
22
+ },
23
+ ]);
24
+
25
+ Element.prototype.scrollIntoView = jest.fn();
26
+
27
+ window.getSelection = jest.fn(() => ({
28
+ removeAllRanges: jest.fn(),
29
+ addRange: jest.fn(),
30
+ }));
31
+
32
+ Element.prototype.getBoundingClientRect = jest.fn(() => ({
33
+ top: 0,
34
+ left: 0,
35
+ bottom: 0,
36
+ right: 0,
37
+ width: 0,
38
+ height: 0,
39
+ }));
32
40
  });
33
41
 
34
42
  describe("RichTextEditor Component", () => {
@@ -77,6 +85,40 @@ describe("RichTextEditor Component", () => {
77
85
  });
78
86
  });
79
87
 
88
+ it("calls renders withs style", async () => {
89
+ render(
90
+ <RichTextEditor
91
+ id="test-editor"
92
+ label="Description"
93
+ content="Initial Content"
94
+ onChange={mockOnChange}
95
+ disabled={false}
96
+ />
97
+ );
98
+
99
+ // Simulate content change
100
+ const label = screen.getByTestId("test-editor-label");
101
+ expect(label.className).toMatch(/Mui/);
102
+ });
103
+
104
+ it("calls renders withs style in readOnly", async () => {
105
+ render(
106
+ <RichTextEditor
107
+ readOnly
108
+ id="test-editor"
109
+ label="Description"
110
+ content="Initial Content"
111
+ onChange={mockOnChange}
112
+ disabled={false}
113
+ />
114
+ );
115
+
116
+ // Simulate content change
117
+ const label = screen.getByTestId("test-editor-label");
118
+ expect(label.className).toMatch(/Mui/);
119
+ expect(label).toHaveTextContent("Description");
120
+ });
121
+
80
122
  it("renders sanitized content within editor when disabled is true", () => {
81
123
  render(
82
124
  <RichTextEditor
@@ -160,6 +202,61 @@ describe("RichTextEditor Component", () => {
160
202
  const helperTextElement = screen.getByTestId("test-editor-helper-text");
161
203
  expect(helperTextElement).toHaveTextContent("This field is required.");
162
204
  });
205
+
206
+ it("displays no helper text", () => {
207
+ render(
208
+ <RichTextEditor
209
+ id="test-editor"
210
+ label="Test Label"
211
+ content={null}
212
+ helperText={null}
213
+ required={true}
214
+ error={true}
215
+ onChange={mockOnChange}
216
+ />
217
+ );
218
+
219
+ expect(
220
+ screen.queryByTestId("test-editor-helper-text")
221
+ ).not.toBeInTheDocument();
222
+ });
223
+ it("verifiably triggers content", () => {
224
+ render(
225
+ <RichTextEditor
226
+ id="test-editor"
227
+ label="Label"
228
+ content="<p>Hello world</p>"
229
+ helperText="Help"
230
+ error={false}
231
+ onChange={mockOnChange}
232
+ />
233
+ );
234
+
235
+ const editor = screen.getByTestId(
236
+ "test-editor-rich-text-editor-content"
237
+ );
238
+ expect(editor.innerHTML).toContain("Hello world");
239
+ });
240
+
241
+ it("updates content without rerendering", () => {
242
+ render(
243
+ <RichTextEditor
244
+ id="test-editor"
245
+ label="Label"
246
+ content="<p>Initial</p>"
247
+ helperText="Help"
248
+ error={false}
249
+ onChange={mockOnChange}
250
+ />
251
+ );
252
+
253
+ act(() => {
254
+ mockOnChange("<p>Updated</p>");
255
+ });
256
+
257
+ expect(mockOnChange).toHaveBeenCalledWith("<p>Updated</p>");
258
+ });
259
+
163
260
  it("triggers Undo", async () => {
164
261
  render(
165
262
  <RichTextEditor
@@ -167,7 +264,7 @@ describe("RichTextEditor Component", () => {
167
264
  label="Test Editor"
168
265
  onChange={mockOnChange}
169
266
  content="<p>Initial content</p>"
170
- />,
267
+ />
171
268
  );
172
269
  await userEvent.click(screen.getByRole("button", { name: "Undo" }));
173
270
  expect(mockOnChange).toHaveBeenCalled();
@@ -180,7 +277,7 @@ describe("RichTextEditor Component", () => {
180
277
  label="Test Editor"
181
278
  onChange={mockOnChange}
182
279
  content="<p>Initial content</p>"
183
- />,
280
+ />
184
281
  );
185
282
  await userEvent.click(screen.getByRole("button", { name: "Redo" }));
186
283
  expect(mockOnChange).toHaveBeenCalled();
@@ -189,7 +286,7 @@ describe("RichTextEditor Component", () => {
189
286
  describe("Table-related buttons", () => {
190
287
  beforeEach(() => {
191
288
  mockOnChange.mockClear();
192
- jest.spyOn(console, 'error').mockImplementation(() => {});
289
+ jest.spyOn(console, "error").mockImplementation(() => {});
193
290
 
194
291
  Element.prototype.getClientRects.mockClear();
195
292
  Element.prototype.scrollIntoView.mockClear();
@@ -206,14 +303,18 @@ describe("RichTextEditor Component", () => {
206
303
  label="Test Editor"
207
304
  onChange={mockOnChange}
208
305
  content="<table><tr><td>Cell content</td></tr></table>"
209
- />,
306
+ />
210
307
  );
211
308
 
212
309
  expect(screen.getByLabelText("Add row above")).toBeInTheDocument();
213
310
  expect(screen.getByLabelText("Add row below")).toBeInTheDocument();
214
311
  expect(screen.getByLabelText("Remove row")).toBeInTheDocument();
215
- expect(screen.getByLabelText("Add column right")).toBeInTheDocument();
216
- expect(screen.getByLabelText("Add column left")).toBeInTheDocument();
312
+ expect(
313
+ screen.getByLabelText("Add column right")
314
+ ).toBeInTheDocument();
315
+ expect(
316
+ screen.getByLabelText("Add column left")
317
+ ).toBeInTheDocument();
217
318
  expect(screen.getByLabelText("Remove column")).toBeInTheDocument();
218
319
  expect(screen.getByLabelText("Remove table")).toBeInTheDocument();
219
320
  });
@@ -223,8 +324,10 @@ describe("RichTextEditor Component", () => {
223
324
  focus: jest.fn().mockReturnThis(),
224
325
  addRowBefore: jest.fn().mockReturnThis(),
225
326
  run: jest.fn().mockImplementation(() => {
226
- mockOnChange("<table><tr><td>New row</td></tr><tr><td>Cell content</td></tr></table>");
227
- })
327
+ mockOnChange(
328
+ "<table><tr><td>New row</td></tr><tr><td>Cell content</td></tr></table>"
329
+ );
330
+ }),
228
331
  };
229
332
 
230
333
  const { getByLabelText } = render(
@@ -239,7 +342,9 @@ describe("RichTextEditor Component", () => {
239
342
  const button = getByLabelText("Add row above");
240
343
  const originalOnClick = button.onclick;
241
344
  button.onclick = () => {
242
- mockOnChange("<table><tr><td>New row</td></tr><tr><td>Cell content</td></tr></table>");
345
+ mockOnChange(
346
+ "<table><tr><td>New row</td></tr><tr><td>Cell content</td></tr></table>"
347
+ );
243
348
  };
244
349
 
245
350
  await userEvent.click(button);
@@ -280,7 +385,9 @@ describe("RichTextEditor Component", () => {
280
385
 
281
386
  const button = getByLabelText("Add column left");
282
387
  button.onclick = () => {
283
- mockOnChange("<table><tr><td>New column</td><td>Cell content</td></tr></table>");
388
+ mockOnChange(
389
+ "<table><tr><td>New column</td><td>Cell content</td></tr></table>"
390
+ );
284
391
  };
285
392
 
286
393
  fireEvent.click(button);
@@ -300,7 +407,9 @@ describe("RichTextEditor Component", () => {
300
407
 
301
408
  const button = getByLabelText("Add column right");
302
409
  button.onclick = () => {
303
- mockOnChange("<table><tr><td>Cell content</td><td>New column</td></tr></table>");
410
+ mockOnChange(
411
+ "<table><tr><td>Cell content</td><td>New column</td></tr></table>"
412
+ );
304
413
  };
305
414
 
306
415
  fireEvent.click(button);
@@ -335,6 +444,10 @@ describe("RichTextEditor Component", () => {
335
444
  label="Test Editor"
336
445
  onChange={mockOnChange}
337
446
  content="<table><tr><td>Cell content</td></tr></table>"
447
+ helperText={undefined}
448
+ sx={{
449
+ color: "red",
450
+ }}
338
451
  />
339
452
  );
340
453
 
@@ -347,5 +460,112 @@ describe("RichTextEditor Component", () => {
347
460
 
348
461
  expect(mockOnChange).toHaveBeenCalled();
349
462
  });
463
+
464
+ it("renders helper text", async () => {
465
+ render(
466
+ <RichTextEditor
467
+ id="test-editor"
468
+ label="Test Editor"
469
+ onChange={mockOnChange}
470
+ content="<table><tr><td>Cell content</td></tr></table>"
471
+ helperText="This is helper text"
472
+ />
473
+ );
474
+
475
+ const helperText = screen.getByText("This is helper text");
476
+ expect(helperText).toBeInTheDocument();
477
+ });
478
+
479
+ it("renders tooltips and buttons", () => {
480
+ render(
481
+ <RichTextEditor
482
+ id="test-editor"
483
+ label="Test Editor"
484
+ onChange={mockOnChange}
485
+ content="<table><tr><td>Cell content</td></tr></table>"
486
+ helperText="This is helper text"
487
+ />
488
+ );
489
+ //undo
490
+ const undoTooltip = screen.getByTestId("test-editor-undo-tooltip");
491
+ userEvent.hover(undoTooltip);
492
+ expect(undoTooltip).toBeInTheDocument();
493
+ //redo
494
+ const redoTooltip = screen.getByTestId("test-editor-redo-tooltip");
495
+ expect(redoTooltip).toBeInTheDocument();
496
+ //bold
497
+ const boldTooltip = screen.getByTestId("test-editor-bold-tooltip");
498
+ expect(boldTooltip).toBeInTheDocument();
499
+ //italic
500
+ const italicTooltip = screen.getByTestId(
501
+ "test-editor-italic-tooltip"
502
+ );
503
+ expect(italicTooltip).toBeInTheDocument();
504
+ //underline
505
+ const underlineTooltip = screen.getByTestId(
506
+ "test-editor-underline-tooltip"
507
+ );
508
+ expect(underlineTooltip).toBeInTheDocument();
509
+ //strikethrough
510
+ const strikethroughTooltip = screen.getByTestId(
511
+ "test-editor-strikethrough-tooltip"
512
+ );
513
+ expect(strikethroughTooltip).toBeInTheDocument();
514
+ //ordered list
515
+ const orderedListTooltip = screen.getByTestId(
516
+ "test-editor-orderedlist-tooltip"
517
+ );
518
+ expect(orderedListTooltip).toBeInTheDocument();
519
+ //bulleted list
520
+ const bulletedListTooltip = screen.getByTestId(
521
+ "test-editor-bulletedlist-tooltip"
522
+ );
523
+ expect(bulletedListTooltip).toBeInTheDocument();
524
+ //table
525
+ const tableTooltip = screen.getByTestId(
526
+ "test-editor-table-tooltip"
527
+ );
528
+ expect(tableTooltip).toBeInTheDocument();
529
+ //add column right
530
+ const addColumnRightTooltip = screen.getByTestId(
531
+ "test-editor-add-column-right-tooltip"
532
+ );
533
+ expect(addColumnRightTooltip).toBeInTheDocument();
534
+ //add column left
535
+ const addColumnLeftTooltip = screen.getByTestId(
536
+ "test-editor-add-column-left-tooltip"
537
+ );
538
+ expect(addColumnLeftTooltip).toBeInTheDocument();
539
+ //remove column
540
+ const removeColumnTooltip = screen.getByTestId(
541
+ "test-editor-remove-column-tooltip"
542
+ );
543
+ expect(removeColumnTooltip).toBeInTheDocument();
544
+ //remove table
545
+ const removeTableTooltip = screen.getByTestId(
546
+ "test-editor-remove-table-tooltip"
547
+ );
548
+ expect(removeTableTooltip).toBeInTheDocument();
549
+ //add row above
550
+ const addRowAboveTooltip = screen.getByTestId(
551
+ "test-editor-add-row-above-tooltip"
552
+ );
553
+ expect(addRowAboveTooltip).toBeInTheDocument();
554
+ //add row below
555
+ const addRowBelowTooltip = screen.getByTestId(
556
+ "test-editor-add-row-below-tooltip"
557
+ );
558
+ expect(addRowBelowTooltip).toBeInTheDocument();
559
+ //remove row
560
+ const removeRowTooltip = screen.getByTestId(
561
+ "test-editor-remove-row-tooltip"
562
+ );
563
+ expect(removeRowTooltip).toBeInTheDocument();
564
+ });
565
+
566
+ it("renders no menu bar", async () => {
567
+ const { container } = render(<MenuBar />);
568
+ expect(container).toBeEmptyDOMElement();
569
+ });
350
570
  });
351
571
  });
@@ -1,6 +0,0 @@
1
- <component name="InspectionProjectProfileManager">
2
- <profile version="1.0">
3
- <option name="myName" value="Project Default" />
4
- <inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
5
- </profile>
6
- </component>
package/.idea/misc.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
4
- <output url="file://$PROJECT_DIR$/out" />
5
- </component>
6
- </project>
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/react.iml" filepath="$PROJECT_DIR$/.idea/react.iml" />
6
- </modules>
7
- </component>
8
- </project>
package/.idea/react.iml DELETED
@@ -1,9 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="JAVA_MODULE" version="4">
3
- <component name="NewModuleRootManager" inherit-compiler-output="true">
4
- <exclude-output />
5
- <content url="file://$MODULE_DIR$" />
6
- <orderEntry type="inheritedJdk" />
7
- <orderEntry type="sourceFolder" forTests="false" />
8
- </component>
9
- </module>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
- </component>
6
- </project>