@gravity-ui/markdown-editor 15.26.1 → 15.27.1
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/build/cjs/bundle/MarkdownEditorView.js +1 -1
- package/build/cjs/bundle/MarkdownEditorView.js.map +1 -1
- package/build/cjs/bundle/types.d.ts +5 -0
- package/build/cjs/bundle/types.js.map +1 -1
- package/build/cjs/bundle/useMarkdownEditor.js +1 -0
- package/build/cjs/bundle/useMarkdownEditor.js.map +1 -1
- package/build/cjs/bundle/wysiwyg-preset.d.ts +1 -0
- package/build/cjs/bundle/wysiwyg-preset.js +1 -0
- package/build/cjs/bundle/wysiwyg-preset.js.map +1 -1
- package/build/cjs/extensions/behavior/Search/Search.d.ts +4 -0
- package/build/cjs/extensions/behavior/Search/Search.js +10 -0
- package/build/cjs/extensions/behavior/Search/Search.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js +157 -0
- package/build/cjs/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/commands.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/commands.js +42 -0
- package/build/cjs/extensions/behavior/Search/commands.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/const.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/const.js +10 -0
- package/build/cjs/extensions/behavior/Search/const.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/index.d.ts +1 -0
- package/build/cjs/extensions/behavior/Search/index.js +5 -0
- package/build/cjs/extensions/behavior/Search/index.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/key-handler.d.ts +1 -0
- package/build/cjs/extensions/behavior/Search/key-handler.js +14 -0
- package/build/cjs/extensions/behavior/Search/key-handler.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/search-plugin.css +7 -0
- package/build/cjs/extensions/behavior/Search/types.d.ts +3 -0
- package/build/cjs/extensions/behavior/Search/types.js +3 -0
- package/build/cjs/extensions/behavior/Search/types.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js +24 -0
- package/build/cjs/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.js +18 -0
- package/build/cjs/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.js +18 -0
- package/build/cjs/extensions/behavior/Search/utils/search-counter.js.map +1 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.js +16 -0
- package/build/cjs/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.d.ts +2 -0
- package/build/cjs/extensions/behavior/SelectionContext/index.js +20 -2
- package/build/cjs/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/cjs/extensions/behavior/index.d.ts +2 -0
- package/build/cjs/extensions/behavior/index.js +3 -0
- package/build/cjs/extensions/behavior/index.js.map +1 -1
- package/build/cjs/i18n/search/en.json +9 -2
- package/build/cjs/i18n/search/index.d.ts +9 -2
- package/build/cjs/i18n/search/ru.json +10 -3
- package/build/cjs/markup/codemirror/create.js +1 -1
- package/build/cjs/markup/codemirror/create.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/plugin.d.ts +7 -9
- package/build/cjs/markup/codemirror/search-plugin/plugin.js +44 -55
- package/build/cjs/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/cjs/markup/codemirror/search-plugin/theme.d.ts +1 -0
- package/build/cjs/markup/codemirror/search-plugin/theme.js +15 -0
- package/build/cjs/markup/codemirror/search-plugin/theme.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCardView.css +7 -0
- package/build/cjs/modules/search/components/SearchCardView.d.ts +17 -0
- package/build/cjs/modules/search/components/SearchCardView.js +22 -0
- package/build/cjs/modules/search/components/SearchCardView.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCompactView.css +5 -0
- package/build/cjs/modules/search/components/SearchCompactView.d.ts +13 -0
- package/build/cjs/modules/search/components/SearchCompactView.js +26 -0
- package/build/cjs/modules/search/components/SearchCompactView.js.map +1 -0
- package/build/cjs/modules/search/components/SearchCounter.d.ts +6 -0
- package/build/cjs/modules/search/components/SearchCounter.js +15 -0
- package/build/cjs/modules/search/components/SearchCounter.js.map +1 -0
- package/build/cjs/modules/search/components/SearchPopup.css +9 -0
- package/build/cjs/modules/search/components/SearchPopup.d.ts +15 -0
- package/build/cjs/modules/search/components/SearchPopup.js +29 -0
- package/build/cjs/modules/search/components/SearchPopup.js.map +1 -0
- package/build/cjs/modules/search/components/SearchTextInput.d.ts +10 -0
- package/build/cjs/modules/search/components/SearchTextInput.js +24 -0
- package/build/cjs/modules/search/components/SearchTextInput.js.map +1 -0
- package/build/cjs/modules/search/hooks/use-search.d.ts +24 -0
- package/build/cjs/modules/search/hooks/use-search.js +47 -0
- package/build/cjs/modules/search/hooks/use-search.js.map +1 -0
- package/build/cjs/modules/search/index.d.ts +3 -0
- package/build/cjs/modules/search/index.js +9 -0
- package/build/cjs/modules/search/index.js.map +1 -0
- package/build/cjs/modules/search/qa.d.ts +14 -0
- package/build/cjs/modules/search/qa.js +18 -0
- package/build/cjs/modules/search/qa.js.map +1 -0
- package/build/cjs/modules/search/types.d.ts +10 -0
- package/build/cjs/modules/search/types.js +3 -0
- package/build/cjs/modules/search/types.js.map +1 -0
- package/build/cjs/react-utils/useAutoFocus.d.ts +1 -1
- package/build/cjs/react-utils/useAutoFocus.js +8 -10
- package/build/cjs/react-utils/useAutoFocus.js.map +1 -1
- package/build/cjs/version.js +1 -1
- package/build/cjs/version.js.map +1 -1
- package/build/esm/bundle/MarkdownEditorView.js +1 -1
- package/build/esm/bundle/MarkdownEditorView.js.map +1 -1
- package/build/esm/bundle/types.d.ts +5 -0
- package/build/esm/bundle/types.js.map +1 -1
- package/build/esm/bundle/useMarkdownEditor.js +1 -0
- package/build/esm/bundle/useMarkdownEditor.js.map +1 -1
- package/build/esm/bundle/wysiwyg-preset.d.ts +1 -0
- package/build/esm/bundle/wysiwyg-preset.js +1 -0
- package/build/esm/bundle/wysiwyg-preset.js.map +1 -1
- package/build/esm/extensions/behavior/Search/Search.d.ts +4 -0
- package/build/esm/extensions/behavior/Search/Search.js +6 -0
- package/build/esm/extensions/behavior/Search/Search.js.map +1 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.js +153 -0
- package/build/esm/extensions/behavior/Search/SearchViewPlugin.js.map +1 -0
- package/build/esm/extensions/behavior/Search/commands.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/commands.js +37 -0
- package/build/esm/extensions/behavior/Search/commands.js.map +1 -0
- package/build/esm/extensions/behavior/Search/const.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/const.js +7 -0
- package/build/esm/extensions/behavior/Search/const.js.map +1 -0
- package/build/esm/extensions/behavior/Search/index.d.ts +1 -0
- package/build/esm/extensions/behavior/Search/index.js +2 -0
- package/build/esm/extensions/behavior/Search/index.js.map +1 -0
- package/build/esm/extensions/behavior/Search/key-handler.d.ts +1 -0
- package/build/esm/extensions/behavior/Search/key-handler.js +11 -0
- package/build/esm/extensions/behavior/Search/key-handler.js.map +1 -0
- package/build/esm/extensions/behavior/Search/search-plugin.css +7 -0
- package/build/esm/extensions/behavior/Search/types.d.ts +3 -0
- package/build/esm/extensions/behavior/Search/types.js +2 -0
- package/build/esm/extensions/behavior/Search/types.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.d.ts +7 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.js +21 -0
- package/build/esm/extensions/behavior/Search/utils/connect-tracker.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.d.ts +6 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.js +14 -0
- package/build/esm/extensions/behavior/Search/utils/focus-manager.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.d.ts +3 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.js +15 -0
- package/build/esm/extensions/behavior/Search/utils/search-counter.js.map +1 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.d.ts +4 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.js +13 -0
- package/build/esm/extensions/behavior/Search/utils/wrap-command.js.map +1 -0
- package/build/esm/extensions/behavior/SelectionContext/index.d.ts +2 -0
- package/build/esm/extensions/behavior/SelectionContext/index.js +19 -2
- package/build/esm/extensions/behavior/SelectionContext/index.js.map +1 -1
- package/build/esm/extensions/behavior/index.d.ts +2 -0
- package/build/esm/extensions/behavior/index.js +3 -0
- package/build/esm/extensions/behavior/index.js.map +1 -1
- package/build/esm/i18n/search/en.json +9 -2
- package/build/esm/i18n/search/index.d.ts +9 -2
- package/build/esm/i18n/search/ru.json +10 -3
- package/build/esm/markup/codemirror/create.js +1 -1
- package/build/esm/markup/codemirror/create.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/plugin.d.ts +7 -9
- package/build/esm/markup/codemirror/search-plugin/plugin.js +44 -55
- package/build/esm/markup/codemirror/search-plugin/plugin.js.map +1 -1
- package/build/esm/markup/codemirror/search-plugin/theme.d.ts +1 -0
- package/build/esm/markup/codemirror/search-plugin/theme.js +12 -0
- package/build/esm/markup/codemirror/search-plugin/theme.js.map +1 -0
- package/build/esm/modules/search/components/SearchCardView.css +7 -0
- package/build/esm/modules/search/components/SearchCardView.d.ts +17 -0
- package/build/esm/modules/search/components/SearchCardView.js +18 -0
- package/build/esm/modules/search/components/SearchCardView.js.map +1 -0
- package/build/esm/modules/search/components/SearchCompactView.css +5 -0
- package/build/esm/modules/search/components/SearchCompactView.d.ts +13 -0
- package/build/esm/modules/search/components/SearchCompactView.js +22 -0
- package/build/esm/modules/search/components/SearchCompactView.js.map +1 -0
- package/build/esm/modules/search/components/SearchCounter.d.ts +6 -0
- package/build/esm/modules/search/components/SearchCounter.js +11 -0
- package/build/esm/modules/search/components/SearchCounter.js.map +1 -0
- package/build/esm/modules/search/components/SearchPopup.css +9 -0
- package/build/esm/modules/search/components/SearchPopup.d.ts +15 -0
- package/build/esm/modules/search/components/SearchPopup.js +24 -0
- package/build/esm/modules/search/components/SearchPopup.js.map +1 -0
- package/build/esm/modules/search/components/SearchTextInput.d.ts +10 -0
- package/build/esm/modules/search/components/SearchTextInput.js +20 -0
- package/build/esm/modules/search/components/SearchTextInput.js.map +1 -0
- package/build/esm/modules/search/hooks/use-search.d.ts +24 -0
- package/build/esm/modules/search/hooks/use-search.js +44 -0
- package/build/esm/modules/search/hooks/use-search.js.map +1 -0
- package/build/esm/modules/search/index.d.ts +3 -0
- package/build/esm/modules/search/index.js +4 -0
- package/build/esm/modules/search/index.js.map +1 -0
- package/build/esm/modules/search/qa.d.ts +14 -0
- package/build/esm/modules/search/qa.js +15 -0
- package/build/esm/modules/search/qa.js.map +1 -0
- package/build/esm/modules/search/types.d.ts +10 -0
- package/build/esm/modules/search/types.js +2 -0
- package/build/esm/modules/search/types.js.map +1 -0
- package/build/esm/react-utils/useAutoFocus.d.ts +1 -1
- package/build/esm/react-utils/useAutoFocus.js +7 -8
- package/build/esm/react-utils/useAutoFocus.js.map +1 -1
- package/build/esm/version.js +1 -1
- package/build/esm/version.js.map +1 -1
- package/build/styles.css +28 -10
- package/package.json +2 -4
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -9
- package/build/cjs/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js +0 -83
- package/build/cjs/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.d.ts +0 -3
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js +0 -4
- package/build/esm/markup/codemirror/search-plugin/view/ReplaceIcons.js.map +0 -1
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.css +0 -10
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.d.ts +0 -27
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js +0 -77
- package/build/esm/markup/codemirror/search-plugin/view/SearchPopup.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport {InputState} from 'src/utils/input-state';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {type Logger2, globalLogger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {LoggerFacet} from './logger-facet';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nconst linkRegex = /\\[[\\s\\S]*?]\\([\\s\\S]*?\\)/g;\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n logger: Logger2.ILogger;\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n searchPanel?: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n logger,\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n searchPanel = true,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n const inputState = new InputState();\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n LoggerFacet.of(logger),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n keydown(event) {\n inputState.keydown(event);\n },\n keyup(event) {\n inputState.keyup(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return false;\n\n const pasteLogger = logger.nested({\n domEvent: 'paste',\n dataTypes: event.clipboardData.types,\n });\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n logger.event({event: 'paste-markup'});\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return true;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n pasteLogger.error(e, {event: 'parse-html-to-md'});\n globalLogger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n logger.event({event: 'paste-parsed-html'});\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return true;\n }\n }\n\n if (!inputState.shiftKey && parseInsertedUrlAsImage) {\n const linkMatches = currentLine.matchAll(linkRegex);\n const cursorPositionInCurrentLine = from - line.from;\n const isInsertedInsideLink = linkMatches.some(\n (item) =>\n cursorPositionInCurrentLine >= item.index &&\n cursorPositionInCurrentLine <= item.index + (item[0]?.length ?? 0),\n );\n\n if (!isInsertedInsideLink) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n logger.event({event: 'paste-url-as-image'});\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n return true;\n }\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n return true;\n }\n\n return false;\n },\n }),\n );\n\n if (searchPanel) {\n extensions.push(\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-anchor',\n receiver,\n }),\n );\n }\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n const {state} = args[0];\n state.facet(LoggerFacet).action({source: 'keymap', action});\n globalLogger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"../../../../src","sources":["markup/codemirror/create.ts"],"names":[],"mappings":"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","sourcesContent":["import {autocompletion} from '@codemirror/autocomplete';\nimport {\n defaultKeymap,\n history,\n historyKeymap,\n indentWithTab,\n insertNewlineKeepIndent,\n insertTab,\n} from '@codemirror/commands';\nimport {syntaxHighlighting} from '@codemirror/language';\nimport type {Extension, StateCommand} from '@codemirror/state';\nimport {\n EditorView,\n type EditorViewConfig,\n type KeyBinding,\n keymap,\n placeholder,\n} from '@codemirror/view';\n\nimport {InputState} from 'src/utils/input-state';\n\nimport type {ParseInsertedUrlAsImage} from '../../bundle';\nimport type {EventMap} from '../../bundle/Editor';\nimport {ActionName} from '../../bundle/config/action-names';\nimport type {ReactRenderStorage} from '../../extensions';\nimport {type Logger2, globalLogger} from '../../logger';\nimport {Action as A, formatter as f} from '../../shortcuts';\nimport type {Receiver} from '../../utils';\nimport {DataTransferType, shouldSkipHtmlConversion} from '../../utils/clipboard';\nimport type {DirectiveSyntaxContext} from '../../utils/directive';\nimport {\n insertEmptyRow,\n insertImages,\n insertLink,\n toH1,\n toH2,\n toH3,\n toH4,\n toH5,\n toH6,\n toggleBold,\n toggleItalic,\n toggleStrikethrough,\n toggleUnderline,\n wrapToCodeBlock,\n wrapToInlineCode,\n wrapToYfmCut,\n wrapToYfmNote,\n} from '../commands';\n\nimport {DirectiveSyntaxFacet} from './directive-facet';\nimport {type FileUploadHandler, FileUploadHandlerFacet} from './files-upload-facet';\nimport {gravityHighlightStyle, gravityTheme} from './gravity';\nimport {MarkdownConverter} from './html-to-markdown/converters';\nimport {LoggerFacet} from './logger-facet';\nimport {PairingCharactersExtension} from './pairing-chars';\nimport {ReactRendererFacet} from './react-facet';\nimport {SearchPanelPlugin} from './search-plugin/plugin';\nimport {smartReindent} from './smart-reindent';\nimport {type YfmLangOptions, yfmLang} from './yfm';\n\nexport type {YfmLangOptions};\n\ntype Autocompletion = Parameters<typeof autocompletion>[0];\n\nconst linkRegex = /\\[[\\s\\S]*?]\\([\\s\\S]*?\\)/g;\n\nexport type CreateCodemirrorParams = {\n doc: EditorViewConfig['doc'];\n placeholder: Parameters<typeof placeholder>[0];\n logger: Logger2.ILogger;\n onCancel: () => void;\n onSubmit: () => void;\n onChange: () => void;\n onDocChange: () => void;\n onScroll: (event: Event) => void;\n reactRenderer: ReactRenderStorage;\n uploadHandler?: FileUploadHandler;\n parseHtmlOnPaste?: boolean;\n parseInsertedUrlAsImage?: ParseInsertedUrlAsImage;\n needImageDimensions?: boolean;\n enableNewImageSizeCalculation?: boolean;\n extensions?: Extension[];\n disabledExtensions?: {\n history?: boolean;\n };\n keymaps?: readonly KeyBinding[];\n receiver?: Receiver<EventMap>;\n yfmLangOptions?: YfmLangOptions;\n autocompletion?: Autocompletion;\n directiveSyntax: DirectiveSyntaxContext;\n preserveEmptyRows: boolean;\n searchPanel?: boolean;\n};\n\nexport function createCodemirror(params: CreateCodemirrorParams) {\n const {\n logger,\n doc,\n reactRenderer,\n onCancel,\n onScroll,\n onSubmit,\n onChange,\n onDocChange,\n disabledExtensions = {},\n keymaps = [],\n receiver,\n yfmLangOptions,\n extensions: extraExtensions,\n placeholder: placeholderContent,\n autocompletion: autocompletionConfig,\n parseHtmlOnPaste,\n parseInsertedUrlAsImage,\n directiveSyntax,\n preserveEmptyRows,\n searchPanel = true,\n } = params;\n\n const extensions: Extension[] = [gravityTheme, placeholder(placeholderContent)];\n\n if (!disabledExtensions.history) {\n extensions.push(history());\n }\n\n const inputState = new InputState();\n\n extensions.push(\n syntaxHighlighting(gravityHighlightStyle),\n LoggerFacet.of(logger),\n keymap.of([\n {key: f.toCM(A.Bold)!, run: withLogger(ActionName.bold, toggleBold)},\n {key: f.toCM(A.Italic)!, run: withLogger(ActionName.italic, toggleItalic)},\n {key: f.toCM(A.Strike)!, run: withLogger(ActionName.strike, toggleStrikethrough)},\n {key: f.toCM(A.Underline)!, run: withLogger(ActionName.underline, toggleUnderline)},\n {key: f.toCM(A.Link)!, run: withLogger(ActionName.link, insertLink)},\n {key: f.toCM(A.Heading1)!, run: withLogger(ActionName.heading1, toH1)},\n {key: f.toCM(A.Heading2)!, run: withLogger(ActionName.heading2, toH2)},\n {key: f.toCM(A.Heading3)!, run: withLogger(ActionName.heading3, toH3)},\n {key: f.toCM(A.Heading4)!, run: withLogger(ActionName.heading4, toH4)},\n {key: f.toCM(A.Heading5)!, run: withLogger(ActionName.heading5, toH5)},\n {key: f.toCM(A.Heading6)!, run: withLogger(ActionName.heading6, toH6)},\n {key: f.toCM(A.Code)!, run: withLogger(ActionName.code_inline, wrapToInlineCode)},\n {key: f.toCM(A.CodeBlock)!, run: withLogger(ActionName.code_block, wrapToCodeBlock)},\n {key: f.toCM(A.Cut)!, run: withLogger(ActionName.yfm_cut, wrapToYfmCut)},\n {key: f.toCM(A.Note)!, run: withLogger(ActionName.yfm_note, wrapToYfmNote)},\n {\n key: f.toCM(A.Cancel)!,\n preventDefault: true,\n run: () => {\n onCancel();\n return true;\n },\n },\n {\n key: f.toCM(A.Submit)!,\n preventDefault: true,\n run: () => {\n onSubmit();\n return true;\n },\n },\n {key: 'Tab', preventDefault: true, run: insertTab},\n {\n key: 'Enter',\n shift: insertNewlineKeepIndent,\n },\n indentWithTab,\n ...defaultKeymap,\n ...(disabledExtensions.history ? [] : historyKeymap),\n ...keymaps,\n ]),\n autocompletion(autocompletionConfig),\n yfmLang(yfmLangOptions),\n ReactRendererFacet.of(reactRenderer),\n DirectiveSyntaxFacet.of(directiveSyntax),\n PairingCharactersExtension,\n EditorView.lineWrapping,\n EditorView.contentAttributes.of({spellcheck: 'true'}),\n EditorView.domEventHandlers({\n scroll(event) {\n onScroll(event);\n },\n keydown(event) {\n inputState.keydown(event);\n },\n keyup(event) {\n inputState.keyup(event);\n },\n paste(event, editor) {\n if (!event.clipboardData) return false;\n\n const pasteLogger = logger.nested({\n domEvent: 'paste',\n dataTypes: event.clipboardData.types,\n });\n\n const {from} = editor.state.selection.main;\n const line = editor.state.doc.lineAt(from);\n const currentLine = line.text;\n\n // if clipboard contains YFM content - avoid any meddling with pasted content\n // since text/yfm will contain valid markdown\n const yfmContent = event.clipboardData.getData(DataTransferType.Yfm);\n if (yfmContent) {\n event.preventDefault();\n logger.event({event: 'paste-markup'});\n const reindentedYfmContent = smartReindent(yfmContent, currentLine);\n editor.dispatch(editor.state.replaceSelection(reindentedYfmContent));\n return true;\n }\n\n // checking if a copy buffer content is suitable for convertion\n const shouldSkipHtml = shouldSkipHtmlConversion(event.clipboardData);\n\n // if we have text/html inside copy/paste buffer\n const htmlContent = event.clipboardData.getData(DataTransferType.Html);\n // if we pasting markdown from VsCode we need skip html transformation\n if (htmlContent && parseHtmlOnPaste && !shouldSkipHtml) {\n let parsedMarkdownMarkup: string | undefined;\n try {\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(htmlContent, 'text/html');\n\n const converter = new MarkdownConverter();\n parsedMarkdownMarkup = converter.processNode(htmlDoc.body).trim();\n } catch (e) {\n // The code is pretty new and there might be random issues we haven't caught yet,\n // especially with invalid HTML or weird DOM parsing errors.\n // If something goes wrong, I just want to fall back to the \"default pasting\"\n // rather than break the entire experience for the user.\n pasteLogger.error(e, {event: 'parse-html-to-md'});\n globalLogger.error(e);\n }\n\n if (parsedMarkdownMarkup !== undefined) {\n event.preventDefault();\n logger.event({event: 'paste-parsed-html'});\n const reindentedHtmlContent = smartReindent(\n parsedMarkdownMarkup,\n currentLine,\n );\n editor.dispatch(editor.state.replaceSelection(reindentedHtmlContent));\n return true;\n }\n }\n\n if (!inputState.shiftKey && parseInsertedUrlAsImage) {\n const linkMatches = currentLine.matchAll(linkRegex);\n const cursorPositionInCurrentLine = from - line.from;\n const isInsertedInsideLink = linkMatches.some(\n (item) =>\n cursorPositionInCurrentLine >= item.index &&\n cursorPositionInCurrentLine <= item.index + (item[0]?.length ?? 0),\n );\n\n if (!isInsertedInsideLink) {\n const {imageUrl, title} =\n parseInsertedUrlAsImage(\n event.clipboardData.getData(DataTransferType.Text) ?? '',\n ) || {};\n\n if (imageUrl) {\n event.preventDefault();\n logger.event({event: 'paste-url-as-image'});\n insertImages([\n {\n url: imageUrl,\n alt: title,\n title,\n },\n ])(editor);\n return true;\n }\n }\n }\n\n // Reindenting pasted plain text\n const pastedText = event.clipboardData.getData(DataTransferType.Text);\n const reindentedText = smartReindent(pastedText, currentLine);\n // but only if there is a need for reindentation\n if (pastedText !== reindentedText) {\n editor.dispatch(editor.state.replaceSelection(reindentedText));\n event.preventDefault();\n return true;\n }\n\n return false;\n },\n }),\n );\n\n if (searchPanel) {\n extensions.push(\n SearchPanelPlugin({\n anchorSelector: '.g-md-search-markup-anchor',\n receiver,\n }),\n );\n }\n\n if (preserveEmptyRows) {\n extensions.push(\n keymap.of([\n {key: f.toCM(A.EmptyRow)!, run: withLogger(ActionName.emptyRow, insertEmptyRow)},\n ]),\n );\n }\n\n if (params.uploadHandler) {\n extensions.push(\n FileUploadHandlerFacet.of({\n fn: params.uploadHandler,\n imageWithDimensions: params.needImageDimensions,\n enableNewImageSizeCalculation: params.enableNewImageSizeCalculation,\n }),\n );\n }\n\n if (extraExtensions) {\n extensions.push(...extraExtensions);\n }\n\n return new EditorView({\n doc,\n extensions,\n dispatchTransactions: (trs, view) => {\n view.update(trs);\n onChange();\n if (trs.some((tr) => tr.docChanged)) {\n onDocChange();\n }\n },\n });\n}\n\nexport function withLogger(action: string, command: StateCommand): StateCommand {\n return (...args) => {\n const {state} = args[0];\n state.facet(LoggerFacet).action({source: 'keymap', action});\n globalLogger.action({mode: 'markup', source: 'keymap', action});\n return command(...args);\n };\n}\n"]}
|
|
@@ -13,23 +13,21 @@ export interface SearchPanelPluginParams {
|
|
|
13
13
|
export declare const SearchPanelPlugin: (params: SearchPanelPluginParams) => ViewPlugin<{
|
|
14
14
|
readonly view: EditorView;
|
|
15
15
|
readonly params: SearchPanelPluginParams;
|
|
16
|
-
|
|
17
|
-
renderer: RendererItem | null;
|
|
18
|
-
searchConfig: SearchQueryConfig;
|
|
16
|
+
renderer: RendererItem;
|
|
19
17
|
receiver: Receiver<EventMap> | undefined;
|
|
20
|
-
|
|
18
|
+
panelOpened: boolean;
|
|
19
|
+
searchState: SearchQuery | null;
|
|
21
20
|
update(update: ViewUpdate): void;
|
|
22
21
|
destroy(): void;
|
|
23
|
-
|
|
22
|
+
createRenderer(): RendererItem;
|
|
24
23
|
handleEditorModeChange({ mode }: {
|
|
25
24
|
mode: MarkdownEditorMode;
|
|
26
25
|
}): void;
|
|
27
|
-
handleChange(
|
|
26
|
+
handleChange(config: SearchQueryConfig): void;
|
|
28
27
|
handleClose(): void;
|
|
29
28
|
handleSearchNext(): void;
|
|
30
29
|
handleSearchPrev(): void;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
handleReplaceAll(query: string, replacement: string): void;
|
|
30
|
+
handleReplaceNext(): void;
|
|
31
|
+
handleReplaceAll(): void;
|
|
34
32
|
}>;
|
|
35
33
|
export {};
|
|
@@ -3,91 +3,84 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SearchPanelPlugin = void 0;
|
|
4
4
|
const search_1 = require("@codemirror/search");
|
|
5
5
|
const view_1 = require("@codemirror/view");
|
|
6
|
-
const
|
|
6
|
+
const search_2 = require("../../../modules/search/index.js");
|
|
7
7
|
const react_facet_1 = require("../react-facet.js");
|
|
8
|
-
const
|
|
9
|
-
const INPUT_DELAY = 200;
|
|
8
|
+
const theme_1 = require("./theme.js");
|
|
10
9
|
const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
11
10
|
view;
|
|
12
11
|
params;
|
|
13
|
-
anchor;
|
|
14
12
|
renderer;
|
|
15
|
-
searchConfig = {
|
|
16
|
-
search: '',
|
|
17
|
-
caseSensitive: false,
|
|
18
|
-
wholeWord: false,
|
|
19
|
-
replace: '',
|
|
20
|
-
};
|
|
21
13
|
receiver;
|
|
22
|
-
|
|
14
|
+
panelOpened;
|
|
15
|
+
searchState;
|
|
23
16
|
constructor(view) {
|
|
24
17
|
this.view = view;
|
|
25
|
-
this.anchor = null;
|
|
26
|
-
this.renderer = null;
|
|
27
18
|
this.params = params;
|
|
28
19
|
this.receiver = params.receiver;
|
|
20
|
+
this.panelOpened = (0, search_1.searchPanelOpen)(view.state);
|
|
21
|
+
this.searchState = (0, search_1.getSearchQuery)(view.state);
|
|
22
|
+
this.renderer = this.createRenderer();
|
|
29
23
|
this.handleClose = this.handleClose.bind(this);
|
|
30
24
|
this.handleChange = this.handleChange.bind(this);
|
|
31
25
|
this.handleSearchNext = this.handleSearchNext.bind(this);
|
|
32
26
|
this.handleSearchPrev = this.handleSearchPrev.bind(this);
|
|
33
27
|
this.handleReplaceNext = this.handleReplaceNext.bind(this);
|
|
34
28
|
this.handleReplaceAll = this.handleReplaceAll.bind(this);
|
|
35
|
-
this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);
|
|
36
29
|
this.handleEditorModeChange = this.handleEditorModeChange.bind(this);
|
|
37
|
-
this.setViewSearchWithDelay = (0, lodash_1.debounce)(this.setViewSearch, this.params.inputDelay ?? INPUT_DELAY);
|
|
38
30
|
this.receiver?.on('change-editor-mode', this.handleEditorModeChange);
|
|
39
31
|
}
|
|
40
32
|
update(update) {
|
|
41
33
|
const isPanelOpen = (0, search_1.searchPanelOpen)(update.state);
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
34
|
+
const searchQuery = (0, search_1.getSearchQuery)(update.state);
|
|
35
|
+
if (isPanelOpen !== this.panelOpened || searchQuery !== this.searchState) {
|
|
36
|
+
this.panelOpened = isPanelOpen;
|
|
37
|
+
this.searchState = searchQuery;
|
|
38
|
+
this.renderer.rerender();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
destroy() {
|
|
42
|
+
this.renderer.remove();
|
|
43
|
+
this.receiver?.off('change-editor-mode', this.handleEditorModeChange);
|
|
44
|
+
}
|
|
45
|
+
createRenderer() {
|
|
46
|
+
return this.view.state.facet(react_facet_1.ReactRendererFacet).createItem('cm-search', () => {
|
|
47
|
+
if (!this.panelOpened || !this.searchState)
|
|
48
|
+
return null;
|
|
49
|
+
const anchor = this.view.dom.ownerDocument.querySelector(this.params.anchorSelector);
|
|
50
|
+
if (!anchor)
|
|
51
|
+
return null;
|
|
52
|
+
return (0, search_2.renderSearchPopup)({
|
|
49
53
|
open: true,
|
|
50
|
-
anchor:
|
|
51
|
-
|
|
54
|
+
anchor: anchor,
|
|
55
|
+
state: this.searchState,
|
|
52
56
|
onClose: this.handleClose,
|
|
57
|
+
onChange: this.handleChange,
|
|
53
58
|
onSearchNext: this.handleSearchNext,
|
|
54
59
|
onSearchPrev: this.handleSearchPrev,
|
|
55
60
|
onReplaceNext: this.handleReplaceNext,
|
|
56
61
|
onReplaceAll: this.handleReplaceAll,
|
|
57
|
-
|
|
58
|
-
}));
|
|
59
|
-
}
|
|
60
|
-
else if (!isPanelOpen && this.renderer) {
|
|
61
|
-
this.renderer?.remove();
|
|
62
|
-
this.renderer = null;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
destroy() {
|
|
66
|
-
this.renderer?.remove();
|
|
67
|
-
this.renderer = null;
|
|
68
|
-
this.receiver?.off('change-editor-mode', this.handleEditorModeChange);
|
|
69
|
-
}
|
|
70
|
-
setViewSearch(config) {
|
|
71
|
-
this.searchConfig = {
|
|
72
|
-
...this.searchConfig,
|
|
73
|
-
...config,
|
|
74
|
-
};
|
|
75
|
-
const searchQuery = new search_1.SearchQuery({
|
|
76
|
-
...this.searchConfig,
|
|
62
|
+
});
|
|
77
63
|
});
|
|
78
|
-
this.view.dispatch({ effects: search_1.setSearchQuery.of(searchQuery) });
|
|
79
64
|
}
|
|
80
65
|
handleEditorModeChange({ mode }) {
|
|
81
66
|
if (mode === 'wysiwyg') {
|
|
82
67
|
(0, search_1.closeSearchPanel)(this.view);
|
|
83
68
|
}
|
|
84
69
|
}
|
|
85
|
-
handleChange(
|
|
86
|
-
this.
|
|
70
|
+
handleChange(config) {
|
|
71
|
+
this.view.dispatch({
|
|
72
|
+
effects: search_1.setSearchQuery.of(new search_1.SearchQuery({
|
|
73
|
+
search: config.search,
|
|
74
|
+
replace: config.replace,
|
|
75
|
+
caseSensitive: config.caseSensitive,
|
|
76
|
+
wholeWord: config.wholeWord,
|
|
77
|
+
})),
|
|
78
|
+
});
|
|
87
79
|
}
|
|
88
80
|
handleClose() {
|
|
89
|
-
this.
|
|
81
|
+
this.handleChange({ search: '' });
|
|
90
82
|
(0, search_1.closeSearchPanel)(this.view);
|
|
83
|
+
this.view.focus();
|
|
91
84
|
}
|
|
92
85
|
handleSearchNext() {
|
|
93
86
|
(0, search_1.findNext)(this.view);
|
|
@@ -95,20 +88,16 @@ const SearchPanelPlugin = (params) => view_1.ViewPlugin.fromClass(class {
|
|
|
95
88
|
handleSearchPrev() {
|
|
96
89
|
(0, search_1.findPrevious)(this.view);
|
|
97
90
|
}
|
|
98
|
-
|
|
99
|
-
this.setViewSearch(config);
|
|
100
|
-
}
|
|
101
|
-
handleReplaceNext(query, replacement) {
|
|
102
|
-
this.setViewSearch({ search: query, replace: replacement });
|
|
91
|
+
handleReplaceNext() {
|
|
103
92
|
(0, search_1.replaceNext)(this.view);
|
|
104
93
|
}
|
|
105
|
-
handleReplaceAll(
|
|
106
|
-
this.setViewSearch({ search: query, replace: replacement });
|
|
94
|
+
handleReplaceAll() {
|
|
107
95
|
(0, search_1.replaceAll)(this.view);
|
|
108
96
|
}
|
|
109
97
|
}, {
|
|
110
98
|
provide: () => [
|
|
111
99
|
view_1.keymap.of(search_1.searchKeymap),
|
|
100
|
+
theme_1.searchTheme,
|
|
112
101
|
(0, search_1.search)({
|
|
113
102
|
createPanel: () => ({
|
|
114
103
|
// Create an empty search panel
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n replaceAll,\n replaceNext,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from '../../../bundle';\nimport type {EventMap} from '../../../bundle/Editor';\nimport type {RendererItem} from '../../../extensions';\nimport {debounce} from '../../../lodash';\nimport type {Receiver} from '../../../utils';\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {renderSearchPopup} from './view/SearchPopup';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nconst INPUT_DELAY = 200;\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n anchor: HTMLElement | null;\n renderer: RendererItem | null;\n searchConfig: SearchQueryConfig = {\n search: '',\n caseSensitive: false,\n wholeWord: false,\n replace: '',\n };\n receiver: Receiver<EventMap> | undefined;\n\n setViewSearchWithDelay: (config: Partial<SearchQueryConfig>) => void;\n\n constructor(view: EditorView) {\n this.view = view;\n this.anchor = null;\n this.renderer = null;\n this.params = params;\n this.receiver = params.receiver;\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleReplaceNext = this.handleReplaceNext.bind(this);\n this.handleReplaceAll = this.handleReplaceAll.bind(this);\n this.handleSearchConfigChange = this.handleSearchConfigChange.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.setViewSearchWithDelay = debounce(\n this.setViewSearch,\n this.params.inputDelay ?? INPUT_DELAY,\n );\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n\n if (isPanelOpen && !this.renderer) {\n const initial = getSearchQuery(update.state);\n this.anchor = document.querySelector(this.params.anchorSelector);\n this.renderer = this.view.state\n .facet(ReactRendererFacet)\n .createItem('cm-search', () =>\n renderSearchPopup({\n initial,\n open: true,\n anchor: this.anchor,\n onChange: this.handleChange,\n onClose: this.handleClose,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onReplaceNext: this.handleReplaceNext,\n onReplaceAll: this.handleReplaceAll,\n onConfigChange: this.handleSearchConfigChange,\n }),\n );\n } else if (!isPanelOpen && this.renderer) {\n this.renderer?.remove();\n this.renderer = null;\n }\n }\n\n destroy() {\n this.renderer?.remove();\n this.renderer = null;\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n setViewSearch(config: Partial<SearchQueryConfig>) {\n this.searchConfig = {\n ...this.searchConfig,\n ...config,\n };\n const searchQuery = new SearchQuery({\n ...this.searchConfig,\n });\n\n this.view.dispatch({effects: setSearchQuery.of(searchQuery)});\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(search: string) {\n this.setViewSearchWithDelay({search});\n }\n\n handleClose() {\n this.setViewSearch({search: ''});\n closeSearchPanel(this.view);\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleSearchConfigChange(config: Partial<SearchQueryConfig>) {\n this.setViewSearch(config);\n }\n\n handleReplaceNext(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceNext(this.view);\n }\n\n handleReplaceAll(query: string, replacement: string) {\n this.setViewSearch({search: query, replace: replacement});\n replaceAll(this.view);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/plugin.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n SearchQuery,\n closeSearchPanel,\n findNext,\n findPrevious,\n getSearchQuery,\n replaceAll,\n replaceNext,\n search,\n searchKeymap,\n searchPanelOpen,\n setSearchQuery,\n} from '@codemirror/search';\nimport {\n type EditorView,\n type PluginValue,\n ViewPlugin,\n type ViewUpdate,\n keymap,\n} from '@codemirror/view';\n\nimport type {MarkdownEditorMode} from 'src/bundle';\nimport type {EventMap} from 'src/bundle/Editor';\nimport type {RendererItem} from 'src/extensions';\nimport {renderSearchPopup} from 'src/modules/search';\nimport type {Receiver} from 'src/utils';\n\nimport {ReactRendererFacet} from '../react-facet';\n\nimport {searchTheme} from './theme';\n\ntype SearchQueryConfig = ConstructorParameters<typeof SearchQuery>[0];\n\nexport interface SearchPanelPluginParams {\n anchorSelector: string;\n inputDelay?: number;\n receiver?: Receiver<EventMap>;\n}\n\nexport const SearchPanelPlugin = (params: SearchPanelPluginParams) =>\n ViewPlugin.fromClass(\n class implements PluginValue {\n readonly view: EditorView;\n readonly params: SearchPanelPluginParams;\n\n renderer: RendererItem;\n receiver: Receiver<EventMap> | undefined;\n\n panelOpened: boolean;\n searchState: SearchQuery | null;\n\n constructor(view: EditorView) {\n this.view = view;\n this.params = params;\n this.receiver = params.receiver;\n\n this.panelOpened = searchPanelOpen(view.state);\n this.searchState = getSearchQuery(view.state);\n this.renderer = this.createRenderer();\n\n this.handleClose = this.handleClose.bind(this);\n this.handleChange = this.handleChange.bind(this);\n this.handleSearchNext = this.handleSearchNext.bind(this);\n this.handleSearchPrev = this.handleSearchPrev.bind(this);\n this.handleReplaceNext = this.handleReplaceNext.bind(this);\n this.handleReplaceAll = this.handleReplaceAll.bind(this);\n this.handleEditorModeChange = this.handleEditorModeChange.bind(this);\n\n this.receiver?.on('change-editor-mode', this.handleEditorModeChange);\n }\n\n update(update: ViewUpdate): void {\n const isPanelOpen = searchPanelOpen(update.state);\n const searchQuery = getSearchQuery(update.state);\n\n if (isPanelOpen !== this.panelOpened || searchQuery !== this.searchState) {\n this.panelOpened = isPanelOpen;\n this.searchState = searchQuery;\n this.renderer.rerender();\n }\n }\n\n destroy() {\n this.renderer.remove();\n this.receiver?.off('change-editor-mode', this.handleEditorModeChange);\n }\n\n createRenderer() {\n return this.view.state.facet(ReactRendererFacet).createItem('cm-search', () => {\n if (!this.panelOpened || !this.searchState) return null;\n\n const anchor = this.view.dom.ownerDocument.querySelector(\n this.params.anchorSelector,\n );\n\n if (!anchor) return null;\n\n return renderSearchPopup({\n open: true,\n anchor: anchor,\n state: this.searchState,\n onClose: this.handleClose,\n onChange: this.handleChange,\n onSearchNext: this.handleSearchNext,\n onSearchPrev: this.handleSearchPrev,\n onReplaceNext: this.handleReplaceNext,\n onReplaceAll: this.handleReplaceAll,\n });\n });\n }\n\n handleEditorModeChange({mode}: {mode: MarkdownEditorMode}) {\n if (mode === 'wysiwyg') {\n closeSearchPanel(this.view);\n }\n }\n\n handleChange(config: SearchQueryConfig) {\n this.view.dispatch({\n effects: setSearchQuery.of(\n new SearchQuery({\n search: config.search,\n replace: config.replace,\n caseSensitive: config.caseSensitive,\n wholeWord: config.wholeWord,\n }),\n ),\n });\n }\n\n handleClose() {\n this.handleChange({search: ''});\n closeSearchPanel(this.view);\n this.view.focus();\n }\n\n handleSearchNext() {\n findNext(this.view);\n }\n\n handleSearchPrev() {\n findPrevious(this.view);\n }\n\n handleReplaceNext() {\n replaceNext(this.view);\n }\n\n handleReplaceAll() {\n replaceAll(this.view);\n }\n },\n {\n provide: () => [\n keymap.of(searchKeymap),\n searchTheme,\n search({\n createPanel: () => ({\n // Create an empty search panel\n dom: document.createElement('div'),\n }),\n }),\n ],\n },\n );\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const searchTheme: import("@codemirror/state").Extension;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.searchTheme = void 0;
|
|
4
|
+
const view_1 = require("../../../cm/view.js");
|
|
5
|
+
exports.searchTheme = view_1.EditorView.baseTheme({
|
|
6
|
+
'&light, &dark': {
|
|
7
|
+
'& .cm-searchMatch': {
|
|
8
|
+
backgroundColor: 'var(--g-color-base-info-light)',
|
|
9
|
+
},
|
|
10
|
+
'& .cm-searchMatch-selected': {
|
|
11
|
+
backgroundColor: 'var(--g-color-base-info-heavy)',
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"../../../../../src","sources":["markup/codemirror/search-plugin/theme.ts"],"names":[],"mappings":";;;AAAA,8CAAoC;AAEvB,QAAA,WAAW,GAAG,iBAAU,CAAC,SAAS,CAAC;IAC5C,eAAe,EAAE;QACb,mBAAmB,EAAE;YACjB,eAAe,EAAE,gCAAgC;SACpD;QACD,4BAA4B,EAAE;YAC1B,eAAe,EAAE,gCAAgC;SACpD;KACJ;CACJ,CAAC,CAAC","sourcesContent":["import {EditorView} from '#cm/view';\n\nexport const searchTheme = EditorView.baseTheme({\n '&light, &dark': {\n '& .cm-searchMatch': {\n backgroundColor: 'var(--g-color-base-info-light)',\n },\n '& .cm-searchMatch-selected': {\n backgroundColor: 'var(--g-color-base-info-heavy)',\n },\n },\n});\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type DOMProps } from '@gravity-ui/uikit';
|
|
2
|
+
import type { SearchCounter, SearchState } from "../types.js";
|
|
3
|
+
import "./SearchCardView.css";
|
|
4
|
+
export type SearchCardViewProps = DOMProps & {
|
|
5
|
+
counter?: SearchCounter;
|
|
6
|
+
searchState: SearchState;
|
|
7
|
+
onClose: () => void;
|
|
8
|
+
onSearchChange: (value: string) => void;
|
|
9
|
+
onReplacementChange: (value: string) => void;
|
|
10
|
+
onFindPrevious: () => void;
|
|
11
|
+
onFindNext: () => void;
|
|
12
|
+
onReplace: () => void;
|
|
13
|
+
onReplaceAll: () => void;
|
|
14
|
+
onWholeWordChange: (value: boolean) => void;
|
|
15
|
+
onCaseSensitiveChange: (value: boolean) => void;
|
|
16
|
+
};
|
|
17
|
+
export declare const SearchCardView: React.FC<SearchCardViewProps>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SearchCardView = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const components_1 = require("@gravity-ui/components");
|
|
7
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
8
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
9
|
+
const classname_1 = require("../../../classname.js");
|
|
10
|
+
const search_1 = require("../../../i18n/search/index.js");
|
|
11
|
+
const useAutoFocus_1 = require("../../../react-utils/useAutoFocus.js");
|
|
12
|
+
const qa_1 = require("../qa.js");
|
|
13
|
+
const SearchTextInput_1 = require("./SearchTextInput.js");
|
|
14
|
+
require("./SearchCardView.css");
|
|
15
|
+
const b = (0, classname_1.cn)('search-card');
|
|
16
|
+
const SearchCardView = ({ style, className, counter, searchState, onClose, onSearchChange, onReplacementChange, onFindPrevious, onFindNext, onReplace, onReplaceAll, onWholeWordChange, onCaseSensitiveChange, }) => {
|
|
17
|
+
const searchInputRef = (0, react_1.useRef)(null);
|
|
18
|
+
(0, useAutoFocus_1.useAutoFocus)(searchInputRef, [], 200);
|
|
19
|
+
return ((0, jsx_runtime_1.jsxs)(uikit_1.Card, { size: "l", spacing: { pt: 4, pb: 5, pl: 5, pr: 5 }, style: style, className: b(null, className), children: [(0, jsx_runtime_1.jsxs)(uikit_1.Flex, { spacing: { mb: 5 }, alignItems: "center", justifyContent: "space-between", className: b('header'), children: [(0, jsx_runtime_1.jsx)(uikit_1.Text, { variant: "subheader-2", className: b('title'), children: (0, search_1.i18n)('title') }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { size: "m", view: "flat", onClick: onClose, "aria-label": (0, search_1.i18n)('action_close'), qa: qa_1.SearchQA.CloseBtn, children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Xmark }) })] }), (0, jsx_runtime_1.jsxs)(components_1.FormRow, { direction: "row", label: (0, search_1.i18n)('title_search'), className: b('row', (0, uikit_1.sp)({ mb: 4 })), children: [(0, jsx_runtime_1.jsx)(SearchTextInput_1.SearchTextInput, { counter: counter, onFindNext: onFindNext, onFindPrevious: onFindPrevious, controlRef: searchInputRef, className: (0, uikit_1.sp)({ mb: 2 }), onUpdate: onSearchChange, value: searchState.search, delay: 300 }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", onUpdate: onCaseSensitiveChange, checked: searchState.caseSensitive, qa: qa_1.SearchQA.CaseSensitiveCheck, className: (0, uikit_1.sp)({ mr: 4 }), children: (0, search_1.i18n)('label_case-sensitive') }), (0, jsx_runtime_1.jsx)(uikit_1.Checkbox, { size: "m", checked: searchState.wholeWord, onUpdate: onWholeWordChange, qa: qa_1.SearchQA.WholeWordCheck, children: (0, search_1.i18n)('label_whole-word') })] }), (0, jsx_runtime_1.jsx)(components_1.FormRow, { direction: "row", label: (0, search_1.i18n)('title_replace'), className: b('row', (0, uikit_1.sp)({ mb: 5 })), children: (0, jsx_runtime_1.jsx)(components_1.DelayedTextInput, { size: "l", delay: 300, value: searchState.replace, onUpdate: onReplacementChange, qa: qa_1.SearchQA.ReplaceInput }) }), (0, jsx_runtime_1.jsxs)(uikit_1.Flex, { justifyContent: "flex-end", gap: 2, className: b('footer'), children: [(0, jsx_runtime_1.jsx)(uikit_1.Button, { size: "l", view: "normal", onClick: onReplaceAll, disabled: !searchState.search, qa: qa_1.SearchQA.ReplaceAllBtn, children: (0, search_1.i18n)('action_replace_all') }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { view: "action", size: "l", disabled: !searchState.search, onClick: onReplace, qa: qa_1.SearchQA.ReplaceBtn, children: (0, search_1.i18n)('action_replace') })] })] }));
|
|
20
|
+
};
|
|
21
|
+
exports.SearchCardView = SearchCardView;
|
|
22
|
+
//# sourceMappingURL=SearchCardView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchCardView.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCardView.tsx"],"names":[],"mappings":"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","sourcesContent":["import {useRef} from 'react';\n\nimport {DelayedTextInput, FormRow} from '@gravity-ui/components';\nimport {Xmark} from '@gravity-ui/icons';\nimport {Button, Card, Checkbox, type DOMProps, Flex, Icon, Text, sp} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\nimport {i18n} from 'src/i18n/search';\nimport {useAutoFocus} from 'src/react-utils/useAutoFocus';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter, SearchState} from '../types';\n\nimport {SearchTextInput} from './SearchTextInput';\n\nimport './SearchCardView.scss';\n\nexport type SearchCardViewProps = DOMProps & {\n counter?: SearchCounter;\n searchState: SearchState;\n onClose: () => void;\n onSearchChange: (value: string) => void;\n onReplacementChange: (value: string) => void;\n onFindPrevious: () => void;\n onFindNext: () => void;\n onReplace: () => void;\n onReplaceAll: () => void;\n onWholeWordChange: (value: boolean) => void;\n onCaseSensitiveChange: (value: boolean) => void;\n};\n\nconst b = cn('search-card');\n\nexport const SearchCardView: React.FC<SearchCardViewProps> = ({\n style,\n className,\n\n counter,\n searchState,\n onClose,\n onSearchChange,\n onReplacementChange,\n onFindPrevious,\n onFindNext,\n onReplace,\n onReplaceAll,\n onWholeWordChange,\n onCaseSensitiveChange,\n}) => {\n const searchInputRef = useRef<HTMLInputElement>(null);\n\n useAutoFocus(searchInputRef, [], 200);\n\n return (\n <Card\n size=\"l\"\n spacing={{pt: 4, pb: 5, pl: 5, pr: 5}}\n style={style}\n className={b(null, className)}\n >\n <Flex\n spacing={{mb: 5}}\n alignItems=\"center\"\n justifyContent=\"space-between\"\n className={b('header')}\n >\n <Text variant=\"subheader-2\" className={b('title')}>\n {i18n('title')}\n </Text>\n <Button\n size=\"m\"\n view=\"flat\"\n onClick={onClose}\n aria-label={i18n('action_close')}\n qa={SearchQA.CloseBtn}\n >\n <Icon data={Xmark} />\n </Button>\n </Flex>\n\n <FormRow direction=\"row\" label={i18n('title_search')} className={b('row', sp({mb: 4}))}>\n <SearchTextInput\n counter={counter}\n onFindNext={onFindNext}\n onFindPrevious={onFindPrevious}\n controlRef={searchInputRef}\n className={sp({mb: 2})}\n onUpdate={onSearchChange}\n value={searchState.search}\n delay={300}\n />\n\n <Checkbox\n size=\"m\"\n onUpdate={onCaseSensitiveChange}\n checked={searchState.caseSensitive}\n qa={SearchQA.CaseSensitiveCheck}\n className={sp({mr: 4})}\n >\n {i18n('label_case-sensitive')}\n </Checkbox>\n\n <Checkbox\n size=\"m\"\n checked={searchState.wholeWord}\n onUpdate={onWholeWordChange}\n qa={SearchQA.WholeWordCheck}\n >\n {i18n('label_whole-word')}\n </Checkbox>\n </FormRow>\n\n <FormRow\n direction=\"row\"\n label={i18n('title_replace')}\n className={b('row', sp({mb: 5}))}\n >\n <DelayedTextInput\n size=\"l\"\n delay={300}\n value={searchState.replace}\n onUpdate={onReplacementChange}\n qa={SearchQA.ReplaceInput}\n />\n </FormRow>\n\n <Flex justifyContent=\"flex-end\" gap={2} className={b('footer')}>\n <Button\n size=\"l\"\n view=\"normal\"\n onClick={onReplaceAll}\n disabled={!searchState.search}\n qa={SearchQA.ReplaceAllBtn}\n >\n {i18n('action_replace_all')}\n </Button>\n <Button\n view=\"action\"\n size=\"l\"\n disabled={!searchState.search}\n onClick={onReplace}\n qa={SearchQA.ReplaceBtn}\n >\n {i18n('action_replace')}\n </Button>\n </Flex>\n </Card>\n );\n};\n"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type DOMProps, type QAProps } from '@gravity-ui/uikit';
|
|
2
|
+
import type { SearchCounter } from "../types.js";
|
|
3
|
+
import "./SearchCompactView.css";
|
|
4
|
+
export type SearchCompactProps = DOMProps & QAProps & {
|
|
5
|
+
value: string;
|
|
6
|
+
counter?: SearchCounter;
|
|
7
|
+
onChange: (value: string) => void;
|
|
8
|
+
onFindPrevious: () => void;
|
|
9
|
+
onFindNext: () => void;
|
|
10
|
+
onExpand: () => void;
|
|
11
|
+
onClose: () => void;
|
|
12
|
+
};
|
|
13
|
+
export declare const SeachCompactView: React.FC<SearchCompactProps>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SeachCompactView = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const icons_1 = require("@gravity-ui/icons");
|
|
7
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
8
|
+
const classname_1 = require("../../../classname.js");
|
|
9
|
+
const search_1 = require("../../../i18n/search/index.js");
|
|
10
|
+
const useAutoFocus_1 = require("../../../react-utils/useAutoFocus.js");
|
|
11
|
+
const qa_1 = require("../qa.js");
|
|
12
|
+
const SearchTextInput_1 = require("./SearchTextInput.js");
|
|
13
|
+
require("./SearchCompactView.css");
|
|
14
|
+
const b = (0, classname_1.cn)('search-compact');
|
|
15
|
+
const SeachCompactView = function SearchCompactView({ value, counter, onChange, onFindNext, onFindPrevious, onExpand, onClose, qa, style, className, }) {
|
|
16
|
+
const inputRef = (0, react_1.useRef)(null);
|
|
17
|
+
(0, useAutoFocus_1.useAutoFocus)(inputRef, [], 200);
|
|
18
|
+
return ((0, jsx_runtime_1.jsxs)(uikit_1.Card, { spacing: { pr: 1 }, "data-qa": qa, style: style, className: b(null, className), children: [(0, jsx_runtime_1.jsx)(SearchTextInput_1.SearchTextInput, { counter: counter, onFindNext: onFindNext, onFindPrevious: onFindPrevious, value: value, view: "clear", delay: 300, onUpdate: onChange, controlRef: inputRef, placeholder: (0, search_1.i18n)('search_placeholder'), className: (0, uikit_1.sp)({ pl: 3 }) }), (0, jsx_runtime_1.jsx)("div", { className: (0, uikit_1.sp)({ mr: 1 }), style: {
|
|
19
|
+
flexShrink: 0,
|
|
20
|
+
background: 'var(--g-color-line-generic-solid)',
|
|
21
|
+
height: '36px',
|
|
22
|
+
width: '1px',
|
|
23
|
+
} }), (0, jsx_runtime_1.jsx)(uikit_1.Tooltip, { content: (0, search_1.i18n)('action_expand'), role: "label", children: (props, ref) => ((0, jsx_runtime_1.jsx)(uikit_1.Button, { ...props, size: "m", view: "flat-secondary", onClick: onExpand, qa: qa_1.SearchQA.ExpandBtn, ref: ref, "aria-label": (0, search_1.i18n)('action_expand'), children: (0, jsx_runtime_1.jsx)(uikit_1.ButtonIcon, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.ChevronsExpandUpRight }) }) })) }), (0, jsx_runtime_1.jsx)(uikit_1.Button, { size: "m", view: "flat-secondary", onClick: onClose, className: (0, uikit_1.sp)({ ml: 1 }), "aria-label": (0, search_1.i18n)('action_close'), qa: qa_1.SearchQA.CloseBtn, children: (0, jsx_runtime_1.jsx)(uikit_1.ButtonIcon, { children: (0, jsx_runtime_1.jsx)(uikit_1.Icon, { data: icons_1.Xmark }) }) })] }));
|
|
24
|
+
};
|
|
25
|
+
exports.SeachCompactView = SeachCompactView;
|
|
26
|
+
//# sourceMappingURL=SearchCompactView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchCompactView.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCompactView.tsx"],"names":[],"mappings":";;;;AAAA,iCAA6B;AAE7B,6CAA+D;AAC/D,6CAS2B;AAE3B,qDAAiC;AACjC,0DAAqC;AACrC,uEAA0D;AAE1D,iCAA+B;AAG/B,0DAAkD;AAElD,mCAAkC;AAElC,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,gBAAgB,CAAC,CAAC;AAaxB,MAAM,gBAAgB,GAAiC,SAAS,iBAAiB,CAAC,EACrF,KAAK,EACL,OAAO,EAEP,QAAQ,EACR,UAAU,EACV,cAAc,EACd,QAAQ,EACR,OAAO,EAEP,EAAE,EACF,KAAK,EACL,SAAS,GACZ;IACG,MAAM,QAAQ,GAAG,IAAA,cAAM,EAAmB,IAAI,CAAC,CAAC;IAEhD,IAAA,2BAAY,EAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IAEhC,OAAO,CACH,wBAAC,YAAI,IAAC,OAAO,EAAE,EAAC,EAAE,EAAE,CAAC,EAAC,aAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,aAC5E,uBAAC,iCAAe,IACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,IAAA,aAAI,EAAC,oBAAoB,CAAC,EACvC,SAAS,EAAE,IAAA,UAAE,EAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,GACxB,EAEF,gCACI,SAAS,EAAE,IAAA,UAAE,EAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,EACtB,KAAK,EAAE;oBACH,UAAU,EAAE,CAAC;oBACb,UAAU,EAAE,mCAAmC;oBAC/C,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,KAAK;iBACf,GACH,EAGF,uBAAC,eAAO,IAAC,OAAO,EAAE,IAAA,aAAI,EAAC,eAAe,CAAC,EAAE,IAAI,EAAC,OAAO,YAChD,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CACb,uBAAC,cAAM,OACC,KAAK,EACT,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,QAAQ,EACjB,EAAE,EAAE,aAAQ,CAAC,SAAS,EACtB,GAAG,EAAE,GAAmC,gBAC5B,IAAA,aAAI,EAAC,eAAe,CAAC,YAEjC,uBAAC,kBAAU,cACP,uBAAC,YAAI,IAAC,IAAI,EAAE,6BAAqB,GAAI,GAC5B,GACR,CACZ,GACK,EACV,uBAAC,cAAM,IACH,IAAI,EAAC,GAAG,EACR,IAAI,EAAC,gBAAgB,EACrB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,IAAA,UAAE,EAAC,EAAC,EAAE,EAAE,CAAC,EAAC,CAAC,gBACV,IAAA,aAAI,EAAC,cAAc,CAAC,EAChC,EAAE,EAAE,aAAQ,CAAC,QAAQ,YAErB,uBAAC,kBAAU,cACP,uBAAC,YAAI,IAAC,IAAI,EAAE,aAAK,GAAI,GACZ,GACR,IACN,CACV,CAAC;AACN,CAAC,CAAC;AA3EW,QAAA,gBAAgB,oBA2E3B","sourcesContent":["import {useRef} from 'react';\n\nimport {ChevronsExpandUpRight, Xmark} from '@gravity-ui/icons';\nimport {\n Button,\n ButtonIcon,\n Card,\n type DOMProps,\n Icon,\n type QAProps,\n Tooltip,\n sp,\n} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\nimport {i18n} from 'src/i18n/search';\nimport {useAutoFocus} from 'src/react-utils/useAutoFocus';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nimport {SearchTextInput} from './SearchTextInput';\n\nimport './SearchCompactView.scss';\n\nconst b = cn('search-compact');\n\nexport type SearchCompactProps = DOMProps &\n QAProps & {\n value: string;\n counter?: SearchCounter;\n onChange: (value: string) => void;\n onFindPrevious: () => void;\n onFindNext: () => void;\n onExpand: () => void;\n onClose: () => void;\n };\n\nexport const SeachCompactView: React.FC<SearchCompactProps> = function SearchCompactView({\n value,\n counter,\n\n onChange,\n onFindNext,\n onFindPrevious,\n onExpand,\n onClose,\n\n qa,\n style,\n className,\n}) {\n const inputRef = useRef<HTMLInputElement>(null);\n\n useAutoFocus(inputRef, [], 200);\n\n return (\n <Card spacing={{pr: 1}} data-qa={qa} style={style} className={b(null, className)}>\n <SearchTextInput\n counter={counter}\n onFindNext={onFindNext}\n onFindPrevious={onFindPrevious}\n value={value}\n view=\"clear\"\n delay={300}\n onUpdate={onChange}\n controlRef={inputRef}\n placeholder={i18n('search_placeholder')}\n className={sp({pl: 3})}\n />\n\n <div\n className={sp({mr: 1})}\n style={{\n flexShrink: 0,\n background: 'var(--g-color-line-generic-solid)',\n height: '36px',\n width: '1px',\n }}\n />\n\n {/* eslint-disable-next-line jsx-a11y/aria-role */}\n <Tooltip content={i18n('action_expand')} role=\"label\">\n {(props, ref) => (\n <Button\n {...props}\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onExpand}\n qa={SearchQA.ExpandBtn}\n ref={ref as React.Ref<HTMLButtonElement>}\n aria-label={i18n('action_expand')}\n >\n <ButtonIcon>\n <Icon data={ChevronsExpandUpRight} />\n </ButtonIcon>\n </Button>\n )}\n </Tooltip>\n <Button\n size=\"m\"\n view=\"flat-secondary\"\n onClick={onClose}\n className={sp({ml: 1})}\n aria-label={i18n('action_close')}\n qa={SearchQA.CloseBtn}\n >\n <ButtonIcon>\n <Icon data={Xmark} />\n </ButtonIcon>\n </Button>\n </Card>\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SearchCounterText = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
6
|
+
const search_1 = require("../../../i18n/search/index.js");
|
|
7
|
+
const qa_1 = require("../qa.js");
|
|
8
|
+
const SearchCounterText = ({ counter, style, className }) => {
|
|
9
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.Text, { whiteSpace: "nowrap", style: style, className: className, qa: qa_1.SearchQA.Counter, children: (0, search_1.i18n)('search_counter', {
|
|
10
|
+
current: String(counter.current),
|
|
11
|
+
total: String(counter.total),
|
|
12
|
+
}) }));
|
|
13
|
+
};
|
|
14
|
+
exports.SearchCounterText = SearchCounterText;
|
|
15
|
+
//# sourceMappingURL=SearchCounter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchCounter.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchCounter.tsx"],"names":[],"mappings":";;;;AAAA,6CAAsD;AAEtD,0DAAqC;AAErC,iCAA+B;AAOxB,MAAM,iBAAiB,GAAiC,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAC,EAAE,EAAE;IAC3F,OAAO,CACH,uBAAC,YAAI,IAAC,UAAU,EAAC,QAAQ,EAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,aAAQ,CAAC,OAAO,YAC7E,IAAA,aAAI,EAAC,gBAAgB,EAAE;YACpB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;YAChC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAC/B,CAAC,GACC,CACV,CAAC;AACN,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B","sourcesContent":["import {type DOMProps, Text} from '@gravity-ui/uikit';\n\nimport {i18n} from 'src/i18n/search';\n\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nexport type SearchCounterProps = DOMProps & {\n counter: SearchCounter;\n};\n\nexport const SearchCounterText: React.FC<SearchCounterProps> = ({counter, style, className}) => {\n return (\n <Text whiteSpace=\"nowrap\" style={style} className={className} qa={SearchQA.Counter}>\n {i18n('search_counter', {\n current: String(counter.current),\n total: String(counter.total),\n })}\n </Text>\n );\n};\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type UseSearchProps } from "../hooks/use-search.js";
|
|
2
|
+
import type { SearchCounter } from "../types.js";
|
|
3
|
+
import "./SearchPopup.css";
|
|
4
|
+
export type SearchPopupProps = UseSearchProps & {
|
|
5
|
+
open: boolean;
|
|
6
|
+
anchor: Element;
|
|
7
|
+
counter?: SearchCounter;
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
};
|
|
10
|
+
export declare const SearchPopup: React.FC<SearchPopupProps>;
|
|
11
|
+
interface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {
|
|
12
|
+
anchor: Element | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function renderSearchPopup({ anchor, ...props }: SearchPopupWithRefProps): JSX.Element | null;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SearchPopup = void 0;
|
|
4
|
+
exports.renderSearchPopup = renderSearchPopup;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const uikit_1 = require("@gravity-ui/uikit");
|
|
7
|
+
const classname_1 = require("../../../classname.js");
|
|
8
|
+
const use_search_1 = require("../hooks/use-search.js");
|
|
9
|
+
const qa_1 = require("../qa.js");
|
|
10
|
+
const SearchCardView_1 = require("./SearchCardView.js");
|
|
11
|
+
const SearchCompactView_1 = require("./SearchCompactView.js");
|
|
12
|
+
require("./SearchPopup.css");
|
|
13
|
+
const b = (0, classname_1.cn)('search-popup');
|
|
14
|
+
const SearchPopup = ({ open, anchor, counter, onClose, ...props }) => {
|
|
15
|
+
const { isCompact, searchState, handlers } = (0, use_search_1.useSearch)(props);
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)(uikit_1.Popup, { open: open, qa: qa_1.SearchQA.Panel, anchorElement: anchor, placement: "bottom-end", className: b({ compact: isCompact }), onOpenChange: (_open, _event, reason) => {
|
|
17
|
+
if (reason === 'escape-key') {
|
|
18
|
+
onClose();
|
|
19
|
+
}
|
|
20
|
+
}, children: isCompact ? ((0, jsx_runtime_1.jsx)(SearchCompactView_1.SeachCompactView, { counter: counter, onClose: onClose, value: searchState.search, onExpand: handlers.onExpand, onChange: handlers.onSearchChange, onFindNext: handlers.onFindNext, onFindPrevious: handlers.onFindPrevious })) : ((0, jsx_runtime_1.jsx)(SearchCardView_1.SearchCardView, { counter: counter, onClose: onClose, searchState: searchState, onSearchChange: handlers.onSearchChange, onReplacementChange: handlers.onReplaceChange, onFindNext: handlers.onFindNext, onFindPrevious: handlers.onFindPrevious, onReplace: handlers.onReplace, onReplaceAll: handlers.onReplaceAll, onWholeWordChange: handlers.onWholeWordChange, onCaseSensitiveChange: handlers.onCaseSensitiveChange })) }));
|
|
21
|
+
};
|
|
22
|
+
exports.SearchPopup = SearchPopup;
|
|
23
|
+
exports.SearchPopup.displayName = 'SearchPopup';
|
|
24
|
+
function renderSearchPopup({ anchor, ...props }) {
|
|
25
|
+
if (!anchor)
|
|
26
|
+
return null;
|
|
27
|
+
return (0, jsx_runtime_1.jsx)(exports.SearchPopup, { anchor: anchor, ...props });
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=SearchPopup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchPopup.js","sourceRoot":"../../../../../src","sources":["modules/search/components/SearchPopup.tsx"],"names":[],"mappings":";;;AA+EA,8CAIC;;AAnFD,6CAAwC;AAExC,qDAAiC;AAEjC,uDAAmE;AACnE,iCAA+B;AAG/B,wDAAgD;AAChD,8DAAqD;AAErD,6BAA4B;AAE5B,MAAM,CAAC,GAAG,IAAA,cAAE,EAAC,cAAc,CAAC,CAAC;AAStB,MAAM,WAAW,GAA+B,CAAC,EACpD,IAAI,EACJ,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,KAAK,EACX,EAAE,EAAE;IACD,MAAM,EAAC,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAC,GAAG,IAAA,sBAAS,EAAC,KAAK,CAAC,CAAC;IAE5D,OAAO,CACH,uBAAC,aAAK,IACF,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,aAAQ,CAAC,KAAK,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAC,YAAY,EACtB,SAAS,EAAE,CAAC,CAAC,EAAC,OAAO,EAAE,SAAS,EAAC,CAAC,EAClC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YACpC,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;gBAC1B,OAAO,EAAE,CAAC;YACd,CAAC;QACL,CAAC,YAEA,SAAS,CAAC,CAAC,CAAC,CACT,uBAAC,oCAAgB,IACb,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,WAAW,CAAC,MAAM,EACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,QAAQ,EAAE,QAAQ,CAAC,cAAc,EACjC,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,GACzC,CACL,CAAC,CAAC,CAAC,CACA,uBAAC,+BAAc,IACX,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,QAAQ,CAAC,cAAc,EACvC,mBAAmB,EAAE,QAAQ,CAAC,eAAe,EAC7C,UAAU,EAAE,QAAQ,CAAC,UAAU,EAC/B,cAAc,EAAE,QAAQ,CAAC,cAAc,EACvC,SAAS,EAAE,QAAQ,CAAC,SAAS,EAC7B,YAAY,EAAE,QAAQ,CAAC,YAAY,EACnC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB,EAC7C,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,GACvD,CACL,GACG,CACX,CAAC;AACN,CAAC,CAAC;AAjDW,QAAA,WAAW,eAiDtB;AAEF,mBAAW,CAAC,WAAW,GAAG,aAAa,CAAC;AAMxC,SAAgB,iBAAiB,CAAC,EAAC,MAAM,EAAE,GAAG,KAAK,EAA0B;IACzE,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,uBAAC,mBAAW,IAAC,MAAM,EAAE,MAAM,KAAM,KAAK,GAAI,CAAC;AACtD,CAAC","sourcesContent":["import {Popup} from '@gravity-ui/uikit';\n\nimport {cn} from 'src/classname';\n\nimport {type UseSearchProps, useSearch} from '../hooks/use-search';\nimport {SearchQA} from '../qa';\nimport type {SearchCounter} from '../types';\n\nimport {SearchCardView} from './SearchCardView';\nimport {SeachCompactView} from './SearchCompactView';\n\nimport './SearchPopup.scss';\n\nconst b = cn('search-popup');\n\nexport type SearchPopupProps = UseSearchProps & {\n open: boolean;\n anchor: Element;\n counter?: SearchCounter;\n onClose: () => void;\n};\n\nexport const SearchPopup: React.FC<SearchPopupProps> = ({\n open,\n anchor,\n counter,\n onClose,\n ...props\n}) => {\n const {isCompact, searchState, handlers} = useSearch(props);\n\n return (\n <Popup\n open={open}\n qa={SearchQA.Panel}\n anchorElement={anchor}\n placement=\"bottom-end\"\n className={b({compact: isCompact})}\n onOpenChange={(_open, _event, reason) => {\n if (reason === 'escape-key') {\n onClose();\n }\n }}\n >\n {isCompact ? (\n <SeachCompactView\n counter={counter}\n onClose={onClose}\n value={searchState.search}\n onExpand={handlers.onExpand}\n onChange={handlers.onSearchChange}\n onFindNext={handlers.onFindNext}\n onFindPrevious={handlers.onFindPrevious}\n />\n ) : (\n <SearchCardView\n counter={counter}\n onClose={onClose}\n searchState={searchState}\n onSearchChange={handlers.onSearchChange}\n onReplacementChange={handlers.onReplaceChange}\n onFindNext={handlers.onFindNext}\n onFindPrevious={handlers.onFindPrevious}\n onReplace={handlers.onReplace}\n onReplaceAll={handlers.onReplaceAll}\n onWholeWordChange={handlers.onWholeWordChange}\n onCaseSensitiveChange={handlers.onCaseSensitiveChange}\n />\n )}\n </Popup>\n );\n};\n\nSearchPopup.displayName = 'SearchPopup';\n\ninterface SearchPopupWithRefProps extends Omit<SearchPopupProps, 'anchor'> {\n anchor: Element | null;\n}\n\nexport function renderSearchPopup({anchor, ...props}: SearchPopupWithRefProps) {\n if (!anchor) return null;\n\n return <SearchPopup anchor={anchor} {...props} />;\n}\n"]}
|