osameditor 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/presets.ts","../src/config.ts","../src/extensions/ResizableImage.tsx","../src/extensions/Embed.tsx","../src/extensions/CodeBlock.tsx","../src/sanitize.ts","../src/extensions/CustomHtml.tsx","../src/extensions/PreserveAttributes.ts","../src/extensions/buildExtensions.ts","../src/useOsamEditor.ts","../src/ui/icons.tsx","../src/ui/hooks.ts","../src/ui/Popover.tsx","../src/ui/headings.tsx","../src/ui/color.tsx","../src/ui/link.tsx","../src/storage/types.ts","../src/ui/useUpload.ts","../src/extensions/embed-utils.ts","../src/mediaLibrary.ts","../src/ui/media.tsx","../src/ui/Toolbar.tsx","../src/theme.ts","../src/OsamEditor.tsx","../src/OsamContent.tsx","../src/storage/osam.ts","../src/storage/vps.ts"],"names":["React","mergeAttributes","ReactNodeViewRenderer","jsxs","NodeViewWrapper","jsx","Fragment","React2","React3","Node","React4","React5","editor","React6","React7","React8","React9","React11","React12","defaultResolveUrl"],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolbarItem, ToolbarPreset } from \"./types\";\n\nexport const TOOLBAR_PRESETS: Record<ToolbarPreset, ToolbarItem[]> = {\n full: [\n \"undo\", \"redo\", \"|\",\n \"headings\", \"|\",\n \"bold\", \"italic\", \"underline\", \"strike\", \"code\", \"|\",\n \"color\", \"highlight\", \"clearFormatting\", \"|\",\n \"alignLeft\", \"alignCenter\", \"alignRight\", \"alignJustify\", \"|\",\n \"bulletList\", \"orderedList\", \"taskList\", \"outdent\", \"indent\", \"|\",\n \"link\", \"unlink\", \"|\",\n \"blockquote\", \"codeBlock\", \"horizontalRule\", \"|\",\n \"image\", \"imageUrl\", \"mediaLibrary\", \"youtube\", \"instagram\", \"video\", \"embed\", \"pdf\", \"|\",\n \"customHtml\", \"source\", \"spacer\", \"fullscreen\",\n ],\n blog: [\n \"headings\", \"|\",\n \"bold\", \"italic\", \"underline\", \"strike\", \"|\",\n \"highlight\", \"|\",\n \"bulletList\", \"orderedList\", \"taskList\", \"|\",\n \"link\", \"blockquote\", \"codeBlock\", \"|\",\n \"image\", \"mediaLibrary\", \"youtube\", \"instagram\", \"embed\", \"pdf\", \"|\",\n \"undo\", \"redo\", \"spacer\", \"source\", \"fullscreen\",\n ],\n basic: [\n \"bold\", \"italic\", \"underline\", \"strike\", \"|\",\n \"h2\", \"h3\", \"|\",\n \"bulletList\", \"orderedList\", \"|\",\n \"link\", \"blockquote\", \"|\",\n \"image\", \"|\",\n \"undo\", \"redo\",\n ],\n minimal: [\"bold\", \"italic\", \"link\", \"|\", \"bulletList\", \"orderedList\"],\n};\n\nexport function resolveToolbar(\n toolbar: ToolbarItem[] | ToolbarPreset | false | undefined,\n): ToolbarItem[] | false {\n if (toolbar === false) return false;\n if (toolbar === undefined) return TOOLBAR_PRESETS.full;\n if (typeof toolbar === \"string\") return TOOLBAR_PRESETS[toolbar] ?? TOOLBAR_PRESETS.full;\n return toolbar;\n}\n\n/** Collapse leading/trailing/duplicate dividers left after filtering. */\nexport function tidyToolbar(items: ToolbarItem[]): ToolbarItem[] {\n const out: ToolbarItem[] = [];\n for (const item of items) {\n if (item === \"|\" && (out.length === 0 || out[out.length - 1] === \"|\")) continue;\n out.push(item);\n }\n while (out.length && out[out.length - 1] === \"|\") out.pop();\n return out;\n}\n","import type {\n OsamEditorConfig,\n ToolbarItem,\n MediaLibraryConfig,\n OsamEditorTheme,\n} from \"./types\";\nimport { resolveToolbar, tidyToolbar } from \"./presets\";\n\nconst HEADING_ITEMS: Record<string, 1 | 2 | 3 | 4 | 5 | 6> = {\n h1: 1, h2: 2, h3: 3, h4: 4, h5: 5, h6: 6,\n};\n\nexport const DEFAULT_COLORS = [\n \"#000000\", \"#434343\", \"#666666\", \"#999999\", \"#b7b7b7\", \"#cccccc\", \"#ffffff\",\n \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ff66cc\",\n];\n\nexport const DEFAULT_HIGHLIGHTS = [\n \"#fff3a3\", \"#ffd8a8\", \"#ffc9c9\", \"#d3f9d8\", \"#a5d8ff\", \"#d0bfff\", \"#fcc2d7\",\n];\n\nexport const DEFAULT_EMBED_HOSTS = [\n \"youtube.com\", \"youtu.be\", \"youtube-nocookie.com\",\n \"vimeo.com\", \"player.vimeo.com\",\n \"instagram.com\",\n \"twitter.com\", \"x.com\",\n \"codepen.io\", \"codesandbox.io\",\n \"open.spotify.com\", \"soundcloud.com\",\n \"google.com\", \"maps.google.com\",\n \"loom.com\", \"figma.com\",\n \"gist.github.com\",\n];\n\nexport interface ResolvedConfig {\n toolbar: ToolbarItem[] | false;\n placeholder: string;\n dir: \"ltr\" | \"rtl\";\n labels: Record<string, string>;\n\n headingLevels: Array<1 | 2 | 3 | 4 | 5 | 6> | false;\n\n link:\n | false\n | {\n allowTargetBlank: boolean;\n allowRelAttributes: boolean;\n defaultRel: string | null;\n protocols: string[];\n autolink: boolean;\n };\n\n color: false | { colors: string[] };\n highlight: false | { colors: string[]; multicolor: boolean };\n\n image:\n | false\n | {\n resizable: boolean;\n caption: boolean;\n align: boolean;\n link: boolean;\n accept: string;\n maxSize?: number;\n allowUrl: boolean;\n allowUpload: boolean;\n };\n\n upload: {\n hasHandler: boolean;\n video: boolean;\n pdf: boolean;\n maxSize?: number;\n };\n\n embed: false | { allowedHosts: string[] | \"*\"; defaultRatio: string };\n\n mediaLibrary: MediaLibraryConfig | false;\n\n html:\n | false\n | {\n sourceView: boolean;\n customBlock: boolean;\n styleAttributes: boolean;\n classAttributes: boolean;\n allowStyleTags: boolean;\n };\n\n theme: OsamEditorTheme | undefined;\n branding: boolean;\n\n taskList: boolean;\n codeBlock: false | { defaultLanguage?: string; copyButton: boolean };\n blockquote: boolean;\n horizontalRule: boolean;\n textAlign:\n | false\n | { types: string[]; alignments: string[]; defaultAlignment: string };\n\n starterKit: Record<string, unknown>;\n}\n\nconst DEFAULT_LABELS: Record<string, string> = {\n bold: \"Bold\",\n italic: \"Italic\",\n underline: \"Underline\",\n strike: \"Strikethrough\",\n code: \"Inline code\",\n color: \"Text color\",\n highlight: \"Highlight\",\n clearFormatting: \"Clear formatting\",\n paragraph: \"Paragraph\",\n headings: \"Heading\",\n h1: \"Heading 1\", h2: \"Heading 2\", h3: \"Heading 3\",\n h4: \"Heading 4\", h5: \"Heading 5\", h6: \"Heading 6\",\n alignLeft: \"Align left\",\n alignCenter: \"Align center\",\n alignRight: \"Align right\",\n alignJustify: \"Justify\",\n hardBreak: \"Line break\",\n bulletList: \"Bullet list\",\n orderedList: \"Numbered list\",\n taskList: \"Checklist\",\n indent: \"Indent / nest\",\n outdent: \"Outdent\",\n link: \"Link\",\n unlink: \"Remove link\",\n blockquote: \"Blockquote\",\n codeBlock: \"Code block\",\n image: \"Upload image\",\n imageUrl: \"Image by URL\",\n youtube: \"YouTube\",\n instagram: \"Instagram\",\n video: \"Video\",\n embed: \"Embed\",\n pdf: \"PDF / document\",\n horizontalRule: \"Divider\",\n undo: \"Undo\",\n redo: \"Redo\",\n \"dialog.url\": \"URL\",\n \"dialog.insert\": \"Insert\",\n \"dialog.cancel\": \"Cancel\",\n \"dialog.upload\": \"Upload a file\",\n \"dialog.or\": \"or\",\n \"dialog.alt\": \"Alt text\",\n \"dialog.title\": \"Title\",\n \"dialog.caption\": \"Caption\",\n \"dialog.openInNewTab\": \"Open in new tab\",\n \"dialog.nofollow\": \"nofollow\",\n \"dialog.sponsored\": \"sponsored\",\n \"dialog.linkText\": \"Text\",\n \"dialog.uploading\": \"Uploading…\",\n \"dialog.ratio\": \"Aspect ratio\",\n \"dialog.library\": \"Library\",\n \"dialog.linkImage\": \"Link this image\",\n \"error.tooLarge\": \"That file is too large.\",\n \"error.uploadFailed\": \"Upload failed.\",\n \"error.badHost\": \"That URL isn't from an allowed site.\",\n mediaLibrary: \"Media library\",\n fullscreen: \"Fullscreen\",\n fullscreenExit: \"Exit fullscreen\",\n source: \"View HTML source\",\n customHtml: \"Custom HTML / CSS\",\n poweredBy: \"powered by osamtech.com\",\n \"source.apply\": \"Apply\",\n \"source.title\": \"Edit HTML source\",\n};\n\nfunction pruneLabels(input: Record<string, string | undefined>): Record<string, string> {\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(input)) if (typeof v === \"string\") out[k] = v;\n return out;\n}\n\nfunction has(items: ToolbarItem[], ...names: ToolbarItem[]) {\n return names.some((n) => items.includes(n));\n}\n\nexport function resolveConfig(input: OsamEditorConfig = {}): ResolvedConfig {\n const toolbarResolved = resolveToolbar(input.toolbar);\n const items: ToolbarItem[] = toolbarResolved === false ? [] : toolbarResolved;\n\n // --- headings -----------------------------------------------------------\n let headingLevels: Array<1 | 2 | 3 | 4 | 5 | 6> | false;\n if (input.heading === false) {\n headingLevels = false;\n } else if (input.heading?.levels?.length) {\n headingLevels = [...input.heading.levels].sort();\n } else {\n const fromToolbar = Object.entries(HEADING_ITEMS)\n .filter(([k]) => items.includes(k as ToolbarItem))\n .map(([, v]) => v)\n .sort();\n if (fromToolbar.length) headingLevels = fromToolbar;\n else if (has(items, \"headings\")) headingLevels = [1, 2, 3];\n else headingLevels = [1, 2, 3]; // schema default; toolbar just won't expose it\n }\n\n // --- link --------------------------------------------------------------\n let link: ResolvedConfig[\"link\"] = false;\n if (input.link !== false && (has(items, \"link\", \"unlink\") || input.link)) {\n const l = input.link || {};\n link = {\n allowTargetBlank: l.allowTargetBlank ?? true,\n allowRelAttributes: l.allowRelAttributes ?? true,\n defaultRel: l.defaultRel === undefined ? \"noopener noreferrer nofollow\" : l.defaultRel,\n protocols: l.protocols ?? [\"http\", \"https\", \"mailto\", \"tel\"],\n autolink: l.autolink ?? true,\n };\n }\n\n // --- color / highlight -------------------------------------------------\n const color: ResolvedConfig[\"color\"] =\n input.color === false || !has(items, \"color\")\n ? false\n : { colors: input.color?.colors ?? DEFAULT_COLORS };\n\n const highlight: ResolvedConfig[\"highlight\"] =\n input.highlight === false || !has(items, \"highlight\")\n ? false\n : { colors: input.highlight?.highlights ?? input.highlight?.colors ?? DEFAULT_HIGHLIGHTS, multicolor: true };\n\n // --- image -----------------------------------------------------------\n let image: ResolvedConfig[\"image\"] = false;\n const wantsImage = has(items, \"image\", \"imageUrl\", \"mediaLibrary\") || !!input.image;\n if (input.image !== false && wantsImage) {\n const im = input.image || {};\n image = {\n resizable: im.resizable ?? true,\n caption: im.caption ?? true,\n align: im.align ?? true,\n link: im.link ?? true,\n accept: im.accept ?? \"image/*\",\n maxSize: im.maxSize ?? input.upload?.maxSize,\n allowUrl: has(items, \"imageUrl\") || !input.upload?.handler,\n allowUpload: has(items, \"image\") && !!input.upload?.handler,\n };\n }\n\n // --- upload --------------------------------------------------------\n const hasHandler = !!input.upload?.handler;\n const upload = {\n hasHandler,\n video: input.upload?.video ?? hasHandler,\n pdf: input.upload?.pdf ?? hasHandler,\n maxSize: input.upload?.maxSize,\n };\n\n // --- embed --------------------------------------------------------\n let embed: ResolvedConfig[\"embed\"] = false;\n const wantsEmbed = has(items, \"embed\", \"youtube\", \"instagram\", \"video\", \"pdf\") || !!input.embed;\n if (input.embed !== false && wantsEmbed) {\n const em = input.embed || {};\n embed = {\n allowedHosts: em.allowedHosts ?? DEFAULT_EMBED_HOSTS,\n defaultRatio: em.defaultRatio || \"16/9\",\n };\n }\n\n // --- text align --------------------------------------------------\n let textAlign: ResolvedConfig[\"textAlign\"] = false;\n const wantsAlign = has(items, \"alignLeft\", \"alignCenter\", \"alignRight\", \"alignJustify\") || !!input.textAlign;\n if (input.textAlign !== false && wantsAlign) {\n const t = input.textAlign && input.textAlign !== true ? input.textAlign : {};\n textAlign = {\n types: t.types ?? [\"heading\", \"paragraph\"],\n alignments: t.alignments ?? [\"left\", \"center\", \"right\", \"justify\"],\n defaultAlignment: t.defaultAlignment ?? \"left\",\n };\n }\n\n // --- code block --------------------------------------------------\n let codeBlock: ResolvedConfig[\"codeBlock\"] = false;\n if (input.codeBlock === true || has(items, \"codeBlock\")) codeBlock = { copyButton: true };\n else if (input.codeBlock && typeof input.codeBlock === \"object\") {\n codeBlock = {\n defaultLanguage: input.codeBlock.defaultLanguage,\n copyButton: input.codeBlock.copyButton ?? true,\n };\n }\n\n // --- media library ---------------------------------------------------\n const mediaLibrary: ResolvedConfig[\"mediaLibrary\"] = input.mediaLibrary ?? false;\n\n // --- html / source view --------------------------------------------\n let html: ResolvedConfig[\"html\"] = false;\n const wantsHtml = input.html === true || (input.html && typeof input.html === \"object\") ||\n has(items, \"source\", \"customHtml\");\n if (input.html !== false && wantsHtml) {\n const h = input.html && typeof input.html === \"object\" ? input.html : {};\n html = {\n sourceView: h.sourceView ?? true,\n customBlock: h.customBlock ?? true,\n styleAttributes: h.styleAttributes ?? true,\n classAttributes: h.classAttributes ?? true,\n allowStyleTags: h.allowStyleTags ?? false,\n };\n }\n\n return {\n toolbar: toolbarResolved === false ? false : tidyToolbar(items),\n placeholder: input.placeholder ?? \"Write something…\",\n dir: input.dir ?? \"ltr\",\n labels: pruneLabels({ ...DEFAULT_LABELS, ...(input.labels ?? {}) }),\n headingLevels,\n link,\n color,\n highlight,\n image,\n upload,\n embed,\n mediaLibrary,\n html,\n theme: input.theme,\n branding: input.branding ?? true,\n taskList: input.taskList ?? has(items, \"taskList\"),\n codeBlock,\n blockquote: input.blockquote ?? has(items, \"blockquote\"),\n horizontalRule: input.horizontalRule ?? has(items, \"horizontalRule\"),\n textAlign,\n starterKit: input.starterKit ?? {},\n };\n}\n","import Image from \"@tiptap/extension-image\";\nimport {\n NodeViewWrapper,\n ReactNodeViewRenderer,\n type NodeViewProps,\n} from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { mergeAttributes } from \"@tiptap/core\";\n\nexport interface ResizableImageOptions {\n resizable: boolean;\n caption: boolean;\n align: boolean;\n link: boolean;\n HTMLAttributes: Record<string, unknown>;\n}\n\ntype Align = \"left\" | \"center\" | \"right\" | null;\n\n/**\n * Block image with alt / title / caption / alignment / drag-resize, and an\n * optional wrapping link. `left` / `right` alignment **float** the image so body\n * text fills the rest of the row; `center` is a plain block.\n * Serializes to `<figure><a?><img></a?><figcaption?></figure>`.\n */\nexport const ResizableImage = Image.extend<ResizableImageOptions>({\n name: \"image\",\n\n addOptions() {\n return {\n ...this.parent?.(),\n resizable: true,\n caption: true,\n align: true,\n link: true,\n inline: false,\n HTMLAttributes: {},\n };\n },\n\n inline: false,\n group: \"block\",\n draggable: true,\n\n addAttributes() {\n return {\n src: { default: null },\n alt: { default: null },\n title: { default: null },\n width: {\n default: null,\n parseHTML: (el) =>\n el.getAttribute(\"data-width\") || el.style.width || el.getAttribute(\"width\") || null,\n renderHTML: (attrs) => (attrs.width ? { \"data-width\": attrs.width } : {}),\n },\n align: {\n default: null,\n parseHTML: (el) =>\n el.getAttribute(\"data-align\") || el.closest(\"figure\")?.getAttribute(\"data-align\") || null,\n renderHTML: () => ({}),\n },\n href: {\n default: null,\n parseHTML: (el) => el.closest(\"a\")?.getAttribute(\"href\") || null,\n renderHTML: () => ({}),\n },\n target: {\n default: null,\n parseHTML: (el) => el.closest(\"a\")?.getAttribute(\"target\") || null,\n renderHTML: () => ({}),\n },\n rel: {\n default: null,\n parseHTML: (el) => el.closest(\"a\")?.getAttribute(\"rel\") || null,\n renderHTML: () => ({}),\n },\n caption: {\n default: null,\n parseHTML: (el) => el.closest(\"figure\")?.querySelector(\"figcaption\")?.textContent || null,\n renderHTML: () => ({}),\n },\n };\n },\n\n parseHTML() {\n return [{ tag: \"figure[data-osam-image] img\" }, { tag: \"img[src]\" }];\n },\n\n renderHTML({ HTMLAttributes, node }) {\n const a = node.attrs as Record<string, any>;\n const figureAttrs: Record<string, any> = { \"data-osam-image\": \"\" };\n if (a.align) figureAttrs[\"data-align\"] = a.align;\n if (a.width) figureAttrs.style = `width:${cssLen(a.width)}`;\n\n const { align, width, caption, href, target, rel, ...rest } = HTMLAttributes as Record<string, any>;\n const imgSpec = [\n \"img\",\n mergeAttributes(this.options.HTMLAttributes, rest, a.width ? { \"data-width\": a.width } : {}),\n ];\n\n const media = a.href\n ? [\"a\", { href: a.href, ...(a.target ? { target: a.target } : {}), ...(a.rel ? { rel: a.rel } : {}) }, imgSpec]\n : imgSpec;\n\n return a.caption\n ? [\"figure\", figureAttrs, media, [\"figcaption\", {}, a.caption]]\n : [\"figure\", figureAttrs, media];\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(ImageNodeView);\n },\n});\n\nfunction cssLen(v: string | number): string {\n if (typeof v === \"number\") return `${v}px`;\n return /^\\d+$/.test(v) ? `${v}px` : v;\n}\n\nfunction ImageNodeView({ node, updateAttributes, editor, selected }: NodeViewProps) {\n const { src, alt, title, width, align, caption, href } = node.attrs as {\n src: string;\n alt: string | null;\n title: string | null;\n width: string | null;\n align: Align;\n caption: string | null;\n href: string | null;\n };\n const opts = editor.extensionManager.extensions.find((e) => e.name === \"image\")\n ?.options as ResizableImageOptions;\n\n const wrapRef = React.useRef<HTMLDivElement>(null);\n const [dragging, setDragging] = React.useState(false);\n const [linking, setLinking] = React.useState(false);\n const [hrefDraft, setHrefDraft] = React.useState(href || \"\");\n\n const startResize = (e: React.PointerEvent, side: \"left\" | \"right\") => {\n if (!opts?.resizable) return;\n e.preventDefault();\n const startX = e.clientX;\n const el = wrapRef.current;\n if (!el) return;\n const startW = el.getBoundingClientRect().width;\n const parentW = el.closest(\".osam-image\")?.getBoundingClientRect().width || startW;\n setDragging(true);\n const move = (ev: PointerEvent) => {\n const delta = (ev.clientX - startX) * (side === \"left\" ? -1 : 1);\n const next = Math.max(48, Math.min(parentW, startW + delta));\n updateAttributes({ width: `${Math.round((next / parentW) * 100)}%` });\n };\n const up = () => {\n setDragging(false);\n window.removeEventListener(\"pointermove\", move);\n window.removeEventListener(\"pointerup\", up);\n };\n window.addEventListener(\"pointermove\", move);\n window.addEventListener(\"pointerup\", up);\n };\n\n return (\n <NodeViewWrapper\n className=\"osam-image\"\n data-align={align || undefined}\n data-selected={selected || undefined}\n data-has-link={href ? \"\" : undefined}\n >\n <div\n ref={wrapRef}\n className=\"osam-image__frame\"\n style={{ width: width ? cssLen(width) : undefined }}\n data-dragging={dragging || undefined}\n contentEditable={false}\n >\n {/* eslint-disable-next-line @next/next/no-img-element */}\n <img src={src} alt={alt || \"\"} title={title || undefined} draggable={false} />\n\n {opts?.resizable && (\n <>\n <span className=\"osam-image__handle osam-image__handle--left\" onPointerDown={(e) => startResize(e, \"left\")} />\n <span className=\"osam-image__handle osam-image__handle--right\" onPointerDown={(e) => startResize(e, \"right\")} />\n </>\n )}\n\n {selected && editor.isEditable && (\n <div className=\"osam-image__bar\">\n {opts?.align && (\n <>\n <button type=\"button\" data-active={align === \"left\"} title=\"Float left, text wraps right\" onClick={() => updateAttributes({ align: \"left\" })}>⇤</button>\n <button type=\"button\" data-active={align === \"center\" || !align} title=\"Center block\" onClick={() => updateAttributes({ align: \"center\" })}>⇔</button>\n <button type=\"button\" data-active={align === \"right\"} title=\"Float right, text wraps left\" onClick={() => updateAttributes({ align: \"right\" })}>⇥</button>\n <span className=\"osam-image__sep\" />\n </>\n )}\n {[\"25%\", \"50%\", \"75%\", \"100%\"].map((w) => (\n <button key={w} type=\"button\" data-active={width === w} onClick={() => updateAttributes({ width: w })}>{w}</button>\n ))}\n <button type=\"button\" onClick={() => updateAttributes({ width: null })} title=\"Reset size\">↺</button>\n {opts?.link && (\n <>\n <span className=\"osam-image__sep\" />\n <button type=\"button\" data-active={!!href} title=\"Link image\" onClick={() => { setHrefDraft(href || \"\"); setLinking((v) => !v); }}>🔗</button>\n </>\n )}\n </div>\n )}\n\n {linking && selected && editor.isEditable && (\n <form\n className=\"osam-image__linkform\"\n onSubmit={(e) => {\n e.preventDefault();\n const url = hrefDraft.trim();\n updateAttributes(\n url\n ? { href: url, target: \"_blank\", rel: \"noopener noreferrer\" }\n : { href: null, target: null, rel: null },\n );\n setLinking(false);\n }}\n >\n <input autoFocus value={hrefDraft} placeholder=\"https://… (empty to remove)\" onChange={(e) => setHrefDraft(e.target.value)} />\n <button type=\"submit\">OK</button>\n </form>\n )}\n </div>\n\n {opts?.caption && (\n <figcaption\n className=\"osam-image__caption\"\n data-placeholder=\"Add a caption…\"\n contentEditable={editor.isEditable}\n suppressContentEditableWarning\n onBlur={(e) => updateAttributes({ caption: e.currentTarget.textContent?.trim() || null })}\n >\n {caption}\n </figcaption>\n )}\n </NodeViewWrapper>\n );\n}\n","import { Node, mergeAttributes } from \"@tiptap/core\";\nimport {\n NodeViewWrapper,\n ReactNodeViewRenderer,\n type NodeViewProps,\n} from \"@tiptap/react\";\nimport * as React from \"react\";\nimport type { EmbedProvider } from \"./embed-utils\";\n\nexport interface EmbedAttributes {\n src: string | null;\n provider: EmbedProvider;\n ratio: string;\n title: string | null;\n originalUrl: string | null;\n align: \"left\" | \"center\" | \"right\" | null;\n width: string | null;\n}\n\nexport interface EmbedOptions {\n defaultRatio: string;\n HTMLAttributes: Record<string, unknown>;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n embed: {\n setEmbed: (attrs: Partial<EmbedAttributes> & { src: string }) => ReturnType;\n updateEmbed: (attrs: Partial<EmbedAttributes>) => ReturnType;\n };\n }\n}\n\n/**\n * One atom block node for every kind of rich media that isn't an image:\n * YouTube / Vimeo / Instagram / generic iframe, self-hosted `<video>`\n * (with lazy HLS support) and PDF documents.\n */\nexport const Embed = Node.create<EmbedOptions>({\n name: \"embed\",\n group: \"block\",\n atom: true,\n draggable: true,\n selectable: true,\n\n addOptions() {\n return { defaultRatio: \"16/9\", HTMLAttributes: {} };\n },\n\n addAttributes() {\n return {\n src: { default: null },\n provider: { default: \"iframe\" as EmbedProvider },\n ratio: { default: this.options.defaultRatio },\n title: { default: null },\n originalUrl: { default: null },\n align: { default: null },\n width: { default: null },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"div[data-osam-embed]\",\n getAttrs: (node) => {\n const el = node as HTMLElement;\n const media = el.querySelector(\"iframe, video, object\") as HTMLElement | null;\n const src =\n media?.getAttribute(\"src\") || media?.getAttribute(\"data\") || null;\n return {\n src,\n provider: (el.getAttribute(\"data-osam-embed\") || \"iframe\") as EmbedProvider,\n ratio: el.getAttribute(\"data-ratio\") || \"16/9\",\n align: el.getAttribute(\"data-align\") || null,\n title: media?.getAttribute(\"title\") || null,\n };\n },\n },\n {\n tag: \"iframe[src]\",\n getAttrs: (el) => ({\n src: (el as HTMLElement).getAttribute(\"src\"),\n provider: \"iframe\" as EmbedProvider,\n }),\n },\n ];\n },\n\n renderHTML({ HTMLAttributes, node }) {\n const attrs = node.attrs as EmbedAttributes;\n const wrapper = mergeAttributes(this.options.HTMLAttributes, {\n \"data-osam-embed\": attrs.provider,\n \"data-ratio\": attrs.ratio,\n ...(attrs.align ? { \"data-align\": attrs.align } : {}),\n ...(attrs.width ? { style: `width:${attrs.width}` } : {}),\n });\n\n if (attrs.provider === \"video\") {\n return [\n \"div\",\n wrapper,\n [\"video\", { src: attrs.src, controls: \"true\", playsinline: \"true\", style: \"width:100%\" }],\n ];\n }\n if (attrs.provider === \"pdf\") {\n return [\n \"div\",\n wrapper,\n [\n \"object\",\n { data: attrs.src, type: \"application/pdf\", style: \"width:100%;height:100%\" },\n [\"a\", { href: attrs.src ?? \"#\" }, attrs.title || \"Open PDF\"],\n ],\n ];\n }\n return [\n \"div\",\n wrapper,\n [\n \"iframe\",\n {\n src: attrs.src,\n title: attrs.title || attrs.provider,\n loading: \"lazy\",\n frameborder: \"0\",\n allow:\n \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\",\n allowfullscreen: \"true\",\n style: \"width:100%;height:100%\",\n },\n ],\n ];\n },\n\n addCommands() {\n return {\n setEmbed:\n (attrs) =>\n ({ commands }) =>\n commands.insertContent({ type: this.name, attrs }),\n updateEmbed:\n (attrs) =>\n ({ commands }) =>\n commands.updateAttributes(this.name, attrs),\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(EmbedNodeView);\n },\n});\n\nfunction EmbedNodeView({ node, selected, updateAttributes, editor }: NodeViewProps) {\n const attrs = node.attrs as EmbedAttributes;\n const ratioStyle = attrs.provider === \"pdf\" ? undefined : { aspectRatio: attrs.ratio.replace(\"/\", \" / \") };\n\n return (\n <NodeViewWrapper\n className=\"osam-embed\"\n data-provider={attrs.provider}\n data-align={attrs.align || undefined}\n data-selected={selected || undefined}\n style={{ width: attrs.width || undefined }}\n contentEditable={false}\n >\n <div\n className=\"osam-embed__frame\"\n data-provider={attrs.provider}\n style={{\n ...ratioStyle,\n ...(attrs.provider === \"pdf\" ? { height: 620 } : {}),\n }}\n >\n {attrs.provider === \"video\" ? (\n <VideoPlayer src={attrs.src || \"\"} />\n ) : attrs.provider === \"pdf\" ? (\n <object data={attrs.src || \"\"} type=\"application/pdf\">\n <a href={attrs.src || \"#\"} target=\"_blank\" rel=\"noreferrer\">\n {attrs.title || \"Open PDF\"}\n </a>\n </object>\n ) : (\n <iframe\n src={attrs.src || \"\"}\n title={attrs.title || attrs.provider}\n loading=\"lazy\"\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n allowFullScreen\n />\n )}\n </div>\n\n {selected && editor.isEditable && (\n <div className=\"osam-embed__bar\" contentEditable={false}>\n <button type=\"button\" data-active={attrs.align === \"left\"} onClick={() => updateAttributes({ align: \"left\" })}>⤎</button>\n <button type=\"button\" data-active={!attrs.align || attrs.align === \"center\"} onClick={() => updateAttributes({ align: \"center\" })}>⇔</button>\n <button type=\"button\" data-active={attrs.align === \"right\"} onClick={() => updateAttributes({ align: \"right\" })}>⤏</button>\n {attrs.provider !== \"pdf\" && (\n <>\n <span className=\"osam-embed__sep\" />\n {[\"16/9\", \"4/3\", \"1/1\"].map((r) => (\n <button key={r} type=\"button\" data-active={attrs.ratio === r} onClick={() => updateAttributes({ ratio: r })}>{r}</button>\n ))}\n </>\n )}\n </div>\n )}\n </NodeViewWrapper>\n );\n}\n\n/** Plays MP4/WebM directly; loads `hls.js` on demand for `.m3u8` (OsamStorage HLS). */\nfunction VideoPlayer({ src }: { src: string }) {\n const ref = React.useRef<HTMLVideoElement>(null);\n const isHls = /\\.m3u8(\\?.*)?$/i.test(src);\n\n React.useEffect(() => {\n const video = ref.current;\n if (!video || !isHls) return;\n\n // Safari & iOS play HLS natively.\n if (video.canPlayType(\"application/vnd.apple.mpegurl\")) {\n video.src = src;\n return;\n }\n\n let hls: any;\n let cancelled = false;\n import(\"hls.js\")\n .then((mod: any) => {\n if (cancelled) return;\n const Hls = mod.default ?? mod;\n if (Hls?.isSupported?.()) {\n hls = new Hls();\n hls.loadSource(src);\n hls.attachMedia(video);\n } else {\n video.src = src;\n }\n })\n .catch(() => {\n video.src = src;\n });\n\n return () => {\n cancelled = true;\n hls?.destroy?.();\n };\n }, [src, isHls]);\n\n return <video ref={ref} src={isHls ? undefined : src} controls playsInline preload=\"metadata\" />;\n}\n","import {\n CodeBlockLowlight,\n type CodeBlockLowlightOptions,\n} from \"@tiptap/extension-code-block-lowlight\";\nimport {\n NodeViewContent,\n NodeViewWrapper,\n ReactNodeViewRenderer,\n type NodeViewProps,\n} from \"@tiptap/react\";\nimport * as React from \"react\";\n\nexport type CodeBlockOptions = Partial<CodeBlockLowlightOptions> & {\n copyButton: boolean;\n languages: string[];\n};\n\nconst DEFAULT_LANGUAGES = [\n \"plaintext\", \"bash\", \"javascript\", \"typescript\", \"jsx\", \"tsx\", \"json\",\n \"html\", \"css\", \"scss\", \"python\", \"java\", \"c\", \"cpp\", \"csharp\", \"go\",\n \"rust\", \"php\", \"ruby\", \"sql\", \"yaml\", \"markdown\", \"diff\",\n];\n\n/**\n * `CodeBlockLowlight` + a header with a language picker and a \"Copy\" button so\n * readers can copy the snippet.\n */\nexport const CodeBlock = CodeBlockLowlight.extend<CodeBlockOptions>({\n addOptions() {\n return {\n ...(this.parent?.() as object),\n copyButton: true,\n languages: DEFAULT_LANGUAGES,\n } as any;\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CodeBlockView);\n },\n});\n\nfunction CodeBlockView({ node, updateAttributes, editor, extension }: NodeViewProps) {\n const opts = extension.options as CodeBlockOptions;\n const language: string = node.attrs.language || \"plaintext\";\n const [copied, setCopied] = React.useState(false);\n\n const copy = async () => {\n const text = node.textContent;\n try {\n await navigator.clipboard.writeText(text);\n } catch {\n const ta = document.createElement(\"textarea\");\n ta.value = text;\n document.body.appendChild(ta);\n ta.select();\n document.execCommand(\"copy\");\n ta.remove();\n }\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <NodeViewWrapper className=\"osam-codeblock\">\n <div className=\"osam-codeblock__bar\" contentEditable={false}>\n {editor.isEditable ? (\n <select\n value={language}\n onChange={(e) => updateAttributes({ language: e.target.value })}\n >\n {opts.languages.map((l) => (\n <option key={l} value={l}>\n {l}\n </option>\n ))}\n </select>\n ) : (\n <span className=\"osam-codeblock__lang\">{language}</span>\n )}\n {opts.copyButton && (\n <button type=\"button\" className=\"osam-codeblock__copy\" onClick={copy}>\n {copied ? \"Copied ✓\" : \"Copy\"}\n </button>\n )}\n </div>\n <pre>\n <NodeViewContent as={\"code\" as \"div\"} className={`language-${language}`} />\n </pre>\n </NodeViewWrapper>\n );\n}\n","/**\n * Small, dependency-free HTML sanitizer for user-authored markup coming from the\n * source view / custom-HTML block / paste.\n *\n * Policy: `<script>` and inline event handlers (`on*`) are **always** removed;\n * `javascript:` URLs are neutralised. `<style>` blocks are removed unless\n * `allowStyleTags` is set. Everything else is kept — this is deliberately\n * permissive so authors can write real HTML/CSS, and matches the\n * \"inline style + class\" trust level.\n */\n\nexport interface SanitizeOptions {\n allowStyleTags?: boolean;\n}\n\nconst BLOCKED_TAGS = [\"script\", \"noscript\", \"template\", \"object\", \"embed\", \"base\", \"meta\", \"link\"];\nconst URL_ATTRS = [\"href\", \"src\", \"action\", \"formaction\", \"xlink:href\", \"data\"];\n\nexport function sanitizeHtml(input: string, opts: SanitizeOptions = {}): string {\n if (!input) return \"\";\n if (typeof window === \"undefined\" || typeof DOMParser === \"undefined\") {\n // SSR: fall back to a coarse regex strip of the dangerous bits.\n return input\n .replace(/<\\/?(script|iframe\\s+srcdoc)[^>]*>/gi, \"\")\n .replace(/\\son\\w+\\s*=\\s*(\".*?\"|'.*?'|[^\\s>]+)/gi, \"\")\n .replace(/(javascript|data):/gi, \"blocked:\");\n }\n\n const doc = new DOMParser().parseFromString(`<body>${input}</body>`, \"text/html\");\n const blocked = opts.allowStyleTags ? BLOCKED_TAGS : [...BLOCKED_TAGS, \"style\"];\n\n const walk = (node: Element) => {\n for (const child of Array.from(node.children)) {\n const tag = child.tagName.toLowerCase();\n if (blocked.includes(tag)) {\n child.remove();\n continue;\n }\n // strip event handlers + dangerous urls\n for (const attr of Array.from(child.attributes)) {\n const name = attr.name.toLowerCase();\n if (name.startsWith(\"on\")) {\n child.removeAttribute(attr.name);\n continue;\n }\n if (URL_ATTRS.includes(name)) {\n const v = attr.value.trim().toLowerCase();\n if (v.startsWith(\"javascript:\") || v.startsWith(\"vbscript:\") || v.startsWith(\"data:text/html\")) {\n child.removeAttribute(attr.name);\n }\n }\n if (name === \"style\" && /expression\\s*\\(|javascript:/i.test(attr.value)) {\n child.removeAttribute(\"style\");\n }\n }\n walk(child);\n }\n };\n\n walk(doc.body);\n return doc.body.innerHTML;\n}\n","import { Node, mergeAttributes } from \"@tiptap/core\";\nimport {\n NodeViewWrapper,\n ReactNodeViewRenderer,\n type NodeViewProps,\n} from \"@tiptap/react\";\nimport * as React from \"react\";\nimport { sanitizeHtml } from \"../sanitize\";\n\nexport interface CustomHtmlOptions {\n allowStyleTags: boolean;\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n customHtml: {\n setCustomHtml: (html?: string) => ReturnType;\n };\n }\n}\n\n/**\n * A raw HTML/CSS block. Renders sanitized markup; double-click (or the Edit\n * button) to edit the source in a textarea.\n */\nexport const CustomHtml = Node.create<CustomHtmlOptions>({\n name: \"customHtml\",\n group: \"block\",\n atom: true,\n draggable: true,\n selectable: true,\n\n addOptions() {\n return { allowStyleTags: false };\n },\n\n addAttributes() {\n return {\n html: {\n default: \"\",\n // stored on the doc node; never rendered as an attribute\n renderHTML: () => ({}),\n parseHTML: () => undefined,\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: \"div[data-osam-html]\",\n getAttrs: (el) => ({ html: (el as HTMLElement).innerHTML }),\n },\n ];\n },\n\n renderHTML({ HTMLAttributes, node }) {\n const clean = sanitizeHtml(node.attrs.html || \"\", {\n allowStyleTags: this.options.allowStyleTags,\n });\n // Return a real DOM node so `editor.getHTML()` emits the sanitized markup\n // directly (usable on a page as-is, and losslessly re-parsed via innerHTML).\n const dom = document.createElement(\"div\");\n for (const [k, v] of Object.entries(mergeAttributes(HTMLAttributes, { \"data-osam-html\": \"\" }))) {\n if (v != null) dom.setAttribute(k, String(v));\n }\n dom.innerHTML = clean;\n return dom;\n },\n\n addCommands() {\n return {\n setCustomHtml:\n (html = \"<div>\\n \\n</div>\") =>\n ({ commands }) =>\n commands.insertContent({ type: this.name, attrs: { html } }),\n };\n },\n\n addNodeView() {\n return ReactNodeViewRenderer(CustomHtmlView);\n },\n});\n\nfunction CustomHtmlView({ node, updateAttributes, editor, selected }: NodeViewProps) {\n const allowStyleTags = (editor.extensionManager.extensions.find((e) => e.name === \"customHtml\")\n ?.options as CustomHtmlOptions)?.allowStyleTags;\n const [editing, setEditing] = React.useState(!node.attrs.html);\n const [draft, setDraft] = React.useState<string>(node.attrs.html || \"\");\n\n const clean = React.useMemo(\n () => sanitizeHtml(node.attrs.html || \"\", { allowStyleTags }),\n [node.attrs.html, allowStyleTags],\n );\n\n return (\n <NodeViewWrapper className=\"osam-html\" data-selected={selected || undefined} contentEditable={false}>\n <div className=\"osam-html__bar\">\n <span>HTML</span>\n {editor.isEditable && (\n <button\n type=\"button\"\n onClick={() => {\n if (editing) {\n updateAttributes({ html: draft });\n setEditing(false);\n } else {\n setDraft(node.attrs.html || \"\");\n setEditing(true);\n }\n }}\n >\n {editing ? \"Done\" : \"Edit\"}\n </button>\n )}\n </div>\n\n {editing && editor.isEditable ? (\n <textarea\n className=\"osam-html__src\"\n value={draft}\n spellCheck={false}\n autoFocus\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => {\n updateAttributes({ html: draft });\n setEditing(false);\n }}\n rows={Math.min(20, Math.max(4, draft.split(\"\\n\").length + 1))}\n />\n ) : (\n <div className=\"osam-html__preview\" dangerouslySetInnerHTML={{ __html: clean }} />\n )}\n </NodeViewWrapper>\n );\n}\n","import { Extension } from \"@tiptap/core\";\n\nexport interface PreserveAttributesOptions {\n types: string[];\n style: boolean;\n classAttr: boolean;\n}\n\n/**\n * Keeps `style` / `class` / `id` attributes on block nodes so inline CSS written\n * in the source view (or pasted) survives a round-trip through the schema.\n * Scoped to text blocks by default — not images/embeds, which manage their own.\n */\nexport const PreserveAttributes = Extension.create<PreserveAttributesOptions>({\n name: \"preserveAttributes\",\n\n addOptions() {\n return {\n types: [\"paragraph\", \"heading\", \"blockquote\", \"listItem\", \"codeBlock\"],\n style: true,\n classAttr: true,\n };\n },\n\n addGlobalAttributes() {\n const attrs: Record<string, any> = {\n id: {\n default: null,\n parseHTML: (el: HTMLElement) => el.getAttribute(\"id\"),\n renderHTML: (a: Record<string, any>) => (a.id ? { id: a.id } : {}),\n },\n };\n if (this.options.style) {\n attrs.style = {\n default: null,\n parseHTML: (el: HTMLElement) => el.getAttribute(\"style\"),\n renderHTML: (a: Record<string, any>) => (a.style ? { style: a.style } : {}),\n };\n }\n if (this.options.classAttr) {\n attrs.class = {\n default: null,\n parseHTML: (el: HTMLElement) => el.getAttribute(\"class\"),\n renderHTML: (a: Record<string, any>) => (a.class ? { class: a.class } : {}),\n };\n }\n return [{ types: this.options.types, attributes: attrs }];\n },\n});\n","import type { AnyExtension } from \"@tiptap/core\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport { TextStyle, Color } from \"@tiptap/extension-text-style\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport { TaskList } from \"@tiptap/extension-task-list\";\nimport { TaskItem } from \"@tiptap/extension-task-item\";\nimport Placeholder from \"@tiptap/extension-placeholder\";\nimport { createLowlight, common } from \"lowlight\";\n\nimport type { ResolvedConfig } from \"../config\";\nimport { ResizableImage } from \"./ResizableImage\";\nimport { Embed } from \"./Embed\";\nimport { CodeBlock } from \"./CodeBlock\";\nimport { CustomHtml } from \"./CustomHtml\";\nimport { PreserveAttributes } from \"./PreserveAttributes\";\n\nexport function buildExtensions(config: ResolvedConfig): AnyExtension[] {\n const wantCodeBlock = config.codeBlock !== false;\n\n const starterOptions: Record<string, unknown> = {\n heading: config.headingLevels === false ? false : { levels: config.headingLevels },\n codeBlock: false, // replaced by CodeBlock (or removed) below\n link:\n config.link === false\n ? false\n : {\n openOnClick: false,\n autolink: config.link.autolink,\n protocols: config.link.protocols,\n HTMLAttributes: {\n ...(config.link.defaultRel ? { rel: config.link.defaultRel } : {}),\n },\n },\n };\n if (!config.blockquote) starterOptions.blockquote = false;\n if (!config.horizontalRule) starterOptions.horizontalRule = false;\n Object.assign(starterOptions, config.starterKit);\n\n const starter = StarterKit.configure(starterOptions) as AnyExtension;\n\n const list: AnyExtension[] = [\n starter,\n Placeholder.configure({\n placeholder: config.placeholder,\n showOnlyWhenEditable: true,\n }),\n ];\n\n if (config.color) {\n list.push(TextStyle, Color);\n } else if (config.highlight) {\n list.push(TextStyle);\n }\n\n if (config.highlight) {\n list.push(Highlight.configure({ multicolor: config.highlight.multicolor }));\n }\n\n if (config.textAlign) {\n list.push(\n TextAlign.configure({\n types: config.textAlign.types,\n alignments: config.textAlign.alignments,\n defaultAlignment: config.textAlign.defaultAlignment,\n }),\n );\n }\n\n if (config.taskList) {\n list.push(TaskList, TaskItem.configure({ nested: true }));\n }\n\n if (wantCodeBlock) {\n const lowlight = createLowlight(common);\n list.push(\n CodeBlock.configure({\n lowlight,\n defaultLanguage:\n config.codeBlock && typeof config.codeBlock === \"object\"\n ? config.codeBlock.defaultLanguage\n : undefined,\n copyButton: config.codeBlock ? config.codeBlock.copyButton : true,\n }),\n );\n }\n\n if (config.image) {\n list.push(\n ResizableImage.configure({\n resizable: config.image.resizable,\n caption: config.image.caption,\n align: config.image.align,\n link: config.image.link,\n HTMLAttributes: { class: \"osam-img\" },\n }),\n );\n }\n\n if (config.embed) {\n list.push(Embed.configure({ defaultRatio: config.embed.defaultRatio }));\n }\n\n if (config.html) {\n if (config.html.styleAttributes || config.html.classAttributes) {\n list.push(\n PreserveAttributes.configure({\n style: config.html.styleAttributes,\n classAttr: config.html.classAttributes,\n types: [\"paragraph\", \"heading\", \"blockquote\", \"listItem\", \"codeBlock\"],\n }),\n );\n }\n if (config.html.customBlock) {\n list.push(CustomHtml.configure({ allowStyleTags: config.html.allowStyleTags }));\n }\n }\n\n return list;\n}\n\nexport function applyUserExtensions(\n base: AnyExtension[],\n extra: AnyExtension[] | ((base: AnyExtension[]) => AnyExtension[]) | undefined,\n): AnyExtension[] {\n if (!extra) return base;\n if (typeof extra === \"function\") return extra(base);\n return [...base, ...extra];\n}\n","import * as React from \"react\";\nimport { useEditor, type UseEditorOptions } from \"@tiptap/react\";\nimport type { Editor, JSONContent } from \"@tiptap/core\";\nimport type { OsamEditorConfig } from \"./types\";\nimport { resolveConfig, type ResolvedConfig } from \"./config\";\nimport { buildExtensions, applyUserExtensions } from \"./extensions/buildExtensions\";\n\nexport interface UseOsamEditorOptions extends OsamEditorConfig {\n /** Initial content: an HTML string or TipTap JSON. */\n content?: string | JSONContent | null;\n editable?: boolean;\n autofocus?: UseEditorOptions[\"autofocus\"];\n /** Fired on every change with the current HTML + JSON. */\n onUpdate?: (payload: { html: string; json: JSONContent; editor: Editor }) => void;\n onCreate?: (editor: Editor) => void;\n}\n\nexport interface OsamEditorController {\n editor: Editor | null;\n config: ResolvedConfig;\n}\n\n/**\n * Lower-level hook: build a TipTap editor from an `OsamEditorConfig`. Use this\n * when you want to render the toolbar and content area yourself. Most people\n * should use `<OsamEditor />`.\n */\nexport function useOsamEditor(options: UseOsamEditorOptions = {}): OsamEditorController {\n const {\n content = \"\",\n editable = true,\n autofocus = false,\n onUpdate,\n onCreate,\n extensions: userExtensions,\n ...rest\n } = options;\n\n // Config objects are usually inline literals; key on a serialization so the\n // editor is only rebuilt when the configuration actually changes.\n const cfgKey = stableKey(rest);\n const config = React.useMemo(() => resolveConfig(rest), [cfgKey]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const extensions = React.useMemo(\n () => applyUserExtensions(buildExtensions(config), userExtensions),\n [config, userExtensions],\n );\n\n const cbRef = React.useRef({ onUpdate, onCreate });\n cbRef.current = { onUpdate, onCreate };\n\n const editor = useEditor(\n {\n extensions,\n content: content ?? \"\",\n editable,\n autofocus,\n immediatelyRender: false,\n editorProps: {\n attributes: {\n class: \"osam-content\",\n dir: config.dir,\n spellcheck: \"true\",\n },\n },\n onCreate: ({ editor }) => cbRef.current.onCreate?.(editor),\n onUpdate: ({ editor }) => {\n cbRef.current.onUpdate?.({ html: editor.getHTML(), json: editor.getJSON(), editor });\n },\n },\n [extensions],\n );\n\n React.useEffect(() => {\n editor?.setEditable(editable);\n }, [editor, editable]);\n\n return { editor, config };\n}\n\n/** Serialize config for memo identity, dropping function values (handlers, extensions). */\nfunction stableKey(cfg: OsamEditorConfig): string {\n try {\n return JSON.stringify(cfg, (_k, v) => {\n if (typeof v === \"function\") return \"[fn]\";\n return v;\n });\n } catch {\n return Math.random().toString();\n }\n}\n","import * as React from \"react\";\n\nconst S = (props: React.SVGProps<SVGSVGElement>) => (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n {...props}\n />\n);\n\nexport type IconName =\n | \"bold\" | \"italic\" | \"underline\" | \"strike\" | \"code\" | \"color\" | \"highlight\" | \"clear\"\n | \"align-left\" | \"align-center\" | \"align-right\" | \"align-justify\" | \"return\"\n | \"list-bullet\" | \"list-ordered\" | \"list-check\" | \"indent\" | \"outdent\"\n | \"link\" | \"unlink\" | \"quote\" | \"code-block\" | \"hr\"\n | \"image\" | \"image-url\" | \"youtube\" | \"instagram\" | \"video\" | \"embed\" | \"pdf\"\n | \"undo\" | \"redo\" | \"chevron\"\n | \"library\" | \"maximize\" | \"minimize\" | \"source\" | \"html-block\";\n\nexport function Icon({ name }: { name: IconName }) {\n switch (name) {\n case \"bold\":\n return <S><path d=\"M6 4h8a4 4 0 0 1 0 8H6zM6 12h9a4 4 0 0 1 0 8H6z\" /></S>;\n case \"italic\":\n return <S><line x1=\"19\" y1=\"4\" x2=\"10\" y2=\"4\" /><line x1=\"14\" y1=\"20\" x2=\"5\" y2=\"20\" /><line x1=\"15\" y1=\"4\" x2=\"9\" y2=\"20\" /></S>;\n case \"underline\":\n return <S><path d=\"M6 3v7a6 6 0 0 0 12 0V3\" /><line x1=\"4\" y1=\"21\" x2=\"20\" y2=\"21\" /></S>;\n case \"strike\":\n return <S><path d=\"M16 4H9a3 3 0 0 0-2.83 4\" /><path d=\"M14 12a4 4 0 0 1 0 8H6\" /><line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" /></S>;\n case \"code\":\n return <S><polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" /></S>;\n case \"color\":\n return <S><path d=\"M4 20h16\" /><path d=\"M7 16 12 4l5 12\" /><path d=\"M9 12h6\" /></S>;\n case \"highlight\":\n return <S><path d=\"m9 11-6 6v3h3l6-6\" /><path d=\"m17 3 4 4-9 9-4-4z\" /></S>;\n case \"clear\":\n return <S><path d=\"M4 7h16\" /><path d=\"m6 7 1 13h10l1-13\" /><path d=\"M9 7V4h6v3\" /><line x1=\"14\" y1=\"4\" x2=\"20\" y2=\"20\" /></S>;\n case \"align-left\":\n return <S><line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"4\" y1=\"12\" x2=\"14\" y2=\"12\" /><line x1=\"4\" y1=\"18\" x2=\"18\" y2=\"18\" /></S>;\n case \"align-center\":\n return <S><line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"7\" y1=\"12\" x2=\"17\" y2=\"12\" /><line x1=\"5\" y1=\"18\" x2=\"19\" y2=\"18\" /></S>;\n case \"align-right\":\n return <S><line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"6\" y1=\"18\" x2=\"20\" y2=\"18\" /></S>;\n case \"align-justify\":\n return <S><line x1=\"4\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"4\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"4\" y1=\"18\" x2=\"20\" y2=\"18\" /></S>;\n case \"return\":\n return <S><polyline points=\"9 10 4 15 9 20\" /><path d=\"M20 4v7a4 4 0 0 1-4 4H4\" /></S>;\n case \"list-bullet\":\n return <S><line x1=\"9\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"9\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"9\" y1=\"18\" x2=\"20\" y2=\"18\" /><circle cx=\"4\" cy=\"6\" r=\"1\" /><circle cx=\"4\" cy=\"12\" r=\"1\" /><circle cx=\"4\" cy=\"18\" r=\"1\" /></S>;\n case \"list-ordered\":\n return <S><line x1=\"10\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"10\" y1=\"12\" x2=\"21\" y2=\"12\" /><line x1=\"10\" y1=\"18\" x2=\"21\" y2=\"18\" /><path d=\"M4 6h1v4\" /><path d=\"M4 10h2\" /><path d=\"M6 18H4c0-1 2-2 2-3s-1-1.5-2-1\" /></S>;\n case \"list-check\":\n return <S><path d=\"m3 7 2 2 3-3\" /><path d=\"m3 17 2 2 3-3\" /><line x1=\"12\" y1=\"6\" x2=\"21\" y2=\"6\" /><line x1=\"12\" y1=\"18\" x2=\"21\" y2=\"18\" /></S>;\n case \"indent\":\n return <S><polyline points=\"4 8 8 12 4 16\" /><line x1=\"12\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"12\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"12\" y1=\"18\" x2=\"20\" y2=\"18\" /></S>;\n case \"outdent\":\n return <S><polyline points=\"8 8 4 12 8 16\" /><line x1=\"12\" y1=\"6\" x2=\"20\" y2=\"6\" /><line x1=\"12\" y1=\"12\" x2=\"20\" y2=\"12\" /><line x1=\"12\" y1=\"18\" x2=\"20\" y2=\"18\" /></S>;\n case \"link\":\n return <S><path d=\"M10 13a5 5 0 0 0 7 0l3-3a5 5 0 0 0-7-7l-1 1\" /><path d=\"M14 11a5 5 0 0 0-7 0l-3 3a5 5 0 0 0 7 7l1-1\" /></S>;\n case \"unlink\":\n return <S><path d=\"M18.84 12.25 20 11a5 5 0 0 0-7-7l-1.5 1.34\" /><path d=\"M5.17 11.75 4 13a5 5 0 0 0 7 7l1.5-1.34\" /><line x1=\"2\" y1=\"2\" x2=\"22\" y2=\"22\" /></S>;\n case \"quote\":\n return <S><path d=\"M6 17h3l2-4V7H5v6h3zM14 17h3l2-4V7h-6v6h3z\" /></S>;\n case \"code-block\":\n return <S><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><polyline points=\"9 9 7 12 9 15\" /><polyline points=\"15 9 17 12 15 15\" /></S>;\n case \"hr\":\n return <S><line x1=\"3\" y1=\"12\" x2=\"21\" y2=\"12\" /></S>;\n case \"image\":\n return <S><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle cx=\"9\" cy=\"9\" r=\"2\" /><path d=\"m21 15-5-5L5 21\" /></S>;\n case \"image-url\":\n return <S><rect x=\"3\" y=\"3\" width=\"18\" height=\"14\" rx=\"2\" /><circle cx=\"8\" cy=\"8\" r=\"1.5\" /><path d=\"m21 13-5-4-6 6\" /><path d=\"M8 21h8\" /></S>;\n case \"youtube\":\n return <S><rect x=\"2\" y=\"5\" width=\"20\" height=\"14\" rx=\"4\" /><polygon points=\"10 9 16 12 10 15\" /></S>;\n case \"instagram\":\n return <S><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\" /><circle cx=\"12\" cy=\"12\" r=\"4\" /><circle cx=\"17.5\" cy=\"6.5\" r=\"1\" /></S>;\n case \"video\":\n return <S><rect x=\"2\" y=\"4\" width=\"14\" height=\"16\" rx=\"2\" /><path d=\"m22 8-6 4 6 4z\" /></S>;\n case \"embed\":\n return <S><polyline points=\"8 6 3 12 8 18\" /><polyline points=\"16 6 21 12 16 18\" /><line x1=\"13\" y1=\"4\" x2=\"11\" y2=\"20\" /></S>;\n case \"pdf\":\n return <S><path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" /><polyline points=\"14 2 14 8 20 8\" /><path d=\"M9 13h1.5a1.5 1.5 0 0 1 0 3H9zM9 13v6\" /></S>;\n case \"undo\":\n return <S><path d=\"M9 14 4 9l5-5\" /><path d=\"M4 9h11a5 5 0 0 1 0 10h-3\" /></S>;\n case \"redo\":\n return <S><path d=\"m15 14 5-5-5-5\" /><path d=\"M20 9H9a5 5 0 0 0 0 10h3\" /></S>;\n case \"chevron\":\n return <S width=\"12\" height=\"12\"><polyline points=\"6 9 12 15 18 9\" /></S>;\n case \"library\":\n return <S><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" /><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\" /><path d=\"m21 15-4.5-4.5L9 18l-3-3-3 3\" /></S>;\n case \"maximize\":\n return <S><path d=\"M8 3H5a2 2 0 0 0-2 2v3\" /><path d=\"M16 3h3a2 2 0 0 1 2 2v3\" /><path d=\"M21 16v3a2 2 0 0 1-2 2h-3\" /><path d=\"M8 21H5a2 2 0 0 1-2-2v-3\" /></S>;\n case \"minimize\":\n return <S><path d=\"M8 3v3a2 2 0 0 1-2 2H3\" /><path d=\"M21 8h-3a2 2 0 0 1-2-2V3\" /><path d=\"M3 16h3a2 2 0 0 1 2 2v3\" /><path d=\"M16 21v-3a2 2 0 0 1 2-2h3\" /></S>;\n case \"source\":\n return <S><polyline points=\"16 18 22 12 16 6\" /><polyline points=\"8 6 2 12 8 18\" /><line x1=\"12\" y1=\"4\" x2=\"10\" y2=\"20\" /></S>;\n case \"html-block\":\n return <S><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /><path d=\"M8 9v6\" /><path d=\"M8 12h3\" /><path d=\"M11 9v6\" /><path d=\"M15 9v6l2-2 2 2V9\" /></S>;\n default:\n return null;\n }\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\n\n/**\n * Re-render the subscribing component whenever the editor state changes, so\n * toolbar active-states and enabled-states stay in sync with the selection.\n */\nexport function useEditorSync(editor: Editor | null): void {\n const [, force] = React.useReducer((n: number) => n + 1, 0);\n\n React.useEffect(() => {\n if (!editor) return;\n const update = () => force();\n editor.on(\"transaction\", update);\n editor.on(\"selectionUpdate\", update);\n editor.on(\"focus\", update);\n editor.on(\"blur\", update);\n return () => {\n editor.off(\"transaction\", update);\n editor.off(\"selectionUpdate\", update);\n editor.off(\"focus\", update);\n editor.off(\"blur\", update);\n };\n }, [editor]);\n}\n\nexport function useOnClickOutside(\n ref: React.RefObject<HTMLElement | null>,\n handler: () => void,\n active = true,\n): void {\n React.useEffect(() => {\n if (!active) return;\n const listener = (e: MouseEvent | TouchEvent) => {\n const el = ref.current;\n if (!el || el.contains(e.target as Node)) return;\n handler();\n };\n document.addEventListener(\"mousedown\", listener);\n document.addEventListener(\"touchstart\", listener);\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && handler();\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(\"mousedown\", listener);\n document.removeEventListener(\"touchstart\", listener);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [ref, handler, active]);\n}\n","import * as React from \"react\";\nimport { useOnClickOutside } from \"./hooks\";\n\ninterface PopoverProps {\n button: (props: { open: boolean; toggle: () => void }) => React.ReactNode;\n children: (props: { close: () => void }) => React.ReactNode;\n align?: \"start\" | \"end\";\n}\n\nexport function Popover({ button, children, align = \"start\" }: PopoverProps) {\n const [open, setOpen] = React.useState(false);\n const ref = React.useRef<HTMLDivElement>(null);\n const close = React.useCallback(() => setOpen(false), []);\n useOnClickOutside(ref, close, open);\n\n return (\n <div className=\"osam-popover\" ref={ref}>\n {button({ open, toggle: () => setOpen((o) => !o) })}\n {open && (\n <div className=\"osam-popover__panel\" data-align={align} role=\"dialog\">\n {children({ close })}\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ResolvedConfig } from \"../config\";\nimport { Popover } from \"./Popover\";\nimport { Icon } from \"./icons\";\n\ninterface Props {\n editor: Editor;\n config: ResolvedConfig;\n}\n\nexport function HeadingSelect({ editor, config }: Props) {\n const levels = config.headingLevels === false ? [] : config.headingLevels;\n const L = config.labels;\n\n const current = (() => {\n for (const l of levels) if (editor.isActive(\"heading\", { level: l })) return `H${l}`;\n if (editor.isActive(\"paragraph\")) return L.paragraph;\n return L.headings;\n })();\n\n return (\n <Popover\n button={({ open, toggle }) => (\n <button\n type=\"button\"\n className=\"osam-btn osam-btn--select\"\n data-open={open || undefined}\n onClick={toggle}\n title={L.headings}\n >\n <span>{current}</span>\n <Icon name=\"chevron\" />\n </button>\n )}\n >\n {({ close }) => (\n <div className=\"osam-menu\">\n <button\n type=\"button\"\n data-active={editor.isActive(\"paragraph\") || undefined}\n onClick={() => {\n editor.chain().focus().setParagraph().run();\n close();\n }}\n >\n {L.paragraph}\n </button>\n {levels.map((l) => (\n <button\n key={l}\n type=\"button\"\n className={`osam-menu__h${l}`}\n data-active={editor.isActive(\"heading\", { level: l }) || undefined}\n onClick={() => {\n editor.chain().focus().toggleHeading({ level: l }).run();\n close();\n }}\n >\n {L[`h${l}`] ?? `Heading ${l}`}\n </button>\n ))}\n </div>\n )}\n </Popover>\n );\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ResolvedConfig } from \"../config\";\nimport { Popover } from \"./Popover\";\nimport { Icon } from \"./icons\";\n\ninterface Props {\n editor: Editor;\n config: ResolvedConfig;\n variant: \"color\" | \"highlight\";\n}\n\nexport function ColorButton({ editor, config, variant }: Props) {\n const settings = variant === \"color\" ? config.color : config.highlight;\n if (!settings) return null;\n const L = config.labels;\n const label = variant === \"color\" ? L.color : L.highlight;\n const active =\n variant === \"color\"\n ? editor.getAttributes(\"textStyle\").color\n : editor.getAttributes(\"highlight\").color;\n\n return (\n <Popover\n button={({ open, toggle }) => (\n <button\n type=\"button\"\n className=\"osam-btn osam-btn--color\"\n data-open={open || undefined}\n title={label}\n aria-label={label}\n onClick={toggle}\n >\n <Icon name={variant === \"color\" ? \"color\" : \"highlight\"} />\n <span className=\"osam-btn__swatch\" style={{ background: active || \"transparent\" }} />\n </button>\n )}\n >\n {({ close }) => (\n <div className=\"osam-swatches\">\n {settings.colors.map((c) => (\n <button\n key={c}\n type=\"button\"\n className=\"osam-swatch\"\n style={{ background: c }}\n title={c}\n data-active={active === c || undefined}\n onClick={() => {\n if (variant === \"color\") editor.chain().focus().setColor(c).run();\n else editor.chain().focus().toggleHighlight({ color: c }).run();\n close();\n }}\n />\n ))}\n <label className=\"osam-swatch osam-swatch--custom\" title=\"Custom\">\n <input\n type=\"color\"\n onChange={(e) => {\n const c = e.target.value;\n if (variant === \"color\") editor.chain().focus().setColor(c).run();\n else editor.chain().focus().setHighlight({ color: c }).run();\n }}\n />\n +\n </label>\n <button\n type=\"button\"\n className=\"osam-btn-text osam-swatches__clear\"\n onClick={() => {\n if (variant === \"color\") editor.chain().focus().unsetColor().run();\n else editor.chain().focus().unsetHighlight().run();\n close();\n }}\n >\n {L.clearFormatting}\n </button>\n </div>\n )}\n </Popover>\n );\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ResolvedConfig } from \"../config\";\nimport { Popover } from \"./Popover\";\nimport { Icon } from \"./icons\";\n\ninterface Props {\n editor: Editor;\n config: ResolvedConfig;\n}\n\nfunction buildRel(base: string | null, nofollow: boolean, sponsored: boolean): string | null {\n const parts = new Set((base ?? \"\").split(/\\s+/).filter(Boolean));\n parts.delete(\"nofollow\");\n parts.delete(\"sponsored\");\n if (nofollow) parts.add(\"nofollow\");\n if (sponsored) parts.add(\"sponsored\");\n const out = [...parts].join(\" \");\n return out || null;\n}\n\nexport function LinkButton({ editor, config }: Props) {\n if (config.link === false) return null;\n const link = config.link;\n const L = config.labels;\n\n return (\n <Popover\n button={({ open, toggle }) => (\n <button\n type=\"button\"\n className=\"osam-btn\"\n data-active={editor.isActive(\"link\") || undefined}\n data-open={open || undefined}\n title={L.link}\n aria-label={L.link}\n onClick={toggle}\n >\n <Icon name=\"link\" />\n </button>\n )}\n >\n {({ close }) => <LinkForm editor={editor} config={config} link={link} onDone={close} />}\n </Popover>\n );\n}\n\nfunction LinkForm({\n editor,\n config,\n link,\n onDone,\n}: Props & { link: Exclude<ResolvedConfig[\"link\"], false>; onDone: () => void }) {\n const L = config.labels;\n const prev = editor.getAttributes(\"link\");\n const selectionEmpty = editor.state.selection.empty && !editor.isActive(\"link\");\n\n const relInit: string | null = prev.rel ?? link.defaultRel;\n const [href, setHref] = React.useState<string>(prev.href ?? \"\");\n const [text, setText] = React.useState<string>(\"\");\n const [newTab, setNewTab] = React.useState<boolean>(\n prev.target ? prev.target === \"_blank\" : false,\n );\n const [nofollow, setNofollow] = React.useState<boolean>(/(^|\\s)nofollow(\\s|$)/.test(relInit ?? \"\"));\n const [sponsored, setSponsored] = React.useState<boolean>(/(^|\\s)sponsored(\\s|$)/.test(relInit ?? \"\"));\n\n function apply(e: React.FormEvent) {\n e.preventDefault();\n const url = href.trim();\n if (!url) return;\n\n const rel = link.allowRelAttributes\n ? buildRel(link.defaultRel, nofollow, sponsored)\n : link.defaultRel;\n const attrs: Record<string, unknown> = { href: url };\n if (link.allowTargetBlank) attrs.target = newTab ? \"_blank\" : null;\n if (rel !== undefined) attrs.rel = rel;\n\n let chain = editor.chain().focus();\n if (selectionEmpty) {\n const label = text.trim() || url;\n chain = chain.insertContent({\n type: \"text\",\n text: label,\n marks: [{ type: \"link\", attrs }],\n });\n } else {\n chain = chain.extendMarkRange(\"link\").setLink(attrs as any);\n }\n chain.run();\n onDone();\n }\n\n function remove() {\n editor.chain().focus().extendMarkRange(\"link\").unsetLink().run();\n onDone();\n }\n\n return (\n <form className=\"osam-linkform\" onSubmit={apply}>\n <label className=\"osam-field\">\n <span>{L[\"dialog.url\"]}</span>\n <input\n type=\"url\"\n autoFocus\n value={href}\n placeholder=\"https://…\"\n onChange={(e) => setHref(e.target.value)}\n />\n </label>\n\n {selectionEmpty && (\n <label className=\"osam-field\">\n <span>{L[\"dialog.linkText\"]}</span>\n <input value={text} placeholder={href} onChange={(e) => setText(e.target.value)} />\n </label>\n )}\n\n <div className=\"osam-checks\">\n {link.allowTargetBlank && (\n <label>\n <input type=\"checkbox\" checked={newTab} onChange={(e) => setNewTab(e.target.checked)} />\n {L[\"dialog.openInNewTab\"]}\n </label>\n )}\n {link.allowRelAttributes && (\n <>\n <label>\n <input\n type=\"checkbox\"\n checked={nofollow}\n onChange={(e) => setNofollow(e.target.checked)}\n />\n rel=&quot;{L[\"dialog.nofollow\"]}&quot;\n </label>\n <label>\n <input\n type=\"checkbox\"\n checked={sponsored}\n onChange={(e) => setSponsored(e.target.checked)}\n />\n rel=&quot;{L[\"dialog.sponsored\"]}&quot;\n </label>\n </>\n )}\n </div>\n\n <div className=\"osam-media__actions\">\n {editor.isActive(\"link\") && (\n <button type=\"button\" className=\"osam-btn-text\" onClick={remove}>\n {L.unlink}\n </button>\n )}\n <button type=\"button\" className=\"osam-btn-text\" onClick={onDone}>\n {L[\"dialog.cancel\"]}\n </button>\n <button type=\"submit\" className=\"osam-btn-primary\">\n {L[\"dialog.insert\"]}\n </button>\n </div>\n </form>\n );\n}\n","/**\n * Storage layer types.\n *\n * `osameditor` never talks to a storage backend directly. It only ever calls an\n * `UploadHandler`. Two ready-made handlers ship in the box:\n *\n * - `createOsamStorageUploader()` — uploads through the `osamstorage` SDK\n * - `createVpsUploader()` — POSTs the file to your own server / VPS\n *\n * You can also pass any function that matches `UploadHandler` to use a completely\n * custom backend (S3 presigned URL, Cloudinary, UploadThing, etc.).\n */\n\n/** The kind of asset. `osamstorage` only accepts these three. */\nexport type UploadKind = \"image\" | \"video\" | \"pdf\";\n\nexport interface UploadContext {\n /** 0 - 100. Called repeatedly while the file transfers. */\n onProgress?: (percent: number) => void;\n /** Abort the upload (wired to the editor / dialog lifecycle). */\n signal?: AbortSignal;\n /** Detected kind, based on the file's MIME type. */\n kind: UploadKind;\n}\n\nexport interface UploadResult {\n /** Public URL of the stored asset. Required. */\n url: string;\n /** Defaults to the detected kind. */\n kind?: UploadKind;\n /** Poster / thumbnail image URL (useful for video). */\n poster?: string;\n /** Natural width in px, if known. */\n width?: number;\n /** Natural height in px, if known. */\n height?: number;\n /** Original file name. */\n name?: string;\n /** Anything else your backend returned — kept on the node as `data-*` is not, but available to callbacks. */\n meta?: Record<string, unknown>;\n}\n\n/**\n * The single function the editor uses to persist a file.\n * Throw (or reject) to signal failure — the editor surfaces it to the user.\n */\nexport type UploadHandler = (\n file: File,\n ctx: UploadContext,\n) => Promise<UploadResult>;\n\nexport function detectKind(file: File): UploadKind {\n if (file.type.startsWith(\"image/\")) return \"image\";\n if (file.type.startsWith(\"video/\")) return \"video\";\n if (file.type === \"application/pdf\") return \"pdf\";\n // Fall back on the extension for browsers that don't set a type.\n const ext = file.name.split(\".\").pop()?.toLowerCase();\n if (ext && [\"png\", \"jpg\", \"jpeg\", \"gif\", \"webp\", \"avif\", \"svg\", \"bmp\"].includes(ext)) return \"image\";\n if (ext && [\"mp4\", \"webm\", \"mov\", \"m4v\", \"mkv\", \"avi\"].includes(ext)) return \"video\";\n if (ext === \"pdf\") return \"pdf\";\n throw new Error(\n `osameditor: unsupported file type \"${file.type || file.name}\". Only images, video and PDF are allowed.`,\n );\n}\n","import * as React from \"react\";\nimport type { ResolvedConfig } from \"../config\";\nimport type { UploadHandler, UploadResult } from \"../storage/types\";\nimport { detectKind } from \"../storage/types\";\n\ninterface UploadState {\n busy: boolean;\n progress: number;\n error: string | null;\n}\n\nexport function useUpload(handler: UploadHandler | undefined, config: ResolvedConfig) {\n const [state, setState] = React.useState<UploadState>({ busy: false, progress: 0, error: null });\n const abortRef = React.useRef<AbortController | null>(null);\n\n const reset = React.useCallback(() => setState({ busy: false, progress: 0, error: null }), []);\n\n const cancel = React.useCallback(() => {\n abortRef.current?.abort();\n abortRef.current = null;\n reset();\n }, [reset]);\n\n const upload = React.useCallback(\n async (file: File): Promise<UploadResult | null> => {\n if (!handler) {\n setState((s) => ({ ...s, error: \"No upload handler configured.\" }));\n return null;\n }\n let kind;\n try {\n kind = detectKind(file);\n } catch (e) {\n setState({ busy: false, progress: 0, error: (e as Error).message });\n return null;\n }\n\n const max =\n (kind === \"image\" && config.image ? config.image.maxSize : undefined) ??\n config.upload.maxSize;\n if (max && file.size > max) {\n setState({\n busy: false,\n progress: 0,\n error: `${config.labels[\"error.tooLarge\"]} (${(file.size / 1e6).toFixed(1)} MB > ${(max / 1e6).toFixed(1)} MB)`,\n });\n return null;\n }\n\n const controller = new AbortController();\n abortRef.current = controller;\n setState({ busy: true, progress: 0, error: null });\n\n try {\n const result = await handler(file, {\n kind,\n signal: controller.signal,\n onProgress: (p) => setState((s) => ({ ...s, progress: p })),\n });\n setState({ busy: false, progress: 100, error: null });\n abortRef.current = null;\n return { ...result, kind: result.kind ?? kind };\n } catch (e: any) {\n if (e?.name === \"AbortError\") {\n reset();\n return null;\n }\n setState({\n busy: false,\n progress: 0,\n error: e?.message || config.labels[\"error.uploadFailed\"],\n });\n abortRef.current = null;\n return null;\n }\n },\n [handler, config, reset],\n );\n\n return { ...state, upload, cancel, reset };\n}\n","export type EmbedProvider =\n | \"youtube\"\n | \"vimeo\"\n | \"instagram\"\n | \"twitter\"\n | \"video\"\n | \"pdf\"\n | \"iframe\";\n\nexport interface ResolvedEmbed {\n provider: EmbedProvider;\n /** URL to load in the iframe / <video> / <object>. */\n src: string;\n /** The URL the user pasted. */\n originalUrl: string;\n}\n\nconst VIDEO_FILE = /\\.(mp4|webm|ogg|ogv|mov|m4v|m3u8)(\\?.*)?$/i;\n\nexport function hostOf(url: string): string {\n try {\n return new URL(url).hostname.replace(/^www\\./, \"\");\n } catch {\n return \"\";\n }\n}\n\nexport function isHostAllowed(url: string, allowed: string[] | \"*\"): boolean {\n if (allowed === \"*\") return true;\n const host = hostOf(url);\n if (!host) return false;\n return allowed.some((h) => host === h || host.endsWith(`.${h}`));\n}\n\nexport function youtubeId(url: string): string | null {\n try {\n const u = new URL(url);\n if (u.hostname.includes(\"youtu.be\")) return u.pathname.slice(1) || null;\n if (u.pathname.startsWith(\"/shorts/\")) return u.pathname.split(\"/\")[2] || null;\n if (u.pathname.startsWith(\"/embed/\")) return u.pathname.split(\"/\")[2] || null;\n return u.searchParams.get(\"v\");\n } catch {\n return null;\n }\n}\n\nexport function vimeoId(url: string): string | null {\n const m = url.match(/vimeo\\.com\\/(?:video\\/)?(\\d+)/);\n return m ? m[1] : null;\n}\n\nexport function instagramEmbedUrl(url: string): string | null {\n const m = url.match(/instagram\\.com\\/(p|reel|tv)\\/([A-Za-z0-9_-]+)/);\n if (!m) return null;\n return `https://www.instagram.com/${m[1]}/${m[2]}/embed`;\n}\n\n/**\n * Turn a pasted URL into something embeddable. Returns `null` if we can't.\n */\nexport function resolveEmbed(\n raw: string,\n opts: { allowedHosts: string[] | \"*\"; treatAsPdf?: boolean; treatAsVideo?: boolean },\n): ResolvedEmbed | null {\n const url = raw.trim();\n if (!url) return null;\n\n if (opts.treatAsPdf || /\\.pdf(\\?.*)?$/i.test(url)) {\n return { provider: \"pdf\", src: url, originalUrl: url };\n }\n\n const yt = youtubeId(url);\n if (yt) {\n return {\n provider: \"youtube\",\n src: `https://www.youtube-nocookie.com/embed/${yt}`,\n originalUrl: url,\n };\n }\n\n const vim = vimeoId(url);\n if (vim) {\n return { provider: \"vimeo\", src: `https://player.vimeo.com/video/${vim}`, originalUrl: url };\n }\n\n const insta = instagramEmbedUrl(url);\n if (insta) return { provider: \"instagram\", src: insta, originalUrl: url };\n\n if (/(twitter\\.com|x\\.com)\\/\\w+\\/status\\/\\d+/.test(url)) {\n return { provider: \"twitter\", src: url, originalUrl: url };\n }\n\n if (opts.treatAsVideo || VIDEO_FILE.test(url)) {\n return { provider: \"video\", src: url, originalUrl: url };\n }\n\n // Generic iframe — only if the host is on the allow-list.\n if (isHostAllowed(url, opts.allowedHosts)) {\n return { provider: \"iframe\", src: url, originalUrl: url };\n }\n\n return null;\n}\n","import type { MediaLibraryConfig, MediaLibraryItem } from \"./types\";\n\nasync function resolveHeaders(\n h: MediaLibraryConfig[\"headers\"],\n): Promise<Record<string, string>> {\n if (!h) return {};\n return typeof h === \"function\" ? await h() : h;\n}\n\nfunction normalize(list: Array<string | MediaLibraryItem>): MediaLibraryItem[] {\n return list\n .map((it) => (typeof it === \"string\" ? { url: it } : it))\n .filter((it) => it && typeof it.url === \"string\");\n}\n\nconst DEFAULT_RESOLVE = (res: any): Array<string | MediaLibraryItem> => {\n if (Array.isArray(res)) return res;\n return res?.items ?? res?.data ?? res?.images ?? res?.urls ?? res?.results ?? [];\n};\n\n/** GET the user's image library through their own API. */\nexport async function loadMediaLibrary(cfg: MediaLibraryConfig): Promise<MediaLibraryItem[]> {\n if (typeof cfg.list === \"function\") {\n return normalize(await cfg.list());\n }\n const res = await fetch(cfg.list, {\n headers: await resolveHeaders(cfg.headers),\n credentials: cfg.credentials ?? \"same-origin\",\n });\n if (!res.ok) throw new Error(`osameditor: media library GET failed (${res.status})`);\n const json = await res.json();\n return normalize((cfg.resolveList ?? DEFAULT_RESOLVE)(json));\n}\n\n/** POST a freshly-uploaded image URL into the user's library. Best-effort. */\nexport async function saveToMediaLibrary(\n cfg: MediaLibraryConfig,\n url: string,\n file?: File,\n): Promise<void> {\n if (!cfg.save) return;\n try {\n if (typeof cfg.save === \"function\") {\n await cfg.save(url, file);\n return;\n }\n await fetch(cfg.save, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", ...(await resolveHeaders(cfg.headers)) },\n credentials: cfg.credentials ?? \"same-origin\",\n body: JSON.stringify({ url, name: file?.name }),\n });\n } catch (e) {\n // Don't fail the insert just because the library didn't record it.\n console.warn(\"osameditor: could not save to media library\", e);\n }\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ResolvedConfig } from \"../config\";\nimport { Popover } from \"./Popover\";\nimport { Icon, type IconName } from \"./icons\";\nimport { useUpload } from \"./useUpload\";\nimport { resolveEmbed } from \"../extensions/embed-utils\";\nimport type { UploadHandler } from \"../storage/types\";\nimport type { MediaLibraryItem } from \"../types\";\nimport { loadMediaLibrary, saveToMediaLibrary } from \"../mediaLibrary\";\n\nexport type MediaKind =\n | \"image\"\n | \"imageUrl\"\n | \"mediaLibrary\"\n | \"youtube\"\n | \"instagram\"\n | \"video\"\n | \"embed\"\n | \"pdf\";\n\nconst META: Record<MediaKind, { icon: IconName; labelKey: string }> = {\n image: { icon: \"image\", labelKey: \"image\" },\n imageUrl: { icon: \"image-url\", labelKey: \"imageUrl\" },\n mediaLibrary: { icon: \"library\", labelKey: \"mediaLibrary\" },\n youtube: { icon: \"youtube\", labelKey: \"youtube\" },\n instagram: { icon: \"instagram\", labelKey: \"instagram\" },\n video: { icon: \"video\", labelKey: \"video\" },\n embed: { icon: \"embed\", labelKey: \"embed\" },\n pdf: { icon: \"pdf\", labelKey: \"pdf\" },\n};\n\ntype Tab = \"upload\" | \"url\" | \"library\";\n\ninterface Props {\n kind: MediaKind;\n editor: Editor;\n config: ResolvedConfig;\n handler?: UploadHandler;\n}\n\nexport function MediaButton({ kind, editor, config, handler }: Props) {\n const meta = META[kind];\n const label = config.labels[meta.labelKey] ?? kind;\n\n return (\n <Popover\n button={({ open, toggle }) => (\n <button\n type=\"button\"\n className=\"osam-btn\"\n data-open={open || undefined}\n title={label}\n aria-label={label}\n onClick={toggle}\n >\n <Icon name={meta.icon} />\n </button>\n )}\n >\n {({ close }) => (\n <MediaPanel kind={kind} editor={editor} config={config} handler={handler} onDone={close} />\n )}\n </Popover>\n );\n}\n\nfunction MediaPanel({ kind, editor, config, handler, onDone }: Props & { onDone: () => void }) {\n const L = config.labels;\n const up = useUpload(handler, config);\n\n const isImageKind = kind === \"image\" || kind === \"imageUrl\" || kind === \"mediaLibrary\";\n const canUpload =\n (isImageKind && config.image && config.image.allowUpload) ||\n (kind === \"video\" && config.upload.hasHandler && config.upload.video) ||\n (kind === \"pdf\" && config.upload.hasHandler && config.upload.pdf);\n const canUrl = !isImageKind ? true : kind !== \"mediaLibrary\" && !!(config.image && config.image.allowUrl);\n const canLibrary = isImageKind && !!config.mediaLibrary;\n\n const initialTab: Tab =\n kind === \"mediaLibrary\" && canLibrary ? \"library\" : canUpload ? \"upload\" : canUrl ? \"url\" : \"library\";\n const [tab, setTab] = React.useState<Tab>(initialTab);\n\n const [url, setUrl] = React.useState(\"\");\n const [alt, setAlt] = React.useState(\"\");\n const [title, setTitle] = React.useState(\"\");\n const [caption, setCaption] = React.useState(\"\");\n const [ratio, setRatio] = React.useState(config.embed ? config.embed.defaultRatio : \"16/9\");\n const [err, setErr] = React.useState<string | null>(null);\n const fileRef = React.useRef<HTMLInputElement>(null);\n\n // Library data\n const [lib, setLib] = React.useState<MediaLibraryItem[] | null>(null);\n const [libLoading, setLibLoading] = React.useState(false);\n React.useEffect(() => {\n if (tab !== \"library\" || !config.mediaLibrary || lib) return;\n setLibLoading(true);\n loadMediaLibrary(config.mediaLibrary)\n .then(setLib)\n .catch((e) => setErr(e?.message || \"Could not load media library\"))\n .finally(() => setLibLoading(false));\n }, [tab, config.mediaLibrary, lib]);\n\n const acceptFor =\n isImageKind\n ? (config.image && config.image.accept) || \"image/*\"\n : kind === \"video\"\n ? \"video/*\"\n : kind === \"pdf\"\n ? \"application/pdf\"\n : \"image/*,video/*,application/pdf\";\n\n function insertImage(src: string) {\n editor\n .chain()\n .focus()\n .insertContent({\n type: \"image\",\n attrs: { src, alt: alt || null, title: title || null, caption: caption || null },\n })\n .run();\n onDone();\n }\n\n function insertMediaUrl(raw: string, forceKind?: \"video\" | \"pdf\") {\n const resolved = resolveEmbed(raw, {\n allowedHosts: config.embed ? config.embed.allowedHosts : \"*\",\n treatAsPdf: forceKind === \"pdf\" || kind === \"pdf\",\n treatAsVideo: forceKind === \"video\" || kind === \"video\",\n });\n if (kind === \"youtube\" && (!resolved || resolved.provider !== \"youtube\")) {\n setErr(\"That doesn't look like a YouTube URL.\");\n return;\n }\n if (kind === \"instagram\" && (!resolved || resolved.provider !== \"instagram\")) {\n setErr(\"That doesn't look like an Instagram post/reel URL.\");\n return;\n }\n if (!resolved) {\n setErr(L[\"error.badHost\"]);\n return;\n }\n editor\n .chain()\n .focus()\n .insertContent({\n type: \"embed\",\n attrs: {\n src: resolved.src,\n provider: resolved.provider,\n originalUrl: resolved.originalUrl,\n ratio,\n title: title || null,\n },\n })\n .run();\n onDone();\n }\n\n async function onFile(file: File | undefined) {\n if (!file) return;\n setErr(null);\n const result = await up.upload(file);\n if (!result) return;\n if (result.kind === \"image\") {\n if (config.mediaLibrary) void saveToMediaLibrary(config.mediaLibrary, result.url, file);\n insertImage(result.url);\n } else {\n insertMediaUrl(result.url, result.kind);\n }\n }\n\n const showMeta = isImageKind;\n const tabs: Array<[Tab, string]> = [];\n if (canUpload) tabs.push([\"upload\", L[\"dialog.upload\"]]);\n if (canUrl) tabs.push([\"url\", \"URL\"]);\n if (canLibrary) tabs.push([\"library\", L[\"dialog.library\"]]);\n\n return (\n <div className=\"osam-media\">\n {tabs.length > 1 && (\n <div className=\"osam-media__tabs\">\n {tabs.map(([id, lbl]) => (\n <button key={id} type=\"button\" data-active={tab === id} onClick={() => setTab(id)}>\n {lbl}\n </button>\n ))}\n </div>\n )}\n\n {tab === \"library\" && canLibrary && (\n <div className=\"osam-media__lib\">\n {libLoading && <p className=\"osam-hint\">Loading…</p>}\n {lib && lib.length === 0 && <p className=\"osam-hint\">No images yet.</p>}\n <div className=\"osam-media__grid\">\n {lib?.map((it) => (\n <button\n key={it.url}\n type=\"button\"\n className=\"osam-media__thumb\"\n title={it.name || it.url}\n onClick={() => {\n editor.chain().focus().insertContent({ type: \"image\", attrs: { src: it.url } }).run();\n onDone();\n }}\n >\n <img src={it.thumbnail || it.url} alt={it.name || \"\"} />\n </button>\n ))}\n </div>\n </div>\n )}\n\n {tab === \"upload\" && canUpload && (\n <div\n className=\"osam-media__drop\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n onFile(e.dataTransfer.files?.[0]);\n }}\n onClick={() => fileRef.current?.click()}\n data-busy={up.busy || undefined}\n >\n <input\n ref={fileRef}\n type=\"file\"\n accept={acceptFor}\n hidden\n onChange={(e) => onFile(e.target.files?.[0] || undefined)}\n />\n {up.busy ? (\n <>\n <div className=\"osam-media__progress\">\n <span style={{ width: `${up.progress}%` }} />\n </div>\n <p>\n {L[\"dialog.uploading\"]} {up.progress}%{\" \"}\n <button type=\"button\" className=\"osam-link\" onClick={up.cancel}>\n {L[\"dialog.cancel\"]}\n </button>\n </p>\n </>\n ) : (\n <p>\n <Icon name=\"image\" /> {L[\"dialog.upload\"]} <br />\n <small>{L[\"dialog.or\"]} drag &amp; drop</small>\n </p>\n )}\n </div>\n )}\n\n {tab === \"url\" && canUrl && (\n <form\n onSubmit={(e) => {\n e.preventDefault();\n setErr(null);\n if (!url.trim()) return;\n if (kind === \"imageUrl\" || kind === \"image\") insertImage(url.trim());\n else insertMediaUrl(url.trim());\n }}\n >\n <label className=\"osam-field\">\n <span>{L[\"dialog.url\"]}</span>\n <input\n type=\"url\"\n value={url}\n autoFocus\n placeholder=\"https://…\"\n onChange={(e) => setUrl(e.target.value)}\n />\n </label>\n\n {kind === \"embed\" && config.embed && config.embed.allowedHosts !== \"*\" && (\n <p className=\"osam-hint\">\n Allowed: {config.embed.allowedHosts.slice(0, 6).join(\", \")}\n {config.embed.allowedHosts.length > 6 ? \"…\" : \"\"}\n </p>\n )}\n\n {showMeta && (\n <>\n <label className=\"osam-field\">\n <span>{L[\"dialog.alt\"]}</span>\n <input value={alt} onChange={(e) => setAlt(e.target.value)} />\n </label>\n <label className=\"osam-field\">\n <span>{L[\"dialog.title\"]}</span>\n <input value={title} onChange={(e) => setTitle(e.target.value)} />\n </label>\n <label className=\"osam-field\">\n <span>{L[\"dialog.caption\"]}</span>\n <input value={caption} onChange={(e) => setCaption(e.target.value)} />\n </label>\n </>\n )}\n\n {(kind === \"embed\" || kind === \"youtube\" || kind === \"instagram\" || kind === \"video\") && (\n <label className=\"osam-field\">\n <span>{L[\"dialog.ratio\"]}</span>\n <select value={ratio} onChange={(e) => setRatio(e.target.value)}>\n <option value=\"16/9\">16 : 9</option>\n <option value=\"4/3\">4 : 3</option>\n <option value=\"1/1\">1 : 1</option>\n <option value=\"9/16\">9 : 16</option>\n </select>\n </label>\n )}\n\n <div className=\"osam-media__actions\">\n <button type=\"button\" className=\"osam-btn-text\" onClick={onDone}>\n {L[\"dialog.cancel\"]}\n </button>\n <button type=\"submit\" className=\"osam-btn-primary\">\n {L[\"dialog.insert\"]}\n </button>\n </div>\n </form>\n )}\n\n {(err || up.error) && <p className=\"osam-error\">{err || up.error}</p>}\n </div>\n );\n}\n","import * as React from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ResolvedConfig } from \"../config\";\nimport type { ToolbarItem } from \"../types\";\nimport type { UploadHandler } from \"../storage/types\";\nimport { Icon, type IconName } from \"./icons\";\nimport { useEditorSync } from \"./hooks\";\nimport { HeadingSelect } from \"./headings\";\nimport { ColorButton } from \"./color\";\nimport { LinkButton } from \"./link\";\nimport { MediaButton, type MediaKind } from \"./media\";\n\nexport interface ToolbarView {\n fullscreen?: boolean;\n onToggleFullscreen?: () => void;\n sourceMode?: boolean;\n onToggleSource?: () => void;\n}\n\ninterface ToolbarProps {\n editor: Editor;\n config: ResolvedConfig;\n uploadHandler?: UploadHandler;\n view?: ToolbarView;\n}\n\nfunction Btn({\n icon,\n label,\n active,\n disabled,\n onClick,\n}: {\n icon: IconName;\n label: string;\n active?: boolean;\n disabled?: boolean;\n onClick: () => void;\n}) {\n return (\n <button\n type=\"button\"\n className=\"osam-btn\"\n data-active={active || undefined}\n disabled={disabled}\n title={label}\n aria-label={label}\n aria-pressed={active || undefined}\n // keep focus in the editor\n onMouseDown={(e) => e.preventDefault()}\n onClick={onClick}\n >\n <Icon name={icon} />\n </button>\n );\n}\n\nconst MEDIA_KINDS: MediaKind[] = [\"image\", \"imageUrl\", \"youtube\", \"instagram\", \"video\", \"embed\", \"pdf\"];\n\nexport function Toolbar({ editor, config, uploadHandler, view }: ToolbarProps) {\n useEditorSync(editor);\n if (config.toolbar === false) return null;\n\n const L = config.labels;\n const can = editor.can();\n const locked = !!view?.sourceMode; // source view: everything but view toggles is inert\n\n const render = (item: ToolbarItem, i: number): React.ReactNode => {\n const key = `${item}-${i}`;\n\n // View-mode toggles are always live.\n if (item === \"fullscreen\") {\n if (!view?.onToggleFullscreen) return null;\n return (\n <Btn\n key={key}\n icon={view.fullscreen ? \"minimize\" : \"maximize\"}\n label={view.fullscreen ? L.fullscreenExit : L.fullscreen}\n active={view.fullscreen}\n onClick={view.onToggleFullscreen}\n />\n );\n }\n if (item === \"source\") {\n if (!config.html || !config.html.sourceView || !view?.onToggleSource) return null;\n return (\n <Btn\n key={key}\n icon=\"source\"\n label={L.source}\n active={view.sourceMode}\n onClick={view.onToggleSource}\n />\n );\n }\n\n if (item === \"|\") return <span key={key} className=\"osam-sep\" aria-hidden=\"true\" />;\n if (item === \"spacer\") return <span key={key} className=\"osam-spacer\" />;\n\n if (locked) {\n // Render a disabled shell so the toolbar doesn't reflow in source mode.\n return <span key={key} className=\"osam-btn osam-btn--ghost\" aria-hidden=\"true\" />;\n }\n\n switch (item) {\n\n case \"bold\":\n return <Btn key={key} icon=\"bold\" label={L.bold} active={editor.isActive(\"bold\")} disabled={!can.toggleBold?.()} onClick={() => editor.chain().focus().toggleBold().run()} />;\n case \"italic\":\n return <Btn key={key} icon=\"italic\" label={L.italic} active={editor.isActive(\"italic\")} onClick={() => editor.chain().focus().toggleItalic().run()} />;\n case \"underline\":\n return <Btn key={key} icon=\"underline\" label={L.underline} active={editor.isActive(\"underline\")} onClick={() => editor.chain().focus().toggleUnderline().run()} />;\n case \"strike\":\n return <Btn key={key} icon=\"strike\" label={L.strike} active={editor.isActive(\"strike\")} onClick={() => editor.chain().focus().toggleStrike().run()} />;\n case \"code\":\n return <Btn key={key} icon=\"code\" label={L.code} active={editor.isActive(\"code\")} onClick={() => editor.chain().focus().toggleCode().run()} />;\n case \"clearFormatting\":\n return <Btn key={key} icon=\"clear\" label={L.clearFormatting} onClick={() => editor.chain().focus().unsetAllMarks().clearNodes().run()} />;\n\n case \"color\":\n return <ColorButton key={key} editor={editor} config={config} variant=\"color\" />;\n case \"highlight\":\n return <ColorButton key={key} editor={editor} config={config} variant=\"highlight\" />;\n\n case \"headings\":\n return config.headingLevels === false ? null : <HeadingSelect key={key} editor={editor} config={config} />;\n case \"paragraph\":\n return <Btn key={key} icon=\"align-left\" label={L.paragraph} active={editor.isActive(\"paragraph\")} onClick={() => editor.chain().focus().setParagraph().run()} />;\n case \"h1\":\n case \"h2\":\n case \"h3\":\n case \"h4\":\n case \"h5\":\n case \"h6\": {\n const level = Number(item[1]) as 1 | 2 | 3 | 4 | 5 | 6;\n if (config.headingLevels === false || !config.headingLevels.includes(level)) return null;\n return (\n <button\n key={key}\n type=\"button\"\n className=\"osam-btn osam-btn--text\"\n data-active={editor.isActive(\"heading\", { level }) || undefined}\n title={L[`h${level}`]}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => editor.chain().focus().toggleHeading({ level }).run()}\n >\n H{level}\n </button>\n );\n }\n\n case \"alignLeft\":\n return <Btn key={key} icon=\"align-left\" label={L.alignLeft} active={editor.isActive({ textAlign: \"left\" })} disabled={!config.textAlign} onClick={() => editor.chain().focus().setTextAlign(\"left\").run()} />;\n case \"alignCenter\":\n return <Btn key={key} icon=\"align-center\" label={L.alignCenter} active={editor.isActive({ textAlign: \"center\" })} disabled={!config.textAlign} onClick={() => editor.chain().focus().setTextAlign(\"center\").run()} />;\n case \"alignRight\":\n return <Btn key={key} icon=\"align-right\" label={L.alignRight} active={editor.isActive({ textAlign: \"right\" })} disabled={!config.textAlign} onClick={() => editor.chain().focus().setTextAlign(\"right\").run()} />;\n case \"alignJustify\":\n return <Btn key={key} icon=\"align-justify\" label={L.alignJustify} active={editor.isActive({ textAlign: \"justify\" })} disabled={!config.textAlign} onClick={() => editor.chain().focus().setTextAlign(\"justify\").run()} />;\n case \"hardBreak\":\n return <Btn key={key} icon=\"return\" label={L.hardBreak} onClick={() => editor.chain().focus().setHardBreak().run()} />;\n\n case \"bulletList\":\n return <Btn key={key} icon=\"list-bullet\" label={L.bulletList} active={editor.isActive(\"bulletList\")} onClick={() => editor.chain().focus().toggleBulletList().run()} />;\n case \"orderedList\":\n return <Btn key={key} icon=\"list-ordered\" label={L.orderedList} active={editor.isActive(\"orderedList\")} onClick={() => editor.chain().focus().toggleOrderedList().run()} />;\n case \"taskList\":\n return config.taskList ? <Btn key={key} icon=\"list-check\" label={L.taskList} active={editor.isActive(\"taskList\")} onClick={() => editor.chain().focus().toggleTaskList().run()} /> : null;\n case \"indent\":\n return <Btn key={key} icon=\"indent\" label={L.indent} disabled={!can.sinkListItem?.(\"listItem\")} onClick={() => editor.chain().focus().sinkListItem(\"listItem\").run()} />;\n case \"outdent\":\n return <Btn key={key} icon=\"outdent\" label={L.outdent} disabled={!can.liftListItem?.(\"listItem\")} onClick={() => editor.chain().focus().liftListItem(\"listItem\").run()} />;\n\n case \"link\":\n return <LinkButton key={key} editor={editor} config={config} />;\n case \"unlink\":\n return <Btn key={key} icon=\"unlink\" label={L.unlink} disabled={!editor.isActive(\"link\")} onClick={() => editor.chain().focus().extendMarkRange(\"link\").unsetLink().run()} />;\n\n case \"blockquote\":\n return config.blockquote ? <Btn key={key} icon=\"quote\" label={L.blockquote} active={editor.isActive(\"blockquote\")} onClick={() => editor.chain().focus().toggleBlockquote().run()} /> : null;\n case \"codeBlock\":\n return config.codeBlock !== false ? <Btn key={key} icon=\"code-block\" label={L.codeBlock} active={editor.isActive(\"codeBlock\")} onClick={() => editor.chain().focus().toggleCodeBlock().run()} /> : null;\n case \"horizontalRule\":\n return config.horizontalRule ? <Btn key={key} icon=\"hr\" label={L.horizontalRule} onClick={() => editor.chain().focus().setHorizontalRule().run()} /> : null;\n\n case \"mediaLibrary\":\n return config.image && config.mediaLibrary ? (\n <MediaButton key={key} kind=\"mediaLibrary\" editor={editor} config={config} handler={uploadHandler} />\n ) : null;\n\n case \"customHtml\":\n return config.html && config.html.customBlock ? (\n <Btn\n key={key}\n icon=\"html-block\"\n label={L.customHtml}\n onClick={() => editor.chain().focus().setCustomHtml().run()}\n />\n ) : null;\n\n case \"image\":\n case \"imageUrl\":\n case \"youtube\":\n case \"instagram\":\n case \"video\":\n case \"embed\":\n case \"pdf\": {\n if ((item === \"image\" || item === \"imageUrl\") && !config.image) return null;\n if (item !== \"image\" && item !== \"imageUrl\" && !config.embed) return null;\n if (item === \"image\" && !(config.image && config.image.allowUpload)) {\n // No handler: fall through to URL button instead of a dead upload button.\n return config.image && config.image.allowUrl ? (\n <MediaButton key={key} kind=\"imageUrl\" editor={editor} config={config} handler={uploadHandler} />\n ) : null;\n }\n if (item === \"video\" && !config.embed) return null;\n if (item === \"pdf\" && !config.embed) return null;\n return <MediaButton key={key} kind={item as MediaKind} editor={editor} config={config} handler={uploadHandler} />;\n }\n\n case \"undo\":\n return <Btn key={key} icon=\"undo\" label={L.undo} disabled={!can.undo?.()} onClick={() => editor.chain().focus().undo().run()} />;\n case \"redo\":\n return <Btn key={key} icon=\"redo\" label={L.redo} disabled={!can.redo?.()} onClick={() => editor.chain().focus().redo().run()} />;\n\n default:\n return null;\n }\n };\n\n void MEDIA_KINDS;\n\n return (\n <div className=\"osam-toolbar\" role=\"toolbar\" aria-label=\"Formatting\" dir={config.dir}>\n {config.toolbar.map(render)}\n </div>\n );\n}\n","import type { CSSProperties } from \"react\";\nimport type { OsamEditorTheme } from \"./types\";\n\nconst MAP: Record<keyof OsamEditorTheme, string> = {\n background: \"--osam-bg\",\n foreground: \"--osam-fg\",\n muted: \"--osam-muted\",\n border: \"--osam-border\",\n accent: \"--osam-accent\",\n accentText: \"--osam-accent-fg\",\n radius: \"--osam-radius\",\n fontFamily: \"--osam-font\",\n monoFontFamily: \"--osam-font-mono\",\n toolbarBackground: \"--osam-toolbar-bg\",\n buttonColor: \"--osam-btn-fg\",\n buttonHoverBackground: \"--osam-hover\",\n buttonActiveBackground: \"--osam-active\",\n buttonActiveColor: \"--osam-active-fg\",\n contentBackground: \"--osam-content-bg\",\n codeBackground: \"--osam-code-bg\",\n};\n\n/** Turn a `theme` prop into inline CSS custom properties for the editor root. */\nexport function themeToStyle(theme: OsamEditorTheme | undefined): CSSProperties {\n if (!theme) return {};\n const style: Record<string, string> = {};\n for (const [key, cssVar] of Object.entries(MAP) as Array<[keyof OsamEditorTheme, string]>) {\n const value = theme[key];\n if (value === undefined || value === null) continue;\n style[cssVar] = key === \"radius\" && typeof value === \"number\" ? `${value}px` : String(value);\n }\n return style as CSSProperties;\n}\n","import * as React from \"react\";\nimport { EditorContent } from \"@tiptap/react\";\nimport type { Editor, JSONContent } from \"@tiptap/core\";\nimport type { OsamEditorConfig } from \"./types\";\nimport { useOsamEditor, type UseOsamEditorOptions } from \"./useOsamEditor\";\nimport { Toolbar } from \"./ui/Toolbar\";\nimport { themeToStyle } from \"./theme\";\nimport { sanitizeHtml } from \"./sanitize\";\n\nexport interface OsamEditorProps extends OsamEditorConfig {\n /** Uncontrolled initial content (HTML string or TipTap JSON). */\n defaultValue?: string | JSONContent;\n /** Controlled content (HTML string or TipTap JSON). Pair with `onChange`. */\n value?: string | JSONContent;\n /** Called on every edit. `html` is always provided; `json` is the TipTap doc. */\n onChange?: (html: string, extra: { json: JSONContent; editor: Editor }) => void;\n /** Get the editor instance once it's ready. */\n onReady?: (editor: Editor) => void;\n\n editable?: boolean;\n autofocus?: UseOsamEditorOptions[\"autofocus\"];\n\n className?: string;\n style?: React.CSSProperties;\n /** Min height of the editable area. Default `260`. */\n minHeight?: number | string;\n /** Where the toolbar sits. Default `\"top\"`. */\n toolbarPosition?: \"top\" | \"bottom\" | \"none\";\n /** Stick the toolbar to the top while scrolling. Default `false`. */\n stickyToolbar?: boolean;\n /** Start in fullscreen (fills the viewport). Default `false`. */\n defaultFullscreen?: boolean;\n /** Controlled fullscreen state. */\n fullscreen?: boolean;\n onFullscreenChange?: (fullscreen: boolean) => void;\n}\n\nconst isJson = (v: unknown): v is JSONContent => !!v && typeof v === \"object\";\n\nexport function OsamEditor(props: OsamEditorProps) {\n const {\n defaultValue,\n value,\n onChange,\n onReady,\n editable = true,\n autofocus,\n className,\n style,\n minHeight = 260,\n toolbarPosition = \"top\",\n stickyToolbar = false,\n defaultFullscreen = false,\n fullscreen: fullscreenProp,\n onFullscreenChange,\n ...config\n } = props;\n\n const controlled = value !== undefined;\n const lastEmitted = React.useRef<string | null>(null);\n\n const { editor, config: resolved } = useOsamEditor({\n ...config,\n content: (controlled ? value : defaultValue) ?? \"\",\n editable,\n autofocus,\n onCreate: (ed) => onReady?.(ed),\n onUpdate: ({ html, json, editor }) => {\n lastEmitted.current = html;\n onChange?.(html, { json, editor });\n },\n });\n\n // ---- fullscreen -------------------------------------------------------\n const [fsState, setFsState] = React.useState(defaultFullscreen);\n const fullscreen = fullscreenProp ?? fsState;\n const toggleFullscreen = React.useCallback(() => {\n const next = !fullscreen;\n if (fullscreenProp === undefined) setFsState(next);\n onFullscreenChange?.(next);\n }, [fullscreen, fullscreenProp, onFullscreenChange]);\n\n React.useEffect(() => {\n if (!fullscreen) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n const onKey = (e: KeyboardEvent) => e.key === \"Escape\" && toggleFullscreen();\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.body.style.overflow = prev;\n document.removeEventListener(\"keydown\", onKey);\n };\n }, [fullscreen, toggleFullscreen]);\n\n // ---- source (raw HTML) view ----------------------------------------\n const canSource = !!resolved.html && resolved.html.sourceView;\n const [sourceMode, setSourceMode] = React.useState(false);\n const [draft, setDraft] = React.useState(\"\");\n const allowStyleTags = !!resolved.html && resolved.html.allowStyleTags;\n\n const toggleSource = React.useCallback(() => {\n if (!editor) return;\n if (!sourceMode) {\n setDraft(editor.getHTML());\n setSourceMode(true);\n } else {\n const clean = sanitizeHtml(draft, { allowStyleTags });\n editor.commands.setContent(clean, { emitUpdate: true });\n setSourceMode(false);\n }\n }, [editor, sourceMode, draft, allowStyleTags]);\n\n // ---- controlled value → editor -----------------------------------\n React.useEffect(() => {\n if (!editor || !controlled || sourceMode) return;\n const incoming = isJson(value) ? value : String(value ?? \"\");\n const current = editor.getHTML();\n const incomingHtml = isJson(value) ? null : String(value ?? \"\");\n if (incomingHtml !== null && (incomingHtml === current || incomingHtml === lastEmitted.current)) return;\n const { from, to } = editor.state.selection;\n editor.commands.setContent(incoming as any, { emitUpdate: false });\n try {\n editor.commands.setTextSelection({ from, to });\n } catch {\n /* selection out of range after swap */\n }\n }, [editor, controlled, value, sourceMode]);\n\n const uploadHandler = config.upload?.handler;\n\n const bar =\n toolbarPosition !== \"none\" && editor ? (\n <div className=\"osam-toolbar-wrap\" data-sticky={stickyToolbar && !fullscreen ? \"\" : undefined}>\n <Toolbar\n editor={editor}\n config={resolved}\n uploadHandler={uploadHandler}\n view={{\n fullscreen,\n onToggleFullscreen: toggleFullscreen,\n sourceMode,\n onToggleSource: canSource ? toggleSource : undefined,\n }}\n />\n </div>\n ) : null;\n\n return (\n <div\n className={`osam-editor${className ? ` ${className}` : \"\"}`}\n data-editable={editable || undefined}\n data-fullscreen={fullscreen || undefined}\n data-source={sourceMode || undefined}\n style={{ ...themeToStyle(resolved.theme), ...style }}\n dir={resolved.dir}\n >\n {toolbarPosition === \"top\" && bar}\n\n {sourceMode ? (\n <div className=\"osam-editor__body osam-source\" style={{ minHeight }}>\n <div className=\"osam-source__hint\">\n {resolved.labels[\"source.title\"]}\n {allowStyleTags ? \"\" : \" — <script> and <style> are removed\"}\n </div>\n <textarea\n className=\"osam-source__area\"\n value={draft}\n spellCheck={false}\n onChange={(e) => setDraft(e.target.value)}\n />\n <div className=\"osam-source__actions\">\n <button type=\"button\" className=\"osam-btn-primary\" onClick={toggleSource}>\n {resolved.labels[\"source.apply\"]}\n </button>\n </div>\n </div>\n ) : (\n <EditorContent editor={editor} className=\"osam-editor__body\" style={{ minHeight }} />\n )}\n\n {toolbarPosition === \"bottom\" && bar}\n\n {resolved.branding && (\n <div className=\"osam-branding\">\n <a href=\"https://osamtech.com\" target=\"_blank\" rel=\"noopener noreferrer\">\n {resolved.labels.poweredBy}\n </a>\n </div>\n )}\n </div>\n );\n}\n","import * as React from \"react\";\n\nexport interface OsamContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** HTML produced by the editor (`onChange` html / `editor.getHTML()`). */\n html: string;\n /** Load `hls.js` to play `.m3u8` videos outside Safari. Default `true`. */\n hls?: boolean;\n}\n\n/**\n * Render saved editor HTML on your site (blog post page, preview, …) with the\n * same look as the editor. Pair with `import \"osameditor/styles.css\"`.\n */\nexport function OsamContent({ html, hls = true, className, ...rest }: OsamContentProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (!hls || !ref.current) return;\n const videos = Array.from(ref.current.querySelectorAll(\"video\")).filter((v) =>\n /\\.m3u8(\\?.*)?$/i.test(v.getAttribute(\"src\") || v.currentSrc || \"\"),\n );\n if (!videos.length) return;\n\n const instances: any[] = [];\n let cancelled = false;\n\n import(\"hls.js\")\n .then((mod: any) => {\n if (cancelled) return;\n const Hls = mod.default ?? mod;\n for (const video of videos) {\n const src = video.getAttribute(\"src\") || \"\";\n if (video.canPlayType(\"application/vnd.apple.mpegurl\")) continue;\n if (Hls?.isSupported?.()) {\n video.removeAttribute(\"src\");\n const inst = new Hls();\n inst.loadSource(src);\n inst.attachMedia(video);\n instances.push(inst);\n }\n }\n })\n .catch(() => {});\n\n return () => {\n cancelled = true;\n instances.forEach((i) => i.destroy?.());\n };\n }, [html, hls]);\n\n return (\n <div\n ref={ref}\n className={`osam-content${className ? ` ${className}` : \"\"}`}\n dangerouslySetInnerHTML={{ __html: html }}\n {...rest}\n />\n );\n}\n","import type { UploadHandler, UploadResult } from \"./types\";\nimport { detectKind } from \"./types\";\n\nexport interface OsamStorageUploaderOptions {\n /**\n * Returns a short-lived OsamStorage token. Same contract as the `osamstorage`\n * SDK: point it at your backend route that exchanges your secret MAIN_TOKEN\n * for a temporary token.\n *\n * @example\n * getToken: async () => {\n * const r = await fetch(\"/api/osam-token\");\n * return (await r.json()).token;\n * }\n */\n getToken: () => Promise<string> | string;\n\n /** Passed straight through to `new OsamStorage(...)`. */\n baseUrl?: string;\n chunkSize?: number;\n concurrency?: number;\n maxAttempts?: number;\n\n /**\n * OsamStorage processes files asynchronously and the merge response shape can\n * evolve, so you map it to a public URL here. The default tries the most\n * common fields.\n */\n resolveUrl?: (data: any, file: File) => string | undefined | null;\n\n /** Optional: map the merge response to a poster/thumbnail URL. */\n resolvePoster?: (data: any, file: File) => string | undefined | null;\n\n /**\n * Provide the SDK instance yourself instead of letting this helper import\n * `osamstorage`. Useful if you already configured one, or to control which\n * adapter build is used.\n */\n client?: { upload: (file: any, opts: any) => Promise<any> };\n}\n\nfunction defaultResolveUrl(data: any): string | undefined {\n if (!data) return undefined;\n return (\n data.url ??\n data.fileUrl ??\n data.location ??\n data.Location ??\n data.src ??\n data.playbackUrl ??\n data.hlsUrl ??\n data?.data?.url ??\n data?.file?.url ??\n data?.result?.url ??\n undefined\n );\n}\n\n/**\n * Upload handler backed by the `osamstorage` SDK (chunked upload, automatic\n * image → WebP, video → HLS, PDF passthrough).\n *\n * `osamstorage` is an **optional** dependency — it's only required if you\n * actually use this handler.\n */\nexport function createOsamStorageUploader(\n options: OsamStorageUploaderOptions,\n): UploadHandler {\n const {\n getToken,\n baseUrl,\n chunkSize,\n concurrency,\n maxAttempts,\n resolveUrl = defaultResolveUrl,\n resolvePoster,\n client,\n } = options;\n\n let clientPromise: Promise<{ upload: (file: any, opts: any) => Promise<any> }> | null =\n client ? Promise.resolve(client) : null;\n\n async function getClient() {\n if (!clientPromise) {\n clientPromise = import(\"osamstorage\")\n .then((mod: any) => {\n const OsamStorage = mod.OsamStorage ?? mod.default?.OsamStorage ?? mod.default;\n if (!OsamStorage) {\n throw new Error(\"osameditor: could not find the OsamStorage export in 'osamstorage'.\");\n }\n return new OsamStorage({ getToken, baseUrl, chunkSize, concurrency, maxAttempts });\n })\n .catch((err) => {\n throw new Error(\n \"osameditor: the 'osamstorage' package is not installed. Run `npm i osamstorage`, \" +\n \"or pass your own `client` / use `createVpsUploader()` instead.\\n\" +\n String(err),\n );\n });\n }\n return clientPromise;\n }\n\n return async (file, ctx) => {\n const kind = ctx.kind ?? detectKind(file);\n const storage = await getClient();\n\n const data = await new Promise<any>((resolve, reject) => {\n storage\n .upload(file, {\n signal: ctx.signal,\n onProgress: (p: number) => ctx.onProgress?.(Math.round(p)),\n onSuccess: (d: any) => resolve(d),\n onError: (e: any) => reject(e instanceof Error ? e : new Error(String(e))),\n })\n .catch(reject);\n });\n\n const url = resolveUrl(data, file);\n if (!url) {\n throw new Error(\n \"osameditor: OsamStorage upload finished but no URL could be resolved from the response. \" +\n \"Pass a `resolveUrl` to createOsamStorageUploader(). Response was: \" +\n safeJson(data),\n );\n }\n\n const result: UploadResult = {\n url,\n kind,\n name: file.name,\n meta: typeof data === \"object\" && data ? data : undefined,\n };\n const poster = resolvePoster?.(data, file);\n if (poster) result.poster = poster;\n return result;\n };\n}\n\nfunction safeJson(v: unknown): string {\n try {\n return JSON.stringify(v);\n } catch {\n return String(v);\n }\n}\n","import type { UploadHandler, UploadResult } from \"./types\";\nimport { detectKind } from \"./types\";\n\nexport interface VpsUploaderOptions {\n /**\n * Your upload endpoint. Receives a `multipart/form-data` POST with the file\n * under `fieldName` (default `\"file\"`).\n *\n * Can be a string or a function of the file (e.g. to route images and video\n * to different endpoints).\n */\n endpoint: string | ((file: File, kind: ReturnType<typeof detectKind>) => string);\n\n /** Form field name for the file. Default `\"file\"`. */\n fieldName?: string;\n\n /** Extra static form fields sent with every upload. */\n fields?: Record<string, string> | ((file: File) => Record<string, string>);\n\n /** Extra headers (auth tokens, etc.). Don't set `Content-Type` — the browser does. */\n headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);\n\n /** `fetch` credentials mode. Default `\"same-origin\"`. */\n credentials?: RequestCredentials;\n\n /**\n * Map your JSON response to a public URL. Default tries `url`, `fileUrl`,\n * `location`, `src`, `data.url`.\n */\n resolveUrl?: (data: any, file: File) => string | undefined | null;\n\n /** Map your JSON response to a poster/thumbnail URL. */\n resolvePoster?: (data: any, file: File) => string | undefined | null;\n}\n\nfunction defaultResolveUrl(data: any): string | undefined {\n if (typeof data === \"string\") return data;\n if (!data) return undefined;\n return data.url ?? data.fileUrl ?? data.location ?? data.src ?? data?.data?.url ?? undefined;\n}\n\n/**\n * Upload handler that POSTs the file to your own server / VPS storage.\n *\n * Reports real progress via `XMLHttpRequest` (so the editor's progress bar\n * works) and supports cancellation through `AbortSignal`.\n */\nexport function createVpsUploader(options: VpsUploaderOptions): UploadHandler {\n const {\n endpoint,\n fieldName = \"file\",\n fields,\n headers,\n credentials = \"same-origin\",\n resolveUrl = defaultResolveUrl,\n resolvePoster,\n } = options;\n\n return (file, ctx) =>\n new Promise<UploadResult>((resolve, reject) => {\n const kind = ctx.kind ?? detectKind(file);\n const url = typeof endpoint === \"function\" ? endpoint(file, kind) : endpoint;\n\n const form = new FormData();\n form.append(fieldName, file, file.name);\n const extra = typeof fields === \"function\" ? fields(file) : fields;\n if (extra) for (const [k, v] of Object.entries(extra)) form.append(k, v);\n\n Promise.resolve(typeof headers === \"function\" ? headers() : headers)\n .then((resolvedHeaders) => {\n const xhr = new XMLHttpRequest();\n xhr.open(\"POST\", url, true);\n xhr.withCredentials = credentials === \"include\";\n if (resolvedHeaders) {\n for (const [k, v] of Object.entries(resolvedHeaders)) xhr.setRequestHeader(k, v);\n }\n\n xhr.upload.onprogress = (e) => {\n if (e.lengthComputable) ctx.onProgress?.(Math.round((e.loaded / e.total) * 100));\n };\n\n xhr.onload = () => {\n if (xhr.status < 200 || xhr.status >= 300) {\n reject(new Error(`osameditor: upload failed (${xhr.status} ${xhr.statusText}). ${xhr.responseText}`));\n return;\n }\n let data: any = xhr.responseText;\n try {\n data = JSON.parse(xhr.responseText);\n } catch {\n /* keep as text */\n }\n const resolved = resolveUrl(data, file);\n if (!resolved) {\n reject(\n new Error(\n \"osameditor: upload succeeded but no URL resolved from the response. \" +\n \"Pass a `resolveUrl` to createVpsUploader().\",\n ),\n );\n return;\n }\n const result: UploadResult = { url: resolved, kind, name: file.name };\n if (data && typeof data === \"object\") result.meta = data;\n const poster = resolvePoster?.(data, file);\n if (poster) result.poster = poster;\n resolve(result);\n };\n\n xhr.onerror = () => reject(new Error(\"osameditor: network error during upload.\"));\n xhr.onabort = () => reject(new DOMException(\"Upload aborted\", \"AbortError\"));\n\n if (ctx.signal) {\n if (ctx.signal.aborted) {\n xhr.abort();\n return;\n }\n ctx.signal.addEventListener(\"abort\", () => xhr.abort(), { once: true });\n }\n\n xhr.send(form);\n })\n .catch(reject);\n });\n}\n"]}