{"version":3,"file":"jsx.cjs","sources":["../src/jsx/html.ts","../src/jsx/SanityElement.tsx","../src/jsx/svg.ts","../src/jsx/jsx.tsx","../src/jsx/wrap/constants.ts","../src/jsx/wrap/helpers.ts","../src/jsx/wrap/isSourceNode.ts","../src/jsx/wrap/unwrapData.ts","../src/jsx/wrap/resolveSanityNode.ts","../src/jsx/wrap/wrapData.ts"],"sourcesContent":["export const htmlElements = [\n  'a',\n  'abbr',\n  'address',\n  'area',\n  'article',\n  'aside',\n  'audio',\n  'b',\n  'base',\n  'bdi',\n  'bdo',\n  'big',\n  'blockquote',\n  'body',\n  'br',\n  'button',\n  'canvas',\n  'caption',\n  'cite',\n  'code',\n  'col',\n  'colgroup',\n  'data',\n  'datalist',\n  'dd',\n  'del',\n  'details',\n  'dfn',\n  'dialog',\n  'div',\n  'dl',\n  'dt',\n  'em',\n  'embed',\n  'fieldset',\n  'figcaption',\n  'figure',\n  'footer',\n  'form',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'head',\n  'header',\n  'hgroup',\n  'hr',\n  'html',\n  'i',\n  'iframe',\n  'img',\n  'input',\n  'ins',\n  'kbd',\n  'keygen',\n  'label',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'map',\n  'mark',\n  'menu',\n  'menuitem',\n  'meta',\n  'meter',\n  'nav',\n  'noscript',\n  'object',\n  'ol',\n  'optgroup',\n  'option',\n  'output',\n  'p',\n  'param',\n  'picture',\n  'pre',\n  'progress',\n  'q',\n  'rp',\n  'rt',\n  'ruby',\n  's',\n  'samp',\n  'script',\n  'section',\n  'select',\n  'small',\n  'source',\n  'span',\n  'strong',\n  'style',\n  'sub',\n  'summary',\n  'sup',\n  'table',\n  'tbody',\n  'td',\n  'textarea',\n  'tfoot',\n  'th',\n  'thead',\n  'time',\n  'title',\n  'tr',\n  'track',\n  'u',\n  'ul',\n  'var',\n  'video',\n  'wbr',\n  'webview',\n] as const\n","import type {HTMLProps, Ref} from 'react'\n\nimport {encodeSanityNodeData} from '@sanity/visual-editing-csm'\nimport {forwardRef} from 'react'\n\nimport type {SourceNode} from './wrap'\n\nexport interface SanityElementProps {\n  children?: SourceNode | null\n}\n\nexport const SanityElement = forwardRef(function SanityElement(\n  props: {as: string} & SanityElementProps & Omit<HTMLProps<HTMLElement>, 'children'>,\n  ref: Ref<HTMLElement | SVGElement>,\n) {\n  const {as: As, children: node, ...restProps} = props\n\n  if (node?.source) {\n    return (\n      // @ts-expect-error @TODO find out why children is not allowed in IntrinsicAttributes\n      <As {...restProps} data-sanity={encodeSanityNodeData(node.source)} ref={ref}>\n        {node.value}\n      </As>\n    )\n  }\n\n  return <As {...restProps}>{node?.value}</As>\n})\n","export const svgElements = [\n  'animate',\n  'circle',\n  'defs',\n  'desc',\n  'ellipse',\n  'g',\n  'image',\n  'line',\n  'filter',\n  'marker',\n  'mask',\n  'metadata',\n  'path',\n  'pattern',\n  'polygon',\n  'polyline',\n  'rect',\n  'stop',\n  'svg',\n  'switch',\n  'symbol',\n  'text',\n  'tspan',\n  'use',\n  'view',\n  'clipPath',\n  'feBlend',\n  'feColorMatrix',\n  'feComponentTransfer',\n  'feComposite',\n  'feConvolveMatrix',\n  'feDiffuseLighting',\n  'feDisplacementMap',\n  'feDistantLight',\n  'feDropShadow',\n  'feFlood',\n  'feFuncA',\n  'feFuncB',\n  'feFuncG',\n  'feFuncR',\n  'feGaussianBlur',\n  'feImage',\n  'feMerge',\n  'feMergeNode',\n  'feMorphology',\n  'feOffset',\n  'fePointLight',\n  'feSpecularLighting',\n  'feSpotLight',\n  'feTile',\n  'feTurbulence',\n  'foreignObject',\n  'linearGradient',\n  'radialGradient',\n  'textPath',\n] as const\n","import type {ForwardRefExoticComponent, HTMLProps, Ref, SVGProps} from 'react'\n\nimport {forwardRef} from 'react'\n\nimport type {SanityElementProps} from './SanityElement'\n\nimport {htmlElements} from './html'\nimport {SanityElement} from './SanityElement'\nimport {svgElements} from './svg'\n\nexport type SanityHTMLElements = Record<\n  (typeof htmlElements)[number],\n  ForwardRefExoticComponent<SanityElementProps & Omit<HTMLProps<HTMLElement>, 'children' | 'ref'>>\n>\n\nexport type SanitySVGElements = Record<\n  (typeof svgElements)[number],\n  ForwardRefExoticComponent<SanityElementProps & Omit<SVGProps<SVGElement>, 'children' | 'ref'>>\n>\n\nexport type SanityElements = SanityHTMLElements & SanitySVGElements\n\nfunction isHTMLElement(name: string): name is keyof SanityHTMLElements {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return htmlElements.includes(name as any)\n}\n\nfunction isSVGElement(name: string): name is keyof SanitySVGElements {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  return svgElements.includes(name as any)\n}\n\nconst sanity = new Proxy({} as SanityElements, {\n  get(target: SanityElements, prop: string) {\n    if (isHTMLElement(prop)) {\n      if (target[prop]) return target[prop]\n\n      const SanityComponent = forwardRef(function SanityComponent(\n        props: SanityElementProps & Omit<HTMLProps<HTMLElement>, 'children' | 'ref'>,\n        ref: Ref<HTMLElement>,\n      ): React.JSX.Element {\n        return <SanityElement {...props} as={prop} ref={ref} />\n      })\n\n      SanityComponent.displayName = `sanity.${prop}`\n\n      target[prop] = SanityComponent\n\n      return SanityComponent\n    }\n\n    if (isSVGElement(prop)) {\n      if (target[prop]) return target[prop]\n\n      const SanityComponent = forwardRef(function SanityComponent(\n        props: SanityElementProps & Omit<SVGProps<SVGElement>, 'children' | 'ref'>,\n        ref: Ref<SVGElement>,\n      ): React.JSX.Element {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        return <SanityElement {...(props as any)} as={prop} ref={ref} />\n      })\n\n      SanityComponent.displayName = `sanity.${prop}`\n\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      target[prop] = SanityComponent as any\n\n      return SanityComponent\n    }\n\n    throw new Error(`No such element: ${prop}`)\n  },\n})\n\nexport {type htmlElements, sanity, type SanityElementProps, type svgElements}\n","import type {SanityKey} from './types'\n\nexport const SANITY_KEYS: SanityKey[] = [\n  '_createdAt',\n  '_dataset',\n  '_id',\n  '_key',\n  '_originalId',\n  '_projectId',\n  '_ref',\n  '_rev',\n  '_strengthenOnPublish',\n  '_type',\n  '_updatedAt',\n  '_weak',\n]\n","export function isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\nexport function isArray(value: unknown): value is Array<unknown> {\n  return value !== null && Array.isArray(value)\n}\n","import type {SourceNode} from './types'\n\nimport {isRecord} from './helpers'\n\nexport function isSourceNode(t: unknown): t is SourceNode {\n  return isRecord(t) && t['$$type$$'] === 'sanity'\n}\n","import type {SanityKey, UnwrappedValue, WrappedValue} from './types'\n\nimport {SANITY_KEYS} from './constants'\nimport {isArray, isRecord} from './helpers'\nimport {isSourceNode} from './isSourceNode'\n\n/** @public */\nexport function unwrapData<\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  T = any,\n  S extends WrappedValue<T> = WrappedValue<T>,\n>(wrapper: S): UnwrappedValue<S> {\n  if (wrapper === undefined) {\n    return undefined as UnwrappedValue<S>\n  }\n\n  if (wrapper === null) {\n    return null as UnwrappedValue<S>\n  }\n\n  if (isSourceNode(wrapper)) {\n    return wrapper.value as UnwrappedValue<S>\n  }\n\n  if (isArray(wrapper)) {\n    return wrapper.map((item) => unwrapData(item as WrappedValue<unknown>)) as UnwrappedValue<S>\n  }\n\n  if (isRecord(wrapper)) {\n    return Object.fromEntries(\n      Object.entries(wrapper).map(([k, v]) =>\n        SANITY_KEYS.includes(k as SanityKey) ? [k, v] : [k, unwrapData(v as WrappedValue<unknown>)],\n      ),\n    ) as UnwrappedValue<S>\n  }\n\n  throw new Error('invalid wrapped value')\n}\n","import type {SanityNode} from '@sanity/visual-editing-csm'\n\nimport {\n  getPublishedId,\n  jsonPathToStudioPath,\n  resolvedKeyedSourcePath,\n  resolveMapping,\n  studioPath,\n  type ContentSourceMap,\n  type ContentSourceMapParsedPath,\n} from '@sanity/client/csm'\n\nimport type {SanityNodeContext} from './types'\n\n/** @internal */\nexport function resolveSanityNode(\n  context: SanityNodeContext,\n  csm: ContentSourceMap,\n  resultPath: ContentSourceMapParsedPath,\n  keyedResultPath: ContentSourceMapParsedPath,\n): SanityNode | undefined {\n  const {mapping, pathSuffix} = resolveMapping(resultPath, csm) || {}\n\n  if (!mapping) {\n    // console.warn('no mapping for path', { path: resultPath, sourceMap: csm })\n    return undefined\n  }\n\n  if (mapping.source.type === 'literal') {\n    return undefined\n  }\n\n  if (mapping.source.type === 'unknown') {\n    return undefined\n  }\n\n  const sourceDoc = csm.documents[mapping.source.document]\n  const sourceBasePath = csm.paths[mapping.source.path]\n\n  if (sourceDoc && sourceBasePath) {\n    return {\n      baseUrl: context.baseUrl,\n      workspace: context.workspace,\n      tool: context.tool,\n      type: sourceDoc._type,\n      id: getPublishedId(sourceDoc._id),\n      path: studioPath.toString(\n        jsonPathToStudioPath(\n          resolvedKeyedSourcePath({\n            keyedResultPath,\n            pathSuffix,\n            sourceBasePath,\n          }),\n        ),\n      ),\n    }\n  }\n\n  return undefined\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n  jsonPathToStudioPath,\n  studioPath,\n  type ContentSourceMap,\n  type ContentSourceMapParsedPath,\n} from '@sanity/client/csm'\n\nimport type {SanityKey, SanityNodeContext, WrappedValue} from './types'\n\nimport {SANITY_KEYS} from './constants'\nimport {isArray, isRecord} from './helpers'\nimport {resolveSanityNode} from './resolveSanityNode'\n\n/** @public */\nexport function wrapData<T>(\n  context: SanityNodeContext,\n  value: T,\n  sourceMap: ContentSourceMap | undefined,\n  resultPath: ContentSourceMapParsedPath = [],\n  keyedResultPath: ContentSourceMapParsedPath = [],\n): WrappedValue<T> {\n  if (value === undefined) {\n    return undefined as WrappedValue<T>\n  }\n\n  if (value === null) {\n    return null as WrappedValue<T>\n  }\n\n  if (isArray(value)) {\n    return value.map((t, idx) =>\n      wrapData(\n        context,\n        t as T,\n        sourceMap,\n        resultPath.concat(idx),\n        keyedResultPath.concat(\n          isRecord(t) && '_key' in t && typeof t['_key'] === 'string'\n            ? {_key: t['_key'], _index: idx}\n            : idx,\n        ),\n      ),\n    ) as WrappedValue<T>\n  }\n\n  if (isRecord(value)) {\n    return Object.fromEntries(\n      Object.entries(value).map(([k, v]) =>\n        SANITY_KEYS.includes(k as SanityKey)\n          ? [k, v]\n          : [k, wrapData(context, v, sourceMap, resultPath.concat(k), keyedResultPath.concat(k))],\n      ),\n    ) as WrappedValue<T>\n  }\n\n  return {\n    $$type$$: 'sanity',\n    path: studioPath.toString(jsonPathToStudioPath(resultPath)) || undefined,\n    source: sourceMap\n      ? resolveSanityNode(context, sourceMap, resultPath, keyedResultPath)\n      : undefined,\n    value,\n  } as unknown as WrappedValue<T>\n}\n"],"names":["forwardRef","jsx","encodeSanityNodeData","csm","resolveMapping","getPublishedId","studioPath","jsonPathToStudioPath","resolvedKeyedSourcePath"],"mappings":";;;AAAO,MAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GCxGa,gBAAgBA,MAAAA,WAAW,SACtC,OACA,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"}