@eccenca/gui-elements 24.0.0-rc.2 → 24.0.0-rc.3

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 (367) hide show
  1. package/CHANGELOG.md +59 -5
  2. package/README.md +5 -3
  3. package/dist/cjs/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  4. package/dist/cjs/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
  5. package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +3 -5
  6. package/dist/cjs/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
  7. package/dist/cjs/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.js +4 -8
  8. package/dist/cjs/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.js.map +1 -1
  9. package/dist/cjs/cmem/markdown/Markdown.js.map +1 -1
  10. package/dist/cjs/cmem/markdown/highlightSearchWords.js +5 -8
  11. package/dist/cjs/cmem/markdown/highlightSearchWords.js.map +1 -1
  12. package/dist/cjs/cmem/react-flow/nodes/StickyNoteNode.js.map +1 -1
  13. package/dist/cjs/common/index.js +1 -3
  14. package/dist/cjs/common/index.js.map +1 -1
  15. package/dist/cjs/components/Accordion/Accordion.js +2 -7
  16. package/dist/cjs/components/Accordion/Accordion.js.map +1 -1
  17. package/dist/cjs/components/Accordion/AccordionItem.js +1 -2
  18. package/dist/cjs/components/Accordion/AccordionItem.js.map +1 -1
  19. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js +114 -63
  20. package/dist/cjs/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  21. package/dist/cjs/components/AutoSuggestion/AutoSuggestionList.js.map +1 -1
  22. package/dist/cjs/components/AutoSuggestion/ExtendedCodeEditor.js +13 -51
  23. package/dist/cjs/components/AutoSuggestion/ExtendedCodeEditor.js.map +1 -1
  24. package/dist/cjs/components/AutoSuggestion/extensions/markText.js +55 -0
  25. package/dist/cjs/components/AutoSuggestion/extensions/markText.js.map +1 -0
  26. package/dist/cjs/components/AutoSuggestion/index.js +1 -3
  27. package/dist/cjs/components/AutoSuggestion/index.js.map +1 -1
  28. package/dist/cjs/components/AutocompleteField/AutoCompleteField.js +2 -6
  29. package/dist/cjs/components/AutocompleteField/AutoCompleteField.js.map +1 -1
  30. package/dist/cjs/components/AutocompleteField/index.js +1 -0
  31. package/dist/cjs/components/AutocompleteField/index.js.map +1 -1
  32. package/dist/cjs/components/Breadcrumb/BreadcrumbList.js +2 -2
  33. package/dist/cjs/components/Breadcrumb/BreadcrumbList.js.map +1 -1
  34. package/dist/cjs/components/Button/Button.js.map +1 -1
  35. package/dist/cjs/components/Card/CardHeader.js +2 -2
  36. package/dist/cjs/components/Card/CardHeader.js.map +1 -1
  37. package/dist/cjs/components/CodeAutocompleteField/CodeAutocompleteField.js +3 -3
  38. package/dist/cjs/components/CodeAutocompleteField/CodeAutocompleteField.js.map +1 -1
  39. package/dist/cjs/components/Dialog/AlertDialog.js.map +1 -1
  40. package/dist/cjs/components/Dialog/Modal.js +2 -2
  41. package/dist/cjs/components/Dialog/Modal.js.map +1 -1
  42. package/dist/cjs/components/Grid/Grid.js.map +1 -1
  43. package/dist/cjs/components/Grid/GridColumn.js +1 -1
  44. package/dist/cjs/components/Grid/GridColumn.js.map +1 -1
  45. package/dist/cjs/components/Icon/Icon.js +3 -5
  46. package/dist/cjs/components/Icon/Icon.js.map +1 -1
  47. package/dist/cjs/components/Icon/canonicalIconNames.js.map +1 -1
  48. package/dist/cjs/components/MultiSelect/MultiSelect.js +6 -15
  49. package/dist/cjs/components/MultiSelect/MultiSelect.js.map +1 -1
  50. package/dist/cjs/components/MultiSuggestField/MultiSuggestField.js +7 -2
  51. package/dist/cjs/components/MultiSuggestField/MultiSuggestField.js.map +1 -1
  52. package/dist/cjs/components/Notification/Notification.js +2 -5
  53. package/dist/cjs/components/Notification/Notification.js.map +1 -1
  54. package/dist/cjs/components/Select/Select.js +0 -6
  55. package/dist/cjs/components/Select/Select.js.map +1 -1
  56. package/dist/cjs/components/Spinner/Spinner.js.map +1 -1
  57. package/dist/cjs/components/SuggestField/SuggestField.js +2 -2
  58. package/dist/cjs/components/SuggestField/SuggestField.js.map +1 -1
  59. package/dist/cjs/components/Table/Table.js +0 -3
  60. package/dist/cjs/components/Table/Table.js.map +1 -1
  61. package/dist/cjs/components/Tag/Tag.js +1 -0
  62. package/dist/cjs/components/Tag/Tag.js.map +1 -1
  63. package/dist/cjs/components/TextField/TextArea.js +1 -19
  64. package/dist/cjs/components/TextField/TextArea.js.map +1 -1
  65. package/dist/cjs/components/TextField/TextField.js +6 -24
  66. package/dist/cjs/components/TextField/TextField.js.map +1 -1
  67. package/dist/cjs/components/Tooltip/Tooltip.js.map +1 -1
  68. package/dist/cjs/components/Typography/Highlighter.js +0 -6
  69. package/dist/cjs/components/Typography/Highlighter.js.map +1 -1
  70. package/dist/cjs/components/Typography/index.js +0 -8
  71. package/dist/cjs/components/Typography/index.js.map +1 -1
  72. package/dist/cjs/components/Workspace/WorkspaceContent.js +1 -1
  73. package/dist/cjs/components/Workspace/WorkspaceContent.js.map +1 -1
  74. package/dist/cjs/components/index.js +0 -1
  75. package/dist/cjs/components/index.js.map +1 -1
  76. package/dist/cjs/extensions/codemirror/CodeMirror.js +91 -86
  77. package/dist/cjs/extensions/codemirror/CodeMirror.js.map +1 -1
  78. package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +43 -0
  79. package/dist/cjs/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -0
  80. package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js +49 -0
  81. package/dist/cjs/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -0
  82. package/dist/cjs/extensions/react-flow/edges/edgeTypes.js +1 -1
  83. package/dist/cjs/extensions/react-flow/edges/edgeTypes.js.map +1 -1
  84. package/dist/cjs/extensions/react-flow/index.js +3 -14
  85. package/dist/cjs/extensions/react-flow/index.js.map +1 -1
  86. package/dist/cjs/extensions/react-flow/minimap/utils.js +4 -7
  87. package/dist/cjs/extensions/react-flow/minimap/utils.js.map +1 -1
  88. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js +2 -10
  89. package/dist/cjs/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  90. package/dist/cjs/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  91. package/dist/cjs/extensions/react-flow/nodes/nodeTypes.js +1 -1
  92. package/dist/cjs/extensions/react-flow/nodes/nodeTypes.js.map +1 -1
  93. package/dist/cjs/index.js +1 -4
  94. package/dist/cjs/index.js.map +1 -1
  95. package/dist/cjs/legacy-replacements/Button/AffirmativeButton.js +1 -0
  96. package/dist/cjs/legacy-replacements/Button/AffirmativeButton.js.map +1 -1
  97. package/dist/cjs/legacy-replacements/Button/Button.js +2 -0
  98. package/dist/cjs/legacy-replacements/Button/Button.js.map +1 -1
  99. package/dist/cjs/legacy-replacements/Button/DismissiveButton.js +1 -0
  100. package/dist/cjs/legacy-replacements/Button/DismissiveButton.js.map +1 -1
  101. package/dist/cjs/legacy-replacements/Button/DisruptiveButton.js +1 -0
  102. package/dist/cjs/legacy-replacements/Button/DisruptiveButton.js.map +1 -1
  103. package/dist/cjs/legacy-replacements/Checkbox/Checkbox.js +2 -0
  104. package/dist/cjs/legacy-replacements/Checkbox/Checkbox.js.map +1 -1
  105. package/dist/cjs/legacy-replacements/Radio/RadioButton.js +2 -0
  106. package/dist/cjs/legacy-replacements/Radio/RadioButton.js.map +1 -1
  107. package/dist/cjs/legacy-replacements/Tabs/Tabs.js +1 -0
  108. package/dist/cjs/legacy-replacements/Tabs/Tabs.js.map +1 -1
  109. package/dist/cjs/legacy-replacements/TextField/TextField.js +2 -0
  110. package/dist/cjs/legacy-replacements/TextField/TextField.js.map +1 -1
  111. package/dist/esm/cmem/ActivityControl/ActivityControlWidget.js.map +1 -1
  112. package/dist/esm/cmem/ActivityControl/SilkActivityControl.js.map +1 -1
  113. package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js +3 -4
  114. package/dist/esm/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.js.map +1 -1
  115. package/dist/esm/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.js +2 -4
  116. package/dist/esm/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.js.map +1 -1
  117. package/dist/esm/cmem/markdown/Markdown.js.map +1 -1
  118. package/dist/esm/cmem/markdown/highlightSearchWords.js +5 -8
  119. package/dist/esm/cmem/markdown/highlightSearchWords.js.map +1 -1
  120. package/dist/esm/cmem/react-flow/nodes/StickyNoteNode.js.map +1 -1
  121. package/dist/esm/common/index.js +0 -2
  122. package/dist/esm/common/index.js.map +1 -1
  123. package/dist/esm/components/Accordion/Accordion.js +2 -7
  124. package/dist/esm/components/Accordion/Accordion.js.map +1 -1
  125. package/dist/esm/components/Accordion/AccordionItem.js +1 -2
  126. package/dist/esm/components/Accordion/AccordionItem.js.map +1 -1
  127. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js +133 -81
  128. package/dist/esm/components/AutoSuggestion/AutoSuggestion.js.map +1 -1
  129. package/dist/esm/components/AutoSuggestion/AutoSuggestionList.js.map +1 -1
  130. package/dist/esm/components/AutoSuggestion/ExtendedCodeEditor.js +36 -60
  131. package/dist/esm/components/AutoSuggestion/ExtendedCodeEditor.js.map +1 -1
  132. package/dist/esm/components/AutoSuggestion/extensions/markText.js +72 -0
  133. package/dist/esm/components/AutoSuggestion/extensions/markText.js.map +1 -0
  134. package/dist/esm/components/AutoSuggestion/index.js +1 -2
  135. package/dist/esm/components/AutoSuggestion/index.js.map +1 -1
  136. package/dist/esm/components/AutocompleteField/AutoCompleteField.js +3 -6
  137. package/dist/esm/components/AutocompleteField/AutoCompleteField.js.map +1 -1
  138. package/dist/esm/components/AutocompleteField/index.js +1 -0
  139. package/dist/esm/components/AutocompleteField/index.js.map +1 -1
  140. package/dist/esm/components/Breadcrumb/BreadcrumbList.js +2 -2
  141. package/dist/esm/components/Breadcrumb/BreadcrumbList.js.map +1 -1
  142. package/dist/esm/components/Button/Button.js.map +1 -1
  143. package/dist/esm/components/Card/CardHeader.js +2 -2
  144. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  145. package/dist/esm/components/CodeAutocompleteField/CodeAutocompleteField.js +2 -2
  146. package/dist/esm/components/CodeAutocompleteField/CodeAutocompleteField.js.map +1 -1
  147. package/dist/esm/components/Dialog/AlertDialog.js.map +1 -1
  148. package/dist/esm/components/Dialog/Modal.js +3 -3
  149. package/dist/esm/components/Dialog/Modal.js.map +1 -1
  150. package/dist/esm/components/Grid/Grid.js.map +1 -1
  151. package/dist/esm/components/Grid/GridColumn.js +1 -1
  152. package/dist/esm/components/Grid/GridColumn.js.map +1 -1
  153. package/dist/esm/components/Icon/Icon.js +1 -2
  154. package/dist/esm/components/Icon/Icon.js.map +1 -1
  155. package/dist/esm/components/Icon/canonicalIconNames.js.map +1 -1
  156. package/dist/esm/components/MultiSelect/MultiSelect.js +7 -15
  157. package/dist/esm/components/MultiSelect/MultiSelect.js.map +1 -1
  158. package/dist/esm/components/MultiSuggestField/MultiSuggestField.js +6 -1
  159. package/dist/esm/components/MultiSuggestField/MultiSuggestField.js.map +1 -1
  160. package/dist/esm/components/Notification/Notification.js +2 -6
  161. package/dist/esm/components/Notification/Notification.js.map +1 -1
  162. package/dist/esm/components/Select/Select.js +0 -6
  163. package/dist/esm/components/Select/Select.js.map +1 -1
  164. package/dist/esm/components/Spinner/Spinner.js.map +1 -1
  165. package/dist/esm/components/SuggestField/SuggestField.js +1 -1
  166. package/dist/esm/components/SuggestField/SuggestField.js.map +1 -1
  167. package/dist/esm/components/Table/Table.js +0 -3
  168. package/dist/esm/components/Table/Table.js.map +1 -1
  169. package/dist/esm/components/Tag/Tag.js +1 -0
  170. package/dist/esm/components/Tag/Tag.js.map +1 -1
  171. package/dist/esm/components/TextField/TextArea.js +2 -20
  172. package/dist/esm/components/TextField/TextArea.js.map +1 -1
  173. package/dist/esm/components/TextField/TextField.js +6 -24
  174. package/dist/esm/components/TextField/TextField.js.map +1 -1
  175. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  176. package/dist/esm/components/Typography/Highlighter.js +3 -6
  177. package/dist/esm/components/Typography/Highlighter.js.map +1 -1
  178. package/dist/esm/components/Typography/index.js +0 -7
  179. package/dist/esm/components/Typography/index.js.map +1 -1
  180. package/dist/esm/components/Workspace/WorkspaceContent.js +1 -1
  181. package/dist/esm/components/Workspace/WorkspaceContent.js.map +1 -1
  182. package/dist/esm/components/index.js +0 -1
  183. package/dist/esm/components/index.js.map +1 -1
  184. package/dist/esm/extensions/codemirror/CodeMirror.js +132 -83
  185. package/dist/esm/extensions/codemirror/CodeMirror.js.map +1 -1
  186. package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js +39 -0
  187. package/dist/esm/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.js.map +1 -0
  188. package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js +55 -0
  189. package/dist/esm/extensions/codemirror/tests/codemirrorTestHelper.js.map +1 -0
  190. package/dist/esm/extensions/react-flow/edges/edgeTypes.js +1 -1
  191. package/dist/esm/extensions/react-flow/edges/edgeTypes.js.map +1 -1
  192. package/dist/esm/extensions/react-flow/index.js +2 -12
  193. package/dist/esm/extensions/react-flow/index.js.map +1 -1
  194. package/dist/esm/extensions/react-flow/minimap/utils.js +4 -7
  195. package/dist/esm/extensions/react-flow/minimap/utils.js.map +1 -1
  196. package/dist/esm/extensions/react-flow/nodes/NodeContent.js +2 -10
  197. package/dist/esm/extensions/react-flow/nodes/NodeContent.js.map +1 -1
  198. package/dist/esm/extensions/react-flow/nodes/NodeDefault.js.map +1 -1
  199. package/dist/esm/extensions/react-flow/nodes/nodeTypes.js +1 -1
  200. package/dist/esm/extensions/react-flow/nodes/nodeTypes.js.map +1 -1
  201. package/dist/esm/index.js +1 -3
  202. package/dist/esm/index.js.map +1 -1
  203. package/dist/esm/legacy-replacements/Button/AffirmativeButton.js +1 -0
  204. package/dist/esm/legacy-replacements/Button/AffirmativeButton.js.map +1 -1
  205. package/dist/esm/legacy-replacements/Button/Button.js +2 -0
  206. package/dist/esm/legacy-replacements/Button/Button.js.map +1 -1
  207. package/dist/esm/legacy-replacements/Button/DismissiveButton.js +1 -0
  208. package/dist/esm/legacy-replacements/Button/DismissiveButton.js.map +1 -1
  209. package/dist/esm/legacy-replacements/Button/DisruptiveButton.js +1 -0
  210. package/dist/esm/legacy-replacements/Button/DisruptiveButton.js.map +1 -1
  211. package/dist/esm/legacy-replacements/Checkbox/Checkbox.js +2 -0
  212. package/dist/esm/legacy-replacements/Checkbox/Checkbox.js.map +1 -1
  213. package/dist/esm/legacy-replacements/Radio/RadioButton.js +2 -0
  214. package/dist/esm/legacy-replacements/Radio/RadioButton.js.map +1 -1
  215. package/dist/esm/legacy-replacements/Tabs/Tabs.js +1 -0
  216. package/dist/esm/legacy-replacements/Tabs/Tabs.js.map +1 -1
  217. package/dist/esm/legacy-replacements/TextField/TextField.js +2 -0
  218. package/dist/esm/legacy-replacements/TextField/TextField.js.map +1 -1
  219. package/dist/types/cmem/ActivityControl/ActivityControlTypes.d.ts +3 -5
  220. package/dist/types/cmem/ActivityControl/ActivityControlWidget.d.ts +0 -2
  221. package/dist/types/cmem/ActivityControl/SilkActivityControl.d.ts +7 -11
  222. package/dist/types/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.d.ts +3 -3
  223. package/dist/types/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.d.ts +1 -12
  224. package/dist/types/cmem/markdown/Markdown.d.ts +0 -1
  225. package/dist/types/cmem/markdown/highlightSearchWords.d.ts +0 -6
  226. package/dist/types/cmem/react-flow/nodes/StickyNoteNode.d.ts +2 -2
  227. package/dist/types/common/index.d.ts +0 -24
  228. package/dist/types/components/Accordion/Accordion.d.ts +1 -6
  229. package/dist/types/components/Accordion/AccordionItem.d.ts +1 -6
  230. package/dist/types/components/AutoSuggestion/AutoSuggestion.d.ts +27 -17
  231. package/dist/types/components/AutoSuggestion/AutoSuggestionList.d.ts +0 -1
  232. package/dist/types/components/AutoSuggestion/ExtendedCodeEditor.d.ts +10 -11
  233. package/dist/types/components/AutoSuggestion/extensions/markText.d.ts +16 -0
  234. package/dist/types/components/AutoSuggestion/index.d.ts +2 -2
  235. package/dist/types/components/AutocompleteField/AutoCompleteField.d.ts +11 -15
  236. package/dist/types/components/AutocompleteField/index.d.ts +1 -0
  237. package/dist/types/components/AutocompleteField/interfaces.d.ts +4 -2
  238. package/dist/types/components/Breadcrumb/BreadcrumbList.d.ts +1 -6
  239. package/dist/types/components/Button/Button.d.ts +0 -2
  240. package/dist/types/components/Card/CardHeader.d.ts +1 -9
  241. package/dist/types/components/Dialog/AlertDialog.d.ts +0 -1
  242. package/dist/types/components/Grid/Grid.d.ts +0 -5
  243. package/dist/types/components/Grid/GridColumn.d.ts +1 -6
  244. package/dist/types/components/Icon/BaseIcon.d.ts +2 -2
  245. package/dist/types/components/Icon/Icon.d.ts +0 -5
  246. package/dist/types/components/Icon/canonicalIconNames.d.ts +2 -7
  247. package/dist/types/components/MultiSelect/MultiSelect.d.ts +6 -8
  248. package/dist/types/components/MultiSuggestField/MultiSuggestField.d.ts +11 -2
  249. package/dist/types/components/Notification/Notification.d.ts +1 -14
  250. package/dist/types/components/Select/Select.d.ts +0 -3
  251. package/dist/types/components/Spinner/Spinner.d.ts +3 -3
  252. package/dist/types/components/SuggestField/SuggestField.d.ts +5 -0
  253. package/dist/types/components/SuggestField/index.d.ts +1 -1
  254. package/dist/types/components/Table/Table.d.ts +1 -4
  255. package/dist/types/components/Tag/Tag.d.ts +0 -5
  256. package/dist/types/components/TextField/TextArea.d.ts +1 -21
  257. package/dist/types/components/TextField/TextField.d.ts +3 -23
  258. package/dist/types/components/Tooltip/Tooltip.d.ts +2 -2
  259. package/dist/types/components/Typography/Highlighter.d.ts +3 -6
  260. package/dist/types/components/Typography/index.d.ts +0 -6
  261. package/dist/types/components/index.d.ts +0 -1
  262. package/dist/types/extensions/codemirror/CodeMirror.d.ts +54 -26
  263. package/dist/types/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.d.ts +23 -0
  264. package/dist/types/extensions/codemirror/tests/codemirrorTestHelper.d.ts +20 -0
  265. package/dist/types/extensions/react-flow/edges/edgeTypes.d.ts +1 -0
  266. package/dist/types/extensions/react-flow/index.d.ts +0 -14
  267. package/dist/types/extensions/react-flow/nodes/NodeContent.d.ts +6 -14
  268. package/dist/types/extensions/react-flow/nodes/NodeDefault.d.ts +0 -1
  269. package/dist/types/extensions/react-flow/nodes/nodeTypes.d.ts +1 -0
  270. package/dist/types/extensions/react-flow/nodes/sharedTypes.d.ts +0 -1
  271. package/dist/types/index.d.ts +1 -9
  272. package/dist/types/legacy-replacements/Button/AffirmativeButton.d.ts +1 -0
  273. package/dist/types/legacy-replacements/Button/Button.d.ts +1 -0
  274. package/dist/types/legacy-replacements/Button/DismissiveButton.d.ts +1 -0
  275. package/dist/types/legacy-replacements/Button/DisruptiveButton.d.ts +1 -0
  276. package/dist/types/legacy-replacements/Checkbox/Checkbox.d.ts +1 -0
  277. package/dist/types/legacy-replacements/Radio/RadioButton.d.ts +1 -0
  278. package/dist/types/legacy-replacements/Tabs/Tabs.d.ts +4 -2
  279. package/dist/types/legacy-replacements/TextField/TextField.d.ts +1 -0
  280. package/package.json +7 -4
  281. package/src/cmem/ActivityControl/ActivityControlTypes.ts +3 -7
  282. package/src/cmem/ActivityControl/ActivityControlWidget.tsx +0 -6
  283. package/src/cmem/ActivityControl/SilkActivityControl.tsx +8 -18
  284. package/src/cmem/ContentBlobToggler/StringPreviewContentBlobToggler.tsx +14 -11
  285. package/src/cmem/DateTimeDisplay/ElapsedDateTimeDisplay.tsx +11 -7
  286. package/src/cmem/DateTimeDisplay/tests/ElapsedDateTimeDisplay.test.tsx +9 -4
  287. package/src/cmem/markdown/Markdown.tsx +0 -2
  288. package/src/cmem/markdown/highlightSearchWords.test.ts +3 -2
  289. package/src/cmem/markdown/highlightSearchWords.ts +5 -10
  290. package/src/cmem/markdown/markdown.utils.ts +10 -10
  291. package/src/cmem/markdown/markdownutils.test.ts +9 -5
  292. package/src/cmem/react-flow/StickyNoteModal/StickyNoteModal.tsx +1 -1
  293. package/src/cmem/react-flow/nodes/StickyNoteNode.tsx +2 -2
  294. package/src/common/index.ts +0 -3
  295. package/src/components/Accordion/Accordion.tsx +0 -13
  296. package/src/components/Accordion/AccordionItem.tsx +0 -7
  297. package/src/components/Accordion/accordion.scss +0 -5
  298. package/src/components/AutoSuggestion/AutoSuggestion.scss +20 -17
  299. package/src/components/AutoSuggestion/AutoSuggestion.tsx +171 -100
  300. package/src/components/AutoSuggestion/AutoSuggestionList.tsx +0 -3
  301. package/src/components/AutoSuggestion/ExtendedCodeEditor.tsx +47 -83
  302. package/src/components/AutoSuggestion/extensions/markText.ts +63 -0
  303. package/src/components/AutoSuggestion/index.ts +2 -2
  304. package/src/components/AutoSuggestion/tests/ExtendedCodeEditor.test.tsx +13 -11
  305. package/src/components/AutocompleteField/AutoCompleteField.tsx +17 -19
  306. package/src/components/AutocompleteField/index.ts +1 -0
  307. package/src/components/AutocompleteField/interfaces.ts +5 -2
  308. package/src/components/Breadcrumb/BreadcrumbList.tsx +0 -7
  309. package/src/components/Button/Button.tsx +0 -5
  310. package/src/components/Card/CardHeader.tsx +2 -10
  311. package/src/components/CodeAutocompleteField/CodeAutocompleteField.stories.tsx +9 -3
  312. package/src/components/CodeAutocompleteField/CodeAutocompleteField.tsx +2 -2
  313. package/src/components/Dialog/AlertDialog.tsx +0 -3
  314. package/src/components/Dialog/Modal.tsx +3 -3
  315. package/src/components/Grid/Grid.tsx +0 -5
  316. package/src/components/Grid/GridColumn.tsx +0 -6
  317. package/src/components/Icon/BaseIcon.tsx +2 -2
  318. package/src/components/Icon/Icon.tsx +1 -5
  319. package/src/components/Icon/canonicalIconNames.tsx +3 -9
  320. package/src/components/MultiSelect/MultiSelect.tsx +9 -19
  321. package/src/components/MultiSuggestField/MultiSuggestField.stories.tsx +2 -2
  322. package/src/components/MultiSuggestField/MultiSuggestField.tsx +16 -3
  323. package/src/components/MultiSuggestField/tests/MultiSuggestField.test.tsx +6 -6
  324. package/src/components/Notification/Notification.tsx +2 -17
  325. package/src/components/Notification/notification.scss +1 -2
  326. package/src/components/Select/Select.tsx +0 -10
  327. package/src/components/Spinner/Spinner.tsx +3 -6
  328. package/src/components/SuggestField/SuggestField.tsx +6 -1
  329. package/src/components/Table/Table.tsx +2 -7
  330. package/src/components/Tag/Tag.tsx +1 -8
  331. package/src/components/TextField/TextArea.tsx +2 -45
  332. package/src/components/TextField/TextField.tsx +9 -51
  333. package/src/components/Tooltip/Tooltip.tsx +2 -2
  334. package/src/components/Typography/Highlighter.tsx +3 -6
  335. package/src/components/Typography/index.ts +0 -9
  336. package/src/components/Workspace/WorkspaceContent.tsx +1 -1
  337. package/src/components/index.ts +0 -1
  338. package/src/extensions/codemirror/CodeMirror.tsx +189 -106
  339. package/src/extensions/codemirror/_codemirror.scss +24 -41
  340. package/src/extensions/codemirror/hooks/useCodemirrorModeExtension.hooks.ts +44 -0
  341. package/src/extensions/codemirror/tests/codemirrorTestHelper.ts +57 -0
  342. package/src/extensions/react-flow/edges/edgeTypes.ts +1 -1
  343. package/src/extensions/react-flow/index.ts +2 -13
  344. package/src/extensions/react-flow/minimap/_minimap.scss +0 -22
  345. package/src/extensions/react-flow/minimap/utils.ts +2 -5
  346. package/src/extensions/react-flow/nodes/NodeContent.tsx +4 -27
  347. package/src/extensions/react-flow/nodes/NodeDefault.tsx +0 -3
  348. package/src/extensions/react-flow/nodes/_nodes.scss +0 -55
  349. package/src/extensions/react-flow/nodes/nodeTypes.ts +1 -1
  350. package/src/extensions/react-flow/nodes/sharedTypes.ts +0 -1
  351. package/src/index.ts +1 -3
  352. package/src/legacy-replacements/Button/AffirmativeButton.tsx +1 -0
  353. package/src/legacy-replacements/Button/Button.tsx +2 -0
  354. package/src/legacy-replacements/Button/DismissiveButton.tsx +1 -0
  355. package/src/legacy-replacements/Button/DisruptiveButton.tsx +1 -0
  356. package/src/legacy-replacements/Checkbox/Checkbox.tsx +2 -0
  357. package/src/legacy-replacements/Radio/RadioButton.tsx +2 -0
  358. package/src/legacy-replacements/Tabs/Tabs.tsx +5 -4
  359. package/src/legacy-replacements/TextField/TextField.tsx +2 -0
  360. package/dist/cjs/components/NumericInput/NumericInput.js +0 -9
  361. package/dist/cjs/components/NumericInput/NumericInput.js.map +0 -1
  362. package/dist/esm/components/NumericInput/NumericInput.js +0 -6
  363. package/dist/esm/components/NumericInput/NumericInput.js.map +0 -1
  364. package/dist/types/components/NumericInput/NumericInput.d.ts +0 -3
  365. package/src/components/AutoSuggestion/AutoSuggestion.stories.tsx +0 -14
  366. package/src/components/MultiSelect/MultiSelect.stories.tsx +0 -14
  367. package/src/components/NumericInput/NumericInput.tsx +0 -6
@@ -1,16 +1,17 @@
1
1
  import React, { useEffect, useMemo, useState } from "react";
2
2
  import { Classes as BlueprintClassNames } from "@blueprintjs/core";
3
- import CodeMirror, { Editor as CodeMirrorEditor, Position } from "codemirror";
3
+ import { EditorView, Rect } from "@codemirror/view";
4
4
  import { debounce } from "lodash";
5
5
 
6
6
  import { CLASSPREFIX as eccgui } from "../../configuration/constants";
7
+ import { SupportedCodeEditorModes } from "../../extensions/codemirror/hooks/useCodemirrorModeExtension.hooks";
7
8
 
8
9
  import { ContextOverlay, FieldItem, IconButton, Spinner, Toolbar, ToolbarSection } from "./../../";
10
+ import { markText, removeMarkFromText } from "./extensions/markText";
9
11
  import { AutoSuggestionList } from "./AutoSuggestionList";
10
12
  //custom components
11
13
  import ExtendedCodeEditor, { IRange } from "./ExtendedCodeEditor";
12
14
 
13
- const LINE_COLUMN_WIDTH = 29;
14
15
  const EXTRA_VERTICAL_PADDING = 10;
15
16
 
16
17
  export enum OVERWRITTEN_KEYS {
@@ -23,7 +24,7 @@ export enum OVERWRITTEN_KEYS {
23
24
  export type OverwrittenKeyTypes = (typeof OVERWRITTEN_KEYS)[keyof typeof OVERWRITTEN_KEYS];
24
25
 
25
26
  /** A single suggestion. */
26
- export interface ISuggestionBase {
27
+ export interface CodeAutocompleteFieldSuggestionBase {
27
28
  // The actual value
28
29
  value: string;
29
30
  // Optional human-readable label
@@ -32,8 +33,11 @@ export interface ISuggestionBase {
32
33
  description?: string;
33
34
  }
34
35
 
35
- /** Same as ISuggestionBase, but with the query that was used to fetch this suggestion. */
36
- export interface ISuggestionWithReplacementInfo extends ISuggestionBase {
36
+ /** @deprecated (v25) use CodeAutocompleteFieldSuggestionBase */
37
+ export type ISuggestionBase = CodeAutocompleteFieldSuggestionBase;
38
+
39
+ /** Same as CodeAutocompleteFieldSuggestionBase, but with the query that was used to fetch this suggestion. */
40
+ export interface CodeAutocompleteFieldSuggestionWithReplacementInfo extends CodeAutocompleteFieldSuggestionBase {
37
41
  // The query this result was filtered by
38
42
  query: string;
39
43
  // The offset of the original string that should be replaced
@@ -42,8 +46,11 @@ export interface ISuggestionWithReplacementInfo extends ISuggestionBase {
42
46
  length: number;
43
47
  }
44
48
 
49
+ /** @deprecated (v25) use CodeAutocompleteFieldSuggestionWithReplacementInfo */
50
+ export type ISuggestionWithReplacementInfo = CodeAutocompleteFieldSuggestionWithReplacementInfo;
51
+
45
52
  /** The suggestions for a specific substring of the given input string. */
46
- export interface IReplacementResult {
53
+ export interface CodeAutocompleteFieldReplacementResult {
47
54
  // The range of the input string that should be replaced
48
55
  replacementInterval: {
49
56
  from: number;
@@ -52,19 +59,25 @@ export interface IReplacementResult {
52
59
  // The extracted query from the local value at the cursor position of the path that was used to retrieve the suggestions.
53
60
  extractedQuery: string;
54
61
  // The suggested replacements for the substring that should be replaced.
55
- replacements: ISuggestionBase[];
62
+ replacements: CodeAutocompleteFieldSuggestionBase[];
56
63
  }
57
64
 
58
- export interface IPartialAutoCompleteResult {
65
+ /** @deprecated (v25) use CodeAutocompleteFieldReplacementResult */
66
+ export type IReplacementResult = CodeAutocompleteFieldReplacementResult;
67
+
68
+ export interface CodeAutocompleteFieldPartialAutoCompleteResult {
59
69
  // Repeats the input string from the corresponding request
60
70
  inputString: string;
61
71
  // Repeats the cursor position from the corresponding request
62
72
  cursorPosition: number;
63
- replacementResults: IReplacementResult[];
73
+ replacementResults: CodeAutocompleteFieldReplacementResult[];
64
74
  }
65
75
 
76
+ /** @deprecated (v25) use CodeAutocompleteFieldPartialAutoCompleteResult */
77
+ export type IPartialAutoCompleteResult = CodeAutocompleteFieldPartialAutoCompleteResult;
78
+
66
79
  /** Validation result */
67
- export interface IValidationResult {
80
+ export interface CodeAutocompleteFieldValidationResult {
68
81
  // If the input value is valid or not
69
82
  valid: boolean;
70
83
  parseError?: {
@@ -77,6 +90,12 @@ export interface IValidationResult {
77
90
  };
78
91
  }
79
92
 
93
+ /** @deprecated (v25) use CodeAutocompleteFieldValidationResult */
94
+ export type IValidationResult = CodeAutocompleteFieldValidationResult;
95
+
96
+ /**
97
+ * @deprecated (v25) use `CodeAutocompleteFieldProps` instead.
98
+ */
80
99
  export interface AutoSuggestionProps {
81
100
  /** Additional class name.
82
101
  */
@@ -95,10 +114,14 @@ export interface AutoSuggestionProps {
95
114
  fetchSuggestions: (
96
115
  inputString: string,
97
116
  cursorPosition: number
98
- ) => (IPartialAutoCompleteResult | undefined) | Promise<IPartialAutoCompleteResult | undefined>;
117
+ ) =>
118
+ | (CodeAutocompleteFieldPartialAutoCompleteResult | undefined)
119
+ | Promise<CodeAutocompleteFieldPartialAutoCompleteResult | undefined>;
99
120
  /** Checks if the input is valid
100
121
  */
101
- checkInput?: (inputString: string) => IValidationResult | Promise<IValidationResult | undefined>;
122
+ checkInput?: (
123
+ inputString: string
124
+ ) => CodeAutocompleteFieldValidationResult | Promise<CodeAutocompleteFieldValidationResult | undefined>;
102
125
  /** Called with the input validation result
103
126
  */
104
127
  onInputChecked?: (validInput: boolean) => any;
@@ -137,24 +160,18 @@ export interface AutoSuggestionProps {
137
160
  */
138
161
  multiline?: boolean;
139
162
  // The editor theme, e.g. "sparql"
140
- mode?: string;
163
+ mode?: SupportedCodeEditorModes;
141
164
  }
142
165
 
143
- // @deprecated
144
- export type IProps = AutoSuggestionProps;
145
-
146
166
  // Meta data regarding a request
147
167
  interface RequestMetaData {
148
168
  requestId: string | undefined;
149
169
  }
150
170
 
151
171
  /**
152
- * **Element is deprecated.**
153
- * Use `CodeAutocompleteField` as replacement.
154
- *
155
- * @deprecated
172
+ * @deprecated (support already removed) use `CodeAutocompleteField` as replacement.
156
173
  */
157
- export const AutoSuggestion = ({
174
+ const AutoSuggestion = ({
158
175
  className,
159
176
  label,
160
177
  initialValue,
@@ -173,31 +190,37 @@ export const AutoSuggestion = ({
173
190
  showScrollBar = true,
174
191
  autoCompletionRequestDelay = 1000,
175
192
  validationRequestDelay = 200,
176
- mode = "null",
193
+ mode,
177
194
  multiline = false,
178
195
  }: AutoSuggestionProps) => {
179
196
  const value = React.useRef<string>(initialValue);
180
197
  const cursorPosition = React.useRef(0);
181
198
  const dropdownXYoffset = React.useRef<{ x: number; y: number }>({ x: 0, y: 0 });
182
199
  const [shouldShowDropdown, setShouldShowDropdown] = React.useState(false);
183
- const [suggestions, setSuggestions] = React.useState<ISuggestionWithReplacementInfo[]>([]);
200
+ const [suggestions, setSuggestions] = React.useState<CodeAutocompleteFieldSuggestionWithReplacementInfo[]>([]);
184
201
  const [suggestionsPending, setSuggestionsPending] = React.useState(false);
185
202
  const suggestionRequestData = React.useRef<RequestMetaData>({ requestId: undefined });
186
203
  const [pathValidationPending, setPathValidationPending] = React.useState(false);
187
204
  const validationRequestData = React.useRef<RequestMetaData>({ requestId: undefined });
188
- const [, setErrorMarkers] = React.useState<CodeMirror.TextMarker[]>([]);
189
- const [validationResponse, setValidationResponse] = useState<IValidationResult | undefined>(undefined);
190
- const [suggestionResponse, setSuggestionResponse] = useState<IPartialAutoCompleteResult | undefined>(undefined);
205
+ const [, setErrorMarkers] = React.useState<any[]>([]);
206
+ const [validationResponse, setValidationResponse] = useState<CodeAutocompleteFieldValidationResult | undefined>(
207
+ undefined
208
+ );
209
+ const [suggestionResponse, setSuggestionResponse] = useState<
210
+ CodeAutocompleteFieldPartialAutoCompleteResult | undefined
211
+ >(undefined);
191
212
  // The element that should be used for replacement highlighting
192
- const [highlightedElement, setHighlightedElement] = useState<ISuggestionWithReplacementInfo | undefined>(undefined);
193
- const [editorInstance, setEditorInstance] = React.useState<CodeMirror.Editor>();
213
+ const [highlightedElement, setHighlightedElement] = useState<
214
+ CodeAutocompleteFieldSuggestionWithReplacementInfo | undefined
215
+ >(undefined);
216
+ const [cm, setCM] = React.useState<EditorView>();
194
217
  const isFocused = React.useRef(false);
195
218
  const autoSuggestionDivRef = React.useRef<HTMLDivElement>(null);
196
219
  /** Mutable editor state, since this needs to be current in scope of the SingleLineEditorComponent. */
197
220
  const [editorState] = React.useState<{
198
221
  index: number;
199
- suggestions: ISuggestionWithReplacementInfo[];
200
- editorInstance?: CodeMirror.Editor;
222
+ suggestions: CodeAutocompleteFieldSuggestionWithReplacementInfo[];
223
+ cm?: EditorView;
201
224
  dropdownShown: boolean;
202
225
  }>({ index: 0, suggestions: [], dropdownShown: false });
203
226
  /** This is for the AutoSuggestionList component in order to re-render. */
@@ -213,14 +236,19 @@ export const AutoSuggestion = ({
213
236
  const currentIndex = () => editorState.index;
214
237
 
215
238
  React.useEffect(() => {
216
- editorState.editorInstance = editorInstance;
217
- }, [editorInstance, editorState]);
239
+ editorState.cm = cm;
240
+ }, [cm, editorState]);
241
+
242
+ const dispatch = // eslint-disable-next-line @typescript-eslint/no-empty-function
243
+ (typeof editorState?.cm?.dispatch === "function" ? editorState?.cm?.dispatch : () => {}) as EditorView["dispatch"];
218
244
 
219
245
  React.useEffect(() => {
220
- if (initialValue != null) {
221
- editorInstance?.setValue(initialValue);
246
+ if (initialValue != null && cm) {
247
+ dispatch({
248
+ changes: { from: 0, to: cm?.state?.doc.length, insert: initialValue },
249
+ });
222
250
  }
223
- }, [initialValue, editorInstance]);
251
+ }, [initialValue, cm]);
224
252
 
225
253
  React.useEffect(() => {
226
254
  editorState.dropdownShown = shouldShowDropdown;
@@ -228,51 +256,61 @@ export const AutoSuggestion = ({
228
256
 
229
257
  // Handle replacement highlighting
230
258
  useEffect(() => {
231
- if (highlightedElement && editorInstance) {
259
+ if (highlightedElement && cm) {
232
260
  const { from, length } = highlightedElement;
233
261
  if (length > 0 && selectedTextRanges.current.length === 0) {
234
262
  const to = from + length;
235
- const cursor = editorState.editorInstance?.getCursor();
236
- const marker = editorInstance.markText(
237
- { line: cursor?.line ?? 0, ch: from },
238
- { line: cursor?.line ?? 0, ch: to },
239
- { className: `${eccgui}-autosuggestion__text--highlighted` }
240
- );
241
- return () => marker.clear();
263
+ const { toOffset, fromOffset } = getOffsetRange(cm, from, to);
264
+ markText({
265
+ view: cm,
266
+ from: fromOffset,
267
+ to: toOffset,
268
+ className: `${eccgui}-autosuggestion__text--highlighted`,
269
+ });
270
+ return () => removeMarkFromText({ view: cm, from, to });
242
271
  }
272
+ } else {
273
+ //remove redundant markers
274
+ cm && removeMarkFromText({ view: cm, from: 0, to: cm.state?.doc.length });
243
275
  }
244
276
  return;
245
- }, [highlightedElement, selectedTextRanges, editorInstance]);
277
+ }, [highlightedElement, selectedTextRanges, cm]);
246
278
 
247
279
  //handle linting
248
280
  React.useEffect(() => {
249
281
  const parseError = validationResponse?.parseError;
250
- if (parseError && editorInstance) {
251
- const { message, start, end } = parseError;
252
- editorInstance.getDoc().getEditor();
253
- const marker = editorInstance.markText(
254
- { line: 0, ch: start },
255
- { line: 0, ch: end },
256
- { className: `${eccgui}-autosuggestion__text--highlighted-error`, title: message }
257
- );
258
- setErrorMarkers((previousMarkers) => {
259
- previousMarkers.forEach((marker) => marker.clear());
260
- return [marker];
261
- });
262
- } else {
263
- // Valid, clear all error markers
264
- setErrorMarkers((previous) => {
265
- previous.forEach((marker) => marker.clear());
266
- return [];
267
- });
282
+ if (cm) {
283
+ if (parseError) {
284
+ const { message, start, end } = parseError;
285
+ const { toOffset, fromOffset } = getOffsetRange(cm, start, end);
286
+ const { from, to } = markText({
287
+ view: cm,
288
+ from: fromOffset,
289
+ to: toOffset,
290
+ className: `${eccgui}-autosuggestion__text--highlighted-error`,
291
+ title: message,
292
+ });
293
+
294
+ setErrorMarkers((previousMarkers) => {
295
+ previousMarkers.forEach((m) => removeMarkFromText({ view: cm, from: m.from, to: m.to }));
296
+ return [from, to];
297
+ });
298
+ } else {
299
+ // Valid, clear all error markers
300
+ setErrorMarkers((previous) => {
301
+ previous.forEach((m) => removeMarkFromText({ view: cm, from: m.from, to: m.to }));
302
+ return [];
303
+ });
304
+ }
268
305
  }
306
+
269
307
  const isValid = validationResponse?.valid === undefined || validationResponse.valid;
270
308
  onInputChecked && onInputChecked(isValid);
271
- }, [validationResponse?.valid, validationResponse?.parseError, editorInstance, onInputChecked]);
309
+ }, [validationResponse?.valid, validationResponse?.parseError, cm, onInputChecked]);
272
310
 
273
311
  /** generate suggestions and also populate the replacement indexes dict */
274
312
  React.useEffect(() => {
275
- let newSuggestions: ISuggestionWithReplacementInfo[] = [];
313
+ let newSuggestions: CodeAutocompleteFieldSuggestionWithReplacementInfo[] = [];
276
314
  if (
277
315
  suggestionResponse?.replacementResults?.length === 1 &&
278
316
  !suggestionResponse?.replacementResults[0]?.replacements?.length
@@ -300,6 +338,17 @@ export const AutoSuggestion = ({
300
338
  editorState.index = 0;
301
339
  }, [suggestionResponse, editorState]);
302
340
 
341
+ const getOffsetRange = (cm: EditorView, from: number, to: number) => {
342
+ if (!cm) return { fromOffset: 0, toOffset: 0 };
343
+ const cursor = cm.state.selection.main.head;
344
+ const cursorLine = cm.state.doc.lineAt(cursor).number;
345
+ const offsetFromFirstLine = cm.state.doc.line(cursorLine).from; //all characters including line breaks
346
+ const fromOffset = offsetFromFirstLine + from;
347
+ const toOffset = offsetFromFirstLine + to;
348
+
349
+ return { fromOffset, toOffset };
350
+ };
351
+
303
352
  const inputactionsDisplayed = React.useCallback((node) => {
304
353
  if (!node) return;
305
354
  const width = node.offsetWidth;
@@ -321,7 +370,7 @@ export const AutoSuggestion = ({
321
370
  validationRequestData.current.requestId = inputString;
322
371
  setPathValidationPending(true);
323
372
  try {
324
- const result: IValidationResult | undefined = await checkInput(inputString);
373
+ const result: CodeAutocompleteFieldValidationResult | undefined = await checkInput(inputString);
325
374
  setValidationResponse(result);
326
375
  } catch (e) {
327
376
  setValidationResponse(undefined);
@@ -341,16 +390,17 @@ export const AutoSuggestion = ({
341
390
  const asyncHandleEditorInputChange = useMemo(
342
391
  () => async (inputString: string, cursorPosition: number) => {
343
392
  const requestId = `${inputString} ${cursorPosition}`;
344
- if (requestId === suggestionRequestData.current.requestId) {
393
+ if (requestId === suggestionRequestData.current.requestId || !editorState?.cm) {
345
394
  return;
346
395
  }
347
396
  suggestionRequestData.current.requestId = requestId;
348
397
  setSuggestionsPending(true);
349
398
  try {
350
- const pos = editorState.editorInstance?.getCursor();
351
- if (pos) {
352
- const result: IPartialAutoCompleteResult | undefined = await fetchSuggestions(
353
- inputString.split("\n")[pos.line],
399
+ const cursor = editorState?.cm.state.selection.main.head; ///actual cursor position
400
+ const cursorLine = editorState?.cm.state.doc.lineAt(cursor ?? 0).number;
401
+ if (cursorLine) {
402
+ const result: CodeAutocompleteFieldPartialAutoCompleteResult | undefined = await fetchSuggestions(
403
+ inputString.split("\n")[cursorLine - 1], //line starts from 1
354
404
  cursorPosition
355
405
  );
356
406
  if (value.current === inputString) {
@@ -364,7 +414,7 @@ export const AutoSuggestion = ({
364
414
  setSuggestionsPending(false);
365
415
  }
366
416
  },
367
- [fetchSuggestions]
417
+ [fetchSuggestions, cm]
368
418
  );
369
419
 
370
420
  const handleEditorInputChange = useMemo(
@@ -384,40 +434,47 @@ export const AutoSuggestion = ({
384
434
  onChange(val);
385
435
  };
386
436
 
387
- const handleCursorChange = (pos: Position, coords: any, scrollinfo: any) => {
388
- cursorPosition.current = pos.ch;
437
+ const handleCursorChange = (cursor: number, coords: Rect, scrollinfo: HTMLElement, view: EditorView) => {
438
+ //cursor here is offset from line 1, autosuggestion works with cursor per-line.
439
+ // derived cursor is current cursor position - start of line of cursor
440
+ const cursorLine = view.state.doc.lineAt(cursor).number;
441
+ const offsetFromFirstLine = view.state.doc.line(cursorLine).from; //;
442
+ cursorPosition.current = cursor - offsetFromFirstLine;
389
443
  // cursor change is fired after onChange, so we put the auto-complete logic here
444
+ //get value at line
390
445
  if (isFocused.current) {
391
446
  setShouldShowDropdown(true);
392
447
  handleEditorInputChange.cancel();
393
448
  handleEditorInputChange(value.current, cursorPosition.current);
394
449
  }
395
450
 
396
- const boxOffsetHeight = autoSuggestionDivRef.current?.offsetHeight ?? 0;
397
-
398
451
  setTimeout(() => {
399
452
  dropdownXYoffset.current = {
400
- x:
401
- Math.min(coords.left, Math.max(coords.left - scrollinfo.left, 0)) +
402
- (multiline ? LINE_COLUMN_WIDTH : 0),
453
+ x: Math.min(coords.left, Math.max(coords.left - scrollinfo?.scrollLeft, 0)),
403
454
  y: multiline
404
- ? -(boxOffsetHeight - Math.min(coords.bottom, Math.max(coords.bottom - scrollinfo.top, 0))) +
455
+ ? Math.min(coords.bottom, Math.max(coords.bottom - scrollinfo?.scrollTop, 0)) +
405
456
  EXTRA_VERTICAL_PADDING
406
457
  : 0,
407
458
  };
408
459
  }, 1);
409
460
  };
410
461
 
411
- const handleInputEditorKeyPress = (event: KeyboardEvent) => {
462
+ //todo check out typings for event type
463
+ const handleInputEditorKeyPress = (event: any) => {
412
464
  const overWrittenKeys: Array<string> = Object.values(OVERWRITTEN_KEYS);
413
465
  if (overWrittenKeys.includes(event.key) && (useTabForCompletions || event.key !== OVERWRITTEN_KEYS.Tab)) {
414
466
  //don't prevent when enter should create new line (multiline config) and dropdown isn't shown
415
467
  const allowDefaultEnterKeyPressBehavior = multiline && !editorState.suggestions.length;
468
+ const overwrittenKey = OVERWRITTEN_KEYS[event.key as keyof typeof OVERWRITTEN_KEYS];
416
469
  if (!allowDefaultEnterKeyPressBehavior) {
417
470
  event.preventDefault();
471
+ makeDropDownRespondToKeyPress(overwrittenKey);
472
+ return true; //prevent new line
418
473
  }
419
- makeDropDownRespondToKeyPress(OVERWRITTEN_KEYS[event.key as keyof typeof OVERWRITTEN_KEYS]);
474
+ makeDropDownRespondToKeyPress(overwrittenKey);
475
+ return false; // allow new line if enter
420
476
  }
477
+ return true;
421
478
  };
422
479
 
423
480
  const closeDropDown = () => {
@@ -425,27 +482,37 @@ export const AutoSuggestion = ({
425
482
  setShouldShowDropdown(false);
426
483
  };
427
484
 
428
- const handleDropdownChange = (selectedSuggestion: ISuggestionWithReplacementInfo) => {
429
- if (selectedSuggestion && editorState.editorInstance) {
485
+ const handleDropdownChange = (selectedSuggestion: CodeAutocompleteFieldSuggestionWithReplacementInfo) => {
486
+ if (selectedSuggestion && editorState.cm) {
430
487
  const { from, length, value } = selectedSuggestion;
431
- const cursor = editorState.editorInstance.getCursor();
488
+ // const cursor = editorState.editorInstance.getCursor();
489
+ const cursor = editorState.cm?.state.selection.main.head;
432
490
  const to = from + length;
433
- editorState.editorInstance.replaceRange(
434
- selectedSuggestion.value,
435
- { line: cursor.line, ch: from },
436
- { line: cursor.line, ch: to }
437
- );
491
+
492
+ const { fromOffset, toOffset } = getOffsetRange(editorState.cm, from, to);
493
+ editorState.cm.dispatch({
494
+ changes: {
495
+ from: fromOffset,
496
+ to: toOffset,
497
+ insert: value,
498
+ },
499
+ });
438
500
  closeDropDown();
439
- editorState.editorInstance.setCursor({ line: cursor.line, ch: from + value.length });
440
- editorState.editorInstance.focus();
501
+ const cursorLine = editorState.cm.state.doc.lineAt(cursor).number;
502
+ const newCursorPos = editorState.cm.state.doc.line(cursorLine).from + (from + value.length);
503
+
504
+ editorState.cm.dispatch({ selection: { anchor: newCursorPos } });
505
+ editorState.cm.focus();
441
506
  }
442
507
  };
443
508
 
444
509
  const handleInputEditorClear = () => {
445
- editorInstance?.setValue("");
510
+ dispatch({
511
+ changes: { from: 0, to: cm?.state.doc.length, insert: "" },
512
+ });
446
513
  cursorPosition.current = 0;
447
514
  handleChange("");
448
- editorInstance?.focus();
515
+ cm?.focus();
449
516
  };
450
517
 
451
518
  const handleInputFocus = (focusState: boolean) => {
@@ -464,9 +531,10 @@ export const AutoSuggestion = ({
464
531
  }
465
532
  };
466
533
 
467
- const handleInputMouseDown = React.useCallback((editor: CodeMirrorEditor) => {
468
- const currentLine = editorState.editorInstance?.getCursor()?.line;
469
- const clickedLine = editor.getCursor()?.line;
534
+ const handleInputMouseDown = React.useCallback((editor: EditorView) => {
535
+ const cursor = editorState.cm?.state.selection.main.head;
536
+ const currentLine = editorState.cm?.state.doc.lineAt(cursor ?? 0).number;
537
+ const clickedLine = editor?.state.doc.lineAt(cursor ?? 0).number;
470
538
  //Clicking on a different line other than the current line
471
539
  //where the dropdown already suggests should close the dropdown
472
540
  if (currentLine !== clickedLine) {
@@ -527,9 +595,12 @@ export const AutoSuggestion = ({
527
595
  }
528
596
  };
529
597
 
530
- const handleItemHighlighting = React.useCallback((item: ISuggestionWithReplacementInfo | undefined) => {
531
- setHighlightedElement(item);
532
- }, []);
598
+ const handleItemHighlighting = React.useCallback(
599
+ (item: CodeAutocompleteFieldSuggestionWithReplacementInfo | undefined) => {
600
+ setHighlightedElement(item);
601
+ },
602
+ []
603
+ );
533
604
 
534
605
  const onSelection = React.useMemo(
535
606
  () => (ranges: IRange[]) => {
@@ -573,7 +644,7 @@ export const AutoSuggestion = ({
573
644
  >
574
645
  <ExtendedCodeEditor
575
646
  mode={mode}
576
- setEditorInstance={setEditorInstance}
647
+ setCM={setCM}
577
648
  onChange={handleChange}
578
649
  onCursorChange={handleCursorChange}
579
650
  initialValue={initialValue}
@@ -34,9 +34,6 @@ export interface AutoSuggestionListProps extends Omit<React.HTMLAttributes<HTMLD
34
34
  offsetValues?: { x: number; y: number };
35
35
  }
36
36
 
37
- // @deprecated
38
- export type IDropdownProps = AutoSuggestionListProps;
39
-
40
37
  const ListItem = ({ item }: any, ref: any) => {
41
38
  const listItem = (
42
39
  <OverviewItem densityHigh={true}>