@particle-academy/react-fancy 5.49.0 → 5.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/button.cjs +4 -4
  3. package/dist/button.js +2 -2
  4. package/dist/{chunk-WBJRFWZE.cjs → chunk-2KZINS6D.cjs} +4 -4
  5. package/dist/{chunk-WBJRFWZE.cjs.map → chunk-2KZINS6D.cjs.map} +1 -1
  6. package/dist/chunk-6TBRBN7H.js +212 -0
  7. package/dist/chunk-6TBRBN7H.js.map +1 -0
  8. package/dist/{chunk-VM5BNL4L.js → chunk-7MJ7VEKE.js} +3 -3
  9. package/dist/{chunk-VM5BNL4L.js.map → chunk-7MJ7VEKE.js.map} +1 -1
  10. package/dist/{chunk-XOWWNG7D.js → chunk-ASS6EWNI.js} +3 -3
  11. package/dist/{chunk-XOWWNG7D.js.map → chunk-ASS6EWNI.js.map} +1 -1
  12. package/dist/{chunk-JHDO6CRT.js → chunk-FU6R6BZ4.js} +3 -3
  13. package/dist/{chunk-JHDO6CRT.js.map → chunk-FU6R6BZ4.js.map} +1 -1
  14. package/dist/{chunk-3XJKJQSY.cjs → chunk-FWA4PCW7.cjs} +4 -4
  15. package/dist/{chunk-3XJKJQSY.cjs.map → chunk-FWA4PCW7.cjs.map} +1 -1
  16. package/dist/{chunk-EEKXWXYO.cjs → chunk-GCWIZNN2.cjs} +4 -4
  17. package/dist/{chunk-EEKXWXYO.cjs.map → chunk-GCWIZNN2.cjs.map} +1 -1
  18. package/dist/{chunk-TKDUT7ZA.cjs → chunk-IPBEVSSC.cjs} +6 -6
  19. package/dist/{chunk-TKDUT7ZA.cjs.map → chunk-IPBEVSSC.cjs.map} +1 -1
  20. package/dist/{chunk-LP3HMRQT.cjs → chunk-IYVV4RD3.cjs} +4 -4
  21. package/dist/{chunk-LP3HMRQT.cjs.map → chunk-IYVV4RD3.cjs.map} +1 -1
  22. package/dist/{chunk-GMNMJLZO.js → chunk-K6EJLBBQ.js} +12 -6
  23. package/dist/chunk-K6EJLBBQ.js.map +1 -0
  24. package/dist/{chunk-ZLYOMQ2J.js → chunk-KODD54GT.js} +3 -3
  25. package/dist/{chunk-ZLYOMQ2J.js.map → chunk-KODD54GT.js.map} +1 -1
  26. package/dist/{chunk-ODAPI4QJ.cjs → chunk-M52IS5SO.cjs} +11 -11
  27. package/dist/{chunk-ODAPI4QJ.cjs.map → chunk-M52IS5SO.cjs.map} +1 -1
  28. package/dist/{chunk-FNYUUVOK.cjs → chunk-MFQ5NBSV.cjs} +14 -7
  29. package/dist/chunk-MFQ5NBSV.cjs.map +1 -0
  30. package/dist/{chunk-I6XHZ3S2.cjs → chunk-NAQJF3G6.cjs} +4 -4
  31. package/dist/{chunk-I6XHZ3S2.cjs.map → chunk-NAQJF3G6.cjs.map} +1 -1
  32. package/dist/{chunk-KST6GW2B.cjs → chunk-NCXH5O4I.cjs} +6 -6
  33. package/dist/{chunk-KST6GW2B.cjs.map → chunk-NCXH5O4I.cjs.map} +1 -1
  34. package/dist/{chunk-K74R6IEB.js → chunk-PCTZNK2Z.js} +4 -4
  35. package/dist/{chunk-K74R6IEB.js.map → chunk-PCTZNK2Z.js.map} +1 -1
  36. package/dist/{chunk-DUOZSOSB.cjs → chunk-RU6ZTA4M.cjs} +3 -3
  37. package/dist/chunk-RU6ZTA4M.cjs.map +1 -0
  38. package/dist/{chunk-62WPAKFS.js → chunk-UDEEPMQ4.js} +3 -3
  39. package/dist/{chunk-62WPAKFS.js.map → chunk-UDEEPMQ4.js.map} +1 -1
  40. package/dist/{chunk-VKRQHLM5.js → chunk-VB3QJ6QE.js} +3 -3
  41. package/dist/{chunk-VKRQHLM5.js.map → chunk-VB3QJ6QE.js.map} +1 -1
  42. package/dist/{chunk-RLC2BE3D.cjs → chunk-VWBKFQQN.cjs} +15 -15
  43. package/dist/{chunk-RLC2BE3D.cjs.map → chunk-VWBKFQQN.cjs.map} +1 -1
  44. package/dist/chunk-X2FC7ODX.cjs +215 -0
  45. package/dist/chunk-X2FC7ODX.cjs.map +1 -0
  46. package/dist/{chunk-SK4AEUO4.js → chunk-XBC3M4BL.js} +3 -3
  47. package/dist/{chunk-SK4AEUO4.js.map → chunk-XBC3M4BL.js.map} +1 -1
  48. package/dist/{chunk-XWXV6HSK.js → chunk-XZUGREDI.js} +3 -3
  49. package/dist/chunk-XZUGREDI.js.map +1 -0
  50. package/dist/{chunk-MQEV7XEG.js → chunk-YOTCZUNW.js} +4 -4
  51. package/dist/{chunk-MQEV7XEG.js.map → chunk-YOTCZUNW.js.map} +1 -1
  52. package/dist/content-renderer.cjs +5 -5
  53. package/dist/content-renderer.js +2 -2
  54. package/dist/editor.cjs +5 -5
  55. package/dist/editor.js +3 -3
  56. package/dist/faux-client.cjs +2 -2
  57. package/dist/faux-client.js +1 -1
  58. package/dist/image-viewer.cjs +3 -3
  59. package/dist/image-viewer.js +2 -2
  60. package/dist/index.cjs +48 -44
  61. package/dist/index.d.cts +74 -7
  62. package/dist/index.d.ts +74 -7
  63. package/dist/index.js +12 -12
  64. package/dist/json-editor.cjs +14 -14
  65. package/dist/json-editor.js +3 -3
  66. package/dist/magic-wand.cjs +4 -4
  67. package/dist/magic-wand.js +3 -3
  68. package/dist/media-viewer.cjs +5 -5
  69. package/dist/media-viewer.js +4 -4
  70. package/dist/pdf-viewer.cjs +3 -3
  71. package/dist/pdf-viewer.js +2 -2
  72. package/dist/prompt-input.cjs +4 -4
  73. package/dist/prompt-input.js +3 -3
  74. package/dist/reason-tag.cjs +4 -4
  75. package/dist/reason-tag.js +3 -3
  76. package/docs/ContentRenderer.md +36 -0
  77. package/package.json +1 -1
  78. package/dist/chunk-DUOZSOSB.cjs.map +0 -1
  79. package/dist/chunk-FNYUUVOK.cjs.map +0 -1
  80. package/dist/chunk-GMNMJLZO.js.map +0 -1
  81. package/dist/chunk-LRNWD26Z.cjs +0 -82
  82. package/dist/chunk-LRNWD26Z.cjs.map +0 -1
  83. package/dist/chunk-QXYO76NZ.js +0 -79
  84. package/dist/chunk-QXYO76NZ.js.map +0 -1
  85. package/dist/chunk-XWXV6HSK.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/media-type.ts","../src/components/MediaViewer/MediaFallback.tsx","../src/components/MediaViewer/MediaViewer.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-MQEV7XEG.js","sourcesContent":["/**\n * Resolve what kind of media a source is, from its MIME type (preferred) or its\n * URL — a file extension, or the type embedded in a `data:` URI.\n *\n * Shared by `<MediaViewer>` to pick the right per-type viewer, and exported so\n * downstream packages (e.g. fancy-code's file viewer) can make the same\n * text-vs-media decision without re-deriving the table.\n */\n\nexport type MediaKind = \"image\" | \"video\" | \"audio\" | \"pdf\" | \"unknown\";\n\nexport interface ResolveMediaTypeInput {\n /** MIME type — preferred when known (e.g. `\"image/png\"`, `\"video/mp4\"`). */\n mime?: string | null;\n /**\n * Source URL — used to sniff the kind from a file extension, or from the type\n * embedded in a `data:` URI, when no `mime` is given. `http(s):` / `data:` /\n * `blob:` are all accepted (a bare `blob:` URL carries no type, so pass\n * `mime` alongside it).\n */\n src?: string | null;\n}\n\nconst IMAGE_EXTS = new Set([\n \"png\", \"jpg\", \"jpeg\", \"jfif\", \"pjpeg\", \"gif\", \"webp\", \"avif\", \"bmp\", \"ico\",\n \"cur\", \"svg\", \"svgz\", \"apng\", \"tif\", \"tiff\", \"heic\", \"heif\",\n]);\nconst VIDEO_EXTS = new Set([\n \"mp4\", \"m4v\", \"webm\", \"ogv\", \"ogm\", \"mov\", \"mkv\", \"avi\", \"wmv\", \"flv\", \"3gp\",\n \"3g2\", \"mpg\", \"mpeg\",\n]);\nconst AUDIO_EXTS = new Set([\n \"mp3\", \"wav\", \"wave\", \"ogg\", \"oga\", \"m4a\", \"m4b\", \"aac\", \"flac\", \"opus\",\n \"weba\", \"mid\", \"midi\", \"aiff\", \"aif\",\n]);\n\n/** Map a (possibly parameterized) MIME type to a media kind. */\nfunction mimeToKind(mime: string): MediaKind {\n // Strip any parameters (`; charset=…`) and normalize.\n const m = mime.toLowerCase().split(\";\")[0].trim();\n if (!m) return \"unknown\";\n if (m === \"application/pdf\" || m === \"application/x-pdf\") return \"pdf\";\n if (m.startsWith(\"image/\")) return \"image\";\n if (m.startsWith(\"video/\")) return \"video\";\n if (m.startsWith(\"audio/\")) return \"audio\";\n // `application/ogg` is audio in practice; treat it as such.\n if (m === \"application/ogg\") return \"audio\";\n return \"unknown\";\n}\n\n/** Map a bare file extension (no leading dot) to a media kind. */\nfunction extToKind(ext: string): MediaKind {\n const e = ext.toLowerCase();\n if (e === \"pdf\") return \"pdf\";\n if (IMAGE_EXTS.has(e)) return \"image\";\n if (VIDEO_EXTS.has(e)) return \"video\";\n if (AUDIO_EXTS.has(e)) return \"audio\";\n return \"unknown\";\n}\n\n/** Pull the file extension out of a URL, ignoring its query/hash. */\nfunction extFromSrc(src: string): string | null {\n const clean = src.split(/[?#]/, 1)[0];\n const lastSeg = clean.split(\"/\").pop() ?? \"\";\n const dot = lastSeg.lastIndexOf(\".\");\n if (dot <= 0 || dot === lastSeg.length - 1) return null;\n return lastSeg.slice(dot + 1);\n}\n\n/** Extract the MIME type embedded in a `data:` URI, if present. */\nfunction mimeFromDataUri(src: string): string | null {\n if (!/^data:/i.test(src)) return null;\n const header = src.slice(5).split(\",\", 1)[0]; // text after `data:`, before the comma\n const mt = header.split(\";\")[0].trim();\n return mt || null;\n}\n\n/**\n * Resolve a {@link MediaKind} from a MIME type and/or source URL. MIME wins\n * when it's conclusive; otherwise the `src` is sniffed (a `data:` URI's\n * embedded type first, then the file extension). Returns `\"unknown\"` when\n * nothing matches — callers treat that as \"not previewable media\" (e.g. text).\n */\nexport function resolveMediaType({ mime, src }: ResolveMediaTypeInput): MediaKind {\n if (mime) {\n const k = mimeToKind(mime);\n if (k !== \"unknown\") return k;\n }\n if (src) {\n const dataMime = mimeFromDataUri(src);\n if (dataMime) {\n const k = mimeToKind(dataMime);\n if (k !== \"unknown\") return k;\n }\n const ext = extFromSrc(src);\n if (ext) return extToKind(ext);\n }\n return \"unknown\";\n}\n","import { cn } from \"../../utils/cn\";\n\ninterface MediaFallbackProps {\n src: string;\n mime?: string;\n label?: string;\n className?: string;\n}\n\n/** Filename guess from a URL, ignoring query/hash and `data:`/`blob:` URLs. */\nfunction basename(src: string): string | null {\n if (/^(data|blob):/i.test(src)) return null;\n const seg = src.split(/[?#]/, 1)[0].split(\"/\").pop();\n return seg ? decodeURIComponent(seg) : null;\n}\n\n/**\n * Shown by `<MediaViewer>` when a source isn't a previewable media type — a\n * small themed card naming the file and offering a download.\n */\nexport function MediaFallback({ src, mime, label, className }: MediaFallbackProps) {\n const name = label || basename(src);\n return (\n <div\n data-react-fancy-media-fallback=\"\"\n className={cn(\n \"flex flex-col items-center justify-center gap-2 rounded-lg border border-zinc-200 bg-white p-6 text-center dark:border-zinc-700 dark:bg-zinc-900\",\n className,\n )}\n >\n <span className=\"text-sm font-medium text-zinc-700 dark:text-zinc-200\">\n No preview available\n </span>\n {(name || mime) && (\n <span className=\"max-w-full truncate text-xs text-zinc-500 dark:text-zinc-400\">\n {name}\n {name && mime ? \" · \" : \"\"}\n {mime}\n </span>\n )}\n <a\n href={src}\n download={name ?? undefined}\n className=\"text-xs font-medium text-blue-600 hover:underline dark:text-blue-400\"\n >\n Download\n </a>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\nimport { resolveMediaType } from \"../../utils/media-type\";\nimport { ImageViewer } from \"../ImageViewer\";\nimport { VideoViewer } from \"../VideoViewer\";\nimport { AudioViewer } from \"../AudioViewer\";\nimport { PdfViewer } from \"../PdfViewer\";\nimport { MediaFallback } from \"./MediaFallback\";\nimport type { MediaViewerProps } from \"./MediaViewer.types\";\n\n/**\n * Renders the right viewer for a media file, picked from its `mime` (preferred)\n * or `src` — image, video, audio, or PDF — and a download fallback for anything\n * else. SVG renders through `<ImageViewer>`. The single entry point for showing\n * a file from a tree/workspace when you don't know its type ahead of time.\n *\n * ```tsx\n * <MediaViewer src={url} mime=\"image/png\" alt=\"logo.png\" style={{ height: 320 }} />\n * ```\n */\nexport const MediaViewer = forwardRef<HTMLDivElement, MediaViewerProps>(\n (\n {\n src,\n mime,\n alt,\n kind,\n imageProps,\n videoProps,\n audioProps,\n pdfProps,\n fallback,\n onError,\n className,\n style,\n },\n ref,\n ) => {\n const resolved = kind ?? resolveMediaType({ mime, src });\n\n switch (resolved) {\n case \"image\":\n return (\n <ImageViewer\n ref={ref}\n src={src}\n alt={alt ?? \"\"}\n onError={onError}\n className={className}\n style={style}\n {...imageProps}\n />\n );\n case \"video\":\n return (\n <VideoViewer\n ref={ref}\n src={src}\n onError={onError}\n className={className}\n style={style}\n {...videoProps}\n />\n );\n case \"audio\":\n return (\n <AudioViewer\n ref={ref}\n src={src}\n title={alt}\n onError={onError}\n className={className}\n style={style}\n {...audioProps}\n />\n );\n case \"pdf\":\n return (\n <PdfViewer\n ref={ref}\n src={src}\n title={alt}\n className={className}\n style={style}\n {...pdfProps}\n />\n );\n default:\n return (\n <div\n ref={ref}\n data-react-fancy-media-viewer=\"\"\n className={className}\n style={style}\n >\n {fallback ?? <MediaFallback src={src} mime={mime} label={alt} />}\n </div>\n );\n }\n },\n);\n\nMediaViewer.displayName = \"MediaViewer\";\n"]}
1
+ {"version":3,"sources":["../src/utils/media-type.ts","../src/components/MediaViewer/MediaFallback.tsx","../src/components/MediaViewer/MediaViewer.tsx"],"names":["jsx"],"mappings":"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","file":"chunk-YOTCZUNW.js","sourcesContent":["/**\n * Resolve what kind of media a source is, from its MIME type (preferred) or its\n * URL — a file extension, or the type embedded in a `data:` URI.\n *\n * Shared by `<MediaViewer>` to pick the right per-type viewer, and exported so\n * downstream packages (e.g. fancy-code's file viewer) can make the same\n * text-vs-media decision without re-deriving the table.\n */\n\nexport type MediaKind = \"image\" | \"video\" | \"audio\" | \"pdf\" | \"unknown\";\n\nexport interface ResolveMediaTypeInput {\n /** MIME type — preferred when known (e.g. `\"image/png\"`, `\"video/mp4\"`). */\n mime?: string | null;\n /**\n * Source URL — used to sniff the kind from a file extension, or from the type\n * embedded in a `data:` URI, when no `mime` is given. `http(s):` / `data:` /\n * `blob:` are all accepted (a bare `blob:` URL carries no type, so pass\n * `mime` alongside it).\n */\n src?: string | null;\n}\n\nconst IMAGE_EXTS = new Set([\n \"png\", \"jpg\", \"jpeg\", \"jfif\", \"pjpeg\", \"gif\", \"webp\", \"avif\", \"bmp\", \"ico\",\n \"cur\", \"svg\", \"svgz\", \"apng\", \"tif\", \"tiff\", \"heic\", \"heif\",\n]);\nconst VIDEO_EXTS = new Set([\n \"mp4\", \"m4v\", \"webm\", \"ogv\", \"ogm\", \"mov\", \"mkv\", \"avi\", \"wmv\", \"flv\", \"3gp\",\n \"3g2\", \"mpg\", \"mpeg\",\n]);\nconst AUDIO_EXTS = new Set([\n \"mp3\", \"wav\", \"wave\", \"ogg\", \"oga\", \"m4a\", \"m4b\", \"aac\", \"flac\", \"opus\",\n \"weba\", \"mid\", \"midi\", \"aiff\", \"aif\",\n]);\n\n/** Map a (possibly parameterized) MIME type to a media kind. */\nfunction mimeToKind(mime: string): MediaKind {\n // Strip any parameters (`; charset=…`) and normalize.\n const m = mime.toLowerCase().split(\";\")[0].trim();\n if (!m) return \"unknown\";\n if (m === \"application/pdf\" || m === \"application/x-pdf\") return \"pdf\";\n if (m.startsWith(\"image/\")) return \"image\";\n if (m.startsWith(\"video/\")) return \"video\";\n if (m.startsWith(\"audio/\")) return \"audio\";\n // `application/ogg` is audio in practice; treat it as such.\n if (m === \"application/ogg\") return \"audio\";\n return \"unknown\";\n}\n\n/** Map a bare file extension (no leading dot) to a media kind. */\nfunction extToKind(ext: string): MediaKind {\n const e = ext.toLowerCase();\n if (e === \"pdf\") return \"pdf\";\n if (IMAGE_EXTS.has(e)) return \"image\";\n if (VIDEO_EXTS.has(e)) return \"video\";\n if (AUDIO_EXTS.has(e)) return \"audio\";\n return \"unknown\";\n}\n\n/** Pull the file extension out of a URL, ignoring its query/hash. */\nfunction extFromSrc(src: string): string | null {\n const clean = src.split(/[?#]/, 1)[0];\n const lastSeg = clean.split(\"/\").pop() ?? \"\";\n const dot = lastSeg.lastIndexOf(\".\");\n if (dot <= 0 || dot === lastSeg.length - 1) return null;\n return lastSeg.slice(dot + 1);\n}\n\n/** Extract the MIME type embedded in a `data:` URI, if present. */\nfunction mimeFromDataUri(src: string): string | null {\n if (!/^data:/i.test(src)) return null;\n const header = src.slice(5).split(\",\", 1)[0]; // text after `data:`, before the comma\n const mt = header.split(\";\")[0].trim();\n return mt || null;\n}\n\n/**\n * Resolve a {@link MediaKind} from a MIME type and/or source URL. MIME wins\n * when it's conclusive; otherwise the `src` is sniffed (a `data:` URI's\n * embedded type first, then the file extension). Returns `\"unknown\"` when\n * nothing matches — callers treat that as \"not previewable media\" (e.g. text).\n */\nexport function resolveMediaType({ mime, src }: ResolveMediaTypeInput): MediaKind {\n if (mime) {\n const k = mimeToKind(mime);\n if (k !== \"unknown\") return k;\n }\n if (src) {\n const dataMime = mimeFromDataUri(src);\n if (dataMime) {\n const k = mimeToKind(dataMime);\n if (k !== \"unknown\") return k;\n }\n const ext = extFromSrc(src);\n if (ext) return extToKind(ext);\n }\n return \"unknown\";\n}\n","import { cn } from \"../../utils/cn\";\n\ninterface MediaFallbackProps {\n src: string;\n mime?: string;\n label?: string;\n className?: string;\n}\n\n/** Filename guess from a URL, ignoring query/hash and `data:`/`blob:` URLs. */\nfunction basename(src: string): string | null {\n if (/^(data|blob):/i.test(src)) return null;\n const seg = src.split(/[?#]/, 1)[0].split(\"/\").pop();\n return seg ? decodeURIComponent(seg) : null;\n}\n\n/**\n * Shown by `<MediaViewer>` when a source isn't a previewable media type — a\n * small themed card naming the file and offering a download.\n */\nexport function MediaFallback({ src, mime, label, className }: MediaFallbackProps) {\n const name = label || basename(src);\n return (\n <div\n data-react-fancy-media-fallback=\"\"\n className={cn(\n \"flex flex-col items-center justify-center gap-2 rounded-lg border border-zinc-200 bg-white p-6 text-center dark:border-zinc-700 dark:bg-zinc-900\",\n className,\n )}\n >\n <span className=\"text-sm font-medium text-zinc-700 dark:text-zinc-200\">\n No preview available\n </span>\n {(name || mime) && (\n <span className=\"max-w-full truncate text-xs text-zinc-500 dark:text-zinc-400\">\n {name}\n {name && mime ? \" · \" : \"\"}\n {mime}\n </span>\n )}\n <a\n href={src}\n download={name ?? undefined}\n className=\"text-xs font-medium text-blue-600 hover:underline dark:text-blue-400\"\n >\n Download\n </a>\n </div>\n );\n}\n","import { forwardRef } from \"react\";\nimport { resolveMediaType } from \"../../utils/media-type\";\nimport { ImageViewer } from \"../ImageViewer\";\nimport { VideoViewer } from \"../VideoViewer\";\nimport { AudioViewer } from \"../AudioViewer\";\nimport { PdfViewer } from \"../PdfViewer\";\nimport { MediaFallback } from \"./MediaFallback\";\nimport type { MediaViewerProps } from \"./MediaViewer.types\";\n\n/**\n * Renders the right viewer for a media file, picked from its `mime` (preferred)\n * or `src` — image, video, audio, or PDF — and a download fallback for anything\n * else. SVG renders through `<ImageViewer>`. The single entry point for showing\n * a file from a tree/workspace when you don't know its type ahead of time.\n *\n * ```tsx\n * <MediaViewer src={url} mime=\"image/png\" alt=\"logo.png\" style={{ height: 320 }} />\n * ```\n */\nexport const MediaViewer = forwardRef<HTMLDivElement, MediaViewerProps>(\n (\n {\n src,\n mime,\n alt,\n kind,\n imageProps,\n videoProps,\n audioProps,\n pdfProps,\n fallback,\n onError,\n className,\n style,\n },\n ref,\n ) => {\n const resolved = kind ?? resolveMediaType({ mime, src });\n\n switch (resolved) {\n case \"image\":\n return (\n <ImageViewer\n ref={ref}\n src={src}\n alt={alt ?? \"\"}\n onError={onError}\n className={className}\n style={style}\n {...imageProps}\n />\n );\n case \"video\":\n return (\n <VideoViewer\n ref={ref}\n src={src}\n onError={onError}\n className={className}\n style={style}\n {...videoProps}\n />\n );\n case \"audio\":\n return (\n <AudioViewer\n ref={ref}\n src={src}\n title={alt}\n onError={onError}\n className={className}\n style={style}\n {...audioProps}\n />\n );\n case \"pdf\":\n return (\n <PdfViewer\n ref={ref}\n src={src}\n title={alt}\n className={className}\n style={style}\n {...pdfProps}\n />\n );\n default:\n return (\n <div\n ref={ref}\n data-react-fancy-media-viewer=\"\"\n className={className}\n style={style}\n >\n {fallback ?? <MediaFallback src={src} mime={mime} label={alt} />}\n </div>\n );\n }\n },\n);\n\nMediaViewer.displayName = \"MediaViewer\";\n"]}
@@ -1,23 +1,23 @@
1
1
  'use strict';
2
2
 
3
3
  require('./chunk-S3TRSECD.cjs');
4
- var chunkFNYUUVOK_cjs = require('./chunk-FNYUUVOK.cjs');
5
- require('./chunk-LRNWD26Z.cjs');
4
+ var chunkMFQ5NBSV_cjs = require('./chunk-MFQ5NBSV.cjs');
5
+ require('./chunk-X2FC7ODX.cjs');
6
6
  require('./chunk-ZU5Q77OT.cjs');
7
7
 
8
8
 
9
9
 
10
10
  Object.defineProperty(exports, "ContentRenderer", {
11
11
  enumerable: true,
12
- get: function () { return chunkFNYUUVOK_cjs.ContentRenderer; }
12
+ get: function () { return chunkMFQ5NBSV_cjs.ContentRenderer; }
13
13
  });
14
14
  Object.defineProperty(exports, "registerExtension", {
15
15
  enumerable: true,
16
- get: function () { return chunkFNYUUVOK_cjs.registerExtension; }
16
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtension; }
17
17
  });
18
18
  Object.defineProperty(exports, "registerExtensions", {
19
19
  enumerable: true,
20
- get: function () { return chunkFNYUUVOK_cjs.registerExtensions; }
20
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtensions; }
21
21
  });
22
22
  //# sourceMappingURL=content-renderer.cjs.map
23
23
  //# sourceMappingURL=content-renderer.cjs.map
@@ -1,6 +1,6 @@
1
1
  import './chunk-AUTW5O4W.js';
2
- export { ContentRenderer, registerExtension, registerExtensions } from './chunk-GMNMJLZO.js';
3
- import './chunk-QXYO76NZ.js';
2
+ export { ContentRenderer, registerExtension, registerExtensions } from './chunk-K6EJLBBQ.js';
3
+ import './chunk-6TBRBN7H.js';
4
4
  import './chunk-MMW2JGKZ.js';
5
5
  //# sourceMappingURL=content-renderer.js.map
6
6
  //# sourceMappingURL=content-renderer.js.map
package/dist/editor.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkODAPI4QJ_cjs = require('./chunk-ODAPI4QJ.cjs');
3
+ var chunkM52IS5SO_cjs = require('./chunk-M52IS5SO.cjs');
4
4
  require('./chunk-HPNIEYSJ.cjs');
5
5
  require('./chunk-T6YELZPJ.cjs');
6
- require('./chunk-FNYUUVOK.cjs');
6
+ require('./chunk-MFQ5NBSV.cjs');
7
7
  require('./chunk-G7227RTY.cjs');
8
8
  require('./chunk-TXTRTTG7.cjs');
9
9
  require('./chunk-3WGRVDQR.cjs');
10
- require('./chunk-LRNWD26Z.cjs');
10
+ require('./chunk-X2FC7ODX.cjs');
11
11
  require('./chunk-L3V3BYVS.cjs');
12
12
  require('./chunk-J2DI6RMR.cjs');
13
13
  require('./chunk-57FQGQJK.cjs');
@@ -19,11 +19,11 @@ require('./chunk-ZU5Q77OT.cjs');
19
19
 
20
20
  Object.defineProperty(exports, "Editor", {
21
21
  enumerable: true,
22
- get: function () { return chunkODAPI4QJ_cjs.Editor; }
22
+ get: function () { return chunkM52IS5SO_cjs.Editor; }
23
23
  });
24
24
  Object.defineProperty(exports, "useEditor", {
25
25
  enumerable: true,
26
- get: function () { return chunkODAPI4QJ_cjs.useEditor; }
26
+ get: function () { return chunkM52IS5SO_cjs.useEditor; }
27
27
  });
28
28
  //# sourceMappingURL=editor.cjs.map
29
29
  //# sourceMappingURL=editor.cjs.map
package/dist/editor.js CHANGED
@@ -1,11 +1,11 @@
1
- export { Editor, useEditor } from './chunk-K74R6IEB.js';
1
+ export { Editor, useEditor } from './chunk-PCTZNK2Z.js';
2
2
  import './chunk-FWCREAIT.js';
3
3
  import './chunk-CPY7NHXM.js';
4
- import './chunk-GMNMJLZO.js';
4
+ import './chunk-K6EJLBBQ.js';
5
5
  import './chunk-FBWUXSKH.js';
6
6
  import './chunk-5U2DZ7AV.js';
7
7
  import './chunk-CHADHN6M.js';
8
- import './chunk-QXYO76NZ.js';
8
+ import './chunk-6TBRBN7H.js';
9
9
  import './chunk-NRXK42LO.js';
10
10
  import './chunk-MQ6VGG62.js';
11
11
  import './chunk-RGANGU7X.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkDUOZSOSB_cjs = require('./chunk-DUOZSOSB.cjs');
3
+ var chunkRU6ZTA4M_cjs = require('./chunk-RU6ZTA4M.cjs');
4
4
  require('./chunk-SNHU2AI4.cjs');
5
5
  require('./chunk-ZU5Q77OT.cjs');
6
6
 
@@ -8,7 +8,7 @@ require('./chunk-ZU5Q77OT.cjs');
8
8
 
9
9
  Object.defineProperty(exports, "FauxClient", {
10
10
  enumerable: true,
11
- get: function () { return chunkDUOZSOSB_cjs.FauxClient; }
11
+ get: function () { return chunkRU6ZTA4M_cjs.FauxClient; }
12
12
  });
13
13
  //# sourceMappingURL=faux-client.cjs.map
14
14
  //# sourceMappingURL=faux-client.cjs.map
@@ -1,4 +1,4 @@
1
- export { FauxClient } from './chunk-XWXV6HSK.js';
1
+ export { FauxClient } from './chunk-XZUGREDI.js';
2
2
  import './chunk-EDYAXGUM.js';
3
3
  import './chunk-MMW2JGKZ.js';
4
4
  //# sourceMappingURL=faux-client.js.map
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var chunkWBJRFWZE_cjs = require('./chunk-WBJRFWZE.cjs');
4
- require('./chunk-DUOZSOSB.cjs');
3
+ var chunk2KZINS6D_cjs = require('./chunk-2KZINS6D.cjs');
4
+ require('./chunk-RU6ZTA4M.cjs');
5
5
  require('./chunk-T6YELZPJ.cjs');
6
6
  require('./chunk-SNHU2AI4.cjs');
7
7
  require('./chunk-ZU5Q77OT.cjs');
@@ -10,7 +10,7 @@ require('./chunk-ZU5Q77OT.cjs');
10
10
 
11
11
  Object.defineProperty(exports, "ImageViewer", {
12
12
  enumerable: true,
13
- get: function () { return chunkWBJRFWZE_cjs.ImageViewer; }
13
+ get: function () { return chunk2KZINS6D_cjs.ImageViewer; }
14
14
  });
15
15
  //# sourceMappingURL=image-viewer.cjs.map
16
16
  //# sourceMappingURL=image-viewer.cjs.map
@@ -1,5 +1,5 @@
1
- export { ImageViewer } from './chunk-XOWWNG7D.js';
2
- import './chunk-XWXV6HSK.js';
1
+ export { ImageViewer } from './chunk-ASS6EWNI.js';
2
+ import './chunk-XZUGREDI.js';
3
3
  import './chunk-CPY7NHXM.js';
4
4
  import './chunk-EDYAXGUM.js';
5
5
  import './chunk-MMW2JGKZ.js';
package/dist/index.cjs CHANGED
@@ -21,7 +21,7 @@ var chunkCOH45MGW_cjs = require('./chunk-COH45MGW.cjs');
21
21
  var chunkYMDYDUBH_cjs = require('./chunk-YMDYDUBH.cjs');
22
22
  var chunkRLMU3NHQ_cjs = require('./chunk-RLMU3NHQ.cjs');
23
23
  var chunkUBZFOTZN_cjs = require('./chunk-UBZFOTZN.cjs');
24
- var chunkEEKXWXYO_cjs = require('./chunk-EEKXWXYO.cjs');
24
+ var chunkGCWIZNN2_cjs = require('./chunk-GCWIZNN2.cjs');
25
25
  var chunk5P3PISAX_cjs = require('./chunk-5P3PISAX.cjs');
26
26
  var chunkOS2QC3NE_cjs = require('./chunk-OS2QC3NE.cjs');
27
27
  var chunk6IBBAOQC_cjs = require('./chunk-6IBBAOQC.cjs');
@@ -33,7 +33,7 @@ var chunkLLA33GKC_cjs = require('./chunk-LLA33GKC.cjs');
33
33
  var chunkWKNVZUWZ_cjs = require('./chunk-WKNVZUWZ.cjs');
34
34
  var chunkPFEFKLUV_cjs = require('./chunk-PFEFKLUV.cjs');
35
35
  var chunkRWOH2ADL_cjs = require('./chunk-RWOH2ADL.cjs');
36
- var chunkTKDUT7ZA_cjs = require('./chunk-TKDUT7ZA.cjs');
36
+ var chunkIPBEVSSC_cjs = require('./chunk-IPBEVSSC.cjs');
37
37
  var chunkWKAEAGMT_cjs = require('./chunk-WKAEAGMT.cjs');
38
38
  var chunkAE53RKWR_cjs = require('./chunk-AE53RKWR.cjs');
39
39
  var chunkGBGJWAXZ_cjs = require('./chunk-GBGJWAXZ.cjs');
@@ -43,39 +43,39 @@ var chunkQSFTWIUH_cjs = require('./chunk-QSFTWIUH.cjs');
43
43
  var chunkXK5WHQ3O_cjs = require('./chunk-XK5WHQ3O.cjs');
44
44
  var chunkHIN6PHSE_cjs = require('./chunk-HIN6PHSE.cjs');
45
45
  var chunkF7YCIII4_cjs = require('./chunk-F7YCIII4.cjs');
46
- var chunkRLC2BE3D_cjs = require('./chunk-RLC2BE3D.cjs');
46
+ var chunkVWBKFQQN_cjs = require('./chunk-VWBKFQQN.cjs');
47
47
  var chunk2QIGXSSZ_cjs = require('./chunk-2QIGXSSZ.cjs');
48
48
  var chunkAR3JOPGT_cjs = require('./chunk-AR3JOPGT.cjs');
49
49
  var chunkY52NXM73_cjs = require('./chunk-Y52NXM73.cjs');
50
50
  var chunkBZZDHDMK_cjs = require('./chunk-BZZDHDMK.cjs');
51
51
  var chunkQAFAPHAF_cjs = require('./chunk-QAFAPHAF.cjs');
52
52
  var chunkSUCBR6L5_cjs = require('./chunk-SUCBR6L5.cjs');
53
- var chunkI6XHZ3S2_cjs = require('./chunk-I6XHZ3S2.cjs');
53
+ var chunkNAQJF3G6_cjs = require('./chunk-NAQJF3G6.cjs');
54
54
  var chunkV6VFSX6V_cjs = require('./chunk-V6VFSX6V.cjs');
55
55
  require('./chunk-7EZBMGEE.cjs');
56
56
  var chunkXKDW6B7X_cjs = require('./chunk-XKDW6B7X.cjs');
57
57
  var chunkBBOIFV27_cjs = require('./chunk-BBOIFV27.cjs');
58
58
  require('./chunk-YLGTDBB2.cjs');
59
59
  var chunkZVDW2VX5_cjs = require('./chunk-ZVDW2VX5.cjs');
60
- var chunkKST6GW2B_cjs = require('./chunk-KST6GW2B.cjs');
60
+ var chunkNCXH5O4I_cjs = require('./chunk-NCXH5O4I.cjs');
61
61
  var chunkTH7VP4CL_cjs = require('./chunk-TH7VP4CL.cjs');
62
- var chunkLP3HMRQT_cjs = require('./chunk-LP3HMRQT.cjs');
62
+ var chunkIYVV4RD3_cjs = require('./chunk-IYVV4RD3.cjs');
63
63
  var chunkRPVCMW64_cjs = require('./chunk-RPVCMW64.cjs');
64
64
  var chunkT45XK5GN_cjs = require('./chunk-T45XK5GN.cjs');
65
65
  var chunkVKXNCYLE_cjs = require('./chunk-VKXNCYLE.cjs');
66
66
  var chunkOOZCJLEF_cjs = require('./chunk-OOZCJLEF.cjs');
67
67
  require('./chunk-FJKZ5NOA.cjs');
68
- var chunkWBJRFWZE_cjs = require('./chunk-WBJRFWZE.cjs');
69
- var chunkDUOZSOSB_cjs = require('./chunk-DUOZSOSB.cjs');
68
+ var chunk2KZINS6D_cjs = require('./chunk-2KZINS6D.cjs');
69
+ var chunkRU6ZTA4M_cjs = require('./chunk-RU6ZTA4M.cjs');
70
70
  var chunkTGNQ5Y6F_cjs = require('./chunk-TGNQ5Y6F.cjs');
71
71
  require('./chunk-S3TRSECD.cjs');
72
72
  var chunkPV5WDIGM_cjs = require('./chunk-PV5WDIGM.cjs');
73
73
  var chunkZ43BI7CQ_cjs = require('./chunk-Z43BI7CQ.cjs');
74
74
  var chunkT5OCRKPD_cjs = require('./chunk-T5OCRKPD.cjs');
75
- var chunkODAPI4QJ_cjs = require('./chunk-ODAPI4QJ.cjs');
75
+ var chunkM52IS5SO_cjs = require('./chunk-M52IS5SO.cjs');
76
76
  var chunkHPNIEYSJ_cjs = require('./chunk-HPNIEYSJ.cjs');
77
77
  var chunkT6YELZPJ_cjs = require('./chunk-T6YELZPJ.cjs');
78
- var chunkFNYUUVOK_cjs = require('./chunk-FNYUUVOK.cjs');
78
+ var chunkMFQ5NBSV_cjs = require('./chunk-MFQ5NBSV.cjs');
79
79
  var chunkAVU4JOYM_cjs = require('./chunk-AVU4JOYM.cjs');
80
80
  var chunkWIS4QRGK_cjs = require('./chunk-WIS4QRGK.cjs');
81
81
  var chunkVGBZWDMM_cjs = require('./chunk-VGBZWDMM.cjs');
@@ -99,8 +99,8 @@ var chunkMOU6O324_cjs = require('./chunk-MOU6O324.cjs');
99
99
  var chunkLMPPAQKP_cjs = require('./chunk-LMPPAQKP.cjs');
100
100
  var chunkJFOORUUD_cjs = require('./chunk-JFOORUUD.cjs');
101
101
  require('./chunk-M5MUGSON.cjs');
102
- var chunk3XJKJQSY_cjs = require('./chunk-3XJKJQSY.cjs');
103
- var chunkLRNWD26Z_cjs = require('./chunk-LRNWD26Z.cjs');
102
+ var chunkFWA4PCW7_cjs = require('./chunk-FWA4PCW7.cjs');
103
+ var chunkX2FC7ODX_cjs = require('./chunk-X2FC7ODX.cjs');
104
104
  var chunkXCZZVRBY_cjs = require('./chunk-XCZZVRBY.cjs');
105
105
  var chunkQKFOJKVE_cjs = require('./chunk-QKFOJKVE.cjs');
106
106
  var chunkQOGKO6JH_cjs = require('./chunk-QOGKO6JH.cjs');
@@ -199,7 +199,7 @@ Object.defineProperty(exports, "useToast", {
199
199
  });
200
200
  Object.defineProperty(exports, "ReasonTag", {
201
201
  enumerable: true,
202
- get: function () { return chunkEEKXWXYO_cjs.ReasonTag; }
202
+ get: function () { return chunkGCWIZNN2_cjs.ReasonTag; }
203
203
  });
204
204
  Object.defineProperty(exports, "Section", {
205
205
  enumerable: true,
@@ -259,19 +259,19 @@ Object.defineProperty(exports, "Progress", {
259
259
  });
260
260
  Object.defineProperty(exports, "PromptInput", {
261
261
  enumerable: true,
262
- get: function () { return chunkTKDUT7ZA_cjs.PromptInput; }
262
+ get: function () { return chunkIPBEVSSC_cjs.PromptInput; }
263
263
  });
264
264
  Object.defineProperty(exports, "browserPlatformHints", {
265
265
  enumerable: true,
266
- get: function () { return chunkTKDUT7ZA_cjs.browserPlatformHints; }
266
+ get: function () { return chunkIPBEVSSC_cjs.browserPlatformHints; }
267
267
  });
268
268
  Object.defineProperty(exports, "detectPlatform", {
269
269
  enumerable: true,
270
- get: function () { return chunkTKDUT7ZA_cjs.detectPlatform; }
270
+ get: function () { return chunkIPBEVSSC_cjs.detectPlatform; }
271
271
  });
272
272
  Object.defineProperty(exports, "modifierKeyLabel", {
273
273
  enumerable: true,
274
- get: function () { return chunkTKDUT7ZA_cjs.modifierKeyLabel; }
274
+ get: function () { return chunkIPBEVSSC_cjs.modifierKeyLabel; }
275
275
  });
276
276
  Object.defineProperty(exports, "PullQuote", {
277
277
  enumerable: true,
@@ -347,51 +347,51 @@ Object.defineProperty(exports, "textareaAdapter", {
347
347
  });
348
348
  Object.defineProperty(exports, "JSON_FIELD_TYPES", {
349
349
  enumerable: true,
350
- get: function () { return chunkRLC2BE3D_cjs.JSON_FIELD_TYPES; }
350
+ get: function () { return chunkVWBKFQQN_cjs.JSON_FIELD_TYPES; }
351
351
  });
352
352
  Object.defineProperty(exports, "JsonEditor", {
353
353
  enumerable: true,
354
- get: function () { return chunkRLC2BE3D_cjs.JsonEditor; }
354
+ get: function () { return chunkVWBKFQQN_cjs.JsonEditor; }
355
355
  });
356
356
  Object.defineProperty(exports, "applyJsonEdit", {
357
357
  enumerable: true,
358
- get: function () { return chunkRLC2BE3D_cjs.applyJsonEdit; }
358
+ get: function () { return chunkVWBKFQQN_cjs.applyJsonEdit; }
359
359
  });
360
360
  Object.defineProperty(exports, "describeEdit", {
361
361
  enumerable: true,
362
- get: function () { return chunkRLC2BE3D_cjs.describeEdit; }
362
+ get: function () { return chunkVWBKFQQN_cjs.describeEdit; }
363
363
  });
364
364
  Object.defineProperty(exports, "findJsonConflicts", {
365
365
  enumerable: true,
366
- get: function () { return chunkRLC2BE3D_cjs.findJsonConflicts; }
366
+ get: function () { return chunkVWBKFQQN_cjs.findJsonConflicts; }
367
367
  });
368
368
  Object.defineProperty(exports, "getAtPath", {
369
369
  enumerable: true,
370
- get: function () { return chunkRLC2BE3D_cjs.getAtPath; }
370
+ get: function () { return chunkVWBKFQQN_cjs.getAtPath; }
371
371
  });
372
372
  Object.defineProperty(exports, "inferType", {
373
373
  enumerable: true,
374
- get: function () { return chunkRLC2BE3D_cjs.inferType; }
374
+ get: function () { return chunkVWBKFQQN_cjs.inferType; }
375
375
  });
376
376
  Object.defineProperty(exports, "parseKeyMap", {
377
377
  enumerable: true,
378
- get: function () { return chunkRLC2BE3D_cjs.parseKeyMap; }
378
+ get: function () { return chunkVWBKFQQN_cjs.parseKeyMap; }
379
379
  });
380
380
  Object.defineProperty(exports, "parsePath", {
381
381
  enumerable: true,
382
- get: function () { return chunkRLC2BE3D_cjs.parsePath; }
382
+ get: function () { return chunkVWBKFQQN_cjs.parsePath; }
383
383
  });
384
384
  Object.defineProperty(exports, "pathToString", {
385
385
  enumerable: true,
386
- get: function () { return chunkRLC2BE3D_cjs.pathToString; }
386
+ get: function () { return chunkVWBKFQQN_cjs.pathToString; }
387
387
  });
388
388
  Object.defineProperty(exports, "resolveKeyRule", {
389
389
  enumerable: true,
390
- get: function () { return chunkRLC2BE3D_cjs.resolveKeyRule; }
390
+ get: function () { return chunkVWBKFQQN_cjs.resolveKeyRule; }
391
391
  });
392
392
  Object.defineProperty(exports, "typeMatches", {
393
393
  enumerable: true,
394
- get: function () { return chunkRLC2BE3D_cjs.typeMatches; }
394
+ get: function () { return chunkVWBKFQQN_cjs.typeMatches; }
395
395
  });
396
396
  Object.defineProperty(exports, "Input", {
397
397
  enumerable: true,
@@ -423,7 +423,7 @@ Object.defineProperty(exports, "Kbd", {
423
423
  });
424
424
  Object.defineProperty(exports, "MagicWand", {
425
425
  enumerable: true,
426
- get: function () { return chunkI6XHZ3S2_cjs.MagicWand; }
426
+ get: function () { return chunkNAQJF3G6_cjs.MagicWand; }
427
427
  });
428
428
  Object.defineProperty(exports, "Textarea", {
429
429
  enumerable: true,
@@ -443,11 +443,11 @@ Object.defineProperty(exports, "Marquee", {
443
443
  });
444
444
  Object.defineProperty(exports, "MediaViewer", {
445
445
  enumerable: true,
446
- get: function () { return chunkKST6GW2B_cjs.MediaViewer; }
446
+ get: function () { return chunkNCXH5O4I_cjs.MediaViewer; }
447
447
  });
448
448
  Object.defineProperty(exports, "resolveMediaType", {
449
449
  enumerable: true,
450
- get: function () { return chunkKST6GW2B_cjs.resolveMediaType; }
450
+ get: function () { return chunkNCXH5O4I_cjs.resolveMediaType; }
451
451
  });
452
452
  Object.defineProperty(exports, "VideoViewer", {
453
453
  enumerable: true,
@@ -455,7 +455,7 @@ Object.defineProperty(exports, "VideoViewer", {
455
455
  });
456
456
  Object.defineProperty(exports, "PdfViewer", {
457
457
  enumerable: true,
458
- get: function () { return chunkLP3HMRQT_cjs.PdfViewer; }
458
+ get: function () { return chunkIYVV4RD3_cjs.PdfViewer; }
459
459
  });
460
460
  Object.defineProperty(exports, "Menu", {
461
461
  enumerable: true,
@@ -495,11 +495,11 @@ Object.defineProperty(exports, "Grid", {
495
495
  });
496
496
  Object.defineProperty(exports, "ImageViewer", {
497
497
  enumerable: true,
498
- get: function () { return chunkWBJRFWZE_cjs.ImageViewer; }
498
+ get: function () { return chunk2KZINS6D_cjs.ImageViewer; }
499
499
  });
500
500
  Object.defineProperty(exports, "FauxClient", {
501
501
  enumerable: true,
502
- get: function () { return chunkDUOZSOSB_cjs.FauxClient; }
502
+ get: function () { return chunkRU6ZTA4M_cjs.FauxClient; }
503
503
  });
504
504
  Object.defineProperty(exports, "IndexList", {
505
505
  enumerable: true,
@@ -531,11 +531,11 @@ Object.defineProperty(exports, "useDropdown", {
531
531
  });
532
532
  Object.defineProperty(exports, "Editor", {
533
533
  enumerable: true,
534
- get: function () { return chunkODAPI4QJ_cjs.Editor; }
534
+ get: function () { return chunkM52IS5SO_cjs.Editor; }
535
535
  });
536
536
  Object.defineProperty(exports, "useEditor", {
537
537
  enumerable: true,
538
- get: function () { return chunkODAPI4QJ_cjs.useEditor; }
538
+ get: function () { return chunkM52IS5SO_cjs.useEditor; }
539
539
  });
540
540
  Object.defineProperty(exports, "THEME_STORAGE_KEY", {
541
541
  enumerable: true,
@@ -579,15 +579,19 @@ Object.defineProperty(exports, "usePanZoom", {
579
579
  });
580
580
  Object.defineProperty(exports, "ContentRenderer", {
581
581
  enumerable: true,
582
- get: function () { return chunkFNYUUVOK_cjs.ContentRenderer; }
582
+ get: function () { return chunkMFQ5NBSV_cjs.ContentRenderer; }
583
583
  });
584
584
  Object.defineProperty(exports, "registerExtension", {
585
585
  enumerable: true,
586
- get: function () { return chunkFNYUUVOK_cjs.registerExtension; }
586
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtension; }
587
587
  });
588
588
  Object.defineProperty(exports, "registerExtensions", {
589
589
  enumerable: true,
590
- get: function () { return chunkFNYUUVOK_cjs.registerExtensions; }
590
+ get: function () { return chunkMFQ5NBSV_cjs.registerExtensions; }
591
+ });
592
+ Object.defineProperty(exports, "renderMarkdown", {
593
+ enumerable: true,
594
+ get: function () { return chunkMFQ5NBSV_cjs.renderMarkdown; }
591
595
  });
592
596
  Object.defineProperty(exports, "Emoji", {
593
597
  enumerable: true,
@@ -695,19 +699,19 @@ Object.defineProperty(exports, "Breadcrumbs", {
695
699
  });
696
700
  Object.defineProperty(exports, "Action", {
697
701
  enumerable: true,
698
- get: function () { return chunk3XJKJQSY_cjs.Action; }
702
+ get: function () { return chunkFWA4PCW7_cjs.Action; }
699
703
  });
700
704
  Object.defineProperty(exports, "Button", {
701
705
  enumerable: true,
702
- get: function () { return chunk3XJKJQSY_cjs.Button; }
706
+ get: function () { return chunkFWA4PCW7_cjs.Button; }
703
707
  });
704
708
  Object.defineProperty(exports, "sanitizeHref", {
705
709
  enumerable: true,
706
- get: function () { return chunkLRNWD26Z_cjs.sanitizeHref; }
710
+ get: function () { return chunkX2FC7ODX_cjs.sanitizeHref; }
707
711
  });
708
712
  Object.defineProperty(exports, "sanitizeHtml", {
709
713
  enumerable: true,
710
- get: function () { return chunkLRNWD26Z_cjs.sanitizeHtml; }
714
+ get: function () { return chunkX2FC7ODX_cjs.sanitizeHtml; }
711
715
  });
712
716
  Object.defineProperty(exports, "EMOJI_CATEGORY_ORDER", {
713
717
  enumerable: true,
package/dist/index.d.cts CHANGED
@@ -131,14 +131,81 @@ declare function cn(...inputs: ClassValue[]): string;
131
131
  */
132
132
  declare function sanitizeHref(href: string | undefined | null): string | undefined;
133
133
  /**
134
- * Sanitize an HTML string by removing dangerous tags (script, iframe, etc.),
135
- * event-handler attributes (`onclick`, `onerror`, ...), and dangerous URI
136
- * schemes in `href`/`src` attributes.
134
+ * Allowlist options for {@link sanitizeHtml}. Passing ANY options object
135
+ * (even `{}`) switches from the default blocklist to allowlist mode, where
136
+ * everything not listed is removed.
137
+ */
138
+ interface SanitizeHtmlOptions {
139
+ /**
140
+ * Tags to keep, e.g. `["p", "a", "strong"]`. A tag that is not listed is
141
+ * removed but its text and (cleaned) children are kept. Default: none, so
142
+ * only text survives.
143
+ *
144
+ * Some tags are removed WITH their content even when listed, because no
145
+ * attribute filtering makes them safe: `script`, `style`, `iframe`, `frame`,
146
+ * `frameset`, `object`, `embed`, `applet`, `link`, `meta`, `base`, `form`,
147
+ * `title`, `template`, `noscript`, `noembed`, `noframes`, `xmp`,
148
+ * `plaintext`, `svg` and `math`.
149
+ */
150
+ allowedTags?: readonly string[];
151
+ /**
152
+ * Attributes to keep. Either one list for every allowed tag, or a map from
153
+ * tag name to its list, where the key `"*"` applies to every tag. A trailing
154
+ * `*` matches a prefix (`"data-*"`, `"aria-*"`). Default: none.
155
+ *
156
+ * Never kept, even when listed: event handlers (`on*`), `srcdoc` and
157
+ * `srcset`.
158
+ */
159
+ allowedAttributes?: readonly string[] | Readonly<Record<string, readonly string[]>>;
160
+ /**
161
+ * URL schemes allowed in URL attributes (`href`, `src`, `action`,
162
+ * `formaction`, `cite`, `poster`, `background`, `ping`, `xlink:href`), with
163
+ * the colon: `["https:", "mailto:"]`. A URL attribute whose scheme is not
164
+ * listed is removed. Default: `["http:", "https:", "mailto:"]`.
165
+ *
166
+ * `javascript:` and `vbscript:` are never kept, even when listed.
167
+ */
168
+ allowedSchemes?: readonly string[];
169
+ /**
170
+ * Keep URLs with no scheme that stay on this site: `/x`, `x/y`, `../x`,
171
+ * `?q`, `#frag`. Protocol-relative URLs (`//host/x`, and the backslash
172
+ * spellings a browser treats the same way) leave the site and are always
173
+ * removed. Default: `false`.
174
+ */
175
+ allowRelative?: boolean;
176
+ }
177
+ /**
178
+ * Sanitize an HTML string.
179
+ *
180
+ * **With no options** (the default blocklist): removes dangerous tags (script,
181
+ * iframe, etc.), event-handler attributes (`onclick`, `onerror`, ...), and
182
+ * dangerous URI schemes in `href`/`src` attributes. Everything else is kept.
183
+ * In non-browser environments returns the input unchanged — sanitize on the
184
+ * server in those cases.
185
+ *
186
+ * **With options** (allowlist mode): keeps ONLY the listed tags, attributes and
187
+ * URL schemes; see {@link SanitizeHtmlOptions}. The allowlist can only narrow:
188
+ * event handlers, `javascript:` URLs and script-capable tags never survive,
189
+ * even when listed. In non-browser environments the input is returned as
190
+ * escaped text (fail closed).
191
+ *
192
+ * Uses the browser's `DOMParser`.
193
+ */
194
+ declare function sanitizeHtml(html: string, options?: SanitizeHtmlOptions): string;
195
+
196
+ /**
197
+ * Render markdown (GitHub-flavoured) to sanitised HTML — the same parser and
198
+ * output `ContentRenderer` uses, so a host never has to import the parser
199
+ * itself.
200
+ *
201
+ * With no `sanitize` options the default blocklist of {@link sanitizeHtml} is
202
+ * applied; pass allowlist options to keep only what you list:
137
203
  *
138
- * Uses the browser's `DOMParser`. In non-browser environments returns the
139
- * input unchanged — sanitize on the server in those cases.
204
+ * ```ts
205
+ * renderMarkdown(md, { allowedTags: ["p", "strong", "a"], allowedAttributes: ["href"] })
206
+ * ```
140
207
  */
141
- declare function sanitizeHtml(html: string): string;
208
+ declare function renderMarkdown(markdown: string, sanitize?: SanitizeHtmlOptions): string;
142
209
 
143
210
  /**
144
211
  * One state slot that works controlled or uncontrolled.
@@ -316,4 +383,4 @@ type UseThemeResult = {
316
383
  */
317
384
  declare function useTheme(): UseThemeResult;
318
385
 
319
- export { type NodeRect, Placement, type ResolvedTheme, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };
386
+ export { type NodeRect, Placement, type ResolvedTheme, type SanitizeHtmlOptions, THEME_STORAGE_KEY, type ThemePreference, type UseThemeResult, cn, getThemePreference, initTheme, renderMarkdown, resolveTheme, sanitizeHref, sanitizeHtml, setThemePreference, subscribeTheme, useAnimation, useControllableState, useEscapeKey, useFloatingPosition, useFocusTrap, useId, useNodeRegistry, useOutsideClick, usePanZoom, useTheme };