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