{"version":3,"file":"jsx-runtime.cjs","names":[],"sources":["../../src/jsx-runtime.ts"],"sourcesContent":["export type Attributes = Record<string, any>\n\nexport type DOMOutputSpecElement = 0 | Attributes | DOMOutputSpecArray\n/**\n * Better describes the output of a `renderHTML` function in prosemirror\n * @see https://prosemirror.net/docs/ref/#model.DOMOutputSpec\n */\nexport type DOMOutputSpecArray =\n  | [string]\n  | [string, Attributes]\n  | [string, 0]\n  | [string, Attributes, 0]\n  | [string, Attributes, DOMOutputSpecArray | 0]\n  | [string, DOMOutputSpecArray]\n\n// Child lists and DOM output specs are both arrays, so track JSX boundaries by identity.\nconst jsxElements = new WeakSet<DOMOutputSpecArray>()\nconst jsxFragments = new WeakSet<unknown[]>()\n\n/** Create a new JSX element from the given spec */\nfunction createJSXElement(spec: unknown[]): DOMOutputSpecArray {\n  const element = spec as DOMOutputSpecArray\n\n  jsxElements.add(element)\n\n  return element\n}\n\n/** Check if a spec is a JSX element */\nfunction isJSXElement(value: unknown): value is DOMOutputSpecArray {\n  return Array.isArray(value) && jsxElements.has(value as DOMOutputSpecArray)\n}\n\nfunction flattenFragmentChildren(children: unknown[]): unknown[] {\n  return children.flatMap(child => {\n    if (child == null) {\n      return []\n    }\n\n    if (Array.isArray(child) && jsxFragments.has(child) && !isJSXElement(child)) {\n      return flattenFragmentChildren(child)\n    }\n\n    return [child]\n  })\n}\n\n// JSX types for Tiptap's JSX runtime\n// These types only apply when using @jsxImportSource @tiptap/core\nexport declare namespace JSX {\n  export type Element = DOMOutputSpecArray\n  export interface IntrinsicElements {\n    [key: string]: any\n  }\n  export interface ElementChildrenAttribute {\n    children: unknown\n  }\n}\n\ntype JSXChild = DOMOutputSpecElement | string | null | undefined | JSXChild[]\n\nexport type JSXRenderer = (\n  tag: 'slot' | string | ((props?: Attributes) => DOMOutputSpecArray | DOMOutputSpecElement),\n  props?: Attributes,\n  ...children: JSXChild[]\n) => DOMOutputSpecArray | DOMOutputSpecElement\n\nexport function Fragment(props: { children: JSXChild[] }) {\n  jsxFragments.add(props.children)\n\n  return props.children\n}\n\nfunction render(tag: Parameters<JSXRenderer>[0], attributes: Attributes | undefined) {\n  // Treat the slot tag as the Prosemirror hole to render content into\n  if (tag === 'slot') {\n    return 0\n  }\n\n  // If the tag is a function, call it with the props\n  if (tag instanceof Function) {\n    const result = tag(attributes)\n\n    if (Array.isArray(result) && !isJSXElement(result) && !jsxFragments.has(result)) {\n      return createJSXElement(result)\n    }\n\n    return result\n  }\n\n  const { children, ...rest } = attributes ?? {}\n\n  if (tag === 'svg') {\n    throw new Error(\n      'SVG elements are not supported in the JSX syntax, use the array syntax instead',\n    )\n  }\n\n  // Handle children array by spreading elements\n  if (Array.isArray(children)) {\n    if (isJSXElement(children)) {\n      return createJSXElement([tag, rest, children])\n    }\n\n    if (children.length === 0) {\n      // Empty array means no children\n      return createJSXElement([tag, rest])\n    }\n\n    const flattenedChildren = flattenFragmentChildren(children)\n\n    if (flattenedChildren.length === 0) {\n      return createJSXElement([tag, rest])\n    }\n\n    // Spread children into the result array\n    return createJSXElement([tag, rest, ...flattenedChildren])\n  }\n\n  // Single child or no children\n  if (children !== undefined && children !== null) {\n    return createJSXElement([tag, rest, children])\n  }\n\n  return createJSXElement([tag, rest])\n}\n\nexport const h: JSXRenderer = (tag, attributes) => render(tag, attributes)\n\nexport const jsxs: JSXRenderer = (tag, attributes) => render(tag, attributes)\n\nexport const jsxDEV = (\n  tag: Parameters<JSXRenderer>[0],\n  attributes?: Attributes,\n  _key?: unknown,\n  _isStaticChildren?: boolean,\n) => {\n  return render(tag, attributes)\n}\n\n// See\n// https://esbuild.github.io/api/#jsx-import-source\n// https://www.typescriptlang.org/tsconfig/#jsxImportSource\n\nexport { h as createElement, h as jsx }\n"],"mappings":";;AAgBA,MAAM,8BAAc,IAAI,QAA4B;AACpD,MAAM,+BAAe,IAAI,QAAmB;;AAG5C,SAAS,iBAAiB,MAAqC;CAC7D,MAAM,UAAU;CAEhB,YAAY,IAAI,OAAO;CAEvB,OAAO;AACT;;AAGA,SAAS,aAAa,OAA6C;CACjE,OAAO,MAAM,QAAQ,KAAK,KAAK,YAAY,IAAI,KAA2B;AAC5E;AAEA,SAAS,wBAAwB,UAAgC;CAC/D,OAAO,SAAS,SAAQ,UAAS;EAC/B,IAAI,SAAS,MACX,OAAO,CAAC;EAGV,IAAI,MAAM,QAAQ,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,CAAC,aAAa,KAAK,GACxE,OAAO,wBAAwB,KAAK;EAGtC,OAAO,CAAC,KAAK;CACf,CAAC;AACH;AAsBA,SAAgB,SAAS,OAAiC;CACxD,aAAa,IAAI,MAAM,QAAQ;CAE/B,OAAO,MAAM;AACf;AAEA,SAAS,OAAO,KAAiC,YAAoC;CAEnF,IAAI,QAAQ,QACV,OAAO;CAIT,IAAI,eAAe,UAAU;EAC3B,MAAM,SAAS,IAAI,UAAU;EAE7B,IAAI,MAAM,QAAQ,MAAM,KAAK,CAAC,aAAa,MAAM,KAAK,CAAC,aAAa,IAAI,MAAM,GAC5E,OAAO,iBAAiB,MAAM;EAGhC,OAAO;CACT;CAEA,MAAM,EAAE,UAAU,GAAG,SAAS,eAAA,QAAA,eAAA,KAAA,IAAA,aAAc,CAAC;CAE7C,IAAI,QAAQ,OACV,MAAM,IAAI,MACR,gFACF;CAIF,IAAI,MAAM,QAAQ,QAAQ,GAAG;EAC3B,IAAI,aAAa,QAAQ,GACvB,OAAO,iBAAiB;GAAC;GAAK;GAAM;EAAQ,CAAC;EAG/C,IAAI,SAAS,WAAW,GAEtB,OAAO,iBAAiB,CAAC,KAAK,IAAI,CAAC;EAGrC,MAAM,oBAAoB,wBAAwB,QAAQ;EAE1D,IAAI,kBAAkB,WAAW,GAC/B,OAAO,iBAAiB,CAAC,KAAK,IAAI,CAAC;EAIrC,OAAO,iBAAiB;GAAC;GAAK;GAAM,GAAG;EAAiB,CAAC;CAC3D;CAGA,IAAI,aAAa,KAAA,KAAa,aAAa,MACzC,OAAO,iBAAiB;EAAC;EAAK;EAAM;CAAQ,CAAC;CAG/C,OAAO,iBAAiB,CAAC,KAAK,IAAI,CAAC;AACrC;AAEA,MAAa,KAAkB,KAAK,eAAe,OAAO,KAAK,UAAU;AAEzE,MAAa,QAAqB,KAAK,eAAe,OAAO,KAAK,UAAU;AAE5E,MAAa,UACX,KACA,YACA,MACA,sBACG;CACH,OAAO,OAAO,KAAK,UAAU;AAC/B"}