{"version":3,"file":"index.cjs","sources":["../src/constants.ts","../src/api/destroy.ts","../src/api/focus.ts","../types/values.ts","../src/editor/adapters/selections.ts","../src/api/format.ts","../src/api/get_doc.ts","../src/api/selections.ts","../src/api/insert.ts","../src/utils/inspect.ts","../src/utils/options.ts","../src/markdown.ts","../src/ui/utils.ts","../src/editor/extensions/appearance.ts","../src/extensions.ts","../src/editor/extensions/blockquote.ts","../src/editor/extensions/code.ts","../src/editor/extensions/ink.ts","../src/editor/extensions/line_wrapping.ts","../src/editor/extensions/theme.ts","../src/editor/state.ts","../src/utils/merge.ts","../src/api/load.ts","../src/api/options.ts","../src/api/reconfigure.ts","../src/api/select.ts","../src/api/update.ts","../src/api/wrap.ts","../src/utils/awaitable.ts","../src/instance.ts","../lib/codemirror-kit/decorations.ts","../lib/codemirror-kit/parsers.ts","../lib/codemirror-kit/markdown.ts","../plugins/katex/grammar.ts","../plugins/katex/index.ts","../src/utils/queue.ts","../src/store.ts","../src/utils/readability.ts","../src/ui/components/details/index.tsx","../src/ui/components/drop_zone/index.tsx","../src/ui/components/editor/index.tsx","../src/ui/components/button/index.tsx","../src/ui/components/toolbar/index.tsx","../src/ui/components/root/styles.tsx","../src/ui/components/root/index.tsx","../src/ui/app.tsx","../src/index.tsx","../src/editor/extensions/autocomplete.ts","../src/editor/extensions/images.ts","../src/editor/extensions/indentWithTab.ts","../src/editor/extensions/lists.ts","../src/editor/extensions/readonly.ts","../src/editor/extensions/search.tsx","../src/editor/extensions/spellcheck.ts"],"sourcesContent":["export const HYDRATION_MARKER = 'data-ink-mde-ssr-hydration-marker'\nexport const HYDRATION_MARKER_SELECTOR = `[${HYDRATION_MARKER}]`\n\nexport const getHydrationMarkerProps = () => {\n  if (import.meta.env.VITE_SSR) {\n    return {\n      [HYDRATION_MARKER]: true,\n    }\n  }\n\n  return {}\n}\n","import type InkInternal from '/types/internal'\n\nexport const destroy = ([state]: InkInternal.Store) => {\n  const { editor } = state()\n\n  editor.destroy()\n}\n","import type InkInternal from '/types/internal'\n\nexport const focus = ([state]: InkInternal.Store) => {\n  const { editor } = state()\n\n  if (!editor.hasFocus) {\n    editor.focus()\n  }\n}\n","export enum Appearance {\n  Auto = 'auto',\n  Dark = 'dark',\n  Light = 'light',\n}\n\nexport enum Extensions {\n  Appearance = 'appearance',\n  Attribution = 'attribution',\n  Autocomplete = 'autocomplete',\n  Images = 'images',\n  ReadOnly = 'readonly',\n  Spellcheck = 'spellcheck',\n  Vim = 'vim',\n}\n\nexport enum Markup {\n  Bold = 'bold',\n  Code = 'code',\n  CodeBlock = 'code_block',\n  Heading = 'heading',\n  Image = 'image',\n  Italic = 'italic',\n  Link = 'link',\n  List = 'list',\n  OrderedList = 'ordered_list',\n  Quote = 'quote',\n  TaskList = 'task_list',\n}\n\nexport enum PluginType {\n  Completion = 'completion',\n  Default = 'default',\n  Grammar = 'grammar',\n  Language = 'language',\n}\n\nexport enum Selection {\n  End = 'end',\n  Start = 'start',\n}\n\nexport const appearanceTypes = {\n  auto: 'auto',\n  dark: 'dark',\n  light: 'light',\n}\n\nexport const pluginTypes = {\n  completion: 'completion',\n  default: 'default',\n  grammar: 'grammar',\n  language: 'language',\n} as const\n","import { EditorSelection, SelectionRange } from '@codemirror/state'\nimport type * as Ink from '/types/ink'\n\nexport const toCodeMirror = (selections: Ink.Editor.Selection[]) => {\n  const ranges = selections.map((selection): SelectionRange => {\n    const range = SelectionRange.fromJSON({ anchor: selection.start, head: selection.end })\n\n    return range\n  })\n\n  return EditorSelection.create(ranges)\n}\n\nexport const toInk = (selection: EditorSelection) => {\n  const selections = selection.ranges.map((range: SelectionRange): Ink.Editor.Selection => {\n    return {\n      end: range.anchor < range.head ? range.head : range.anchor,\n      start: range.head < range.anchor ? range.head : range.anchor,\n    }\n  })\n\n  return selections\n}\n","import { syntaxTree } from '@codemirror/language'\nimport type { NodeType } from '@lezer/common'\nimport type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport * as InkValues from '/types/values'\nimport { toInk } from '../editor/adapters/selections'\n\n// Todo:\n// - [ ] Handle special scenarios (e.g. headings in quote blocks).\n// - [ ] Handle multiline selections (e.g. bolding multiple lines worth of content).\n\ninterface ChangeDetails {\n  editor: InkInternal.Editor,\n  formatDefinition: FormatDefinition,\n  selection: Ink.Editor.Selection,\n  node?: NodeDefinition,\n}\n\ninterface FormatDefinition {\n  block: boolean,\n  line: boolean,\n  multiline: boolean,\n  nodes: string[],\n  prefix: string,\n  prefixStates: string[],\n  suffix: string,\n}\n\ntype Formats = {\n  [K in Ink.Values.Markup]: FormatDefinition\n}\n\ninterface NodeDefinition {\n  type: NodeType,\n  from: number,\n  to: number,\n}\n\nconst defineConfig = (overrides: Partial<FormatDefinition>): FormatDefinition => {\n  const defaults = {\n    block: false,\n    line: false,\n    multiline: false,\n    nodes: [],\n    prefix: '',\n    prefixStates: [],\n    suffix: '',\n  }\n\n  return { ...defaults, ...overrides }\n}\n\nexport const formatting: Formats = {\n  [InkValues.Markup.Bold]: defineConfig({\n    nodes: ['StrongEmphasis'],\n    prefix: '**',\n    suffix: '**',\n  }),\n  [InkValues.Markup.Code]: defineConfig({\n    nodes: ['InlineCode'],\n    prefix: '`',\n    suffix: '`',\n  }),\n  [InkValues.Markup.CodeBlock]: defineConfig({\n    block: true,\n    nodes: ['FencedCode'],\n    prefix: '```\\n',\n    suffix: '\\n```',\n  }),\n  [InkValues.Markup.Heading]: defineConfig({\n    multiline: true,\n    nodes: ['ATXHeading1', 'ATXHeading2', 'ATXHeading3', 'ATXHeading4', 'ATXHeading5', 'ATXHeading6'],\n    prefix: '# ',\n    prefixStates: ['# ', '## ', '### ', '#### ', '##### ', '###### ', ''],\n  }),\n  [InkValues.Markup.Image]: defineConfig({\n    nodes: ['Image'],\n    prefix: '![](',\n    suffix: ')',\n  }),\n  [InkValues.Markup.Italic]: defineConfig({\n    nodes: ['Emphasis'],\n    prefix: '*',\n    suffix: '*',\n  }),\n  [InkValues.Markup.Link]: defineConfig({\n    nodes: ['Link'],\n    prefix: '[](',\n    suffix: ')',\n  }),\n  [InkValues.Markup.OrderedList]: defineConfig({\n    line: true,\n    multiline: true,\n    nodes: ['OrderedList'],\n    prefix: '1. ',\n  }),\n  [InkValues.Markup.Quote]: defineConfig({\n    line: true,\n    multiline: true,\n    nodes: ['Blockquote'],\n    prefix: '> ',\n  }),\n  [InkValues.Markup.TaskList]: defineConfig({\n    line: true,\n    multiline: true,\n    nodes: ['BulletList'],\n    prefix: '- [ ] ',\n  }),\n  [InkValues.Markup.List]: defineConfig({\n    line: true,\n    multiline: true,\n    nodes: ['BulletList'],\n    prefix: '- ',\n  }),\n}\n\nconst splitSelectionByLines = ({ editor, selection }: ChangeDetails) => {\n  let position = selection.start\n  const selections: Ink.Editor.Selection[] = []\n\n  while (position <= selection.end) {\n    const line = editor.lineBlockAt(position)\n    const start = Math.max(selection.start, line.from)\n    const end = Math.min(selection.end, line.to)\n\n    selections.push({ start, end })\n\n    position = line.to + 1\n  }\n\n  return selections\n}\n\nconst getSelection = ({ editor, formatDefinition, selection }: Partial<ChangeDetails>) => {\n  if (!editor || !formatDefinition) return selection || { start: 0, end: 0 }\n\n  // Todo: expose an actual API for getting the current selection or fallback\n  const initialSelection = selection || toInk(editor.state.selection).pop() || { start: 0, end: 0 }\n\n  if (formatDefinition.block || formatDefinition.line || formatDefinition.multiline) {\n    const start = editor.lineBlockAt(initialSelection.start).from\n    const end = editor.lineBlockAt(initialSelection.end).to\n\n    return { start, end }\n  }\n\n  const start = editor.state.wordAt(initialSelection.start)?.from || initialSelection.start\n  const end = editor.state.wordAt(initialSelection.end)?.to || initialSelection.end\n\n  return { start, end }\n}\n\nconst getText = (changeDetails: ChangeDetails) => {\n  return changeDetails.editor.state.sliceDoc(changeDetails.selection.start, changeDetails.selection.end)\n}\n\nconst getNode = (editor: InkInternal.Editor, definition: FormatDefinition, selection: Ink.Editor.Selection) => {\n  const selectionNodes = getNodes(editor, selection)\n\n  return selectionNodes.find(({ type }) => definition.nodes.includes(type.name))\n}\n\nconst getNodes = (editor: InkInternal.Editor, selection: Ink.Editor.Selection) => {\n  const nodeDefinitions: NodeDefinition[] = []\n\n  syntaxTree(editor.state).iterate({\n    from: selection.start,\n    to: selection.end,\n    enter: ({ type, from, to }) => {\n      nodeDefinitions.push({ type, from, to })\n    },\n  })\n\n  return nodeDefinitions\n}\n\nconst unformat = (changeDetails: ChangeDetails) => {\n  const text = getText(changeDetails)\n  const sliceStart = changeDetails.formatDefinition.prefix.length\n  const sliceEnd = changeDetails.formatDefinition.suffix.length * -1 || text.length\n  const unformatted = text.slice(sliceStart, sliceEnd)\n\n  return [{ from: changeDetails.selection.start, to: changeDetails.selection.end, insert: unformatted }]\n}\n\nconst formatBlock = (changeDetails: ChangeDetails) => {\n  if (changeDetails.node) {\n    const start = changeDetails.node.from\n    const end = changeDetails.node.to\n\n    return unformat({ ...changeDetails, selection: { start, end } })\n  } else {\n    const before = changeDetails.formatDefinition.prefix\n    const after = changeDetails.formatDefinition.suffix\n\n    const changes = [\n      { from: changeDetails.selection.start, insert: before },\n      { from: changeDetails.selection.end, insert: after },\n    ]\n\n    return changes\n  }\n}\n\nconst formatMultiline = (changeDetails: ChangeDetails) => {\n  const selections = splitSelectionByLines(changeDetails)\n  const changes = <{ from: number, to?: number, insert: string }[]>[]\n\n  selections.forEach((selection) => {\n    const lineChanges = formatLine({ ...changeDetails, selection })\n\n    changes.push(...lineChanges)\n  })\n\n  return changes\n}\n\nconst formatLine = (changeDetails: ChangeDetails) => {\n  const hasPrefixStates = changeDetails.formatDefinition.prefixStates.length > 0\n  const text = getText(changeDetails)\n\n  if (changeDetails.node && hasPrefixStates) {\n    const prefixState = changeDetails.formatDefinition.prefixStates.find(prefix => text.startsWith(prefix))\n\n    if (prefixState) {\n      const prefixStateIndex = changeDetails.formatDefinition.prefixStates.indexOf(prefixState)\n      const nextPrefixState = changeDetails.formatDefinition.prefixStates[prefixStateIndex + 1]\n      const updatedText = text.replace(new RegExp(`^${prefixState}`), nextPrefixState)\n\n      return [{ from: changeDetails.selection.start, to: changeDetails.selection.end, insert: updatedText }]\n    }\n  } else if (changeDetails.node && text.startsWith(changeDetails.formatDefinition.prefix)) {\n    return unformat(changeDetails)\n  }\n\n  return [{ from: changeDetails.selection.start, insert: changeDetails.formatDefinition.prefix }]\n}\n\nconst formatInline = (changeDetails: ChangeDetails) => {\n  if (changeDetails.node) {\n    const start = changeDetails.node.from\n    const end = changeDetails.node.to\n\n    return unformat({ ...changeDetails, selection: { start, end } })\n  } else {\n    const { formatDefinition, selection } = changeDetails\n    const before = Array.isArray(formatDefinition.prefix) ? formatDefinition.prefix[0] : formatDefinition.prefix\n    const after = formatDefinition.suffix\n\n    return [\n      { from: selection.start, insert: before },\n      { from: selection.end, insert: after },\n    ]\n  }\n}\n\nconst getChanges = (changeDetails: ChangeDetails) => {\n  if (changeDetails.formatDefinition.block) {\n    return formatBlock(changeDetails)\n  } else if (changeDetails.formatDefinition.multiline) {\n    return formatMultiline(changeDetails)\n  } else if (changeDetails.formatDefinition.line) {\n    return formatLine(changeDetails)\n  }\n\n  return formatInline(changeDetails)\n}\n\nexport const format = ([state]: InkInternal.Store, formatType: Ink.EnumString<Ink.Values.Markup>, { selection: maybeSelection }: Ink.Instance.FormatOptions = {}) => {\n  const { editor } = state()\n  const formatDefinition = formatting[formatType]\n  const selection = getSelection({ editor, formatDefinition, selection: maybeSelection })\n  const node = getNode(editor, formatDefinition, selection)\n  const changeDetails: ChangeDetails = {\n    editor,\n    formatDefinition,\n    node,\n    selection,\n  }\n  const changes = getChanges(changeDetails)\n  const offset = changes.reduce((total, change: { from: number, insert: string, to?: number }) => {\n    const offset = change.insert.length - ((change.to || change.from) - change.from)\n\n    return total + offset\n  }, 0)\n\n  const updates = state().editor.state.update({ changes, selection: { head: selection.start, anchor: selection.end + offset } })\n\n  state().editor.dispatch(updates)\n}\n","import type InkInternal from '/types/internal'\n\nexport const getDoc = ([state]: InkInternal.Store) => {\n  const { editor } = state()\n\n  return editor.state.sliceDoc()\n}\n","import type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport { toInk } from '../editor/adapters/selections'\n\nexport const selections = ([state]: InkInternal.Store): Ink.Editor.Selection[] => {\n  const { editor } = state()\n\n  return toInk(editor.state.selection)\n}\n","import type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport { selections } from './selections'\n\nexport const insert = ([state, setState]: InkInternal.Store, text: string, selection?: Ink.Editor.Selection, updateSelection = false) => {\n  const { editor } = state()\n\n  let start = selection?.start\n  let end = selection?.end || selection?.start\n\n  if (typeof start === 'undefined') {\n    const current = selections([state, setState]).pop() as Ink.Editor.Selection\n\n    start = current.start\n    end = current.end\n  }\n\n  const updates = { changes: { from: start, to: end, insert: text } }\n\n  if (updateSelection) {\n    const anchor = start === end ? start + text.length : start\n    const head = start === end ? start + text.length : start + text.length\n\n    Object.assign(updates, { selection: { anchor, head } })\n  }\n\n  editor.dispatch(\n    editor.state.update(updates),\n  )\n}\n","export type ObjectTypeKey = keyof ObjectTypes\nexport type ObjectTypeValue = ObjectTypes[ObjectTypeKey]\nexport type ObjectTypes = typeof objectTypes\nexport type Thenable<T> = T extends { then: (...args: any[]) => any } ? T : never\n\nexport const objectTypes = {\n  array: '[object Array]',\n  asyncFunction: '[object AsyncFunction]',\n  boolean: '[object Boolean]',\n  function: '[object Function]',\n  null: '[object Null]',\n  number: '[object Number]',\n  object: '[object Object]',\n  promise: '[object Promise]',\n  string: '[object String]',\n  symbol: '[object Symbol]',\n  undefined: '[object Undefined]',\n  window: '[object Window]',\n} as const\n\nexport const is = <T>(type: ObjectTypeValue, object: T): object is T => {\n  return Object.prototype.toString.call(object) === type\n}\n\nexport const isArray = <T extends any[]>(object: T | any): object is T => is(objectTypes.array, object)\nexport const isAsyncFunction = <T extends (...args: any[]) => Promise<any>>(object: T | any): object is T => is(objectTypes.asyncFunction, object)\nexport const isBoolean = <T extends boolean>(object: T | any): object is T => is(objectTypes.boolean, object)\nexport const isFunction = <T extends (...args: any[]) => any>(object: T | any): object is T => is(objectTypes.function, object)\nexport const isNull = <T>(object: T | any): object is T => is(objectTypes.null, object)\nexport const isNumber = <T extends number>(object: T | any): object is T => is(objectTypes.number, object)\nexport const isObject = <T extends Record<any, any>>(object: T | any): object is T => is(objectTypes.object, object)\nexport const isPromise = <T>(object: T | Promise<T>): object is Promise<T> => is(objectTypes.promise, object)\nexport const isString = <T extends string>(object: T | any): object is T => is(objectTypes.string, object)\nexport const isSymbol = <T extends symbol>(object: T | any): object is T => is(objectTypes.symbol, object)\nexport const isUndefined = <T extends undefined>(object: T | any): object is T => is(objectTypes.undefined, object)\nexport const isWindow = <T extends Window>(object: T | any): object is T => is(objectTypes.window, object)\n\nexport const isThenable = <T extends { then: <A, R>(...args: A[]) => R }>(object: T | any): object is T => {\n  if (isPromise(object)) return true\n\n  return isObject(object) && ('then' in object) && (typeof object.then === 'function')\n}\n","import { isPromise } from '/src/utils/inspect'\nimport { type EnumString, type Options, type OptionsResolved, type Values } from '/types/ink'\n\nexport type FlattenArray<T> = ReturnType<typeof flatten<T>>\nexport type FnIntersectionToTuple<FnIntersection> = FnIntersection extends { (a: infer A): void, (b: infer B): void } ? [A, B] : never\nexport type FnUnionToFnIntersection<FnUnion> = (FnUnion extends unknown ? (arg: FnUnion) => void : never) extends ((arg: infer FnIntersection) => void) ? FnIntersection : never\nexport type Partition<T, V> = UnionToTuple<T> extends never\n? [T] extends [infer A]\n  ? V extends ((arg: any) => arg is A)\n    ? [A[], unknown[]]\n    : V extends ((arg: any) => arg is infer AssertionType)\n      ? [AssertionType[], Array<A>]\n      : never\n  : never\n: UnionToTuple<T> extends [infer A, infer B]\n  ? V extends ((arg: any) => arg is A)\n    ? [A[], B[]]\n    : V extends ((arg: any) => arg is B)\n      ? [B[], A[]]\n      : V extends ((arg: any) => arg is infer AssertionType)\n        ? [AssertionType[], Array<A | B>]\n        : never\n  : never\nexport type PluginHandler<T> = { [P in keyof T]: (variant: T[P]) => any }\nexport type PluginMatcher = { [K in PluginType]: Extract<Options.Plugin, { type: K }> }\nexport type PluginType = Options.Plugin['type']\nexport type PluginForType<T extends Values.PluginType> = Extract<Options.Plugin, { type: T }>\nexport type PluginValueForType<T extends Values.PluginType> = PluginForType<T>['value']\nexport type RecursiveArray<T> = Array<T | RecursiveArray<T>>\nexport type UnionToFnUnion<Union> = Union extends unknown ? (k: Union) => void : never\nexport type UnionToTuple<Union> = FnIntersectionToTuple<FnUnionToFnIntersection<UnionToFnUnion<Union>>>\nexport type ValidatorFn = (arg: any) => boolean\n\nexport const enumString = <T extends string>(value: T) => {\n  return `${value}` as EnumString<T>\n}\n\nexport const partitionPlugins = <T extends Options.Plugin['value']>(plugins: T[]) => {\n  return partition(plugins, isPromise)\n}\n\nexport const isPlugin = <T extends PluginType>(pluginType: T, plugin: Options.Plugin): plugin is PluginMatcher[T] => {\n  return plugin.type === pluginType\n}\n\nexport const isOptionsKey = (key: string, options: OptionsResolved): key is keyof OptionsResolved => {\n  return !!key && (key in options)\n}\n\nexport const filterPlugins = <T extends PluginType>(pluginType: T, options: OptionsResolved): PluginMatcher[T]['value'][] => {\n  return flatten(options.plugins).reduce<PluginMatcher[T]['value'][]>((matches, plugin: Options.Plugin) => {\n    if (isPlugin(pluginType, plugin)) {\n      // Todo: These \"plugin\" keys might be better suited under a namespace, but they are top-level for now.\n      // Individual key resolvers might be a good idea down the road to check for more fine-grained configuration options.\n      if (!plugin.key || (isOptionsKey(plugin.key, options) && options[plugin.key])) {\n        // @ts-expect-error Todo: Fix this type definition.\n        matches.push(plugin.value)\n      }\n    }\n\n    return matches\n  }, [])\n}\n\nexport const flatten = <T>(array: RecursiveArray<T>): T[] => {\n  return array.reduce<T[]>((flatArray, item) => {\n    if (Array.isArray(item)) {\n      return flatArray.concat(flatten(item))\n    }\n\n    return flatArray.concat(item)\n  }, [])\n}\n\nexport const partition = <ArrayTypes, Validator extends ValidatorFn>(array: ArrayTypes[], isValid: Validator): Partition<ArrayTypes, Validator> => {\n  return array.reduce<Partition<ArrayTypes, Validator>>((partitions, entry) => {\n    isValid(entry) ? partitions[0].push(entry) : partitions[1].push(entry)\n\n    return partitions\n  }, [[], []] as unknown as Partition<ArrayTypes, Validator>)\n}\n\n// partition(['string'], isNumber)\n// partition([1], isNumber)\n// partition(['hello', 1, 'yep', 4], isPromise)\n// partition(['hello', 1, 'yep', 4], isString)\n","import { markdown as markdownExtension, markdownLanguage } from '@codemirror/lang-markdown'\nimport { languages as baseLanguages } from '@codemirror/language-data'\nimport { Compartment } from '@codemirror/state'\nimport { type MarkdownExtension } from '@lezer/markdown'\nimport { buildVendorUpdates } from '/src/extensions'\nimport { filterPlugins, partitionPlugins } from '/src/utils/options'\nimport { type InkInternal, type OptionsResolved, pluginTypes } from '/types'\n\nconst makeExtension = ([state, setState]: InkInternal.Store) => {\n  const baseExtensions = [] as MarkdownExtension[]\n  const [lazyExtensions, extensions] = filterExtensions(state().options)\n  const [lazyLanguages, languages] = filterLanguages(state().options)\n\n  if (Math.max(lazyExtensions.length, lazyLanguages.length) > 0) {\n    state().workQueue.enqueue(async () => {\n      const effects = await buildVendorUpdates([state, setState])\n\n      state().editor.dispatch({ effects })\n    })\n  }\n\n  return markdownExtension({\n    base: markdownLanguage,\n    codeLanguages: [...baseLanguages, ...languages],\n    extensions: [...baseExtensions, ...extensions],\n  })\n}\n\nconst filterExtensions = (options: OptionsResolved) => {\n  return partitionPlugins(filterPlugins(pluginTypes.grammar, options))\n}\n\nconst filterLanguages = (options: OptionsResolved) => {\n  return partitionPlugins(filterPlugins(pluginTypes.language, options))\n}\n\nconst updateExtension = async ([state]: InkInternal.Store) => {\n  const baseExtensions = [] as MarkdownExtension[]\n  const extensions = await Promise.all(filterPlugins(pluginTypes.grammar, state().options))\n  const languages = await Promise.all(filterPlugins(pluginTypes.language, state().options))\n\n  return markdownExtension({\n    base: markdownLanguage,\n    codeLanguages: [...baseLanguages, ...languages],\n    extensions: [...baseExtensions, ...extensions],\n  })\n}\n\nexport const markdown = (): InkInternal.Extension => {\n  const compartment = new Compartment()\n\n  return {\n    compartment,\n    initialValue: (store: InkInternal.Store) => {\n      return compartment.of(makeExtension(store))\n    },\n    reconfigure: async (store: InkInternal.Store) => {\n      return compartment.reconfigure(await updateExtension(store))\n    },\n  }\n}\n","import type InkInternal from '/types/internal'\nimport type InkUi from '/types/ui'\nimport * as InkValues from '/types/values'\n\nexport const createElement = (): InkUi.Element => {\n  // Needed for tree-shaking purposes.\n  if (import.meta.env.VITE_SSR) {\n    return {} as InkUi.Element\n  }\n\n  return document.createElement('div')\n}\n\nexport const isAutoDark = () => {\n  // Needed for tree-shaking purposes.\n  if (import.meta.env.VITE_SSR) {\n    // Todo: Allow user to specify a default theme for SSR.\n    return true\n  }\n\n  return window.matchMedia('(prefers-color-scheme: dark)').matches\n}\n\nexport const isDark = (appearance: string) => {\n  if (appearance === InkValues.Appearance.Dark)\n    return true\n  if (appearance === InkValues.Appearance.Light)\n    return false\n\n  return isAutoDark()\n}\n\nexport const makeVars = (state: InkInternal.StateResolved) => {\n  // Todo: The syntax nodes should be merged with the tag nodes to ensure values are always set correctly. This might\n  // require extracting this out into a separate \"constants\" file or something similar.\n  const styles = [\n    // --ink-*\n    { suffix: 'border-radius', default: '0.25rem' },\n    { suffix: 'color', default: 'currentColor' },\n    { suffix: 'flex-direction', default: 'column' },\n    { suffix: 'font-family', default: 'inherit' },\n    // --ink-block-*\n    { suffix: 'block-background-color', default: '#121212', light: '#f5f5f5' },\n    { suffix: 'block-background-color-on-hover', default: '#0f0f0f', light: '#e0e0e0' },\n    { suffix: 'block-max-height', default: '20rem' },\n    { suffix: 'block-padding', default: '0.5rem' },\n    // --ink-code-*\n    { suffix: 'code-background-color', default: 'var(--ink-internal-block-background-color)' },\n    { suffix: 'code-color', default: 'inherit' },\n    { suffix: 'code-font-family', default: '\\'Monaco\\', Courier, monospace' },\n    // --ink-editor-*\n    { suffix: 'editor-font-size', default: '1em' },\n    { suffix: 'editor-line-height', default: '2em' },\n    { suffix: 'editor-padding', default: '0.5rem' },\n    { suffix: 'inline-padding', default: '0.125rem' },\n    // --ink-modal-*\n    { suffix: 'modal-position', default: 'fixed' },\n    // --ink-syntax-*\n    { suffix: 'syntax-atom-color', default: '#d19a66' },\n    { suffix: 'syntax-comment-color', default: '#abb2bf' },\n    { suffix: 'syntax-comment-font-style', default: 'italic' },\n    { suffix: 'syntax-emphasis-color', default: 'inherit' },\n    { suffix: 'syntax-emphasis-font-style', default: 'italic' },\n    { suffix: 'syntax-hashtag-background-color', default: '#222', light: '#eee' },\n    { suffix: 'syntax-hashtag-color', default: 'inherit' },\n    { suffix: 'syntax-heading-color', default: 'inherit' },\n    { suffix: 'syntax-heading-font-weight', default: '600' },\n    { suffix: 'syntax-heading1-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading1-font-size', default: '1.6em' },\n    { suffix: 'syntax-heading1-font-weight', default: '600' },\n    { suffix: 'syntax-heading2-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading2-font-size', default: '1.5em' },\n    { suffix: 'syntax-heading2-font-weight', default: '600' },\n    { suffix: 'syntax-heading3-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading3-font-size', default: '1.4em' },\n    { suffix: 'syntax-heading3-font-weight', default: '600' },\n    { suffix: 'syntax-heading4-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading4-font-size', default: '1.3em' },\n    { suffix: 'syntax-heading4-font-weight', default: '600' },\n    { suffix: 'syntax-heading5-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading5-font-size', default: '1.2em' },\n    { suffix: 'syntax-heading5-font-weight', default: '600' },\n    { suffix: 'syntax-heading6-color', default: 'var(--ink-internal-syntax-heading-color, inherit)' },\n    { suffix: 'syntax-heading6-font-size', default: '1.1em' },\n    { suffix: 'syntax-heading6-font-weight', default: '600' },\n    { suffix: 'syntax-highlight-background-color', default: '#555555' },\n    { suffix: 'syntax-keyword-color', default: '#c678dd' },\n    { suffix: 'syntax-link-color', default: 'inherit' },\n    { suffix: 'syntax-meta-color', default: '#abb2bf' },\n    { suffix: 'syntax-monospace-color', default: 'var(--ink-internal-code-color)' },\n    { suffix: 'syntax-monospace-font-family', default: 'var(--ink-internal-code-font-family)' },\n    { suffix: 'syntax-name-color', default: '#d19a66' },\n    { suffix: 'syntax-name-label-color', default: '#abb2bf' },\n    { suffix: 'syntax-name-property-color', default: '#96c0d8' },\n    { suffix: 'syntax-name-property-definition-color', default: '#e06c75' },\n    { suffix: 'syntax-name-variable-color', default: '#e06c75' },\n    { suffix: 'syntax-name-variable-definition-color', default: '#e5c07b' },\n    { suffix: 'syntax-name-variable-local-color', default: '#d19a66' },\n    { suffix: 'syntax-name-variable-special-color', default: 'inherit' },\n    { suffix: 'syntax-number-color', default: '#d19a66' },\n    { suffix: 'syntax-operator-color', default: '#96c0d8' },\n    { suffix: 'syntax-processing-instruction-color', default: '#444444', light: '#bbbbbb' },\n    { suffix: 'syntax-punctuation-color', default: '#abb2bf' },\n    { suffix: 'syntax-strikethrough-color', default: 'inherit' },\n    { suffix: 'syntax-strikethrough-text-decoration', default: 'line-through' },\n    { suffix: 'syntax-string-color', default: '#98c379' },\n    { suffix: 'syntax-string-special-color', default: 'inherit' },\n    { suffix: 'syntax-strong-color', default: 'inherit' },\n    { suffix: 'syntax-strong-font-weight', default: '600' },\n    { suffix: 'syntax-url-color', default: '#aaaaaa', light: '#666666' },\n    { suffix: 'toolbar-group-spacing', default: '2rem' },\n    { suffix: 'toolbar-item-spacing', default: '0' },\n  ]\n\n  const isLight = !isDark(state.options.interface.appearance)\n\n  return styles.map((style) => {\n    const value = (isLight && style.light) ? style.light : style.default\n\n    return `--ink-internal-${style.suffix}: var(--ink-${style.suffix}, ${value});`\n  })\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\n\nexport const appearance = (isDark: boolean): Extension => {\n  return [\n    EditorView.theme({\n      '.cm-scroller': {\n        fontFamily: 'var(--ink-internal-font-family)',\n      },\n    }, { dark: isDark }),\n  ]\n}\n","import { Compartment } from '@codemirror/state'\nimport { markdown } from '/src/markdown'\nimport { isAutoDark } from '/src/ui/utils'\nimport { filterPlugins, partitionPlugins } from '/src/utils/options'\nimport { type InkInternal } from '/types'\nimport { appearanceTypes, pluginTypes } from '/types/values'\nimport { appearance } from './editor/extensions/appearance'\n\nexport const buildVendors = ([state, setState]: InkInternal.Store) => {\n  const extensions = state().extensions.map(e => e.initialValue([state, setState]))\n\n  return extensions\n}\n\nexport const buildVendorUpdates = async ([state, setState]: InkInternal.Store) => {\n  const effects = await Promise.all(\n    state().extensions.map(async (extension) => {\n      return await extension.reconfigure([state, setState])\n    }),\n  )\n\n  return effects\n}\n\nexport const extension = (resolver: InkInternal.ExtensionResolver): InkInternal.Extension => {\n  const compartment = new Compartment()\n\n  return {\n    compartment,\n    initialValue: (store: InkInternal.Store) => {\n      return compartment.of(resolver(store))\n    },\n    reconfigure: (store: InkInternal.Store) => {\n      return compartment.reconfigure(resolver(store))\n    },\n  }\n}\n\nexport const lazyExtension = (reconfigure: InkInternal.LazyExtensionResolver): InkInternal.LazyExtension => {\n  const compartment = new Compartment()\n\n  return {\n    compartment,\n    initialValue: () => {\n      return compartment.of([])\n    },\n    reconfigure: (store: InkInternal.Store) => {\n      return reconfigure(store, compartment)\n    },\n  }\n}\n\nexport const createExtensions = () => {\n  return [\n    markdown(),\n    ...resolvers.map(r => extension(r)),\n    ...lazyResolvers.map(r => lazyExtension(r)),\n  ]\n}\n\nexport const resolvers: InkInternal.ExtensionResolvers = [\n  ([state]: InkInternal.Store) => {\n    const [_lazyExtensions, extensions] = partitionPlugins(filterPlugins(pluginTypes.default, state().options))\n\n    return extensions\n  },\n  ([state]: InkInternal.Store) => {\n    const isDark = state().options.interface.appearance === appearanceTypes.dark\n    const isAuto = state().options.interface.appearance === appearanceTypes.auto\n    const extension = appearance(isDark || (isAuto && isAutoDark()))\n\n    return extension\n  },\n]\n\nexport const lazyResolvers: InkInternal.LazyExtensionResolvers = [\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    const [lazyExtensions] = partitionPlugins(filterPlugins(pluginTypes.default, state().options))\n\n    if (lazyExtensions.length > 0) {\n      return compartment.reconfigure(await Promise.all(lazyExtensions))\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.interface.autocomplete) {\n      const { autocomplete } = await import('./editor/extensions/autocomplete')\n\n      return compartment.reconfigure(autocomplete(state().options))\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.interface.images) {\n      const { images } = await import('./editor/extensions/images')\n\n      return compartment.reconfigure(images())\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    const { keybindings, trapTab } = state().options\n    const tab = trapTab ?? keybindings.tab\n    const shiftTab = trapTab ?? keybindings.shiftTab\n\n    if (tab || shiftTab) {\n      const { indentWithTab } = await import('./editor/extensions/indentWithTab')\n\n      return compartment.reconfigure(indentWithTab({ tab, shiftTab }))\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    const { options } = state()\n\n    if (options.lists || options.interface.lists) {\n      const { lists } = await import('./editor/extensions/lists')\n\n      let bullet = true\n      let number = true\n      let task = true\n\n      if (typeof options.lists === 'object') {\n        bullet = typeof options.lists.bullet === 'undefined' ? false : options.lists.bullet\n        number = typeof options.lists.number === 'undefined' ? false : options.lists.number\n        task = typeof options.lists.task === 'undefined' ? false : options.lists.task\n      }\n\n      return compartment.reconfigure(lists({ bullet, number, task }))\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.placeholder) {\n      const { placeholder } = await import('./editor/extensions/placeholder')\n\n      return compartment.reconfigure(placeholder(state().options.placeholder))\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.interface.readonly) {\n      const { readonly } = await import('./editor/extensions/readonly')\n\n      return compartment.reconfigure(readonly())\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.search) {\n      const { search } = await import('./editor/extensions/search')\n\n      return compartment.reconfigure(search())\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.interface.spellcheck) {\n      const { spellcheck } = await import('./editor/extensions/spellcheck')\n\n      return compartment.reconfigure(spellcheck())\n    }\n\n    return compartment.reconfigure([])\n  },\n  async ([state]: InkInternal.Store, compartment: InkInternal.Vendor.Compartment) => {\n    if (state().options.vim) {\n      const { vim } = await import('./editor/extensions/vim')\n\n      return compartment.reconfigure(vim())\n    }\n\n    return compartment.reconfigure([])\n  },\n]\n","import { syntaxTree } from '@codemirror/language'\nimport type { Extension } from '@codemirror/state'\nimport { RangeSetBuilder } from '@codemirror/state'\nimport type { EditorView } from '@codemirror/view'\nimport { Decoration, ViewPlugin } from '@codemirror/view'\n\n// const mark = 'QuoteMark'\n\nconst blockquoteSyntaxNodes = [\n  'Blockquote',\n]\n\nconst blockquoteDecoration = Decoration.line({ attributes: { class: 'cm-blockquote' } })\nconst blockquoteOpenDecoration = Decoration.line({ attributes: { class: 'cm-blockquote-open' } })\nconst blockquoteCloseDecoration = Decoration.line({ attributes: { class: 'cm-blockquote-close' } })\n\nconst blockquotePlugin = ViewPlugin.define((view: EditorView) => {\n  return {\n    update: () => {\n      return decorate(view)\n    },\n  }\n}, { decorations: plugin => plugin.update() })\n\nconst decorate = (view: EditorView) => {\n  const builder = new RangeSetBuilder<Decoration>()\n  const tree = syntaxTree(view.state)\n\n  for (const visibleRange of view.visibleRanges) {\n    for (let position = visibleRange.from; position < visibleRange.to;) {\n      const line = view.state.doc.lineAt(position)\n\n      tree.iterate({\n        enter({ type, from, to }) {\n          if (type.name !== 'Document') {\n            if (blockquoteSyntaxNodes.includes(type.name)) {\n              builder.add(line.from, line.from, blockquoteDecoration)\n\n              const openLine = view.state.doc.lineAt(from)\n              const closeLine = view.state.doc.lineAt(to)\n\n              if (openLine.number === line.number)\n                builder.add(line.from, line.from, blockquoteOpenDecoration)\n\n              if (closeLine.number === line.number)\n                builder.add(line.from, line.from, blockquoteCloseDecoration)\n\n              return false\n            }\n          }\n        },\n        from: line.from,\n        to: line.to,\n      })\n\n      position = line.to + 1\n    }\n  }\n\n  return builder.finish()\n}\n\nexport const blockquote = (): Extension => {\n  return [\n    blockquotePlugin,\n  ]\n}\n","import { syntaxTree } from '@codemirror/language'\nimport type { Extension } from '@codemirror/state'\nimport { RangeSetBuilder } from '@codemirror/state'\nimport type { EditorView } from '@codemirror/view'\nimport { Decoration, ViewPlugin } from '@codemirror/view'\n\nconst codeBlockSyntaxNodes = [\n  'CodeBlock',\n  'FencedCode',\n  'HTMLBlock',\n  'CommentBlock',\n]\n\nconst sharedAttributes = {\n  // Prevent spellcheck in all code blocks. The Grammarly extension might not respect these values.\n  'data-enable-grammarly': 'false',\n  'data-gramm': 'false',\n  'data-grammarly-skip': 'true',\n  'spellcheck': 'false',\n}\n\nconst codeBlockDecoration = Decoration.line({ attributes: { ...sharedAttributes, class: 'cm-codeblock' } })\nconst codeBlockOpenDecoration = Decoration.line({ attributes: { ...sharedAttributes, class: 'cm-codeblock-open' } })\nconst codeBlockCloseDecoration = Decoration.line({ attributes: { ...sharedAttributes, class: 'cm-codeblock-close' } })\nconst codeDecoration = Decoration.mark({ attributes: { ...sharedAttributes, class: 'cm-code' } })\nconst codeOpenDecoration = Decoration.mark({ attributes: { ...sharedAttributes, class: 'cm-code cm-code-open' } })\nconst codeCloseDecoration = Decoration.mark({ attributes: { ...sharedAttributes, class: 'cm-code cm-code-close' } })\n\nconst codeBlockPlugin = ViewPlugin.define((view: EditorView) => {\n  return {\n    update: () => {\n      return decorate(view)\n    },\n  }\n}, { decorations: plugin => plugin.update() })\n\nconst decorate = (view: EditorView) => {\n  const builder = new RangeSetBuilder<Decoration>()\n  const tree = syntaxTree(view.state)\n\n  for (const visibleRange of view.visibleRanges) {\n    for (let position = visibleRange.from; position < visibleRange.to;) {\n      const line = view.state.doc.lineAt(position)\n      let inlineCode: { from: number, to: number, innerFrom: number, innerTo: number }\n\n      tree.iterate({\n        enter({ type, from, to }) {\n          if (type.name !== 'Document') {\n            if (codeBlockSyntaxNodes.includes(type.name)) {\n              builder.add(line.from, line.from, codeBlockDecoration)\n\n              const openLine = view.state.doc.lineAt(from)\n              const closeLine = view.state.doc.lineAt(to)\n\n              if (openLine.number === line.number)\n                builder.add(line.from, line.from, codeBlockOpenDecoration)\n\n              if (closeLine.number === line.number)\n                builder.add(line.from, line.from, codeBlockCloseDecoration)\n\n              return false\n            } else if (type.name === 'InlineCode') {\n              // Store a reference for the last inline code node.\n              inlineCode = { from, to, innerFrom: from, innerTo: to }\n            } else if (type.name === 'CodeMark') {\n              // Make sure the code mark is a part of the previously stored inline code node.\n              if (from === inlineCode.from) {\n                inlineCode.innerFrom = to\n\n                builder.add(from, to, codeOpenDecoration)\n              } else if (to === inlineCode.to) {\n                inlineCode.innerTo = from\n\n                builder.add(inlineCode.innerFrom, inlineCode.innerTo, codeDecoration)\n                builder.add(from, to, codeCloseDecoration)\n              }\n            }\n          }\n        },\n        from: line.from,\n        to: line.to,\n      })\n\n      position = line.to + 1\n    }\n  }\n\n  return builder.finish()\n}\n\nexport const code = (): Extension => {\n  return [\n    codeBlockPlugin,\n  ]\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\n\nconst inkClassExtensions = () => {\n  return [\n    EditorView.editorAttributes.of({\n      class: 'ink-mde-container',\n    }),\n    EditorView.contentAttributes.of({\n      class: 'ink-mde-editor-content',\n    }),\n    // Todo: Maybe open a PR to add scrollerAttributes?\n  ]\n}\n\nexport const ink = (): Extension => {\n  return [\n    ...inkClassExtensions(),\n  ]\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\n\nexport const lineWrapping = (): Extension => {\n  return EditorView.lineWrapping\n}\n","import { HighlightStyle, syntaxHighlighting } from '@codemirror/language'\nimport type { Extension } from '@codemirror/state'\nimport { tags } from '@lezer/highlight'\n\nexport const theme = (): Extension => {\n  const extension = syntaxHighlighting(\n    HighlightStyle.define([\n      // ordered by lowest to highest precedence\n      {\n        tag: tags.atom,\n        color: 'var(--ink-internal-syntax-atom-color)',\n      },\n      {\n        tag: tags.meta,\n        color: 'var(--ink-internal-syntax-meta-color)',\n      },\n      // emphasis types\n      {\n        tag: tags.emphasis,\n        color: 'var(--ink-internal-syntax-emphasis-color)',\n        fontStyle: 'var(--ink-internal-syntax-emphasis-font-style)',\n      },\n      {\n        tag: tags.strong,\n        color: 'var(--ink-internal-syntax-strong-color)',\n        fontWeight: 'var(--ink-internal-syntax-strong-font-weight)',\n      },\n      {\n        tag: tags.strikethrough,\n        color: 'var(--ink-internal-syntax-strikethrough-color)',\n        textDecoration: 'var(--ink-internal-syntax-strikethrough-text-decoration)',\n      },\n      // comment group\n      {\n        tag: tags.comment,\n        color: 'var(--ink-internal-syntax-comment-color)',\n        fontStyle: 'var(--ink-internal-syntax-comment-font-style)',\n      },\n      // monospace\n      {\n        tag: tags.monospace,\n        color: 'var(--ink-internal-syntax-code-color)',\n        fontFamily: 'var(--ink-internal-syntax-code-font-family)',\n      },\n      // name group\n      {\n        tag: tags.name,\n        color: 'var(--ink-internal-syntax-name-color)',\n      },\n      {\n        tag: tags.labelName,\n        color: 'var(--ink-internal-syntax-name-label-color)',\n      },\n      {\n        tag: tags.propertyName,\n        color: 'var(--ink-internal-syntax-name-property-color)',\n      },\n      {\n        tag: tags.definition(tags.propertyName),\n        color: 'var(--ink-internal-syntax-name-property-definition-color)',\n      },\n      {\n        tag: tags.variableName,\n        color: 'var(--ink-internal-syntax-name-variable-color)',\n      },\n      {\n        tag: tags.definition(tags.variableName),\n        color: 'var(--ink-internal-syntax-name-variable-definition-color)',\n      },\n      {\n        tag: tags.local(tags.variableName),\n        color: 'var(--ink-internal-syntax-name-variable-local-color)',\n      },\n      {\n        tag: tags.special(tags.variableName),\n        color: 'var(--ink-internal-syntax-name-variable-special-color)',\n      },\n      // headings\n      {\n        tag: tags.heading,\n        color: 'var(--ink-internal-syntax-heading-color)',\n        fontWeight: 'var(--ink-internal-syntax-heading-font-weight)',\n      },\n      {\n        tag: tags.heading1,\n        color: 'var(--ink-internal-syntax-heading1-color)',\n        fontSize: 'var(--ink-internal-syntax-heading1-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading1-font-weight)',\n      },\n      {\n        tag: tags.heading2,\n        color: 'var(--ink-internal-syntax-heading2-color)',\n        fontSize: 'var(--ink-internal-syntax-heading2-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading2-font-weight)',\n      },\n      {\n        tag: tags.heading3,\n        color: 'var(--ink-internal-syntax-heading3-color)',\n        fontSize: 'var(--ink-internal-syntax-heading3-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading3-font-weight)',\n      },\n      {\n        tag: tags.heading4,\n        color: 'var(--ink-internal-syntax-heading4-color)',\n        fontSize: 'var(--ink-internal-syntax-heading4-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading4-font-weight)',\n      },\n      {\n        tag: tags.heading5,\n        color: 'var(--ink-internal-syntax-heading5-color)',\n        fontSize: 'var(--ink-internal-syntax-heading5-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading5-font-weight)',\n      },\n      {\n        tag: tags.heading6,\n        color: 'var(--ink-internal-syntax-heading6-color)',\n        fontSize: 'var(--ink-internal-syntax-heading6-font-size)',\n        fontWeight: 'var(--ink-internal-syntax-heading6-font-weight)',\n      },\n      // contextual tag types\n      {\n        tag: tags.keyword,\n        color: 'var(--ink-internal-syntax-keyword-color)',\n      },\n      {\n        tag: tags.number,\n        color: 'var(--ink-internal-syntax-number-color)',\n      },\n      {\n        tag: tags.operator,\n        color: 'var(--ink-internal-syntax-operator-color)',\n      },\n      {\n        tag: tags.punctuation,\n        color: 'var(--ink-internal-syntax-punctuation-color)',\n      },\n      {\n        tag: tags.link,\n        color: 'var(--ink-internal-syntax-link-color)',\n        wordBreak: 'break-all',\n      },\n      {\n        tag: tags.url,\n        color: 'var(--ink-internal-syntax-url-color)',\n        wordBreak: 'break-all',\n      },\n      // string group\n      {\n        tag: tags.string,\n        color: 'var(--ink-internal-syntax-string-color)',\n      },\n      {\n        tag: tags.special(tags.string),\n        color: 'var(--ink-internal-syntax-string-special-color)',\n      },\n      // processing instructions\n      {\n        tag: tags.processingInstruction,\n        color: 'var(--ink-internal-syntax-processing-instruction-color)',\n      },\n    ]),\n  )\n\n  return [\n    extension,\n  ]\n}\n","import { defaultKeymap, history, historyKeymap } from '@codemirror/commands'\nimport type { EditorSelection } from '@codemirror/state'\nimport { EditorState } from '@codemirror/state'\nimport { keymap } from '@codemirror/view'\nimport { buildVendors } from '/src/extensions'\nimport type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport { toCodeMirror } from './adapters/selections'\nimport { blockquote } from './extensions/blockquote'\nimport { code } from './extensions/code'\nimport { ink } from './extensions/ink'\nimport { lineWrapping } from './extensions/line_wrapping'\nimport { theme } from './extensions/theme'\n\nconst toVendorSelection = (selections: Ink.Editor.Selection[]): EditorSelection | undefined => {\n  if (selections.length > 0) {\n    return toCodeMirror(selections)\n  }\n}\n\nexport const createState = ([state, setState]: InkInternal.Store): InkInternal.Vendor.State => {\n  const { selections } = state().options\n\n  return EditorState.create({\n    doc: state().options.doc,\n    selection: toVendorSelection(selections),\n    extensions: [\n      keymap.of([\n        ...defaultKeymap,\n        ...historyKeymap,\n      ]),\n      blockquote(),\n      code(),\n      history(),\n      ink(),\n      lineWrapping(),\n      theme(),\n      ...buildVendors([state, setState]),\n    ],\n  })\n}\n","const types = {\n  array: '[object Array]',\n  object: '[object Object]',\n  string: '[object String]',\n  undefined: '[object Undefined]',\n  window: '[object Window]',\n}\n\nconst getType = (object: any) => {\n  const type = Object.prototype.toString.call(object)\n\n  if (type === types.object) {\n    return `[object ${object.constructor.name}]`\n  }\n}\n\nconst is = (object: any, type: string) => {\n  return getType(object) === type\n}\n\nconst deepAssign = (target: any, source: any) => {\n  const seen = new WeakMap()\n\n  const assign = (target: any, source: any) => {\n    if (seen.get(target)) return target\n    if (is(target, types.object)) seen.set(target, true)\n    if (is(source, types.undefined)) return target\n\n    if (is(target, types.array) && is(source, types.array)) {\n      return [...source]\n    }\n\n    if (is(target, types.object) && is(source, types.object)) {\n      return Object.keys(target).reduce((replacement: Record<PropertyKey, unknown>, key: PropertyKey) => {\n        if (Object.hasOwnProperty.call(source, key)) {\n          replacement[key] = assign(target[key], source[key])\n        } else {\n          replacement[key] = target[key]\n        }\n\n        return replacement\n      }, {})\n    }\n\n    return source\n  }\n\n  return assign(target, source)\n}\n\nexport const override = <T>(a: T, b: unknown): T => {\n  return deepAssign(a, b) as unknown as T\n}\n","import { createState } from '/src/editor'\nimport { override } from '/src/utils/merge'\nimport type InkInternal from '/types/internal'\n\nexport const load = ([state, setState]: InkInternal.Store, doc: string) => {\n  setState(override(state(), { options: { doc } }))\n\n  state().editor.setState(createState([state, setState]))\n}\n","import type InkInternal from '/types/internal'\n\nexport const options = ([state]: InkInternal.Store) => {\n  return state().options\n}\n","import { buildVendorUpdates } from '/src/extensions'\nimport { override } from '/src/utils/merge'\nimport type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\n\nexport const reconfigure = async ([state, setState]: InkInternal.Store, options: Ink.Options) => {\n  const { workQueue } = state()\n\n  return workQueue.enqueue(async () => {\n    setState(override(state(), { options }))\n    const effects = await buildVendorUpdates([state, setState])\n\n    state().editor.dispatch({ effects })\n  })\n}\n","import type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport * as InkValues from '/types/values'\nimport { toCodeMirror } from '../editor/adapters/selections'\n\nexport const select = (store: InkInternal.Store, options: Ink.Instance.SelectOptions = {}) => {\n  if (options.selections)\n    return selectMultiple(store, options.selections)\n  if (options.selection)\n    return selectOne(store, options.selection)\n  if (options.at)\n    return selectAt(store, options.at)\n}\n\nexport const selectAt = (store: InkInternal.Store, at: Ink.Values.Selection) => {\n  const [state] = store\n\n  if (at === InkValues.Selection.Start)\n    return selectOne(store, { start: 0, end: 0 })\n\n  if (at === InkValues.Selection.End) {\n    const position = state().editor.state.doc.length\n\n    return selectOne(store, { start: position, end: position })\n  }\n}\n\nexport const selectMultiple = ([state]: InkInternal.Store, selections: Ink.Editor.Selection[]) => {\n  const { editor } = state()\n\n  editor.dispatch(\n    editor.state.update({\n      selection: toCodeMirror(selections),\n    }),\n  )\n}\n\nexport const selectOne = (store: InkInternal.Store, selection: Ink.Editor.Selection) => {\n  return selectMultiple(store, [selection])\n}\n","import type InkInternal from '/types/internal'\n\nexport const update = ([state]: InkInternal.Store, doc: string) => {\n  const { editor } = state()\n\n  editor.dispatch(\n    editor.state.update({\n      changes: {\n        from: 0,\n        to: editor.state.doc.length,\n        insert: doc,\n      },\n    }),\n  )\n}\n","import type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport { insert } from './insert'\nimport { select } from './select'\nimport { selections } from './selections'\n\nexport const wrap = ([state, setState]: InkInternal.Store, { after, before, selection: userSelection }: Ink.Instance.WrapOptions) => {\n  const { editor } = state()\n\n  const selection = userSelection || selections([state, setState]).pop() || { start: 0, end: 0 }\n  const text = editor.state.sliceDoc(selection.start, selection.end)\n\n  insert([state, setState], `${before}${text}${after}`, selection)\n  select([state, setState], { selections: [{ start: selection.start + before.length, end: selection.end + before.length }] })\n}\n","import { type Thenable } from '/src/utils/inspect'\n\nexport type Awaitable<T> = () => Promise<T>\nexport type AwaitableCallbacks = { fulfilled: AwaitableCallback[], rejected: AwaitableCallback[], settled: AwaitableCallback[] }\nexport type AwaitableSettler<T = any> = (value: T) => void\nexport type AwaitableThenSettler<T = any, R = any> = (value: T) => R | Thenable<R>\nexport type AwaitableCallback = () => void\nexport type AwaitableHandler<ResolvedValue = unknown, RejectedValue = unknown> = (resolve: AwaitableSettler<ResolvedValue>, reject: AwaitableSettler<RejectedValue>) => any\nexport type AwaitableState = { callbacks: AwaitableCallbacks, error?: any, status: AwaitableStatus, value?: any }\nexport type AwaitableStatus = 'fulfilled' | 'pending' | 'rejected'\n\n// Todo: Make it so that it allows 2 values to be returned: first one for initial return object (merged with awaitable), second one for resolved object (defaults to the first)\nexport const awaitable = <InitialValue extends object, ResolvedValue = InitialValue, RejectedValue = unknown>(initialValue: InitialValue, handler: AwaitableHandler<ResolvedValue, RejectedValue>): InitialValue & Promise<ResolvedValue> => {\n  const state: AwaitableState = {\n    callbacks: {\n      fulfilled: [],\n      rejected: [],\n      settled: [],\n    },\n    status: 'pending',\n  }\n\n  const callback = (settler: AwaitableThenSettler, { resolve, reject }: { reject: AwaitableSettler, resolve?: AwaitableSettler }) => {\n    return () => {\n      try {\n        const settledValue = settler(state.value)\n\n        Promise.resolve(settledValue).then(resolve, reject)\n      } catch (error: any) {\n        reject(error)\n      }\n    }\n  }\n\n  const reject = (value: RejectedValue) => {\n    if (state.status === 'pending') {\n      state.status = 'rejected'\n      state.value = value\n\n      state.callbacks.rejected.forEach(callback => callback())\n      state.callbacks.settled.forEach(callback => callback())\n    }\n  }\n\n  const resolve = (value: ResolvedValue) => {\n    if (state.status === 'pending') {\n      state.status = 'fulfilled'\n      state.value = value\n\n      state.callbacks.fulfilled.forEach(callback => callback())\n      state.callbacks.settled.forEach(callback => callback())\n    }\n  }\n\n  const then = <OnFulfilled extends AwaitableThenSettler, OnRejected extends AwaitableThenSettler>(onFulfilled?: OnFulfilled, onRejected?: OnRejected) => {\n    return new Promise<ReturnType<Awaited<OnFulfilled>>>((resolve, reject) => {\n      if (state.status === 'pending') {\n        if (onFulfilled) {\n          state.callbacks.fulfilled.push(callback(onFulfilled, { resolve, reject }))\n        }\n\n        if (onRejected) {\n          state.callbacks.rejected.push(callback(onRejected, { resolve: undefined, reject }))\n        }\n      }\n\n      if (state.status === 'fulfilled' && onFulfilled) {\n        callback(onFulfilled, { resolve, reject })()\n      }\n\n      if (state.status === 'rejected' && onRejected) {\n        callback(onRejected, { resolve: undefined, reject })()\n      }\n    })\n  }\n\n  queueMicrotask(() => {\n    try {\n      handler(resolve, reject)\n    } catch (error: any) {\n      reject(error)\n    }\n  })\n\n  return {\n    ...initialValue,\n    [Symbol.toStringTag]: 'awaitable',\n    catch: then.bind(undefined, undefined),\n    finally: (onSettled: () => void) => {\n      return new Promise((resolve, reject) => {\n        if (state.status === 'pending') {\n          state.callbacks.settled.push(callback(onSettled, { resolve, reject }))\n        }\n\n        if (state.status === 'fulfilled') {\n          onSettled()\n          resolve(state.value)\n        }\n\n        if (state.status === 'rejected') {\n          onSettled()\n          reject(state.value)\n        }\n      })\n    },\n    then,\n  }\n}\n","import {\n  destroy,\n  focus,\n  format,\n  getDoc,\n  insert,\n  load,\n  options,\n  reconfigure,\n  select,\n  selections,\n  update,\n  wrap,\n} from '/src/api'\nimport { awaitable } from '/src/utils/awaitable'\nimport type * as Ink from '/types/ink'\nimport type InkInternal from '/types/internal'\n\nexport const makeInstance = (store: InkInternal.Store): Ink.AwaitableInstance => {\n  const instance = {\n    destroy: destroy.bind(undefined, store),\n    focus: focus.bind(undefined, store),\n    format: format.bind(undefined, store),\n    getDoc: getDoc.bind(undefined, store),\n    insert: insert.bind(undefined, store),\n    load: load.bind(undefined, store),\n    options: options.bind(undefined, store),\n    reconfigure: reconfigure.bind(undefined, store),\n    select: select.bind(undefined, store),\n    selections: selections.bind(undefined, store),\n    update: update.bind(undefined, store),\n    wrap: wrap.bind(undefined, store),\n  }\n\n  return awaitable(instance, (resolve, reject) => {\n    try {\n      const [state] = store\n\n      // Ensure all other queued tasks are finished before resolving.\n      state().workQueue.enqueue(() => resolve(instance))\n    } catch (error: any) {\n      reject(error)\n    }\n  })\n}\n","import { syntaxTree } from '@codemirror/language'\nimport { type EditorState, type Range, type RangeCursor, RangeSet, StateField, type Transaction } from '@codemirror/state'\nimport { Decoration, EditorView, type WidgetType } from '@codemirror/view'\nimport { type SyntaxNodeRef } from '@lezer/common'\n\n// Todo: Maybe open a PR to expose these types.\n// https://github.com/codemirror/view/blob/3f1b991f3db20d152045ae9e6872466fc8d8fdac/src/decoration.ts\nexport type LineDecorationSpec = { attributes?: { [key: string]: string }, class?: string, [other: string]: any }\nexport type MarkDecorationSpec = { attributes?: { [key: string]: string }, class?: string, inclusive?: boolean, inclusiveEnd?: boolean, inclusiveStart?: boolean, tagName?: string, [other: string]: any }\nexport type ReplaceDecorationSpec = { block?: boolean, inclusive?: boolean, inclusiveEnd?: boolean, inclusiveStart?: boolean, widget?: WidgetType, [other: string]: any }\nexport type WidgetDecorationSpec = { widget: WidgetType, block?: boolean, side?: number, [other: string]: any }\n\nexport type Defined<T> = Required<{\n  [K in keyof T]: NonNullable<T[K]>\n}>\n\n// Custom types.\nexport type CustomDecorationArgs = Parameters<typeof Decoration.mark>[0]\nexport type CustomDecoration<T> = T & Decoration\nexport type CustomDecorationTypes = 'line' | 'mark' | 'replace' | 'widget'\nexport type CustomWidget<T> = T & WidgetSpec\nexport type CustomWidgetArgs<T extends PartialWidgetSpec> = {\n  [K in keyof T]?: K extends 'eq' ? (other: CustomWidget<Defined<T>>) => boolean : T[K]\n}\nexport type CustomWidgetOptions<T extends PartialWidgetSpec> = {\n  [K in keyof T]: K extends 'compare' | 'eq' ? (other: CustomWidget<Defined<T>>) => boolean : T[K]\n}\nexport type CustomWidgetDecoration<T> = T & WidgetDecoration<T> & Decoration\nexport type CustomWidgetDecorationArgs = WidgetDecorationSpec & Record<string, any>\nexport type NodeBlockDecoration<T> = CustomWidgetDecoration<T> & { widget: { node: SyntaxNodeRef } }\nexport type NodeDecoratorArgs<T extends Decoration> = {\n  nodes: string[],\n  onMatch: (state: EditorState, node: SyntaxNodeRef) => T | T[] | void,\n  optimize?: boolean,\n  range?: {\n    from?: number,\n    to?: number,\n  },\n}\nexport type PartialWidgetSpec = Partial<WidgetSpec>\nexport type TypedDecoration = Decoration & { spec: Decoration['spec'] & { type: CustomDecorationTypes } }\nexport type WidgetSpec = WidgetType & { id?: string }\nexport type WidgetDecoration<T> = { block: boolean, side: number, widget: CustomWidget<T> }\n\nexport const buildBlockWidgetDecoration = <T extends CustomWidgetDecorationArgs>(options: T) => {\n  return buildWidgetDecoration({\n    block: true,\n    side: -1,\n    ...options,\n  })\n}\n\nexport const buildLineDecoration = <T extends MarkDecorationSpec>(options: T) => {\n  return Decoration.line({\n    ...options,\n    type: 'line',\n  }) as CustomDecoration<T>\n}\n\nexport const buildMarkDecoration = <T extends MarkDecorationSpec>(options: T) => {\n  return Decoration.mark({\n    ...options,\n    type: 'mark',\n  }) as CustomDecoration<T>\n}\n\nexport type WidgetOptions<T extends Record<string, any>> = {\n  [K in ((keyof T) | 'compare' | 'eq')]?: K extends 'compare' | 'eq' ? (other: WidgetReturn<T>) => boolean\n    : K extends keyof WidgetSpec ? WidgetSpec[K]\n    : T[K]\n}\nexport type WidgetReturn<T extends Record<string, any>> = {\n  [K in keyof (T & WidgetSpec)]: K extends keyof T ? NonNullable<T[K]>\n    : K extends keyof WidgetSpec ? WidgetSpec[K]\n    : never\n}\n\nexport const buildWidget = <T extends Record<string, any>>(options: WidgetOptions<T>): WidgetSpec => {\n  const eq = (other: WidgetReturn<T>) => {\n    if (options.eq) return options.eq(other)\n    if (!options.id) return false\n\n    return options.id === other.id\n  }\n\n  return {\n    compare: (other: WidgetReturn<T>) => {\n      return eq(other)\n    },\n    coordsAt: () => null,\n    destroy: () => {},\n    eq: (other: WidgetReturn<T>) => {\n      return eq(other)\n    },\n    estimatedHeight: -1,\n    ignoreEvent: () => true,\n    lineBreaks: 0,\n    toDOM: () => {\n      return document.createElement('span')\n    },\n    updateDOM: () => false,\n    ...options,\n  }\n}\n\nexport const buildWidgetDecoration = <T extends CustomWidgetDecorationArgs>(options: T): CustomWidgetDecoration<T> => {\n  return Decoration.widget({\n    block: false,\n    side: 0,\n    ...options,\n    widget: buildWidget({\n      ...options.widget,\n    }),\n    type: 'widget',\n  }) as CustomWidgetDecoration<T>\n}\n\nexport const buildNodeDecorations = <T extends TypedDecoration>(state: EditorState, options: NodeDecoratorArgs<T>) => {\n  const decorationRanges: Range<NodeBlockDecoration<T>>[] = []\n\n  syntaxTree(state).iterate({\n    enter: (node) => {\n      if (options.nodes.includes(node.type.name)) {\n        const maybeDecorations = options.onMatch(state, node)\n\n        if (!maybeDecorations) return\n\n        const decorations = Array<T>().concat(maybeDecorations)\n\n        decorations.forEach((decoration) => {\n          if (decoration.spec.type === 'line') {\n            const wrapped = buildLineDecoration({ ...decoration.spec, node: { ...node } })\n\n            for (let line = state.doc.lineAt(node.from); line.from < node.to; line = state.doc.lineAt(line.to + 1)) {\n              decorationRanges.push(wrapped.range(line.from))\n\n              if (line.to === state.doc.length) break\n            }\n          }\n\n          if (decoration.spec.type === 'mark') {\n            const wrapped = buildMarkDecoration({ ...decoration.spec, node: { ...node } }).range(node.from, node.to)\n\n            decorationRanges.push(wrapped)\n          }\n\n          if (decoration.spec.type === 'widget') {\n            const wrapped = buildWidgetDecoration({ ...decoration.spec, node: { ...node } }).range(node.from)\n\n            decorationRanges.push(wrapped)\n          }\n        })\n      }\n    },\n    from: options.range?.from,\n    to: options.range?.to,\n  })\n\n  return decorationRanges.sort((left, right) => {\n    return left.from - right.from\n  })\n}\n\nexport const buildOptimizedNodeDecorations = <T extends Decoration>(rangeSet: RangeSet<NodeBlockDecoration<T>>, transaction: Transaction, options: NodeDecoratorArgs<T>) => {\n  const decorations = [] as Range<NodeBlockDecoration<T>>[]\n  const cursor = rangeSet.iter()\n  const cursors = [] as RangeCursor<NodeBlockDecoration<T>>[]\n  const cursorsToSkip = [] as RangeCursor<NodeBlockDecoration<T>>[]\n\n  while (cursor.value) {\n    cursors.push({ ...cursor })\n    cursor.next()\n  }\n\n  transaction.changes.iterChangedRanges((_beforeFrom, _beforeTo, changeFrom, changeTo) => {\n    cursors.forEach((cursor) => {\n      if (cursor.value) {\n        const nodeLength = cursor.value.spec.node.to - cursor.value.spec.node.from\n        const cursorFrom = cursor.from\n        const cursorTo = cursor.from + nodeLength\n\n        if (isOverlapping(cursorFrom, cursorTo, changeFrom, changeTo)) {\n          cursorsToSkip.push(cursor)\n        }\n      }\n    })\n\n    const range = { from: changeFrom, to: changeTo }\n\n    decorations.push(...buildNodeDecorations(transaction.state, { ...options, range }))\n  })\n\n  const cursorDecos = cursors.filter(cursor => !cursorsToSkip.includes(cursor)).flatMap((cursor) => {\n    const range = cursor.value?.range(cursor.from) as Range<NodeBlockDecoration<T>>\n\n    if (!range) return []\n\n    return [range]\n  })\n\n  decorations.push(...cursorDecos)\n\n  const allDecorations = decorations.sort((left, right) => {\n    return left.from - right.from\n  })\n\n  // This reprocesses the entire state.\n  return allDecorations\n}\n\nexport const isOverlapping = (x1: number, x2: number, y1: number, y2: number) => {\n  return Math.max(x1, y1) <= Math.min(x2, y2)\n}\n\nexport const nodeDecorator = <T extends Decoration>(options: NodeDecoratorArgs<T>) => {\n  return StateField.define<RangeSet<NodeBlockDecoration<T>>>({\n    create(state) {\n      return RangeSet.of(buildNodeDecorations(state, options))\n    },\n    update(rangeSet, transaction) {\n      // Reconfiguration and state effects will reprocess the entire state to ensure nothing is missed.\n      if (transaction.reconfigured || transaction.effects.length > 0) {\n        return RangeSet.of(buildNodeDecorations(transaction.state, options))\n      }\n\n      const updatedRangeSet = rangeSet.map(transaction.changes)\n\n      if (transaction.docChanged) {\n        // Only process the ranges that are affected by this change.\n        if (options.optimize) {\n          return RangeSet.of(buildOptimizedNodeDecorations(updatedRangeSet, transaction, options))\n        }\n\n        return RangeSet.of(buildNodeDecorations(transaction.state, options))\n      }\n\n      // No need to redecorate. Instead, just map the decorations through the transaction changes.\n      return updatedRangeSet\n    },\n    provide(field) {\n      // Provide the extension to the editor.\n      return EditorView.decorations.from(field)\n    },\n  })\n}\n","import { Tag } from '@lezer/highlight'\n\nexport const buildTag = <T extends Tag>(parent?: T) => {\n  return Tag.define(parent)\n}\n\nexport const getCharCode = (char: string) => {\n  return char.charCodeAt(0)\n}\n","import { type Tag, tags } from '@lezer/highlight'\nimport { type BlockParser, type DelimiterType, type InlineParser, type MarkdownConfig, type NodeSpec } from '@lezer/markdown'\nimport { buildTag, getCharCode } from './parsers'\n\nexport const buildMarkNode = (markName: string) => {\n  return buildTaggedNode(markName, [tags.processingInstruction])\n}\n\nexport const buildTaggedNode = (nodeName: string, styleTags: Tag[] = []) => {\n  const tag = buildTag()\n  const node = defineNode({\n    name: nodeName,\n    style: [tag, ...styleTags],\n  })\n\n  return {\n    node,\n    tag,\n  }\n}\n\nexport const defineBlockParser = <T extends BlockParser>(options: T) => options\nexport const defineDelimiter = <T extends DelimiterType>(options?: T) => ({ ...options })\nexport const defineInlineParser = <T extends InlineParser>(options: T) => options\nexport const defineMarkdown = <T extends MarkdownConfig>(options: T) => options\nexport const defineNode = <T extends NodeSpec>(options: T) => options\n\n/**\n * Build an inline Markdown parser that matches a custom expression. E.g. `[[hello]]` for wikilinks.\n *\n * @param options\n * @param options.name The name of the new node type. E.g. `WikiLink` for wikilinks.\n * @param options.prefix The tokens that indicate the start of the custom expression. E.g. `[[` for wikilinks.\n * @param options.suffix The tokens that indicate the end of the custom expression. E.g. `]]` for wikilinks.\n * @param options.matcher The regex that matches the custom expression. E.g. `/(?<prefix>\\[\\[)(?<content>.*?)(?<suffix>\\]\\])/` for wikilinks.\n */\nexport const buildInlineParser = (options: { name: string, prefix: string, matcher?: RegExp, suffix?: string }) => {\n  const { name, prefix, suffix } = options\n  const matcher = options.matcher || new RegExp(`(?<prefix>${prefix})(?<content>.*?)(?<suffix>${suffix})`)\n  const [firstCharCode, ...prefixCharCodes] = prefix.split('').map(getCharCode)\n\n  const taggedNode = buildTaggedNode(name)\n  const taggedNodeMark = buildMarkNode(`${name}Mark`)\n  const taggedNodeMarkStart = buildMarkNode(`${name}MarkStart`)\n  const taggedNodeMarkEnd = buildMarkNode(`${name}MarkEnd`)\n\n  return defineInlineParser({\n    name: taggedNode.node.name,\n    parse: (inlineContext, nextCharCode, position) => {\n      // Match the first char code as efficiently as possible.\n      if (nextCharCode !== firstCharCode) return -1\n\n      // Check the remaining char codes.\n      for (let i = 0; i < prefixCharCodes.length; i++) {\n        const prefixCharCode = prefixCharCodes[i]\n        const nextCharPosition = position + i + 1\n\n        if (inlineContext.text.charCodeAt(nextCharPosition) !== prefixCharCode) return -1\n      }\n\n      // Get all the line text left after the current position.\n      const remainingLineText = inlineContext.slice(position, inlineContext.end)\n\n      if (!matcher.test(remainingLineText)) return -1\n\n      const match = remainingLineText.match(matcher)\n\n      // Todo: Add config to allow empty?\n      if (!match?.groups?.content) return -1\n\n      const prefixLength = prefix.length\n      const contentLength = match.groups.content.length\n      const suffixLength = suffix?.length || 0\n\n      return inlineContext.addElement(\n        inlineContext.elt(\n          taggedNode.node.name,\n          position,\n          position + prefixLength + contentLength + suffixLength,\n          [\n            inlineContext.elt(\n              taggedNodeMark.node.name,\n              position,\n              position + prefixLength,\n              [\n                inlineContext.elt(\n                  taggedNodeMarkStart.node.name,\n                  position,\n                  position + prefixLength,\n                ),\n              ],\n            ),\n            inlineContext.elt(\n              taggedNodeMark.node.name,\n              position + prefixLength + contentLength,\n              position + prefixLength + contentLength + suffixLength,\n              [\n                inlineContext.elt(\n                  taggedNodeMarkEnd.node.name,\n                  position + prefixLength + contentLength,\n                  position + prefixLength + contentLength + suffixLength,\n                ),\n              ],\n            ),\n          ],\n        ),\n      )\n    },\n  })\n}\n","import { buildMarkNode, buildTaggedNode, defineBlockParser, defineInlineParser, defineMarkdown, getCharCode } from '/lib/codemirror-kit'\n\nexport const charCodes = {\n  dollarSign: getCharCode('$'),\n}\n\nexport const mathInlineTestRegex = /\\$.*?\\$/\nexport const mathInlineCaptureRegex = /\\$(?<math>.*?)\\$/\n\nexport const mathInline = buildTaggedNode('MathInline')\nexport const mathInlineMark = buildMarkNode('MathInlineMark')\nexport const mathInlineMarkOpen = buildMarkNode('MathInlineMarkOpen')\nexport const mathInlineMarkClose = buildMarkNode('MathInlineMarkClose')\nexport const mathInlineParser = defineInlineParser({\n  name: mathInline.node.name,\n  parse: (inlineContext, nextCharCode, position) => {\n    // Not a \"$\" char.\n    if (nextCharCode !== charCodes.dollarSign) return -1\n\n    const remainingLineText = inlineContext.slice(position, inlineContext.end)\n\n    // No ending \"$\" found.\n    if (!mathInlineTestRegex.test(remainingLineText)) return -1\n\n    const match = remainingLineText.match(mathInlineCaptureRegex)\n\n    // No match found.\n    if (!match?.groups?.math) return -1\n\n    const mathExpressionLength = match.groups.math.length\n\n    return inlineContext.addElement(\n      inlineContext.elt(\n        mathInline.node.name,\n        position,\n        position + mathExpressionLength + 2,\n        [\n          inlineContext.elt(\n            mathInlineMark.node.name,\n            position,\n            position + 1,\n            [\n              inlineContext.elt(\n                mathInlineMarkOpen.node.name,\n                position,\n                position + 1,\n              ),\n            ],\n          ),\n          inlineContext.elt(\n            mathInlineMark.node.name,\n            position + mathExpressionLength + 1,\n            position + mathExpressionLength + 2,\n            [\n              inlineContext.elt(\n                mathInlineMarkClose.node.name,\n                position + mathExpressionLength + 1,\n                position + mathExpressionLength + 2,\n              ),\n            ],\n          ),\n        ],\n      ),\n    )\n  },\n})\n\nexport const mathBlockTestRegex = /\\$.*?\\$/\nexport const mathBlockCaptureRegex = /\\$(?<math>.*?)\\$/\n\nexport const mathBlock = buildTaggedNode('MathBlock')\nexport const mathBlockMark = buildMarkNode('MathBlockMark')\nexport const mathBlockMarkOpen = buildMarkNode('MathBlockMarkOpen')\nexport const mathBlockMarkClose = buildMarkNode('MathBlockMarkClose')\nexport const mathBlockParser = defineBlockParser({\n  name: 'MathBlock',\n  parse: (blockContext, line) => {\n    // Not \"$\"\n    if (line.next !== charCodes.dollarSign) return false\n    // Not \"$$\"\n    if (line.text.charCodeAt(line.pos + 1) !== charCodes.dollarSign) return false\n\n    const openLineStart = blockContext.lineStart + line.pos\n    const openLineEnd = openLineStart + line.text.length\n\n    // Move past opening line.\n    while (blockContext.nextLine()) {\n      // Closing \"$$\"\n      if (line.next === charCodes.dollarSign && line.text.charCodeAt(line.pos + 1) === charCodes.dollarSign) {\n        const closeLineStart = blockContext.lineStart + line.pos\n        const closeLineEnd = closeLineStart + line.text.length\n\n        blockContext.addElement(\n          blockContext.elt(\n            mathBlock.node.name,\n            openLineStart,\n            closeLineEnd,\n            [\n              blockContext.elt(\n                mathBlockMark.node.name,\n                openLineStart,\n                openLineEnd,\n                [\n                  blockContext.elt(\n                    mathBlockMarkOpen.node.name,\n                    openLineStart,\n                    openLineEnd,\n                  ),\n                ],\n              ),\n              blockContext.elt(\n                mathBlockMark.node.name,\n                closeLineStart,\n                closeLineEnd,\n                [\n                  blockContext.elt(\n                    mathBlockMarkClose.node.name,\n                    closeLineStart,\n                    closeLineEnd,\n                  ),\n                ],\n              ),\n            ],\n          ),\n        )\n\n        blockContext.nextLine()\n\n        break\n      }\n    }\n\n    return true\n  },\n})\n\nexport const grammar = defineMarkdown({\n  defineNodes: [\n    mathInline.node,\n    mathInlineMark.node,\n    mathInlineMarkClose.node,\n    mathInlineMarkOpen.node,\n    mathBlock.node,\n    mathBlockMark.node,\n    mathBlockMarkOpen.node,\n    mathBlockMarkClose.node,\n  ],\n  parseBlock: [\n    mathBlockParser,\n  ],\n  parseInline: [\n    mathInlineParser,\n  ],\n})\n","import { HighlightStyle, syntaxHighlighting } from '@codemirror/language'\nimport { EditorView } from '@codemirror/view'\nimport { buildBlockWidgetDecoration, buildLineDecoration, buildWidget, nodeDecorator } from '/lib/codemirror-kit'\nimport { plugin, pluginTypes } from '/src/index'\nimport { grammar, mathInline, mathInlineMark, mathInlineMarkClose, mathInlineMarkOpen } from './grammar'\n\nexport const katex = () => {\n  return [\n    plugin({\n      key: 'katex',\n      type: pluginTypes.grammar,\n      value: async () => grammar,\n    }),\n    plugin({\n      key: 'katex',\n      value: async () => {\n        return nodeDecorator({\n          nodes: ['MathBlock', 'MathBlockMarkClose', 'MathBlockMarkOpen'],\n          onMatch: (_state, node) => {\n            const classes = ['ink-mde-line-math-block']\n\n            if (node.name === 'MathBlockMarkOpen') classes.push('ink-mde-line-math-block-open')\n            if (node.name === 'MathBlockMarkClose') classes.push('ink-mde-line-math-block-close')\n\n            return buildLineDecoration({\n              attributes: {\n                class: classes.join(' '),\n              },\n            })\n          },\n          optimize: false,\n        })\n      },\n    }),\n    plugin({\n      key: 'katex',\n      value: async () => {\n        return nodeDecorator({\n          nodes: ['MathBlock'],\n          onMatch: (state, node) => {\n            const text = state.sliceDoc(node.from, node.to).split('\\n').slice(1, -1).join('\\n')\n\n            if (text) {\n              return buildBlockWidgetDecoration({\n                widget: buildWidget({\n                  id: text,\n                  toDOM: (view) => {\n                    const container = document.createElement('div')\n                    const katexTarget = document.createElement('div')\n\n                    container.className = 'ink-mde-block-widget-container'\n                    katexTarget.className = 'ink-mde-block-widget ink-mde-katex-target'\n                    container.appendChild(katexTarget)\n\n                    import('katex').then(({ default: lib }) => {\n                      lib.render(text, katexTarget, { output: 'html', throwOnError: false })\n\n                      view.requestMeasure()\n                    })\n\n                    return container\n                  },\n                  updateDOM: (dom, view) => {\n                    const katexTarget = dom.querySelector<HTMLElement>('.ink-mde-katex-target')\n\n                    if (katexTarget) {\n                      import('katex').then(({ default: lib }) => {\n                        lib.render(text, katexTarget, { output: 'html', throwOnError: false })\n\n                        view.requestMeasure()\n                      })\n\n                      return true\n                    }\n\n                    return false\n                  },\n                }),\n              })\n            }\n          },\n          optimize: false,\n        })\n      },\n    }),\n    plugin({\n      key: 'katex',\n      value: async () => {\n        return syntaxHighlighting(\n          HighlightStyle.define([\n            {\n              tag: [mathInline.tag, mathInlineMark.tag],\n              backgroundColor: 'var(--ink-internal-block-background-color)',\n            },\n            {\n              tag: [mathInlineMarkClose.tag],\n              backgroundColor: 'var(--ink-internal-block-background-color)',\n              borderRadius: '0 var(--ink-internal-border-radius) var(--ink-internal-border-radius) 0',\n              paddingRight: 'var(--ink-internal-inline-padding)',\n            },\n            {\n              tag: [mathInlineMarkOpen.tag],\n              backgroundColor: 'var(--ink-internal-block-background-color)',\n              borderRadius: 'var(--ink-internal-border-radius) 0 0 var(--ink-internal-border-radius)',\n              paddingLeft: 'var(--ink-internal-inline-padding)',\n            },\n          ]),\n        )\n      },\n    }),\n    plugin({\n      key: 'katex',\n      value: async () => {\n        return EditorView.theme({\n          '.ink-mde-line-math-block': {\n            backgroundColor: 'var(--ink-internal-block-background-color)',\n            padding: '0 var(--ink-internal-block-padding) !important',\n          },\n          '.ink-mde-line-math-block-open': {\n            borderRadius: 'var(--ink-internal-border-radius) var(--ink-internal-border-radius) 0 0',\n          },\n          '.ink-mde-line-math-block-close': {\n            borderRadius: '0 0 var(--ink-internal-border-radius) var(--ink-internal-border-radius)',\n          },\n        })\n      },\n    }),\n  ]\n}\n","export type Queue = ReturnType<typeof makeQueue>\n\nexport const makeQueue = () => {\n  const state = {\n    queue: <(() => Promise<void>)[]>[],\n    workload: 0,\n  }\n\n  const process = async () => {\n    const task = state.queue.pop()\n\n    if (!task) return\n\n    await task()\n\n    state.workload--\n\n    await process()\n  }\n\n  return {\n    enqueue: (callback: () => void | Promise<void>): Promise<void> => {\n      return new Promise((resolve, reject) => {\n        const task = async () => {\n          try {\n            await callback()\n\n            resolve()\n          } catch (error) {\n            reject(error)\n          }\n        }\n\n        state.queue.push(task)\n        state.workload++\n\n        // If the queue has other items in it, then it will drain itself.\n        if (state.workload > 1) return\n\n        process()\n      })\n    },\n  }\n}\n","import { createSignal } from 'solid-js'\nimport { katex } from '/plugins/katex'\nimport { createExtensions } from '/src/extensions'\nimport { override } from '/src/utils/merge'\nimport { makeQueue } from '/src/utils/queue'\nimport type { Options } from '/types/ink'\nimport type InkInternal from '/types/internal'\nimport * as InkValues from '/types/values'\nimport { createElement } from './ui/utils'\n\nexport const blankState = (): InkInternal.StateResolved => {\n  const options = {\n    doc: '',\n    files: {\n      clipboard: false,\n      dragAndDrop: false,\n      handler: () => {},\n      injectMarkup: true,\n      types: ['image/*'],\n    },\n    hooks: {\n      afterUpdate: () => {},\n      beforeUpdate: () => {},\n    },\n    interface: {\n      appearance: InkValues.Appearance.Auto,\n      attribution: true,\n      autocomplete: false,\n      images: false,\n      lists: false,\n      readonly: false,\n      spellcheck: true,\n      toolbar: false,\n    },\n    katex: false,\n    keybindings: {\n      // Todo: Set these to false by default. https://codemirror.net/examples/tab\n      tab: true,\n      shiftTab: true,\n    },\n    lists: false,\n    placeholder: '',\n    plugins: [\n      katex(),\n    ],\n    readability: false,\n    search: true,\n    selections: [],\n    toolbar: {\n      bold: true,\n      code: true,\n      codeBlock: true,\n      heading: true,\n      image: true,\n      italic: true,\n      link: true,\n      list: true,\n      orderedList: true,\n      quote: true,\n      taskList: true,\n      upload: false,\n    },\n    // This value overrides both `tab` and `shiftTab` keybindings.\n    trapTab: undefined,\n    vim: false,\n  }\n\n  return {\n    doc: '',\n    editor: {} as InkInternal.Editor,\n    extensions: createExtensions(),\n    options,\n    root: createElement(),\n    target: createElement(),\n    workQueue: makeQueue(),\n  }\n}\n\nexport const makeState = (partialState: InkInternal.State): InkInternal.StateResolved => {\n  return override(blankState(), partialState)\n}\n\nexport const makeStore = (options: Options, overrides: InkInternal.State = {}): InkInternal.Store => {\n  const [state, setState] = createSignal(makeState({ ...overrides, doc: options.doc || '', options }))\n\n  return [state, setState]\n}\n","export const DEFAULT_WORDS_PER_MINUTE = 225\n\nexport const toHuman = (text: string, wordsPerMinute: number = DEFAULT_WORDS_PER_MINUTE): string => {\n  const readTime = toHumanReadTime(text, wordsPerMinute)\n  const wordCount = toHumanWordCount(text)\n  const lineCount = toHumanLineCount(text)\n  const charCount = toHumanCharCount(text)\n\n  return [readTime, wordCount, lineCount, charCount].join(' | ')\n}\n\nexport const toHumanCharCount = (text: string): string => {\n  const charCount = toCharCount(text)\n\n  return `${charCount} chars`\n}\n\nexport const toHumanLineCount = (text: string): string => {\n  const lineCount = toLineCount(text)\n\n  return `${lineCount} lines`\n}\n\nexport const toHumanReadTime = (text: string, wordsPerMinute: number = DEFAULT_WORDS_PER_MINUTE): string => {\n  const readTime = toReadTime(text, wordsPerMinute)\n  const readTimeMinutes = Math.floor(readTime)\n  const readTimeSeconds = Math.floor((readTime % 1) * 60)\n\n  if (readTimeMinutes === 0) {\n    return `${readTimeSeconds}s read`\n  }\n\n  return `${readTimeMinutes}m ${readTimeSeconds}s to read`\n}\n\nexport const toHumanWordCount = (text: string): string => {\n  const wordCount = toWordCount(text)\n\n  return `${wordCount} words`\n}\n\nexport const toCharCount = (text: string): number => {\n  return text.length\n}\n\nexport const toLineCount = (text: string): number => {\n  return text.split(/\\n/).length\n}\n\nexport const toReadTime = (text: string, wordsPerMinute: number = DEFAULT_WORDS_PER_MINUTE): number => {\n  return toWordCount(text) / wordsPerMinute\n}\n\nexport const toWordCount = (text: string): number => {\n  const scrubbed = text.replace(/[']/g, '').replace(/[^\\w\\d]+/g, ' ').trim()\n\n  if (!scrubbed) {\n    return 0\n  }\n\n  return scrubbed.split(/\\s+/).length\n}\n","import { type Component, Show } from 'solid-js'\nimport { toHuman } from '/src/utils/readability'\nimport type InkInternal from '/types/internal'\nimport { useStore } from '../../app'\n\nexport const Details: Component<{ store: InkInternal.Store }> = () => {\n  const [state] = useStore()\n\n  return (\n    <div class='ink-mde-details'>\n      <div class='ink-mde-container'>\n        <div class='ink-mde-details-content'>\n          <Show when={ state().options.readability }>\n            <div class='ink-mde-readability'>\n              <span>{ toHuman(state().doc) }</span>\n            </div>\n          </Show>\n          <Show when={ state().options.readability && state().options.interface.attribution }>\n            <span>&nbsp;|</span>\n          </Show>\n          <Show when={state().options.interface.attribution}>\n            <div class='ink-mde-attribution'>\n              <span>&nbsp;powered by <a class='ink-mde-attribution-link' href='https://github.com/davidmyersdev/ink-mde' rel='noopener noreferrer' target='_blank'>ink-mde</a></span>\n            </div>\n          </Show>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { Component } from 'solid-js'\nimport { For, Show, createSignal, onCleanup, onMount } from 'solid-js'\nimport { insert } from '/src/api'\nimport { useStore } from '../../app'\nimport styles from './styles.css?inline'\n\nexport const DropZone: Component = () => {\n  const [depth, setDepth] = createSignal(0)\n  const [files, setFiles] = createSignal<File[]>([])\n  const [isLoading, setIsLoading] = createSignal(false)\n  const [isVisible, setIsVisible] = createSignal(false)\n  const [state, setState] = useStore()\n\n  const closeModal = () => {\n    setIsVisible(false)\n  }\n\n  const dropOnZone = (event: DragEvent) => {\n    if (state().options.files.dragAndDrop) {\n      event.preventDefault()\n      event.stopPropagation()\n\n      const transfer = event.dataTransfer\n\n      if (transfer?.files) {\n        uploadFiles(transfer.files)\n      } else {\n        setDepth(0)\n        setIsVisible(false)\n        setFiles([])\n      }\n    }\n  }\n\n  const onDragEnter = (event: DragEvent) => {\n    if (state().options.files.dragAndDrop) {\n      event.preventDefault()\n\n      setDepth(depth() + 1)\n      setIsVisible(true)\n    }\n  }\n\n  const onDragLeave = (event: DragEvent) => {\n    if (state().options.files.dragAndDrop) {\n      event.preventDefault()\n\n      setDepth(depth() - 1)\n\n      if (depth() === 0)\n        setIsVisible(false)\n    }\n  }\n\n  const onDragOver = (event: DragEvent) => {\n    if (state().options.files.dragAndDrop) {\n      event.preventDefault()\n\n      setIsVisible(true)\n    }\n  }\n\n  const onDrop = (event: DragEvent) => {\n    if (state().options.files.dragAndDrop) {\n      event.preventDefault()\n\n      setDepth(0)\n      setIsVisible(false)\n    }\n  }\n\n  const onPaste = (event: ClipboardEvent) => {\n    if (state().options.files.clipboard) {\n      event.preventDefault()\n\n      const transfer = event.clipboardData\n\n      if (transfer?.files && transfer.files.length > 0)\n        uploadFiles(transfer.files)\n    }\n  }\n\n  const uploadFiles = (userFiles: FileList) => {\n    Array.from(userFiles).forEach((file) => {\n      setFiles([...files(), file])\n    })\n\n    setIsLoading(true)\n    setIsVisible(true)\n\n    Promise.resolve(state().options.files.handler(userFiles)).then((url) => {\n      if (state().options.files.injectMarkup && url) {\n        const markup = `![](${url})`\n\n        insert([state, setState], markup)\n      }\n    }).finally(() => {\n      setDepth(0)\n      setIsLoading(false)\n      setIsVisible(false)\n      setFiles([])\n    })\n  }\n\n  onMount(() => {\n    document.addEventListener('dragenter', onDragEnter)\n    document.addEventListener('dragleave', onDragLeave)\n    document.addEventListener('dragover', onDragOver)\n    document.addEventListener('drop', onDrop)\n    state().root.addEventListener('paste', onPaste)\n  })\n\n  onCleanup(() => {\n    document.removeEventListener('dragenter', onDragEnter)\n    document.removeEventListener('dragleave', onDragLeave)\n    document.removeEventListener('dragover', onDragOver)\n    document.removeEventListener('drop', onDrop)\n    state().root.removeEventListener('paste', onPaste)\n  })\n\n  return (\n    <div class=\"ink-drop-zone\" classList={{ visible: isVisible() }}>\n      <style textContent={styles} />\n      <div class=\"ink-drop-zone-modal\">\n        <div class=\"ink-drop-zone-droppable-area\" onDrop={dropOnZone}>\n          <div class=\"ink-drop-zone-file-preview\">\n            <For each={files().slice(0, 8)}>{file => (\n              <img class=\"ink-drop-zone-file-preview-image\" alt={file.name} src={URL.createObjectURL(file)} />\n            )}</For>\n          </div>\n          <Show when={isLoading()} fallback={<span>drop files here</span>}>\n            <span>uploading files...</span>\n          </Show>\n        </div>\n        <div class=\"ink-drop-zone-hide\" onClick={closeModal}>\n          <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n            <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z\" />\n          </svg>\n        </div>\n      </div>\n    </div>\n  )\n}\n","import type { Component } from 'solid-js'\nimport { buildVendorUpdates } from '/src/extensions'\nimport { useStore } from '/src/ui/app'\nimport { override } from '/src/utils/merge'\nimport { createView } from '../../../editor'\n\nexport const Editor: Component<{ target?: HTMLElement }> = (props) => {\n  // Needed for tree-shaking purposes.\n  if (import.meta.env.VITE_SSR) {\n    return (\n      <div class='cm-editor'>\n        <div class='cm-scroller'>\n          <div class='cm-content' contenteditable={true}>\n            <div class='cm-line'>\n              <br />\n            </div>\n          </div>\n        </div>\n      </div>\n    )\n  }\n\n  const [state, setState] = useStore()\n  // eslint-disable-next-line solid/reactivity\n  const editor = createView([state, setState], props.target)\n\n  const { workQueue } = state()\n  setState(override(state(), { editor }))\n\n  workQueue.enqueue(async () => {\n    const effects = await buildVendorUpdates([state, setState])\n\n    editor.dispatch({ effects })\n  })\n\n  return editor.dom\n}\n","import type { Component, JSX } from 'solid-js'\n\nexport const Button: Component<{ children: JSX.Element, onclick: JSX.EventHandler<HTMLButtonElement, MouseEvent> }> = (props) => {\n  return (\n    <button class='ink-button' onClick={e => props.onclick(e)} type='button'>\n      {props.children}\n    </button>\n  )\n}\n","import { Show, createSignal } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport { focus, format, insert } from '/src/api'\nimport { useStore } from '/src/ui/app'\nimport * as InkValues from '/types/values'\nimport { Button } from '../button'\nimport styles from './styles.css?inline'\n\nexport const Toolbar: Component = () => {\n  const [state, setState] = useStore()\n  const [uploader, setUploader] = createSignal<HTMLInputElement>()\n\n  const formatAs = (type: InkValues.Markup) => {\n    format([state, setState], type)\n    focus([state, setState])\n  }\n\n  const uploadChangeHandler = (event: Event) => {\n    const target = event.target as HTMLInputElement\n\n    if (target?.files) {\n      Promise.resolve(state().options.files.handler(target.files)).then((url) => {\n        if (url) {\n          const markup = `![](${url})`\n\n          insert([state, setState], markup)\n          focus([state, setState])\n        }\n      })\n    }\n  }\n\n  const uploadClickHandler = () => {\n    uploader()?.click()\n  }\n\n  return (\n    <div class='ink-mde-toolbar'>\n      <style textContent={styles} />\n      <div class='ink-mde-container'>\n        <Show when={state().options.toolbar.heading || state().options.toolbar.bold || state().options.toolbar.italic}>\n          <div class='ink-mde-toolbar-group'>\n            <Show when={state().options.toolbar.heading}>\n              <Button onclick={() => formatAs(InkValues.Markup.Heading)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M6 4V10M6 16V10M6 10H14M14 10V4M14 10V16'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.bold}>\n              <Button onclick={() => formatAs(InkValues.Markup.Bold)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-width='1.5' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M6.5 10H10.5C12.1569 10 13.5 11.3431 13.5 13C13.5 14.6569 12.1569 16 10.5 16H6.5V4H9.5C11.1569 4 12.5 5.34315 12.5 7C12.5 8.65686 11.1569 10 9.5 10'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.italic}>\n              <Button onclick={() => formatAs(InkValues.Markup.Italic)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M11 4L9 16M13 4H9M7 16H11'/>\n                </svg>\n              </Button>\n            </Show>\n          </div>\n        </Show>\n        <Show when={state().options.toolbar.quote || state().options.toolbar.codeBlock || state().options.toolbar.code}>\n          <div class='ink-mde-toolbar-group'>\n            <Show when={state().options.toolbar.quote}>\n              <Button onclick={() => formatAs(InkValues.Markup.Quote)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M2.00257 16H17.9955M2.00055 4H18M7 10H18.0659M2 8.5V11.4999C2.4 11.5 2.5 11.5 2.5 11.5V11V10.5M4 8.5V11.4999H4.5V11V10.5'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.codeBlock}>\n              <Button onclick={() => formatAs(InkValues.Markup.CodeBlock)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M13 4L7 16'/>\n                  <path d='M5 7L2 10L5 13'/>\n                  <path d='M15 7L18 10L15 13'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.code}>\n              <Button onclick={() => formatAs(InkValues.Markup.Code)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M7 4L8 6'/>\n                </svg>\n              </Button>\n            </Show>\n          </div>\n        </Show>\n        <Show when={state().options.toolbar.list || state().options.toolbar.orderedList || state().options.toolbar.taskList}>\n          <div class='ink-mde-toolbar-group'>\n            <Show when={state().options.toolbar.list}>\n              <Button onclick={() => formatAs(InkValues.Markup.List)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M7 16H17.8294'/>\n                  <path d='M2 16H4'/>\n                  <path d='M7 10H17.8294'/>\n                  <path d='M2 10H4'/>\n                  <path d='M7 4H17.8294'/>\n                  <path d='M2 4H4'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.orderedList}>\n              <Button onclick={() => formatAs(InkValues.Markup.OrderedList)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M7 16H18'/>\n                  <path d='M2 17.0242C2.48314 17.7569 3.94052 17.6154 3.99486 16.7919C4.05315 15.9169 3.1975 16.0044 2.99496 16.0044M2.0023 14.9758C2.48544 14.2431 3.94282 14.3846 3.99716 15.2081C4.05545 16.0831 3.1998 16.0002 2.99726 16.0002'/>\n                  <path d='M7 10H18'/>\n                  <path d='M2.00501 11.5H4M2.00193 8.97562C2.48449 8.24319 3.9401 8.38467 3.99437 9.20777C4.05259 10.0825 2.04342 10.5788 2 11.4996'/>\n                  <path d='M7 4H18'/>\n                  <path d='M2 5.5H4M2.99713 5.49952V2.5L2.215 2.93501'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.taskList}>\n              <Button onclick={() => formatAs(InkValues.Markup.TaskList)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M7 16H17.8294'/>\n                  <path d='M5 15L3 17L2 16'/>\n                  <path d='M7 10H17.8294'/>\n                  <path d='M5 9L3 11L2 10'/>\n                  <path d='M7 4H17.8294'/>\n                  <path d='M5 3L3 5L2 4'/>\n                </svg>\n              </Button>\n            </Show>\n          </div>\n        </Show>\n        <Show when={state().options.toolbar.link || state().options.toolbar.image || state().options.toolbar.upload}>\n          <div class='ink-mde-toolbar-group'>\n            <Show when={state().options.toolbar.link}>\n              <Button onclick={() => formatAs(InkValues.Markup.Link)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M9.12127 10.881C10.02 11.78 11.5237 11.7349 12.4771 10.7813L15.2546 8.00302C16.2079 7.04937 16.253 5.54521 15.3542 4.6462C14.4555 3.74719 12.9512 3.79174 11.9979 4.74539L10.3437 6.40007M10.8787 9.11903C9.97997 8.22002 8.47626 8.26509 7.52288 9.21874L4.74545 11.997C3.79208 12.9506 3.74701 14.4548 4.64577 15.3538C5.54452 16.2528 7.04876 16.2083 8.00213 15.2546L9.65633 13.5999'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.image}>\n              <Button onclick={() => formatAs(InkValues.Markup.Image)}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <rect x='2' y='4' width='16' height='12' rx='1'/>\n                  <path d='M7.42659 7.67597L13.7751 13.8831M2.00208 12.9778L7.42844 7.67175'/>\n                  <path d='M11.9119 12.0599L14.484 9.54443L17.9973 12.9785'/>\n                  <path d='M10.9989 7.95832C11.551 7.95832 11.9986 7.52072 11.9986 6.98092C11.9986 6.44113 11.551 6.00354 10.9989 6.00354C10.4468 6.00354 9.99921 6.44113 9.99921 6.98092C9.99921 7.52072 10.4468 7.95832 10.9989 7.95832Z'/>\n                </svg>\n              </Button>\n            </Show>\n            <Show when={state().options.toolbar.upload}>\n              <Button onclick={uploadClickHandler}>\n                <svg viewBox='0 0 20 20' fill='none' stroke='currentColor' stroke-miterlimit='5' stroke-linecap='round' stroke-linejoin='round'>\n                  <path d='M10 13V4M10 4L13 7M10 4L7 7'/>\n                  <path d='M2 13V15C2 15.5523 2.44772 16 3 16H17C17.5523 16 18 15.5523 18 15V13'/>\n                </svg>\n                <input style={{ display: 'none' }} type='file' onChange={uploadChangeHandler} ref={setUploader} />\n              </Button>\n            </Show>\n          </div>\n        </Show>\n      </div>\n    </div>\n  )\n}\n","import { type Component, createEffect, createSignal, onMount } from 'solid-js'\nimport { buildVendorUpdates } from '/src/extensions'\nimport { useStore } from '../../app'\nimport { makeVars } from '../../utils'\nimport styles from './styles.css?inline'\n\nexport const Styles: Component = () => {\n  const [state, setState] = useStore()\n  const [vars, setVars] = createSignal(makeVars(state()))\n\n  createEffect(() => {\n    setVars(makeVars(state()))\n  })\n\n  onMount(() => {\n    const mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)')\n    const listener = (_event: MediaQueryListEvent) => {\n      const { editor, root, workQueue } = state()\n\n      if (root.isConnected) {\n        workQueue.enqueue(async () => {\n          const effects = await buildVendorUpdates([state, setState])\n\n          editor.dispatch({ effects })\n          setVars(makeVars(state()))\n        })\n      } else {\n        mediaQueryList.removeEventListener('change', listener)\n      }\n    }\n\n    mediaQueryList.addEventListener('change', listener)\n  })\n\n  return (\n    <style textContent={`.ink {\\n  ${vars().join('\\n  ')}\\n}\\n${styles}`} />\n  )\n}\n","import { Show } from 'solid-js'\nimport type { Component } from 'solid-js'\nimport { getHydrationMarkerProps } from '/src/constants'\nimport { override } from '/src/utils/merge'\nimport type InkInternal from '/types/internal'\nimport { useStore } from '../../app'\nimport { Details } from '../details'\nimport { DropZone } from '../drop_zone'\nimport { Editor } from '../editor'\nimport { Toolbar } from '../toolbar'\nimport { Styles } from './styles'\n\nexport const Root: Component<{ store: InkInternal.Store, target?: HTMLElement }> = (props) => {\n  const [state, setState] = useStore()\n  const setRoot = (root: HTMLElement) => {\n    setState(override(state(), { root }))\n  }\n\n  return (\n    <div class='ink ink-mde' ref={setRoot} {...getHydrationMarkerProps()}>\n      <Styles />\n      <Show when={state().options.files.clipboard || state().options.files.dragAndDrop}>\n        <DropZone />\n      </Show>\n      <Show when={state().options.interface.toolbar}>\n        <Toolbar />\n      </Show>\n      <div class='ink-mde-editor'>\n        <Editor target={props.target} />\n      </div>\n      <Show when={state().options.readability || state().options.interface.attribution}>\n        <Details store={[state, setState]} />\n      </Show>\n    </div>\n  )\n}\n","import { createContext, useContext } from 'solid-js'\nimport type { Component, JSX } from 'solid-js'\nimport type InkInternal from '/types/internal'\nimport { blankState } from '../store'\nimport { Root } from './components/root'\n\nconst AppContext = createContext<InkInternal.Store>([() => blankState(), value => (typeof value === 'function' ? value(blankState()) : value)])\nconst AppProvider: Component<{ children: JSX.Element, store: InkInternal.Store }> = (props) => {\n  return (\n    // eslint-disable-next-line solid/reactivity\n    <AppContext.Provider value={props.store}>\n      {props.children}\n    </AppContext.Provider>\n  )\n}\n\nexport const useStore = () => {\n  return useContext(AppContext)\n}\n\nexport const App: Component<{ store: InkInternal.Store, target?: HTMLElement }> = (props) => {\n  return (\n    <AppProvider store={props.store}>\n      <Root store={props.store} target={props.target} />\n    </AppProvider>\n  )\n}\n","import { hydrate as solidHydrate, render as solidRender, renderToString as solidRenderToString } from 'solid-js/web'\nimport { HYDRATION_MARKER_SELECTOR } from '/src/constants'\nimport { makeInstance } from '/src/instance'\nimport { makeStore } from '/src/store'\nimport { App } from '/src/ui/app'\nimport { isPromise } from '/src/utils/inspect'\nimport { type PluginValueForType } from '/src/utils/options'\nimport type * as Ink from '/types/ink'\n\nexport type * from '/types/ink'\nexport { appearanceTypes, pluginTypes } from '/types/values'\n\nexport const defineConfig = <T extends Ink.Options>(config: T) => config\nexport const defineOptions = <T extends Ink.Options>(options: T) => options\nexport const definePlugin = <T extends Ink.Options.RecursivePlugin>(plugin: T) => plugin\n\nexport const hydrate = (target: HTMLElement, options: Ink.Options = {}): Ink.AwaitableInstance => {\n  const store = makeStore(options)\n\n  if (!import.meta.env.VITE_SSR) {\n    solidPrepareForHydration()\n    solidHydrate(() => <App store={store} target={target} />, target)\n  }\n\n  return makeInstance(store)\n}\n\nexport const ink = (target: HTMLElement, options: Ink.Options = {}): Ink.AwaitableInstance => {\n  const hasHydrationMarker = !!target.querySelector(HYDRATION_MARKER_SELECTOR)\n\n  if (hasHydrationMarker) {\n    return hydrate(target, options)\n  }\n\n  return render(target, options)\n}\n\nexport const inkPlugin = <T extends Ink.Values.PluginType>({ key = '', type, value }: { key?: string, type?: T, value: () => PluginValueForType<T> }) => {\n  return new Proxy({ key, type: type || 'default' } as Ink.Options.Plugin, {\n    get: (target, prop: keyof Ink.Options.Plugin, _receiver) => {\n      if (prop === 'value' && !target[prop]) {\n        target.value = value()\n\n        if (isPromise(target.value)) {\n          return target.value.then(val => target.value = val)\n        }\n\n        return target.value\n      }\n\n      return target[prop]\n    },\n  })\n}\n\nexport const plugin = inkPlugin\n\nexport const render = (target: HTMLElement, options: Ink.Options = {}): Ink.AwaitableInstance => {\n  const store = makeStore(options)\n\n  if (!import.meta.env.VITE_SSR) {\n    solidRender(() => <App store={store} target={target} />, target)\n  }\n\n  return makeInstance(store)\n}\n\nexport const renderToString = (options: Ink.Options = {}): string => {\n  const store = makeStore(options)\n\n  // Needed for tree-shaking purposes.\n  if (!import.meta.env.VITE_SSR) {\n    return ''\n  }\n\n  return solidRenderToString(() => <App store={store} />)\n}\n\nexport const solidPrepareForHydration = () => {\n  // @ts-expect-error Todo: This is a third-party vendor script.\n  // eslint-disable-next-line\n  let e,t;e=window._$HY||(window._$HY={events:[],completed:new WeakSet,r:{}}),t=e=>e&&e.hasAttribute&&(e.hasAttribute(\"data-hk\")?e:t(e.host&&e.host instanceof Node?e.host:e.parentNode)),['click', 'input'].forEach((o=>document.addEventListener(o,(o=>{let s=o.composedPath&&o.composedPath()[0]||o.target,a=t(s);a&&!e.completed.has(a)&&e.events.push([a,o])})))),e.init=(t,o)=>{e.r[t]=[new Promise(((e,t)=>o=e)),o]},e.set=(t,o,s)=>{(s=e.r[t])&&s[1](o),e.r[t]=[o]},e.unset=t=>{delete e.r[t]},e.load=(t,o)=>{if(o=e.r[t])return o[0]}\n}\n\nexport const wrap = (textarea: HTMLTextAreaElement, options: Ink.Options = {}) => {\n  const replacement = <div class='ink-mde-textarea' /> as HTMLDivElement\n  const doc = textarea.value\n\n  textarea.after(replacement)\n  textarea.style.display = 'none'\n\n  const instance = render(replacement, { doc, ...options })\n\n  if (textarea.form) {\n    textarea.form.addEventListener('submit', () => {\n      textarea.value = instance.getDoc()\n    })\n  }\n\n  return instance\n}\n\nexport default ink\n","import { autocompletion, closeBrackets } from '@codemirror/autocomplete'\nimport { filterPlugins, partitionPlugins } from '/src/utils/options'\nimport type * as Ink from '/types/ink'\nimport { pluginTypes } from '/types/values'\n\nexport const autocomplete = (options: Ink.OptionsResolved) => {\n  // Todo: Handle lazy-loaded completions.\n  const [_lazyCompletions, completions] = partitionPlugins(filterPlugins(pluginTypes.completion, options))\n\n  return [\n    autocompletion({\n      defaultKeymap: true,\n      icons: false,\n      override: completions,\n      optionClass: () => 'ink-tooltip-option',\n    }),\n    closeBrackets(),\n  ]\n}\n","import { syntaxTree } from '@codemirror/language'\nimport type { EditorState, Extension, Range } from '@codemirror/state'\nimport { RangeSet, StateField } from '@codemirror/state'\nimport type { DecorationSet } from '@codemirror/view'\nimport { Decoration, EditorView, WidgetType } from '@codemirror/view'\n\ninterface ImageWidgetParams {\n  url: string,\n}\n\nclass ImageWidget extends WidgetType {\n  readonly url\n\n  constructor({ url }: ImageWidgetParams) {\n    super()\n\n    this.url = url\n  }\n\n  eq(imageWidget: ImageWidget) {\n    return imageWidget.url === this.url\n  }\n\n  toDOM() {\n    const container = document.createElement('div')\n    const backdrop = container.appendChild(document.createElement('div'))\n    const figure = backdrop.appendChild(document.createElement('figure'))\n    const image = figure.appendChild(document.createElement('img'))\n\n    container.setAttribute('aria-hidden', 'true')\n    container.className = 'cm-image-container'\n    backdrop.className = 'cm-image-backdrop'\n    figure.className = 'cm-image-figure'\n    image.className = 'cm-image-img'\n    image.src = this.url\n\n    container.style.paddingBottom = '0.5rem'\n    container.style.paddingTop = '0.5rem'\n\n    backdrop.classList.add('cm-image-backdrop')\n\n    backdrop.style.borderRadius = 'var(--ink-internal-border-radius)'\n    backdrop.style.display = 'flex'\n    backdrop.style.alignItems = 'center'\n    backdrop.style.justifyContent = 'center'\n    backdrop.style.overflow = 'hidden'\n    backdrop.style.maxWidth = '100%'\n\n    figure.style.margin = '0'\n\n    image.style.display = 'block'\n    image.style.maxHeight = 'var(--ink-internal-block-max-height)'\n    image.style.maxWidth = '100%'\n    image.style.width = '100%'\n\n    return container\n  }\n}\n\nexport const images = (): Extension => {\n  const imageRegex = /!\\[.*?\\]\\((?<url>.*?)\\)/\n\n  const imageDecoration = (imageWidgetParams: ImageWidgetParams) => Decoration.widget({\n    widget: new ImageWidget(imageWidgetParams),\n    side: -1,\n    block: true,\n  })\n\n  const decorate = (state: EditorState) => {\n    const widgets: Range<Decoration>[] = []\n\n    syntaxTree(state).iterate({\n      enter: ({ type, from, to }) => {\n        if (type.name === 'Image') {\n          const result = imageRegex.exec(state.doc.sliceString(from, to))\n\n          if (result && result.groups && result.groups.url)\n            widgets.push(imageDecoration({ url: result.groups.url }).range(state.doc.lineAt(from).from))\n        }\n      },\n    })\n\n    return widgets.length > 0 ? RangeSet.of(widgets) : Decoration.none\n  }\n\n  const imagesField = StateField.define<DecorationSet>({\n    create(state) {\n      return decorate(state)\n    },\n    update(images, transaction) {\n      if (transaction.docChanged)\n        return decorate(transaction.state)\n\n      return images.map(transaction.changes)\n    },\n    provide(field) {\n      return EditorView.decorations.from(field)\n    },\n  })\n\n  return [\n    imagesField,\n  ]\n}\n","import { indentLess, indentMore } from '@codemirror/commands'\nimport { type Extension } from '@codemirror/state'\nimport { keymap } from '@codemirror/view'\n\nexport const indentWithTab = ({ tab = true, shiftTab = true } = {}): Extension => {\n  return keymap.of([\n    {\n      key: 'Tab',\n      run: tab ? indentMore : undefined,\n    },\n    {\n      key: 'Shift-Tab',\n      run: shiftTab ? indentLess : undefined,\n    },\n  ])\n}\n","import { syntaxTree } from '@codemirror/language'\nimport { StateField } from '@codemirror/state'\nimport type { EditorState, Extension, Range } from '@codemirror/state'\nimport { Decoration, EditorView, ViewPlugin } from '@codemirror/view'\nimport type { DecorationSet } from '@codemirror/view'\nimport type { SyntaxNodeRef } from '@lezer/common'\nimport { buildWidget } from '/lib/codemirror-kit'\n\nconst tabSize = 2\n\nconst spacerWidget = () => {\n  return buildWidget({\n    toDOM: () => {\n      const spacer = document.createElement('span')\n\n      spacer.className = 'ink-mde-indent'\n      spacer.style.width = `2rem`\n      spacer.style.textDecoration = 'none'\n      spacer.style.display = 'inline-flex'\n\n      const spacerLine = document.createElement('span')\n\n      spacerLine.className = 'ink-mde-indent-marker'\n      spacerLine.innerHTML = '&nbsp;'\n\n      spacer.appendChild(spacerLine)\n\n      return spacer\n    },\n  })\n}\n\nconst createWrapper = () => {\n  const wrapper = document.createElement('label')\n\n  wrapper.setAttribute('aria-hidden', 'true')\n  wrapper.setAttribute('tabindex', '-1')\n  wrapper.className = 'ink-mde-list-marker'\n  wrapper.style.minWidth = '2rem'\n\n  return wrapper\n}\n\nconst taskWidget = (isChecked: boolean) => buildWidget({\n  eq: (other) => {\n    return other.isChecked === isChecked\n  },\n  ignoreEvent: () => false,\n  isChecked,\n  toDOM: () => {\n    const wrapper = createWrapper()\n    const input = document.createElement('input')\n\n    input.setAttribute('aria-hidden', 'true')\n    input.setAttribute('tabindex', '-1')\n    input.className = 'ink-mde-task-marker'\n    input.type = 'checkbox'\n    input.checked = isChecked\n\n    wrapper.classList.add('ink-mde-task')\n\n    wrapper.appendChild(input)\n\n    return wrapper\n  },\n})\n\nconst dotWidget = () => {\n  return buildWidget({\n    toDOM: () => {\n      const wrapper = createWrapper()\n\n      wrapper.setAttribute('inert', 'true')\n      wrapper.innerHTML = '&bull;'\n\n      return wrapper\n    },\n  })\n}\n\nconst numberWidget = (marker: string) => {\n  return buildWidget({\n    toDOM: () => {\n      const wrapper = createWrapper()\n      const content = document.createElement('span')\n\n      wrapper.setAttribute('inert', 'true')\n\n      wrapper.appendChild(content)\n\n      content.setAttribute('aria-hidden', 'true')\n      content.setAttribute('tabindex', '-1')\n      content.className = 'ink-mde-number-marker'\n      content.innerHTML = `${marker}`\n\n      return wrapper\n    },\n  })\n}\n\nconst getVals = (state: EditorState, { from, to, type }: SyntaxNodeRef) => {\n  // Todo: Determine whether to skip blockquote or not.\n  if (type.name === 'Blockquote') {\n    return false\n  }\n\n  if (type.name !== 'ListMark') {\n    return\n  }\n\n  const line = state.doc.lineAt(from)\n  const lineStart = line.from\n  const marker = state.sliceDoc(from, to)\n  const markerStart = from\n  const markerEnd = to\n  const markerHasTrailingSpace = state.sliceDoc(markerEnd, markerEnd + 1) === ' '\n  const indentation = markerStart - lineStart\n\n  if (!markerHasTrailingSpace) {\n    return\n  }\n\n  const indentLevel = Math.floor(indentation / tabSize)\n  const spacerDecorations = <Range<Decoration>[]>[]\n\n  for (const index of Array(indentLevel).keys()) {\n    const from = lineStart + (index * tabSize)\n    const to = from + tabSize\n\n    const spacerDec = Decoration.replace({ widget: spacerWidget() }).range(from, to)\n\n    spacerDecorations.push(spacerDec)\n  }\n\n  return {\n    indentLevel,\n    indentation,\n    lineStart,\n    marker,\n    markerEnd,\n    markerStart,\n    spacerDecorations,\n  }\n}\n\nconst bulletLists = (): Extension => {\n  const decorate = (state: EditorState): [DecorationSet, DecorationSet] => {\n    const atomicRanges = <Range<Decoration>[]>[]\n    const decorationRanges = <Range<Decoration>[]>[]\n\n    syntaxTree(state).iterate({\n      enter: (node) => {\n        const result = getVals(state, node)\n\n        if (!result) {\n          return result\n        }\n\n        const { indentLevel, lineStart, marker, markerEnd, markerStart, spacerDecorations } = result\n\n        if (!['-', '*'].includes(marker)) {\n          return\n        }\n\n        const lineDec = Decoration.line({\n          attributes: {\n            class: 'ink-mde-list ink-mde-bullet-list',\n            style: `--indent-level: ${indentLevel}`,\n          },\n        }).range(lineStart)\n\n        decorationRanges.push(lineDec)\n        decorationRanges.push(...spacerDecorations)\n        atomicRanges.push(...spacerDecorations)\n\n        const textStart = markerEnd + 1\n        const dotDec = Decoration.replace({\n          widget: dotWidget(),\n        }).range(markerStart, textStart)\n\n        decorationRanges.push(dotDec)\n        atomicRanges.push(dotDec)\n      },\n    })\n\n    return [Decoration.set(decorationRanges, true), Decoration.set(atomicRanges, true)]\n  }\n\n  const stateField = StateField.define<[DecorationSet, DecorationSet]>({\n    create(state) {\n      return decorate(state)\n    },\n    update(_references, { state }) {\n      return decorate(state)\n    },\n    provide(field) {\n      const result = [\n        EditorView.decorations.of((view) => {\n          const [decorationRanges, _atomicRanges] = view.state.field(field)\n\n          return decorationRanges\n        }),\n        EditorView.atomicRanges.of((view) => {\n          const [_decorationRanges, atomicRanges] = view.state.field(field)\n\n          return atomicRanges\n        }),\n      ]\n\n      return result\n    },\n  })\n\n  return [\n    stateField,\n  ]\n}\n\nconst numberLists = (): Extension => {\n  const decorate = (state: EditorState): [DecorationSet, DecorationSet] => {\n    const atomicRanges = <Range<Decoration>[]>[]\n    const decorationRanges = <Range<Decoration>[]>[]\n\n    syntaxTree(state).iterate({\n      enter: (node) => {\n        const result = getVals(state, node)\n\n        if (!result) {\n          return result\n        }\n\n        const { indentLevel, lineStart, marker, markerEnd, markerStart, spacerDecorations } = result\n\n        if (['-', '*'].includes(marker)) {\n          return\n        }\n\n        const lineDec = Decoration.line({\n          attributes: {\n            class: 'ink-mde-list ink-mde-number-list',\n            style: `--indent-level: ${indentLevel}`,\n          },\n        }).range(lineStart)\n\n        decorationRanges.push(lineDec)\n        decorationRanges.push(...spacerDecorations)\n        atomicRanges.push(...spacerDecorations)\n\n        const textStart = markerEnd + 1\n        const dotDec = Decoration.replace({\n          widget: numberWidget(marker),\n        }).range(markerStart, textStart)\n\n        decorationRanges.push(dotDec)\n        atomicRanges.push(dotDec)\n      },\n    })\n\n    return [Decoration.set(decorationRanges, true), Decoration.set(atomicRanges, true)]\n  }\n\n  const stateField = StateField.define<[DecorationSet, DecorationSet]>({\n    create(state) {\n      return decorate(state)\n    },\n    update(_references, { state }) {\n      return decorate(state)\n    },\n    provide(field) {\n      const result = [\n        EditorView.decorations.of((view) => {\n          const [decorationRanges, _atomicRanges] = view.state.field(field)\n\n          return decorationRanges\n        }),\n        EditorView.atomicRanges.of((view) => {\n          const [_decorationRanges, atomicRanges] = view.state.field(field)\n\n          return atomicRanges\n        }),\n      ]\n\n      return result\n    },\n  })\n\n  return [\n    stateField,\n  ]\n}\n\nconst taskLists = (): Extension => {\n  const decorate = (state: EditorState): [DecorationSet, DecorationSet] => {\n    const atomicRanges = <Range<Decoration>[]>[]\n    const decorationRanges = <Range<Decoration>[]>[]\n\n    syntaxTree(state).iterate({\n      enter: (node) => {\n        const result = getVals(state, node)\n\n        if (!result) {\n          return result\n        }\n\n        const { indentLevel, lineStart, marker, markerEnd, markerStart, spacerDecorations } = result\n\n        if (!['-', '*'].includes(marker)) {\n          return\n        }\n\n        const taskStart = markerEnd + 1\n        const taskEnd = taskStart + 3\n        const task = state.sliceDoc(taskStart, taskEnd)\n\n        if (!['[ ]', '[x]'].includes(task)) {\n          return\n        }\n\n        const textStart = taskEnd + 1\n        const taskHasTrailingSpace = state.sliceDoc(taskEnd, textStart) === ' '\n\n        if (!taskHasTrailingSpace) {\n          return\n        }\n\n        const isChecked = task === '[x]'\n\n        const lineDec = Decoration.line({\n          attributes: {\n            class: `ink-mde-list ink-mde-task-list ${isChecked ? 'ink-mde-task-checked' : 'ink-mde-task-unchecked'}`,\n            style: `--indent-level: ${indentLevel}`,\n          },\n        }).range(lineStart)\n\n        decorationRanges.push(lineDec)\n        decorationRanges.push(...spacerDecorations)\n        atomicRanges.push(...spacerDecorations)\n\n        const taskDec = Decoration.replace({\n          widget: taskWidget(isChecked),\n        }).range(markerStart, textStart)\n\n        decorationRanges.push(taskDec)\n        atomicRanges.push(taskDec)\n      },\n    })\n\n    return [Decoration.set(decorationRanges, true), Decoration.set(atomicRanges, true)]\n  }\n\n  const viewPlugin = ViewPlugin.define(() => ({}), {\n    eventHandlers: {\n      mousedown: (event, view) => {\n        const target = event.target as HTMLElement\n        const realTarget = target.closest('.ink-mde-list-marker')?.querySelector('.ink-mde-task-marker')\n\n        if (realTarget) {\n          const position = view.posAtDOM(realTarget)\n          const from = position - 4\n          const to = position - 1\n          const before = view.state.sliceDoc(from, to)\n\n          if (before === '[ ]') {\n            view.dispatch({\n              changes: {\n                from,\n                to,\n                insert: '[x]',\n              },\n            })\n          }\n\n          if (before === '[x]') {\n            view.dispatch({\n              changes: {\n                from,\n                to,\n                insert: '[ ]',\n              },\n            })\n          }\n\n          return true\n        }\n      },\n    },\n  })\n\n  const stateField = StateField.define<[DecorationSet, DecorationSet]>({\n    create(state) {\n      return decorate(state)\n    },\n    update(_references, { state }) {\n      return decorate(state)\n    },\n    provide(field) {\n      const result = [\n        EditorView.decorations.of((view) => {\n          const [decorationRanges, _atomicRanges] = view.state.field(field)\n\n          return decorationRanges\n        }),\n        EditorView.atomicRanges.of((view) => {\n          const [_decorationRanges, atomicRanges] = view.state.field(field)\n\n          return atomicRanges\n        }),\n      ]\n\n      return result\n    },\n  })\n\n  return [\n    viewPlugin,\n    stateField,\n  ]\n}\n\nexport const lists = (config: { task: boolean, bullet: boolean, number: boolean }): Extension => {\n  return [\n    config.task ? taskLists() : [],\n    config.bullet ? bulletLists() : [],\n    config.number ? numberLists() : [],\n    EditorView.theme({\n      ':where(.ink-mde-indent)': {\n        display: 'inline-flex',\n        justifyContent: 'center',\n      },\n      ':where(.ink-mde-indent-marker)': {\n        borderLeft: '1px solid var(--ink-internal-syntax-processing-instruction-color)',\n        bottom: '0',\n        overflow: 'hidden',\n        position: 'absolute',\n        top: '0',\n        width: '0',\n      },\n      ':where(.ink-mde-list)': {\n        paddingLeft: 'calc(var(--indent-level) * 2rem + 2rem) !important',\n        position: 'relative',\n        textIndent: 'calc((var(--indent-level) * 2rem + 2rem) * -1)',\n      },\n      ':where(.ink-mde-list *)': {\n        textIndent: '0',\n      },\n      ':where(.ink-mde-list-marker)': {\n        alignItems: 'center',\n        color: 'var(--ink-internal-syntax-processing-instruction-color)',\n        display: 'inline-flex',\n        justifyContent: 'center',\n        minWidth: '2rem',\n      },\n      ':where(.ink-mde-task-marker)': {\n        cursor: 'pointer',\n        margin: '0',\n        scale: '1.2',\n        transformOrigin: 'center center',\n      },\n      ':where(.ink-mde-task-list.ink-mde-task-checked)': {\n        textDecoration: 'line-through',\n        textDecorationColor: 'var(--ink-internal-syntax-processing-instruction-color)',\n      },\n    }),\n  ]\n}\n","import { EditorState } from '@codemirror/state'\n\nexport const readonly = () => {\n  return EditorState.readOnly.of(true)\n}\n","import {\n  SearchQuery,\n  findNext,\n  findPrevious,\n  getSearchQuery,\n  search as searchExtension,\n  searchKeymap,\n  setSearchQuery,\n} from '@codemirror/search'\nimport { keymap, runScopeHandlers } from '@codemirror/view'\n\nexport const search = () => {\n  return [\n    searchExtension({\n      top: true,\n      createPanel: (view) => {\n        let query = getSearchQuery(view.state)\n\n        const wrapper = document.createElement('div')\n        const input = document.createElement('input')\n\n        wrapper.setAttribute('class', 'ink-mde-search-panel')\n        input.setAttribute('attr:main-field', 'true')\n        input.setAttribute('class', 'ink-mde-search-input')\n        input.setAttribute('type', 'text')\n        input.setAttribute('value', query.search)\n\n        wrapper.appendChild(input)\n\n        const handleKeyDown = (event: KeyboardEvent) => {\n          if (runScopeHandlers(view, event, 'search-panel')) return event.preventDefault()\n\n          if (event.code === 'Enter') {\n            event.preventDefault()\n\n            if (event.shiftKey) {\n              findPrevious(view)\n            } else {\n              findNext(view)\n            }\n          }\n        }\n\n        const updateSearch = (event: Event) => {\n          // @ts-expect-error \"value\" is not a recognized property of EventTarget.\n          const { value } = event.target\n\n          query = new SearchQuery({ search: value })\n\n          view.dispatch({ effects: setSearchQuery.of(query) })\n        }\n\n        input.addEventListener('input', updateSearch)\n        input.addEventListener('keydown', handleKeyDown)\n\n        return {\n          dom: wrapper,\n          mount: () => {\n            input.focus()\n          },\n          top: true,\n        }\n      },\n    }),\n    keymap.of(searchKeymap),\n  ]\n}\n","import type { Extension } from '@codemirror/state'\nimport { EditorView } from '@codemirror/view'\n\nexport const spellcheck = (): Extension => {\n  return EditorView.contentAttributes.of({\n    spellcheck: 'true',\n  })\n}\n"],"names":["Appearance","Markup","Selection","SelectionRange","EditorSelection","defineConfig","InkValues.Markup","start","end","syntaxTree","offset","is","markdownExtension","markdownLanguage","baseLanguages","Compartment","InkValues.Appearance","EditorView","extension","placeholder","vim","Decoration","ViewPlugin","decorate","RangeSetBuilder","ink","syntaxHighlighting","HighlightStyle","tags","state","EditorState","keymap","defaultKeymap","historyKeymap","history","target","source","InkValues.Selection","wrap","resolve","reject","callback","cursor","StateField","RangeSet","Tag","createSignal","Details","useStore","_$ssr","_tmpl$4","_$ssrHydrationKey","_$escape","_$createComponent","Show","when","options","readability","children","_tmpl$","toHuman","doc","interface","attribution","_tmpl$2","_tmpl$3","DropZone","depth","setDepth","files","setFiles","isLoading","setIsLoading","isVisible","setIsVisible","setState","onDragEnter","event","dragAndDrop","preventDefault","onDragLeave","onDragOver","onDrop","onPaste","clipboard","transfer","clipboardData","length","uploadFiles","userFiles","Array","from","forEach","file","Promise","handler","then","url","injectMarkup","markup","insert","finally","onMount","document","addEventListener","root","onCleanup","removeEventListener","styles","For","each","slice","_$ssrAttribute","name","URL","createObjectURL","fallback","Editor","props","Button","Toolbar","uploader","setUploader","formatAs","type","format","focus","uploadClickHandler","click","_tmpl$15","toolbar","heading","bold","italic","onclick","InkValues","Heading","Bold","Italic","quote","codeBlock","code","Quote","_tmpl$5","CodeBlock","_tmpl$6","Code","_tmpl$7","list","orderedList","taskList","List","_tmpl$8","OrderedList","_tmpl$9","TaskList","_tmpl$10","link","image","upload","Link","_tmpl$11","Image","_tmpl$12","_tmpl$13","_tmpl$14","Styles","vars","setVars","makeVars","createEffect","mediaQueryList","window","matchMedia","listener","_event","editor","workQueue","isConnected","enqueue","effects","buildVendorUpdates","dispatch","join","Root","_$ssrElement","_$mergeProps","getHydrationMarkerProps","store","AppContext","createContext","blankState","value","AppProvider","Provider","useContext","App","config","defineOptions","definePlugin","plugin","hydrate","makeStore","makeInstance","hasHydrationMarker","querySelector","HYDRATION_MARKER_SELECTOR","render","inkPlugin","key","Proxy","get","prop","_receiver","isPromise","val","renderToString","solidRenderToString","solidPrepareForHydration","e","t","_$HY","events","completed","WeakSet","r","hasAttribute","host","Node","parentNode","o","s","composedPath","a","has","push","init","set","unset","load","textarea","replacement","after","style","display","instance","form","getDoc","autocompletion","closeBrackets","WidgetType","images","indentMore","indentLess","to","search","searchExtension","top","createPanel","view","query","getSearchQuery","wrapper","createElement","input","setAttribute","appendChild","handleKeyDown","runScopeHandlers","shiftKey","findPrevious","findNext","updateSearch","SearchQuery","setSearchQuery","of","dom","mount","searchKeymap"],"mappings":"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"}