{
  "version": 3,
  "sources": ["../../../src/Editor.tsx"],
  "sourcesContent": ["import type { EditorOptions } from '@tiptap/core';\nimport { Editor } from '@tiptap/core';\nimport { createEffect, createSignal, onCleanup } from 'solid-js';\n\nexport type EditorRef = Editor | ((editor: Editor) => void);\n\nexport type BaseEditorOptions = Omit<Partial<EditorOptions>, 'element'>;\n\nexport interface UseEditorOptions<T extends HTMLElement>\n  extends BaseEditorOptions {\n  element: T;\n}\n\nexport function createEditorTransaction<T, V extends Editor | undefined>(\n  instance: () => V,\n  read: (value: V) => T,\n): () => T {\n  const [depend, update] = createSignal(undefined, { equals: false });\n\n  function forceUpdate() {\n    update();\n  }\n\n  createEffect(() => {\n    const editor = instance();\n    if (editor) {\n      editor.on('transaction', forceUpdate);\n      onCleanup(() => {\n        editor.off('transaction', forceUpdate);\n      });\n    }\n  });\n\n  return () => {\n    depend();\n    return read(instance());\n  };\n}\n\nexport default function useEditor<T extends HTMLElement>(\n  props: () => UseEditorOptions<T>,\n): () => Editor | undefined {\n  const [signal, setSignal] = createSignal<Editor>();\n\n  createEffect(() => {\n    const instance = new Editor({\n      ...props(),\n    });\n\n    onCleanup(() => {\n      instance.destroy();\n    });\n\n    setSignal(instance);\n  });\n\n  return signal;\n}\n\nexport function useEditorHTML<V extends Editor | undefined>(\n  editor: () => V,\n): () => string | undefined {\n  return createEditorTransaction(editor, instance => instance?.getHTML());\n}\n\nexport function useEditorJSON<\n  V extends Editor | undefined,\n  R extends Record<string, any>,\n>(editor: () => V): () => R | undefined {\n  return createEditorTransaction(editor, instance => instance?.getJSON() as R | undefined);\n}\n\nexport function useEditorIsActive<\n  V extends Editor | undefined,\n  R extends Record<string, any>,\n>(\n  editor: () => V,\n  ...args: [name: () => string, options?: R] | [options: R]\n): () => boolean | undefined {\n  return createEditorTransaction(editor, instance => {\n    if (args.length === 2) {\n      return instance?.isActive(args[0](), args[1]);\n    }\n    return instance?.isActive(args[0]);\n  });\n}\n\nexport function useEditorIsEmpty<V extends Editor | undefined>(\n  editor: () => V,\n): () => boolean | undefined {\n  return createEditorTransaction(editor, instance => instance?.isEmpty);\n}\n\nexport function useEditorIsEditable<V extends Editor | undefined>(\n  editor: () => V,\n): () => boolean | undefined {\n  return createEditorTransaction(editor, instance => instance?.isEditable);\n}\n\nexport function useEditorIsFocused<V extends Editor | undefined>(\n  editor: () => V,\n): () => boolean | undefined {\n  return createEditorTransaction(editor, instance => instance?.isFocused);\n}\n"],
  "mappings": ";AACA,SAAS,cAAc;AACvB,SAAS,cAAc,cAAc,iBAAiB;AAW/C,SAAS,wBACd,UACA,MACS;AACT,QAAM,CAAC,QAAQ,MAAM,IAAI,aAAa,QAAW,EAAE,QAAQ,MAAM,CAAC;AAElE,WAAS,cAAc;AACrB,WAAO;AAAA,EACT;AAEA,eAAa,MAAM;AACjB,UAAM,SAAS,SAAS;AACxB,QAAI,QAAQ;AACV,aAAO,GAAG,eAAe,WAAW;AACpC,gBAAU,MAAM;AACd,eAAO,IAAI,eAAe,WAAW;AAAA,MACvC,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AAED,SAAO,MAAM;AACX,WAAO;AACP,WAAO,KAAK,SAAS,CAAC;AAAA,EACxB;AACF;AAEe,SAAR,UACL,OAC0B;AAC1B,QAAM,CAAC,QAAQ,SAAS,IAAI,aAAqB;AAEjD,eAAa,MAAM;AACjB,UAAM,WAAW,IAAI,OAAO;AAAA,MAC1B,GAAG,MAAM;AAAA,IACX,CAAC;AAED,cAAU,MAAM;AACd,eAAS,QAAQ;AAAA,IACnB,CAAC;AAED,cAAU,QAAQ;AAAA,EACpB,CAAC;AAED,SAAO;AACT;AAEO,SAAS,cACd,QAC0B;AAC1B,SAAO,wBAAwB,QAAQ,cAAY,qCAAU,SAAS;AACxE;AAEO,SAAS,cAGd,QAAsC;AACtC,SAAO,wBAAwB,QAAQ,cAAY,qCAAU,SAA0B;AACzF;AAEO,SAAS,kBAId,WACG,MACwB;AAC3B,SAAO,wBAAwB,QAAQ,cAAY;AACjD,QAAI,KAAK,WAAW,GAAG;AACrB,aAAO,qCAAU,SAAS,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC;AAAA,IAC7C;AACA,WAAO,qCAAU,SAAS,KAAK,CAAC;AAAA,EAClC,CAAC;AACH;AAEO,SAAS,iBACd,QAC2B;AAC3B,SAAO,wBAAwB,QAAQ,cAAY,qCAAU,OAAO;AACtE;AAEO,SAAS,oBACd,QAC2B;AAC3B,SAAO,wBAAwB,QAAQ,cAAY,qCAAU,UAAU;AACzE;AAEO,SAAS,mBACd,QAC2B;AAC3B,SAAO,wBAAwB,QAAQ,cAAY,qCAAU,SAAS;AACxE;",
  "names": []
}
