@gooddata/sdk-ui-kit 10.28.0-alpha.9 → 10.28.0-alpha.91

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 (244) hide show
  1. package/esm/@ui/@types/size.d.ts +4 -0
  2. package/esm/@ui/@types/size.d.ts.map +1 -1
  3. package/esm/@ui/@types/size.js +1 -0
  4. package/esm/@ui/@types/size.js.map +1 -1
  5. package/esm/@ui/@utils/keyboardNavigation.d.ts +44 -12
  6. package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
  7. package/esm/@ui/@utils/keyboardNavigation.js +55 -65
  8. package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
  9. package/esm/@ui/UiButton/UiButton.d.ts +8 -1
  10. package/esm/@ui/UiButton/UiButton.d.ts.map +1 -1
  11. package/esm/@ui/UiButton/UiButton.js +9 -4
  12. package/esm/@ui/UiButton/UiButton.js.map +1 -1
  13. package/esm/@ui/UiChip/UiChip.d.ts +3 -1
  14. package/esm/@ui/UiChip/UiChip.d.ts.map +1 -1
  15. package/esm/@ui/UiChip/UiChip.js +3 -3
  16. package/esm/@ui/UiChip/UiChip.js.map +1 -1
  17. package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
  18. package/esm/@ui/UiFocusTrap/UiFocusTrap.js +4 -1
  19. package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
  20. package/esm/@ui/UiIconButton/UiIconButton.d.ts +3 -2
  21. package/esm/@ui/UiIconButton/UiIconButton.d.ts.map +1 -1
  22. package/esm/@ui/UiIconButton/UiIconButton.js +26 -3
  23. package/esm/@ui/UiIconButton/UiIconButton.js.map +1 -1
  24. package/esm/@ui/UiListbox/UiListbox.d.ts +1 -1
  25. package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
  26. package/esm/@ui/UiListbox/UiListbox.js +6 -7
  27. package/esm/@ui/UiListbox/UiListbox.js.map +1 -1
  28. package/esm/@ui/UiListbox/types.d.ts +1 -0
  29. package/esm/@ui/UiListbox/types.d.ts.map +1 -1
  30. package/esm/@ui/UiMenu/UiMenu.d.ts +1 -1
  31. package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
  32. package/esm/@ui/UiMenu/UiMenu.js +26 -6
  33. package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
  34. package/esm/@ui/UiMenu/components/Item.d.ts +4 -0
  35. package/esm/@ui/UiMenu/components/Item.d.ts.map +1 -0
  36. package/esm/@ui/UiMenu/components/Item.js +26 -0
  37. package/esm/@ui/UiMenu/components/Item.js.map +1 -0
  38. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts +10 -0
  39. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts.map +1 -0
  40. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js +29 -0
  41. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js.map +1 -0
  42. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts +12 -0
  43. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts.map +1 -0
  44. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js +60 -0
  45. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js.map +1 -0
  46. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts +7 -0
  47. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts.map +1 -0
  48. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js → components/defaults/DefaultUiMenuGroupItem.js} +5 -5
  49. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js.map → components/defaults/DefaultUiMenuGroupItem.js.map} +1 -1
  50. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts +8 -0
  51. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts.map +1 -0
  52. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js +49 -0
  53. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js.map +1 -0
  54. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts +11 -0
  55. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts.map +1 -0
  56. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuInteractiveItemComponent.js → components/defaults/DefaultUiMenuInteractiveItem.js} +7 -7
  57. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.js.map +1 -0
  58. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts +8 -0
  59. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts.map +1 -0
  60. package/esm/@ui/UiMenu/{defaults/DefaultUiMenuStaticItemComponent.js → components/defaults/DefaultUiMenuStaticItem.js} +3 -3
  61. package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.js.map +1 -0
  62. package/esm/@ui/UiMenu/context.d.ts +6 -2
  63. package/esm/@ui/UiMenu/context.d.ts.map +1 -1
  64. package/esm/@ui/UiMenu/context.js +10 -0
  65. package/esm/@ui/UiMenu/context.js.map +1 -1
  66. package/esm/@ui/UiMenu/hooks.d.ts +10 -4
  67. package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
  68. package/esm/@ui/UiMenu/hooks.js +90 -37
  69. package/esm/@ui/UiMenu/hooks.js.map +1 -1
  70. package/esm/@ui/UiMenu/itemUtils.d.ts +60 -1
  71. package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
  72. package/esm/@ui/UiMenu/itemUtils.js +69 -1
  73. package/esm/@ui/UiMenu/itemUtils.js.map +1 -1
  74. package/esm/@ui/UiMenu/types.d.ts +65 -18
  75. package/esm/@ui/UiMenu/types.d.ts.map +1 -1
  76. package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts +21 -0
  77. package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts.map +1 -0
  78. package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js +128 -0
  79. package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js.map +1 -0
  80. package/esm/Button/Button.d.ts.map +1 -1
  81. package/esm/Button/Button.js +10 -3
  82. package/esm/Button/Button.js.map +1 -1
  83. package/esm/Button/typings.d.ts +2 -0
  84. package/esm/Button/typings.d.ts.map +1 -1
  85. package/esm/Dialog/DialogCloseButton.d.ts +3 -0
  86. package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
  87. package/esm/Dialog/DialogCloseButton.js +6 -2
  88. package/esm/Dialog/DialogCloseButton.js.map +1 -1
  89. package/esm/Dialog/DialogList/DialogListItemBasic.d.ts.map +1 -1
  90. package/esm/Dialog/DialogList/DialogListItemBasic.js +7 -4
  91. package/esm/Dialog/DialogList/DialogListItemBasic.js.map +1 -1
  92. package/esm/Dialog/DialogList/typings.d.ts +1 -0
  93. package/esm/Dialog/DialogList/typings.d.ts.map +1 -1
  94. package/esm/Dialog/DialogList/typings.js +1 -1
  95. package/esm/Dialog/DialogList/typings.js.map +1 -1
  96. package/esm/Dialog/ExportDialogBase.js +3 -3
  97. package/esm/Dialog/ExportDialogBase.js.map +1 -1
  98. package/esm/Dialog/index.d.ts +1 -0
  99. package/esm/Dialog/index.d.ts.map +1 -1
  100. package/esm/Dialog/index.js +2 -1
  101. package/esm/Dialog/index.js.map +1 -1
  102. package/esm/Dialog/typings.d.ts +5 -3
  103. package/esm/Dialog/typings.d.ts.map +1 -1
  104. package/esm/Dropdown/Dropdown.d.ts +1 -0
  105. package/esm/Dropdown/Dropdown.d.ts.map +1 -1
  106. package/esm/Dropdown/Dropdown.js +19 -20
  107. package/esm/Dropdown/Dropdown.js.map +1 -1
  108. package/esm/Header/generateHeaderAccountMenuItems.d.ts +0 -4
  109. package/esm/Header/generateHeaderAccountMenuItems.d.ts.map +1 -1
  110. package/esm/Header/generateHeaderAccountMenuItems.js +2 -6
  111. package/esm/Header/generateHeaderAccountMenuItems.js.map +1 -1
  112. package/esm/List/ListItem.d.ts +1 -0
  113. package/esm/List/ListItem.d.ts.map +1 -1
  114. package/esm/List/ListItem.js +4 -3
  115. package/esm/List/ListItem.js.map +1 -1
  116. package/esm/List/MenuList.d.ts.map +1 -1
  117. package/esm/List/MenuList.js +2 -2
  118. package/esm/List/MenuList.js.map +1 -1
  119. package/esm/List/guid.d.ts.map +1 -1
  120. package/esm/List/guid.js +5 -2
  121. package/esm/List/guid.js.map +1 -1
  122. package/esm/Menu/menuOpener/MenuOpener.js +2 -2
  123. package/esm/Menu/menuOpener/MenuOpener.js.map +1 -1
  124. package/esm/Overlay/Overlay.d.ts.map +1 -1
  125. package/esm/Overlay/Overlay.js +6 -2
  126. package/esm/Overlay/Overlay.js.map +1 -1
  127. package/esm/RecurrenceForm/DateTime.d.ts +1 -0
  128. package/esm/RecurrenceForm/DateTime.d.ts.map +1 -1
  129. package/esm/RecurrenceForm/DateTime.js +3 -3
  130. package/esm/RecurrenceForm/DateTime.js.map +1 -1
  131. package/esm/RecurrenceForm/Recurrence.d.ts +1 -0
  132. package/esm/RecurrenceForm/Recurrence.d.ts.map +1 -1
  133. package/esm/RecurrenceForm/Recurrence.js +2 -2
  134. package/esm/RecurrenceForm/Recurrence.js.map +1 -1
  135. package/esm/RecurrenceForm/RecurrenceForm.d.ts +1 -0
  136. package/esm/RecurrenceForm/RecurrenceForm.d.ts.map +1 -1
  137. package/esm/RecurrenceForm/RecurrenceForm.js +3 -3
  138. package/esm/RecurrenceForm/RecurrenceForm.js.map +1 -1
  139. package/esm/RecurrenceForm/RepeatTypeSelect.d.ts +1 -0
  140. package/esm/RecurrenceForm/RepeatTypeSelect.d.ts.map +1 -1
  141. package/esm/RecurrenceForm/RepeatTypeSelect.js +16 -6
  142. package/esm/RecurrenceForm/RepeatTypeSelect.js.map +1 -1
  143. package/esm/RecurrenceForm/constants.d.ts +0 -1
  144. package/esm/RecurrenceForm/constants.d.ts.map +1 -1
  145. package/esm/RecurrenceForm/constants.js +0 -1
  146. package/esm/RecurrenceForm/constants.js.map +1 -1
  147. package/esm/Timepicker/Timepicker.d.ts +1 -0
  148. package/esm/Timepicker/Timepicker.d.ts.map +1 -1
  149. package/esm/Timepicker/Timepicker.js +19 -8
  150. package/esm/Timepicker/Timepicker.js.map +1 -1
  151. package/esm/ZoomContext/ZoomContext.js +6 -6
  152. package/esm/ZoomContext/ZoomContext.js.map +1 -1
  153. package/esm/index.d.ts +16 -7
  154. package/esm/index.d.ts.map +1 -1
  155. package/esm/index.js +12 -4
  156. package/esm/index.js.map +1 -1
  157. package/esm/responsive/useMediaQuery.d.ts.map +1 -1
  158. package/esm/responsive/useMediaQuery.js +3 -1
  159. package/esm/responsive/useMediaQuery.js.map +1 -1
  160. package/esm/sdk-ui-kit.d.ts +365 -79
  161. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts +14 -5
  162. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts.map +1 -1
  163. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js +5 -1
  164. package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js.map +1 -1
  165. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts +18 -0
  166. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts.map +1 -0
  167. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js +66 -0
  168. package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js.map +1 -0
  169. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts +8 -0
  170. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts.map +1 -0
  171. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js +21 -0
  172. package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js.map +1 -0
  173. package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts +12 -9
  174. package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts.map +1 -1
  175. package/esm/syntaxHighlightingInput/hooks/useCodemirror.js +42 -96
  176. package/esm/syntaxHighlightingInput/hooks/useCodemirror.js.map +1 -1
  177. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts +4 -0
  178. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts.map +1 -0
  179. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js +35 -0
  180. package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js.map +1 -0
  181. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts +6 -0
  182. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts.map +1 -0
  183. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js +24 -0
  184. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js.map +1 -0
  185. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts +9 -0
  186. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts.map +1 -0
  187. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js +26 -0
  188. package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js.map +1 -0
  189. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts +8 -0
  190. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts.map +1 -0
  191. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js +32 -0
  192. package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js.map +1 -0
  193. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts +10 -0
  194. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts.map +1 -0
  195. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js +21 -0
  196. package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js.map +1 -0
  197. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts +20 -0
  198. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts.map +1 -0
  199. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js +25 -0
  200. package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js.map +1 -0
  201. package/esm/typings/accessibility.d.ts +3 -2
  202. package/esm/typings/accessibility.d.ts.map +1 -1
  203. package/esm/utils/domUtilities.d.ts +8 -1
  204. package/esm/utils/domUtilities.d.ts.map +1 -1
  205. package/esm/utils/domUtilities.js +8 -0
  206. package/esm/utils/domUtilities.js.map +1 -1
  207. package/esm/utils/useAutofocusOnMount.d.ts +12 -0
  208. package/esm/utils/useAutofocusOnMount.d.ts.map +1 -0
  209. package/esm/utils/useAutofocusOnMount.js +51 -0
  210. package/esm/utils/useAutofocusOnMount.js.map +1 -0
  211. package/package.json +9 -8
  212. package/src/@ui/UiMenu/UiMenu.scss +15 -7
  213. package/styles/css/dialogList.css +17 -0
  214. package/styles/css/dialogList.css.map +1 -1
  215. package/styles/css/header.css.map +1 -1
  216. package/styles/css/list.css +10 -0
  217. package/styles/css/list.css.map +1 -1
  218. package/styles/css/main.css +52 -7
  219. package/styles/css/main.css.map +1 -1
  220. package/styles/css/menu.css +10 -0
  221. package/styles/css/menu.css.map +1 -1
  222. package/styles/css/recurrenceForm.css +3 -0
  223. package/styles/css/recurrenceForm.css.map +1 -1
  224. package/styles/css/shareDialogSelectControl.css.map +1 -1
  225. package/styles/css/timepicker.css +8 -0
  226. package/styles/css/timepicker.css.map +1 -1
  227. package/styles/scss/dialogList.scss +21 -1
  228. package/styles/scss/header.scss +2 -4
  229. package/styles/scss/list.scss +11 -0
  230. package/styles/scss/recurrenceForm.scss +5 -0
  231. package/styles/scss/shareDialogSelectControl.scss +0 -1
  232. package/styles/scss/timepicker.scss +10 -1
  233. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts +0 -7
  234. package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts.map +0 -1
  235. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +0 -9
  236. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +0 -1
  237. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +0 -39
  238. package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +0 -1
  239. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +0 -11
  240. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +0 -1
  241. package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +0 -1
  242. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +0 -8
  243. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +0 -1
  244. package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +0 -1
@@ -1,20 +1,29 @@
1
1
  import React from "react";
2
2
  import { EditorView } from "@codemirror/view";
3
3
  import { Extension } from "@codemirror/state";
4
+ import { CompletionSource } from "@codemirror/autocomplete";
4
5
  /**
5
6
  * @internal
6
7
  */
7
8
  export interface ISyntaxHighlightingInputProps {
8
9
  value: string;
10
+ label?: string;
11
+ disabled?: boolean;
12
+ className?: string;
13
+ placeholder?: string;
14
+ extensions?: Extension[];
9
15
  onChange: (value: string) => void;
16
+ onFocus?: (event: FocusEvent, view: EditorView) => void;
17
+ onBlur?: (event: FocusEvent, view: EditorView) => void;
10
18
  onApi?: (view: EditorView | null) => void;
11
19
  onCursor?: (from: number, to: number) => void;
12
20
  onKeyDown?: (event: KeyboardEvent, view: EditorView) => boolean;
13
- placeholder?: string;
14
- label?: string;
15
- extensions?: Extension[];
16
- className?: string;
17
- disabled?: boolean;
21
+ autocompletion?: {
22
+ whenTyping?: boolean;
23
+ whenTypingDelay?: number;
24
+ aboveCursor?: boolean;
25
+ };
26
+ onCompletion?: CompletionSource;
18
27
  }
19
28
  /**
20
29
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"SyntaxHighlightingInput.d.ts","sourceRoot":"","sources":["../../src/syntaxHighlightingInput/SyntaxHighlightingInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CA2B3E,CAAC"}
1
+ {"version":3,"file":"SyntaxHighlightingInput.d.ts","sourceRoot":"","sources":["../../src/syntaxHighlightingInput/SyntaxHighlightingInput.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACxD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACvD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;IAChE,cAAc,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,YAAY,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAmC3E,CAAC"}
@@ -6,9 +6,10 @@ import { useCodemirror } from "./hooks/useCodemirror.js";
6
6
  * @internal
7
7
  */
8
8
  export const SyntaxHighlightingInput = (props) => {
9
- const { value, label, placeholder, onApi, onChange, onCursor, onKeyDown, className, extensions = [], disabled, } = props;
9
+ const { value, label, placeholder, autocompletion, onApi, onChange, onCursor, onKeyDown, onCompletion, onFocus, onBlur, className, extensions = [], disabled, } = props;
10
10
  const { editorRef } = useCodemirror({
11
11
  placeholderText: placeholder,
12
+ autocompletion,
12
13
  label,
13
14
  extensions,
14
15
  disabled,
@@ -17,6 +18,9 @@ export const SyntaxHighlightingInput = (props) => {
17
18
  onApi,
18
19
  onChange,
19
20
  onKeyDown,
21
+ onCompletion,
22
+ onFocus,
23
+ onBlur,
20
24
  });
21
25
  return React.createElement("div", { className: cx(className, "gd-input-syntax-highlighting-input"), ref: editorRef });
22
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SyntaxHighlightingInput.js","sourceRoot":"","sources":["../../src/syntaxHighlightingInput/SyntaxHighlightingInput.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAkBzD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA4C,CAAC,KAAK,EAAE,EAAE;IACtF,MAAM,EACF,KAAK,EACL,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,SAAS,EACT,UAAU,GAAG,EAAE,EACf,QAAQ,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QAChC,eAAe,EAAE,WAAW;QAC5B,KAAK;QACL,UAAU;QACV,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,SAAS;KACZ,CAAC,CAAC;IAEH,OAAO,6BAAK,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE,GAAG,EAAE,SAAS,GAAI,CAAC;AACnG,CAAC,CAAC"}
1
+ {"version":3,"file":"SyntaxHighlightingInput.js","sourceRoot":"","sources":["../../src/syntaxHighlightingInput/SyntaxHighlightingInput.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAK5B,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AA0BzD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAA4C,CAAC,KAAK,EAAE,EAAE;IACtF,MAAM,EACF,KAAK,EACL,KAAK,EACL,WAAW,EACX,cAAc,EACd,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,OAAO,EACP,MAAM,EACN,SAAS,EACT,UAAU,GAAG,EAAE,EACf,QAAQ,GACX,GAAG,KAAK,CAAC;IAEV,MAAM,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC;QAChC,eAAe,EAAE,WAAW;QAC5B,cAAc;QACd,KAAK;QACL,UAAU;QACV,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,KAAK;QACL,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,OAAO;QACP,MAAM;KACT,CAAC,CAAC;IAEH,OAAO,6BAAK,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,oCAAoC,CAAC,EAAE,GAAG,EAAE,SAAS,GAAI,CAAC;AACnG,CAAC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { MutableRefObject } from "react";
2
+ import { CompletionSource } from "@codemirror/autocomplete";
3
+ import { EditorView, ViewPlugin } from "@codemirror/view";
4
+ export declare function useAutocompletion({ handleCompletion, aboveCursor, whenTyping, activateOnTypingDelay, }: {
5
+ handleCompletion: MutableRefObject<CompletionSource>;
6
+ aboveCursor?: boolean;
7
+ whenTyping?: boolean;
8
+ activateOnTypingDelay?: number;
9
+ }): {
10
+ autocompletionExtension: import("@codemirror/state").Extension;
11
+ autocompleteHoverExtension: ViewPlugin<{
12
+ readonly view: EditorView;
13
+ attachMouseListeners(): void;
14
+ onMouseMove: (event: MouseEvent) => void;
15
+ destroy(): void;
16
+ }>;
17
+ };
18
+ //# sourceMappingURL=useAutocompletion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutocompletion.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useAutocompletion.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,OAAO,CAAC;AAClD,OAAO,EAEH,gBAAgB,EAInB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,EAC9B,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,qBAAqB,GACxB,EAAE;IACC,gBAAgB,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IACrD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAClC;;;uBAmB0C,UAAU;;6BASf,UAAU;;;EAwC/C"}
@@ -0,0 +1,66 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { autocompletion, completionStatus, selectedCompletionIndex, setSelectedCompletion, } from "@codemirror/autocomplete";
4
+ import { ViewPlugin } from "@codemirror/view";
5
+ export function useAutocompletion({ handleCompletion, aboveCursor, whenTyping, activateOnTypingDelay, }) {
6
+ const autocompletionExtension = useMemo(() => {
7
+ return autocompletion({
8
+ override: handleCompletion.current
9
+ ? [
10
+ (context) => {
11
+ return handleCompletion.current(context);
12
+ },
13
+ ]
14
+ : [],
15
+ activateOnTyping: whenTyping && Boolean(handleCompletion.current),
16
+ activateOnTypingDelay,
17
+ aboveCursor,
18
+ });
19
+ }, [handleCompletion, aboveCursor, whenTyping, activateOnTypingDelay]);
20
+ const autocompleteHoverExtension = useMemo(() => {
21
+ return ViewPlugin.fromClass(class {
22
+ view;
23
+ constructor(view) {
24
+ this.view = view;
25
+ this.attachMouseListeners();
26
+ }
27
+ attachMouseListeners() {
28
+ const el = this.view.dom;
29
+ el.addEventListener("mousemove", this.onMouseMove);
30
+ }
31
+ onMouseMove = (event) => {
32
+ const target = event.target;
33
+ // Check if the completion menu is open
34
+ const open = completionStatus(this.view.state);
35
+ if (open !== "active") {
36
+ return;
37
+ }
38
+ // Matches autocomplete items (CM uses class `cm-completionLabel`, can vary with themes)
39
+ const itemEl = target.closest(".cm-completionLabel");
40
+ if (!itemEl) {
41
+ return;
42
+ }
43
+ const itemElement = itemEl.parentElement;
44
+ const parentElement = itemElement?.parentElement;
45
+ if (itemElement && parentElement) {
46
+ const children = Array.from(parentElement.children);
47
+ const index = children.indexOf(itemElement);
48
+ const selected = selectedCompletionIndex(this.view.state);
49
+ if (selected !== index) {
50
+ this.view.dispatch({
51
+ effects: setSelectedCompletion(index),
52
+ });
53
+ }
54
+ }
55
+ };
56
+ destroy() {
57
+ this.view.dom.removeEventListener("mousemove", this.onMouseMove);
58
+ }
59
+ });
60
+ }, []);
61
+ return {
62
+ autocompletionExtension,
63
+ autocompleteHoverExtension,
64
+ };
65
+ }
66
+ //# sourceMappingURL=useAutocompletion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutocompletion.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useAutocompletion.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAoB,OAAO,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EACH,cAAc,EAEd,gBAAgB,EAChB,uBAAuB,EACvB,qBAAqB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,iBAAiB,CAAC,EAC9B,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,qBAAqB,GAMxB;IACG,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,EAAE;QACzC,OAAO,cAAc,CAAC;YAClB,QAAQ,EAAE,gBAAgB,CAAC,OAAO;gBAC9B,CAAC,CAAC;oBACI,CAAC,OAAO,EAAE,EAAE;wBACR,OAAO,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC7C,CAAC;iBACJ;gBACH,CAAC,CAAC,EAAE;YACR,gBAAgB,EAAE,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC;YACjE,qBAAqB;YACrB,WAAW;SACd,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAEvE,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5C,OAAO,UAAU,CAAC,SAAS,CACvB;YACyB;YAArB,YAAqB,IAAgB;gBAAhB,SAAI,GAAJ,IAAI,CAAY;gBACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAChC,CAAC;YAED,oBAAoB;gBAChB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;gBACzB,EAAE,CAAC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACvD,CAAC;YAED,WAAW,GAAG,CAAC,KAAiB,EAAE,EAAE;gBAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAqB,CAAC;gBAE3C,uCAAuC;gBACvC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACpB,OAAO;gBACX,CAAC;gBAED,wFAAwF;gBACxF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;gBACrD,IAAI,CAAC,MAAM,EAAE,CAAC;oBACV,OAAO;gBACX,CAAC;gBAED,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC;gBACzC,MAAM,aAAa,GAAG,WAAW,EAAE,aAAa,CAAC;gBACjD,IAAI,WAAW,IAAI,aAAa,EAAE,CAAC;oBAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBAC5C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1D,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;wBACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;4BACf,OAAO,EAAE,qBAAqB,CAAC,KAAK,CAAC;yBACxC,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;YACL,CAAC,CAAC;YAEF,OAAO;gBACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACrE,CAAC;SACJ,CACJ,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACH,uBAAuB;QACvB,0BAA0B;KAC7B,CAAC;AACN,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { MutableRefObject } from "react";
2
+ export declare function useChangeHandler({ handleChange, handleCursor, }: {
3
+ handleChange: MutableRefObject<(value: string) => void>;
4
+ handleCursor: MutableRefObject<(from: number, to: number) => void>;
5
+ }): {
6
+ changeHandlerExtension: import("@codemirror/state").Extension;
7
+ };
8
+ //# sourceMappingURL=useChangeHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChangeHandler.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useChangeHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,OAAO,CAAC;AAGlD,wBAAgB,gBAAgB,CAAC,EAC7B,YAAY,EACZ,YAAY,GACf,EAAE;IACC,YAAY,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IACxD,YAAY,EAAE,gBAAgB,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;CACtE;;EAiBA"}
@@ -0,0 +1,21 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { useMemo } from "react";
3
+ import { EditorView } from "@codemirror/view";
4
+ export function useChangeHandler({ handleChange, handleCursor, }) {
5
+ // Create an extension for handling changes
6
+ const changeHandlerExtension = useMemo(() => {
7
+ return EditorView.updateListener.of((update) => {
8
+ if (update.docChanged) {
9
+ handleChange.current?.(update.state.doc.toString());
10
+ }
11
+ if (handleCursor.current && update.selectionSet) {
12
+ const range = update.state.selection.main;
13
+ handleCursor.current(range.from, range.to);
14
+ }
15
+ });
16
+ }, [handleChange, handleCursor]);
17
+ return {
18
+ changeHandlerExtension,
19
+ };
20
+ }
21
+ //# sourceMappingURL=useChangeHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChangeHandler.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useChangeHandler.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAoB,OAAO,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,UAAU,EAAc,MAAM,kBAAkB,CAAC;AAE1D,MAAM,UAAU,gBAAgB,CAAC,EAC7B,YAAY,EACZ,YAAY,GAIf;IACG,2CAA2C;IAC3C,MAAM,sBAAsB,GAAG,OAAO,CAAC,GAAG,EAAE;QACxC,OAAO,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAkB,EAAE,EAAE;YACvD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;YACD,IAAI,YAAY,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1C,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjC,OAAO;QACH,sBAAsB;KACzB,CAAC;AACN,CAAC"}
@@ -1,19 +1,22 @@
1
- import { MutableRefObject } from "react";
2
- import { Extension } from "@codemirror/state";
1
+ /// <reference types="react" />
3
2
  import { EditorView } from "@codemirror/view";
4
- export interface IUseCodemirrorProps {
3
+ import { Extension } from "@codemirror/state";
4
+ import { IUseEventHandlersProps } from "./useEventHandlers.js";
5
+ export interface IUseCodemirrorProps extends IUseEventHandlersProps {
5
6
  value?: string;
6
7
  label?: string;
7
8
  placeholderText?: string;
8
9
  disabled?: boolean;
10
+ autocompletion?: {
11
+ aboveCursor?: boolean;
12
+ whenTyping?: boolean;
13
+ whenTypingDelay?: number;
14
+ };
9
15
  extensions?: Extension[];
10
- onChange: (value: string) => void;
11
16
  onApi?: (view: EditorView | null) => void;
12
- onCursor?: (from: number, to: number) => void;
13
- onKeyDown?: (event: KeyboardEvent, view: EditorView) => boolean;
14
17
  }
15
- export declare function useCodemirror({ value, label, disabled, placeholderText, extensions, onApi, onKeyDown, onCursor, onChange, }: IUseCodemirrorProps): {
16
- editorRef: MutableRefObject<HTMLDivElement>;
17
- viewRef: MutableRefObject<EditorView>;
18
+ export declare function useCodemirror({ value, label, disabled, autocompletion, placeholderText, extensions, onCompletion, onApi, onKeyDown, onCursor, onChange, onBlur, onFocus, }: IUseCodemirrorProps): {
19
+ editorRef: import("react").MutableRefObject<HTMLDivElement>;
20
+ viewRef: import("react").MutableRefObject<EditorView>;
18
21
  };
19
22
  //# sourceMappingURL=useCodemirror.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCodemirror.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAA8B,MAAM,OAAO,CAAC;AACrE,OAAO,EAA6C,SAAS,EAAe,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,UAAU,EAAmC,MAAM,kBAAkB,CAAC;AAgB/E,MAAM,WAAW,mBAAmB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;CACnE;AAED,wBAAgB,aAAa,CAAC,EAC1B,KAAU,EACV,KAAK,EACL,QAAQ,EACR,eAAe,EACf,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,GACX,EAAE,mBAAmB;;;EAiGrB"}
1
+ {"version":3,"file":"useCodemirror.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirror.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAe,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAI3D,OAAO,EAAE,sBAAsB,EAAoB,MAAM,uBAAuB,CAAC;AAoBjF,MAAM,WAAW,mBAAoB,SAAQ,sBAAsB;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE;QACb,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;CAC7C;AAED,wBAAgB,aAAa,CAAC,EAC1B,KAAU,EACV,KAAK,EACL,QAAQ,EACR,cAAc,EACd,eAAe,EACf,UAAU,EACV,YAAY,EACZ,KAAK,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,OAAO,GACV,EAAE,mBAAmB;;;EAgFrB"}
@@ -1,10 +1,17 @@
1
1
  // (C) 2025 GoodData Corporation
2
- import { useEffect, useMemo, useRef } from "react";
3
- import { Compartment, EditorSelection, EditorState, Transaction } from "@codemirror/state";
4
- import { EditorView, keymap, placeholder } from "@codemirror/view";
2
+ import { useEffect, useRef } from "react";
3
+ import { EditorView } from "@codemirror/view";
4
+ import { EditorState } from "@codemirror/state";
5
5
  import { bracketMatching, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
6
- import { defaultKeymap, historyKeymap } from "@codemirror/commands";
7
6
  import { tags as t } from "@lezer/highlight";
7
+ import { useEventHandlers } from "./useEventHandlers.js";
8
+ import { useCodemirrorEditable } from "./useCodemirrorEditable.js";
9
+ import { useCodemirrorChange } from "./useCodemirrorChange.js";
10
+ import { useChangeHandler } from "./useChangeHandler.js";
11
+ import { useCodemirrorOptions } from "./useCodemirrorOptions.js";
12
+ import { useCodemirrorKeymap } from "./useCodemirrorKeymap.js";
13
+ import { useCodemirrorEvents } from "./useCodemirrorEvents.js";
14
+ import { useAutocompletion } from "./useAutocompletion.js";
8
15
  // Custom syntax highlighting
9
16
  const customHighlightStyle = HighlightStyle.define([
10
17
  { tag: t.punctuation, color: "#94a1ad" },
@@ -15,51 +22,37 @@ const customHighlightStyle = HighlightStyle.define([
15
22
  { tag: t.standard(t.variableName), color: "#00c18e", fontWeight: "bold" },
16
23
  { tag: t.keyword, color: "#ab55a3", fontWeight: "bold" },
17
24
  ]);
18
- export function useCodemirror({ value = "", label, disabled, placeholderText, extensions, onApi, onKeyDown, onCursor, onChange, }) {
25
+ export function useCodemirror({ value = "", label, disabled, autocompletion, placeholderText, extensions, onCompletion, onApi, onKeyDown, onCursor, onChange, onBlur, onFocus, }) {
19
26
  const editorRef = useRef(null);
20
27
  const viewRef = useRef();
21
- const handleKeyDownRef = useRef(onKeyDown);
22
- handleKeyDownRef.current = onKeyDown;
23
- const handleChangeRef = useRef(onChange);
24
- handleChangeRef.current = onChange;
25
- const handleCursorRef = useRef(onCursor);
26
- handleCursorRef.current = onCursor;
28
+ const { handleCompletion, handleChange, handleKeyDown, handleCursor, handleFocus, handleBlur } = useEventHandlers({
29
+ onChange,
30
+ onKeyDown,
31
+ onCursor,
32
+ onCompletion,
33
+ onFocus,
34
+ onBlur,
35
+ });
27
36
  // Create an extension for handling changes
28
- const changeHandler = useMemo(() => {
29
- return EditorView.updateListener.of((update) => {
30
- if (update.docChanged) {
31
- handleChangeRef.current?.(update.state.doc.toString());
32
- }
33
- if (handleCursorRef.current && update.selectionSet) {
34
- const range = update.state.selection.main;
35
- handleCursorRef.current(range.from, range.to);
36
- }
37
- });
38
- }, []);
39
- // Disable autofocus
40
- const disableAutofocus = useMemo(() => EditorView.contentAttributes.of({ autofocus: "false" }), []);
41
- // Placeholder
42
- const placeholderExtension = useMemo(() => {
43
- return placeholderText ? placeholder(placeholderText) : [];
44
- }, [placeholderText]);
45
- //ARIA
46
- const ariaExtension = EditorView.contentAttributes.of({
47
- "aria-label": label || placeholderText,
37
+ const { changeHandlerExtension } = useChangeHandler({ handleChange, handleCursor });
38
+ // Create settings for the editor
39
+ const { placeholderExtension, ariaExtension, disableAutofocusExtension } = useCodemirrorOptions({
40
+ placeholderText,
41
+ labelText: label,
48
42
  });
49
- // Keymap extension
50
- const keymapExtension = useMemo(() => {
51
- return keymap.of([
52
- {
53
- any(view, event) {
54
- return handleKeyDownRef.current?.(event, view) ?? false;
55
- },
56
- },
57
- ...defaultKeymap,
58
- ...historyKeymap,
59
- ]);
60
- }, []);
61
- // Editable compartment
43
+ // Create keymap extension
44
+ const { keymapExtension } = useCodemirrorKeymap({ handleKeyDown });
45
+ // Create dom events extension
46
+ const { domEventsExtension } = useCodemirrorEvents({ handleFocus, handleBlur });
47
+ // Create editable compartment extension
62
48
  const { editableCompartmentExtension } = useCodemirrorEditable(viewRef, disabled);
49
+ // Create autocompletion extension
50
+ const { autocompletionExtension, autocompleteHoverExtension } = useAutocompletion({
51
+ handleCompletion,
52
+ aboveCursor: autocompletion?.aboveCursor ?? false,
53
+ whenTyping: autocompletion?.whenTyping ?? true,
54
+ activateOnTypingDelay: autocompletion?.whenTypingDelay,
55
+ });
63
56
  // Create the editor only once
64
57
  useEffect(() => {
65
58
  if (!editorRef.current) {
@@ -70,14 +63,17 @@ export function useCodemirror({ value = "", label, disabled, placeholderText, ex
70
63
  doc: value,
71
64
  extensions: [
72
65
  bracketMatching(),
66
+ domEventsExtension,
73
67
  keymapExtension,
74
68
  syntaxHighlighting(customHighlightStyle),
75
69
  EditorView.lineWrapping,
76
- disableAutofocus,
77
- changeHandler,
70
+ disableAutofocusExtension,
71
+ changeHandlerExtension,
78
72
  placeholderExtension,
79
73
  editableCompartmentExtension,
80
74
  ariaExtension,
75
+ autocompletionExtension,
76
+ autocompleteHoverExtension,
81
77
  ...extensions,
82
78
  ],
83
79
  }),
@@ -98,54 +94,4 @@ export function useCodemirror({ value = "", label, disabled, placeholderText, ex
98
94
  viewRef,
99
95
  };
100
96
  }
101
- function useCodemirrorEditable(viewRef, disabled) {
102
- // Editable compartment
103
- const editableCompartmentRef = useRef(new Compartment());
104
- const editableCompartmentExtension = editableCompartmentRef.current.of(EditorView.editable.of(!disabled));
105
- // Handle disabled state changes
106
- useEffect(() => {
107
- const view = viewRef.current;
108
- if (!view) {
109
- return;
110
- }
111
- // Update the editable compartment based on the disabled prop
112
- view.dispatch({
113
- effects: editableCompartmentRef.current.reconfigure(EditorView.editable.of(!disabled)),
114
- });
115
- }, [disabled, viewRef]);
116
- return {
117
- editableCompartmentExtension,
118
- };
119
- }
120
- function useCodemirrorChange(viewRef, value) {
121
- // Handle external value changes
122
- useEffect(() => {
123
- const view = viewRef.current;
124
- if (!view)
125
- return;
126
- const currentValue = view.state.doc.toString();
127
- if (currentValue !== value) {
128
- const selection = view.state.selection;
129
- const hasFocus = view.hasFocus;
130
- const newLength = value.length;
131
- // Adjust selection to stay within bounds of new content
132
- const adjustedSelection = EditorSelection.create(selection.ranges.map((range) => {
133
- const from = Math.min(range.from, newLength);
134
- const to = Math.min(range.to, newLength);
135
- return EditorSelection.range(from, to);
136
- }), selection.mainIndex);
137
- view.dispatch({
138
- changes: { from: 0, to: currentValue.length, insert: value },
139
- selection: adjustedSelection,
140
- annotations: [
141
- // Mark this as a remote change to avoid triggering the change handler
142
- Transaction.remote.of(true),
143
- ],
144
- });
145
- if (hasFocus) {
146
- view.focus();
147
- }
148
- }
149
- }, [value, viewRef]);
150
- }
151
97
  //# sourceMappingURL=useCodemirror.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useCodemirror.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirror.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAoB,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAa,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,kBAAkB,CAAC;AAE7C,6BAA6B;AAC7B,MAAM,oBAAoB,GAAG,cAAc,CAAC,MAAM,CAAC;IAC/C,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;IACxC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE;IACpC,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE;IACzC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;IAChC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;IACxE,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;IACzE,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;CAC3D,CAAC,CAAC;AAcH,MAAM,UAAU,aAAa,CAAC,EAC1B,KAAK,GAAG,EAAE,EACV,KAAK,EACL,QAAQ,EACR,eAAe,EACf,UAAU,EACV,KAAK,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,GACU;IAClB,MAAM,SAAS,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,EAAc,CAAC;IAErC,MAAM,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3C,gBAAgB,CAAC,OAAO,GAAG,SAAS,CAAC;IAErC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC;IAEnC,MAAM,eAAe,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzC,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC;IAEnC,2CAA2C;IAC3C,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAkB,EAAE,EAAE;YACvD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBACpB,eAAe,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,eAAe,CAAC,OAAO,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACjD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC;gBAC1C,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;YAClD,CAAC;QACL,CAAC,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,oBAAoB;IACpB,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAEpG,cAAc;IACd,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,OAAO,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/D,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM;IACN,MAAM,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAClD,YAAY,EAAE,KAAK,IAAI,eAAe;KACzC,CAAC,CAAC;IAEH,mBAAmB;IACnB,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,OAAO,MAAM,CAAC,EAAE,CAAC;YACb;gBACI,GAAG,CAAC,IAAI,EAAE,KAAK;oBACX,OAAO,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC;gBAC5D,CAAC;aACJ;YACD,GAAG,aAAa;YAChB,GAAG,aAAa;SACnB,CAAC,CAAC;IACP,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,uBAAuB;IACvB,MAAM,EAAE,4BAA4B,EAAE,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAElF,8BAA8B;IAC9B,SAAS,CAAC,GAAG,EAAE;QACX,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YACxB,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;gBACtB,GAAG,EAAE,KAAK;gBACV,UAAU,EAAE;oBACR,eAAe,EAAE;oBACjB,eAAe;oBACf,kBAAkB,CAAC,oBAAoB,CAAC;oBACxC,UAAU,CAAC,YAAY;oBACvB,gBAAgB;oBAChB,aAAa;oBACb,oBAAoB;oBACpB,4BAA4B;oBAC5B,aAAa;oBACb,GAAG,UAAU;iBAChB;aACJ,CAAC;YACF,MAAM,EAAE,SAAS,CAAC,OAAO;SAC5B,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,iDAAiD;QACjD,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,GAAG,EAAE;YACR,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC;YACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC,CAAC;IACN,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kDAAkD;IAE1D,gCAAgC;IAChC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAEpC,OAAO;QACH,SAAS;QACT,OAAO;KACV,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAqC,EAAE,QAAkB;IACpF,uBAAuB;IACvB,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACzD,MAAM,4BAA4B,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1G,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,QAAQ,CAAC;YACV,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;SACzF,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,OAAO;QACH,4BAA4B;KAC/B,CAAC;AACN,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAqC,EAAE,KAAa;IAC7E,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/C,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;YAE/B,wDAAwD;YACxD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACzC,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,EACF,SAAS,CAAC,SAAS,CACtB,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC5D,SAAS,EAAE,iBAAiB;gBAC5B,WAAW,EAAE;oBACT,sEAAsE;oBACtE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;iBAC9B;aACJ,CAAC,CAAC;YAEH,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACzB,CAAC"}
1
+ {"version":3,"file":"useCodemirror.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirror.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { MutableRefObject } from "react";
2
+ import { EditorView } from "@codemirror/view";
3
+ export declare function useCodemirrorChange(viewRef: MutableRefObject<EditorView>, value: string): void;
4
+ //# sourceMappingURL=useCodemirrorChange.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorChange.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorChange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAa,MAAM,OAAO,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,QAoCvF"}
@@ -0,0 +1,35 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { useEffect } from "react";
3
+ import { EditorSelection, Transaction } from "@codemirror/state";
4
+ export function useCodemirrorChange(viewRef, value) {
5
+ // Handle external value changes
6
+ useEffect(() => {
7
+ const view = viewRef.current;
8
+ if (!view)
9
+ return;
10
+ const currentValue = view.state.doc.toString();
11
+ if (currentValue !== value) {
12
+ const selection = view.state.selection;
13
+ const hasFocus = view.hasFocus;
14
+ const newLength = value.length;
15
+ // Adjust selection to stay within bounds of new content
16
+ const adjustedSelection = EditorSelection.create(selection.ranges.map((range) => {
17
+ const from = Math.min(range.from, newLength);
18
+ const to = Math.min(range.to, newLength);
19
+ return EditorSelection.range(from, to);
20
+ }), selection.mainIndex);
21
+ view.dispatch({
22
+ changes: { from: 0, to: currentValue.length, insert: value },
23
+ selection: adjustedSelection,
24
+ annotations: [
25
+ // Mark this as a remote change to avoid triggering the change handler
26
+ Transaction.remote.of(true),
27
+ ],
28
+ });
29
+ if (hasFocus) {
30
+ view.focus();
31
+ }
32
+ }
33
+ }, [value, viewRef]);
34
+ }
35
+ //# sourceMappingURL=useCodemirrorChange.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorChange.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorChange.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAoB,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,UAAU,mBAAmB,CAAC,OAAqC,EAAE,KAAa;IACpF,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC/C,IAAI,YAAY,KAAK,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC/B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;YAE/B,wDAAwD;YACxD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAC5C,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACzC,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC,CAAC,EACF,SAAS,CAAC,SAAS,CACtB,CAAC;YAEF,IAAI,CAAC,QAAQ,CAAC;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC5D,SAAS,EAAE,iBAAiB;gBAC5B,WAAW,EAAE;oBACT,sEAAsE;oBACtE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;iBAC9B;aACJ,CAAC,CAAC;YAEH,IAAI,QAAQ,EAAE,CAAC;gBACX,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { MutableRefObject } from "react";
2
+ import { EditorView } from "@codemirror/view";
3
+ export declare function useCodemirrorEditable(viewRef: MutableRefObject<EditorView>, disabled?: boolean): {
4
+ editableCompartmentExtension: import("@codemirror/state").Extension;
5
+ };
6
+ //# sourceMappingURL=useCodemirrorEditable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorEditable.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorEditable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,CAAC,UAAU,CAAC,EAAE,QAAQ,CAAC,EAAE,OAAO;;EAqB9F"}
@@ -0,0 +1,24 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { useEffect, useRef } from "react";
3
+ import { EditorView } from "@codemirror/view";
4
+ import { Compartment } from "@codemirror/state";
5
+ export function useCodemirrorEditable(viewRef, disabled) {
6
+ // Editable compartment
7
+ const editableCompartmentRef = useRef(new Compartment());
8
+ const editableCompartmentExtension = editableCompartmentRef.current.of(EditorView.editable.of(!disabled));
9
+ // Handle disabled state changes
10
+ useEffect(() => {
11
+ const view = viewRef.current;
12
+ if (!view) {
13
+ return;
14
+ }
15
+ // Update the editable compartment based on the disabled prop
16
+ view.dispatch({
17
+ effects: editableCompartmentRef.current.reconfigure(EditorView.editable.of(!disabled)),
18
+ });
19
+ }, [disabled, viewRef]);
20
+ return {
21
+ editableCompartmentExtension,
22
+ };
23
+ }
24
+ //# sourceMappingURL=useCodemirrorEditable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorEditable.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorEditable.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAoB,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CAAC,OAAqC,EAAE,QAAkB;IAC3F,uBAAuB;IACvB,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,CAAC;IACzD,MAAM,4BAA4B,GAAG,sBAAsB,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1G,gCAAgC;IAChC,SAAS,CAAC,GAAG,EAAE;QACX,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,OAAO;QACX,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,QAAQ,CAAC;YACV,OAAO,EAAE,sBAAsB,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;SACzF,CAAC,CAAC;IACP,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;IAExB,OAAO;QACH,4BAA4B;KAC/B,CAAC;AACN,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { EditorView } from "@codemirror/view";
2
+ import { MutableRefObject } from "react";
3
+ export declare function useCodemirrorEvents({ handleFocus, handleBlur, }: {
4
+ handleFocus: MutableRefObject<(event: FocusEvent, view: EditorView) => void>;
5
+ handleBlur: MutableRefObject<(event: FocusEvent, view: EditorView) => void>;
6
+ }): {
7
+ domEventsExtension: import("@codemirror/state").Extension;
8
+ };
9
+ //# sourceMappingURL=useCodemirrorEvents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorEvents.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorEvents.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAEzC,wBAAgB,mBAAmB,CAAC,EAChC,WAAW,EACX,UAAU,GACb,EAAE;IACC,WAAW,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;IAC7E,UAAU,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC;CAC/E;;EAsBA"}
@@ -0,0 +1,26 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import { EditorView } from "@codemirror/view";
3
+ import { completionStatus } from "@codemirror/autocomplete";
4
+ export function useCodemirrorEvents({ handleFocus, handleBlur, }) {
5
+ // Dom events handlers
6
+ const domEventsExtension = EditorView.domEventHandlers({
7
+ keydown(event, view) {
8
+ if (event.key === "Escape") {
9
+ const open = completionStatus(view.state);
10
+ if (open) {
11
+ event.stopPropagation();
12
+ }
13
+ }
14
+ },
15
+ focus(event, view) {
16
+ handleFocus.current?.(event, view);
17
+ },
18
+ blur(event, view) {
19
+ handleBlur.current?.(event, view);
20
+ },
21
+ });
22
+ return {
23
+ domEventsExtension,
24
+ };
25
+ }
26
+ //# sourceMappingURL=useCodemirrorEvents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorEvents.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorEvents.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,MAAM,UAAU,mBAAmB,CAAC,EAChC,WAAW,EACX,UAAU,GAIb;IACG,sBAAsB;IACtB,MAAM,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC;QACnD,OAAO,CAAC,KAAK,EAAE,IAAI;YACf,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,IAAI,EAAE,CAAC;oBACP,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC5B,CAAC;YACL,CAAC;QACL,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,IAAI;YACb,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,IAAI;YACZ,UAAU,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;KACJ,CAAC,CAAC;IAEH,OAAO;QACH,kBAAkB;KACrB,CAAC;AACN,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { MutableRefObject } from "react";
2
+ import { EditorView } from "@codemirror/view";
3
+ export declare function useCodemirrorKeymap({ handleKeyDown, }: {
4
+ handleKeyDown: MutableRefObject<(event: KeyboardEvent, view: EditorView) => boolean>;
5
+ }): {
6
+ keymapExtension: import("@codemirror/state").Extension;
7
+ };
8
+ //# sourceMappingURL=useCodemirrorKeymap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodemirrorKeymap.d.ts","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirrorKeymap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAW,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,UAAU,EAAU,MAAM,kBAAkB,CAAC;AAItD,wBAAgB,mBAAmB,CAAC,EAChC,aAAa,GAChB,EAAE;IACC,aAAa,EAAE,gBAAgB,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC;CACxF;;EA0BA"}