{"version":3,"file":"suggestions.cjs","sources":["../../../../src/components/Monaco/suggestions.ts"],"sourcesContent":["import type * as monacoType from 'monaco-editor/esm/vs/editor/editor.api';\n\nimport { CodeEditorSuggestionItem, CodeEditorSuggestionItemKind, CodeEditorSuggestionProvider, Monaco } from './types';\n\n/**\n * @internal -- only exported for tests\n */\nexport function findInsertIndex(line: string): { index: number; prefix: string } {\n  for (let i = line.length - 1; i > 0; i--) {\n    const ch = line.charAt(i);\n    if (ch === '$') {\n      return {\n        index: i,\n        prefix: line.substring(i),\n      };\n    }\n\n    // Keep these seperators\n    if (ch === ' ' || ch === '\\t' || ch === '\"' || ch === \"'\") {\n      return {\n        index: i + 1,\n        prefix: line.substring(i + 1),\n      };\n    }\n  }\n  return {\n    index: 0,\n    prefix: line,\n  };\n}\n\nfunction getCompletionItems(\n  monaco: Monaco,\n  prefix: string,\n  suggestions: CodeEditorSuggestionItem[],\n  range: monacoType.IRange\n): monacoType.languages.CompletionItem[] {\n  const items: monacoType.languages.CompletionItem[] = [];\n  for (const suggestion of suggestions) {\n    if (prefix && !suggestion.label.startsWith(prefix)) {\n      continue; // skip non-matching suggestions\n    }\n\n    items.push({\n      ...suggestion,\n      kind: mapKinds(monaco, suggestion.kind),\n      range,\n      insertText: suggestion.insertText ?? suggestion.label,\n    });\n  }\n  return items;\n}\n\nfunction mapKinds(monaco: Monaco, sug?: CodeEditorSuggestionItemKind): monacoType.languages.CompletionItemKind {\n  switch (sug) {\n    case CodeEditorSuggestionItemKind.Method:\n      return monaco.languages.CompletionItemKind.Method;\n    case CodeEditorSuggestionItemKind.Field:\n      return monaco.languages.CompletionItemKind.Field;\n    case CodeEditorSuggestionItemKind.Property:\n      return monaco.languages.CompletionItemKind.Property;\n    case CodeEditorSuggestionItemKind.Constant:\n      return monaco.languages.CompletionItemKind.Constant;\n    case CodeEditorSuggestionItemKind.Text:\n      return monaco.languages.CompletionItemKind.Text;\n  }\n  return monaco.languages.CompletionItemKind.Text;\n}\n\n/**\n * @alpha\n */\nexport function registerSuggestions(\n  monaco: Monaco,\n  language: string,\n  getSuggestions: CodeEditorSuggestionProvider,\n  modelId: string\n): monacoType.IDisposable | undefined {\n  if (!language || !getSuggestions) {\n    return undefined;\n  }\n  return monaco.languages.registerCompletionItemProvider(language, {\n    triggerCharacters: ['$'],\n\n    provideCompletionItems: (model, position, context) => {\n      // only return these suggestions for the specified modelId\n      // prevents duplicate suggestions when multiple editors are open\n      if (model.id !== modelId) {\n        return undefined;\n      }\n      const range = {\n        startLineNumber: position.lineNumber,\n        endLineNumber: position.lineNumber,\n        startColumn: position.column,\n        endColumn: position.column,\n      };\n\n      // Simple check if this was triggered by pressing `$`\n      if (context.triggerCharacter === '$') {\n        range.startColumn = position.column - 1;\n        return {\n          suggestions: getCompletionItems(monaco, '$', getSuggestions(), range),\n        };\n      }\n\n      // Find the replacement region\n      const currentLine = model.getValueInRange({\n        startLineNumber: position.lineNumber,\n        startColumn: 1,\n        endLineNumber: position.lineNumber,\n        endColumn: position.column,\n      });\n\n      const { index, prefix } = findInsertIndex(currentLine);\n      range.startColumn = index + 1;\n\n      const suggestions = getCompletionItems(monaco, prefix, getSuggestions(), range);\n      if (suggestions.length) {\n        // NOTE, this will replace any language provided suggestions\n        return { suggestions };\n      }\n\n      // Default language suggestions\n      return undefined;\n    },\n  });\n}\n"],"names":["CodeEditorSuggestionItemKind"],"mappings":"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"}