@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.
- package/esm/@ui/@types/size.d.ts +4 -0
- package/esm/@ui/@types/size.d.ts.map +1 -1
- package/esm/@ui/@types/size.js +1 -0
- package/esm/@ui/@types/size.js.map +1 -1
- package/esm/@ui/@utils/keyboardNavigation.d.ts +44 -12
- package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
- package/esm/@ui/@utils/keyboardNavigation.js +55 -65
- package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
- package/esm/@ui/UiButton/UiButton.d.ts +8 -1
- package/esm/@ui/UiButton/UiButton.d.ts.map +1 -1
- package/esm/@ui/UiButton/UiButton.js +9 -4
- package/esm/@ui/UiButton/UiButton.js.map +1 -1
- package/esm/@ui/UiChip/UiChip.d.ts +3 -1
- package/esm/@ui/UiChip/UiChip.d.ts.map +1 -1
- package/esm/@ui/UiChip/UiChip.js +3 -3
- package/esm/@ui/UiChip/UiChip.js.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js +4 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
- package/esm/@ui/UiIconButton/UiIconButton.d.ts +3 -2
- package/esm/@ui/UiIconButton/UiIconButton.d.ts.map +1 -1
- package/esm/@ui/UiIconButton/UiIconButton.js +26 -3
- package/esm/@ui/UiIconButton/UiIconButton.js.map +1 -1
- package/esm/@ui/UiListbox/UiListbox.d.ts +1 -1
- package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
- package/esm/@ui/UiListbox/UiListbox.js +6 -7
- package/esm/@ui/UiListbox/UiListbox.js.map +1 -1
- package/esm/@ui/UiListbox/types.d.ts +1 -0
- package/esm/@ui/UiListbox/types.d.ts.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.d.ts +1 -1
- package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.js +26 -6
- package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
- package/esm/@ui/UiMenu/components/Item.d.ts +4 -0
- package/esm/@ui/UiMenu/components/Item.d.ts.map +1 -0
- package/esm/@ui/UiMenu/components/Item.js +26 -0
- package/esm/@ui/UiMenu/components/Item.js.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts +10 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.d.ts.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js +29 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContent.js.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts +12 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.d.ts.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js +60 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuContentItem.js.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts +7 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuGroupItem.d.ts.map +1 -0
- package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js → components/defaults/DefaultUiMenuGroupItem.js} +5 -5
- package/esm/@ui/UiMenu/{defaults/DefaultUiMenuGroupItemComponent.js.map → components/defaults/DefaultUiMenuGroupItem.js.map} +1 -1
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts +8 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.d.ts.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js +49 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuHeader.js.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts +11 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.d.ts.map +1 -0
- package/esm/@ui/UiMenu/{defaults/DefaultUiMenuInteractiveItemComponent.js → components/defaults/DefaultUiMenuInteractiveItem.js} +7 -7
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuInteractiveItem.js.map +1 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts +8 -0
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.d.ts.map +1 -0
- package/esm/@ui/UiMenu/{defaults/DefaultUiMenuStaticItemComponent.js → components/defaults/DefaultUiMenuStaticItem.js} +3 -3
- package/esm/@ui/UiMenu/components/defaults/DefaultUiMenuStaticItem.js.map +1 -0
- package/esm/@ui/UiMenu/context.d.ts +6 -2
- package/esm/@ui/UiMenu/context.d.ts.map +1 -1
- package/esm/@ui/UiMenu/context.js +10 -0
- package/esm/@ui/UiMenu/context.js.map +1 -1
- package/esm/@ui/UiMenu/hooks.d.ts +10 -4
- package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
- package/esm/@ui/UiMenu/hooks.js +90 -37
- package/esm/@ui/UiMenu/hooks.js.map +1 -1
- package/esm/@ui/UiMenu/itemUtils.d.ts +60 -1
- package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
- package/esm/@ui/UiMenu/itemUtils.js +69 -1
- package/esm/@ui/UiMenu/itemUtils.js.map +1 -1
- package/esm/@ui/UiMenu/types.d.ts +65 -18
- package/esm/@ui/UiMenu/types.d.ts.map +1 -1
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts +21 -0
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.d.ts.map +1 -0
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js +128 -0
- package/esm/@ui/hooks/useListWithActionsKeyboardNavigation.js.map +1 -0
- package/esm/Button/Button.d.ts.map +1 -1
- package/esm/Button/Button.js +10 -3
- package/esm/Button/Button.js.map +1 -1
- package/esm/Button/typings.d.ts +2 -0
- package/esm/Button/typings.d.ts.map +1 -1
- package/esm/Dialog/DialogCloseButton.d.ts +3 -0
- package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
- package/esm/Dialog/DialogCloseButton.js +6 -2
- package/esm/Dialog/DialogCloseButton.js.map +1 -1
- package/esm/Dialog/DialogList/DialogListItemBasic.d.ts.map +1 -1
- package/esm/Dialog/DialogList/DialogListItemBasic.js +7 -4
- package/esm/Dialog/DialogList/DialogListItemBasic.js.map +1 -1
- package/esm/Dialog/DialogList/typings.d.ts +1 -0
- package/esm/Dialog/DialogList/typings.d.ts.map +1 -1
- package/esm/Dialog/DialogList/typings.js +1 -1
- package/esm/Dialog/DialogList/typings.js.map +1 -1
- package/esm/Dialog/ExportDialogBase.js +3 -3
- package/esm/Dialog/ExportDialogBase.js.map +1 -1
- package/esm/Dialog/index.d.ts +1 -0
- package/esm/Dialog/index.d.ts.map +1 -1
- package/esm/Dialog/index.js +2 -1
- package/esm/Dialog/index.js.map +1 -1
- package/esm/Dialog/typings.d.ts +5 -3
- package/esm/Dialog/typings.d.ts.map +1 -1
- package/esm/Dropdown/Dropdown.d.ts +1 -0
- package/esm/Dropdown/Dropdown.d.ts.map +1 -1
- package/esm/Dropdown/Dropdown.js +19 -20
- package/esm/Dropdown/Dropdown.js.map +1 -1
- package/esm/Header/generateHeaderAccountMenuItems.d.ts +0 -4
- package/esm/Header/generateHeaderAccountMenuItems.d.ts.map +1 -1
- package/esm/Header/generateHeaderAccountMenuItems.js +2 -6
- package/esm/Header/generateHeaderAccountMenuItems.js.map +1 -1
- package/esm/List/ListItem.d.ts +1 -0
- package/esm/List/ListItem.d.ts.map +1 -1
- package/esm/List/ListItem.js +4 -3
- package/esm/List/ListItem.js.map +1 -1
- package/esm/List/MenuList.d.ts.map +1 -1
- package/esm/List/MenuList.js +2 -2
- package/esm/List/MenuList.js.map +1 -1
- package/esm/List/guid.d.ts.map +1 -1
- package/esm/List/guid.js +5 -2
- package/esm/List/guid.js.map +1 -1
- package/esm/Menu/menuOpener/MenuOpener.js +2 -2
- package/esm/Menu/menuOpener/MenuOpener.js.map +1 -1
- package/esm/Overlay/Overlay.d.ts.map +1 -1
- package/esm/Overlay/Overlay.js +6 -2
- package/esm/Overlay/Overlay.js.map +1 -1
- package/esm/RecurrenceForm/DateTime.d.ts +1 -0
- package/esm/RecurrenceForm/DateTime.d.ts.map +1 -1
- package/esm/RecurrenceForm/DateTime.js +3 -3
- package/esm/RecurrenceForm/DateTime.js.map +1 -1
- package/esm/RecurrenceForm/Recurrence.d.ts +1 -0
- package/esm/RecurrenceForm/Recurrence.d.ts.map +1 -1
- package/esm/RecurrenceForm/Recurrence.js +2 -2
- package/esm/RecurrenceForm/Recurrence.js.map +1 -1
- package/esm/RecurrenceForm/RecurrenceForm.d.ts +1 -0
- package/esm/RecurrenceForm/RecurrenceForm.d.ts.map +1 -1
- package/esm/RecurrenceForm/RecurrenceForm.js +3 -3
- package/esm/RecurrenceForm/RecurrenceForm.js.map +1 -1
- package/esm/RecurrenceForm/RepeatTypeSelect.d.ts +1 -0
- package/esm/RecurrenceForm/RepeatTypeSelect.d.ts.map +1 -1
- package/esm/RecurrenceForm/RepeatTypeSelect.js +16 -6
- package/esm/RecurrenceForm/RepeatTypeSelect.js.map +1 -1
- package/esm/RecurrenceForm/constants.d.ts +0 -1
- package/esm/RecurrenceForm/constants.d.ts.map +1 -1
- package/esm/RecurrenceForm/constants.js +0 -1
- package/esm/RecurrenceForm/constants.js.map +1 -1
- package/esm/Timepicker/Timepicker.d.ts +1 -0
- package/esm/Timepicker/Timepicker.d.ts.map +1 -1
- package/esm/Timepicker/Timepicker.js +19 -8
- package/esm/Timepicker/Timepicker.js.map +1 -1
- package/esm/ZoomContext/ZoomContext.js +6 -6
- package/esm/ZoomContext/ZoomContext.js.map +1 -1
- package/esm/index.d.ts +16 -7
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +12 -4
- package/esm/index.js.map +1 -1
- package/esm/responsive/useMediaQuery.d.ts.map +1 -1
- package/esm/responsive/useMediaQuery.js +3 -1
- package/esm/responsive/useMediaQuery.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +365 -79
- package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts +14 -5
- package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.d.ts.map +1 -1
- package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js +5 -1
- package/esm/syntaxHighlightingInput/SyntaxHighlightingInput.js.map +1 -1
- package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts +18 -0
- package/esm/syntaxHighlightingInput/hooks/useAutocompletion.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js +66 -0
- package/esm/syntaxHighlightingInput/hooks/useAutocompletion.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts +8 -0
- package/esm/syntaxHighlightingInput/hooks/useChangeHandler.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js +21 -0
- package/esm/syntaxHighlightingInput/hooks/useChangeHandler.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts +12 -9
- package/esm/syntaxHighlightingInput/hooks/useCodemirror.d.ts.map +1 -1
- package/esm/syntaxHighlightingInput/hooks/useCodemirror.js +42 -96
- package/esm/syntaxHighlightingInput/hooks/useCodemirror.js.map +1 -1
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts +4 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js +35 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorChange.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts +6 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js +24 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEditable.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts +9 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js +26 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorEvents.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts +8 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js +32 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorKeymap.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts +10 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js +21 -0
- package/esm/syntaxHighlightingInput/hooks/useCodemirrorOptions.js.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts +20 -0
- package/esm/syntaxHighlightingInput/hooks/useEventHandlers.d.ts.map +1 -0
- package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js +25 -0
- package/esm/syntaxHighlightingInput/hooks/useEventHandlers.js.map +1 -0
- package/esm/typings/accessibility.d.ts +3 -2
- package/esm/typings/accessibility.d.ts.map +1 -1
- package/esm/utils/domUtilities.d.ts +8 -1
- package/esm/utils/domUtilities.d.ts.map +1 -1
- package/esm/utils/domUtilities.js +8 -0
- package/esm/utils/domUtilities.js.map +1 -1
- package/esm/utils/useAutofocusOnMount.d.ts +12 -0
- package/esm/utils/useAutofocusOnMount.d.ts.map +1 -0
- package/esm/utils/useAutofocusOnMount.js +51 -0
- package/esm/utils/useAutofocusOnMount.js.map +1 -0
- package/package.json +9 -8
- package/src/@ui/UiMenu/UiMenu.scss +15 -7
- package/styles/css/dialogList.css +17 -0
- package/styles/css/dialogList.css.map +1 -1
- package/styles/css/header.css.map +1 -1
- package/styles/css/list.css +10 -0
- package/styles/css/list.css.map +1 -1
- package/styles/css/main.css +52 -7
- package/styles/css/main.css.map +1 -1
- package/styles/css/menu.css +10 -0
- package/styles/css/menu.css.map +1 -1
- package/styles/css/recurrenceForm.css +3 -0
- package/styles/css/recurrenceForm.css.map +1 -1
- package/styles/css/shareDialogSelectControl.css.map +1 -1
- package/styles/css/timepicker.css +8 -0
- package/styles/css/timepicker.css.map +1 -1
- package/styles/scss/dialogList.scss +21 -1
- package/styles/scss/header.scss +2 -4
- package/styles/scss/list.scss +11 -0
- package/styles/scss/recurrenceForm.scss +5 -0
- package/styles/scss/shareDialogSelectControl.scss +0 -1
- package/styles/scss/timepicker.scss +10 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts +0 -7
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts.map +0 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +0 -9
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +0 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +0 -39
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +0 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +0 -11
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +0 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +0 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +0 -8
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +0 -1
- 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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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;
|
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;
|
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
|
-
|
2
|
-
import { Extension } from "@codemirror/state";
|
1
|
+
/// <reference types="react" />
|
3
2
|
import { EditorView } from "@codemirror/view";
|
4
|
-
|
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":"
|
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,
|
3
|
-
import {
|
4
|
-
import {
|
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
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
29
|
-
|
30
|
-
|
31
|
-
|
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
|
-
//
|
50
|
-
const keymapExtension =
|
51
|
-
|
52
|
-
|
53
|
-
|
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
|
-
|
77
|
-
|
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,
|
1
|
+
{"version":3,"file":"useCodemirror.js","sourceRoot":"","sources":["../../../src/syntaxHighlightingInput/hooks/useCodemirror.ts"],"names":[],"mappings":"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"}
|
@@ -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"}
|