mdwysiwyg 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/components/MarkdownEditor/MarkdownEditor.tsx","../src/components/MarkdownEditor/markdown/tiptapMarkdownBridge.ts","../node_modules/highlight.js/es/languages/json.js","../node_modules/highlight.js/es/languages/sql.js","../node_modules/highlight.js/es/languages/typescript.js","../node_modules/highlight.js/es/languages/javascript.js","../node_modules/highlight.js/es/languages/java.js","../src/components/MarkdownEditor/markdown/pipeline.ts","../src/components/MarkdownEditor/views/RenderedView.tsx","../src/components/MarkdownEditor/MarkdownEditor.module.css","../src/components/MarkdownEditor/views/MarkdownSourceView.tsx","../src/components/MarkdownEditor/Toolbar/Toolbar.tsx","../src/components/MarkdownEditor/Toolbar/buttons/ToolbarButton.tsx","../src/components/MarkdownEditor/Toolbar/buttons/InsertDialogs.tsx","../src/components/MarkdownEditor/markdown/links.ts","../src/components/MarkdownEditor/Toolbar/buttons/TableSizePicker.tsx","../src/components/MarkdownEditor/Toolbar/buttons/CodeLanguagePicker.tsx","../src/components/MarkdownEditor/Toolbar/buttons/FloatingPanel.tsx","../src/components/MarkdownEditor/Toolbar/buttons/ExportMenu.tsx","../src/components/MarkdownEditor/Toolbar/buttons/icons.tsx","../src/components/MarkdownEditor/Toolbar/buttons/Separator.tsx","../src/components/MarkdownEditor/Toolbar/buttons/LinkPopover.tsx"],"sourcesContent":["import { useMemo, useRef, useState } from \"react\";\nimport { useEditor } from \"@tiptap/react\";\nimport { getMarkRange, type Range } from \"@tiptap/core\";\nimport {\n createEditorExtensions,\n editorToMarkdown,\n markdownToEditorContent,\n} from \"./markdown/tiptapMarkdownBridge\";\nimport { RenderedView } from \"./views/RenderedView\";\nimport { MarkdownSourceView } from \"./views/MarkdownSourceView\";\nimport { Toolbar } from \"./Toolbar/Toolbar\";\nimport { LinkPopover } from \"./Toolbar/buttons/LinkPopover\";\nimport { FloatingPanel } from \"./Toolbar/buttons/FloatingPanel\";\nimport type { MarkdownEditorProps, ViewMode } from \"./types\";\nimport styles from \"./MarkdownEditor.module.css\";\n\ninterface LinkPopoverState {\n url: string;\n range: Range;\n anchor: HTMLElement;\n}\n\nfunction toCssSize(value: number | string): string {\n return typeof value === \"number\" ? `${value}px` : value;\n}\n\nexport function MarkdownEditor({\n initialContent = \"\",\n onChange,\n width = 700,\n height = 500,\n sanitizeEmbeddedHtml = true,\n className,\n onlyView = false,\n resizable = true,\n}: MarkdownEditorProps) {\n const [source, setSource] = useState(initialContent);\n const [viewMode, setViewMode] = useState<ViewMode>(\"wysiwyg\");\n const effectiveViewMode: ViewMode = onlyView ? \"wysiwyg\" : viewMode;\n const [linkPopover, setLinkPopover] = useState<LinkPopoverState | null>(\n null,\n );\n\n // Refs keep the editor's onUpdate closure valid across renders without\n // recreating the editor when onChange or source change.\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n const sourceRef = useRef(source);\n sourceRef.current = source;\n\n const extensions = useMemo(\n () => createEditorExtensions({ sanitizeEmbeddedHtml }),\n [sanitizeEmbeddedHtml],\n );\n\n const editor = useEditor(\n {\n extensions,\n content: markdownToEditorContent(sourceRef.current),\n editable: !onlyView,\n editorProps: {\n attributes: {\n role: \"textbox\",\n \"aria-multiline\": \"true\",\n \"aria-label\": \"Editor de texto enriquecido\",\n },\n handleDOMEvents: {\n click(view, event) {\n const target = event.target;\n if (!(target instanceof Element)) return false;\n const anchorEl = target.closest(\"a\");\n if (anchorEl === null || !view.dom.contains(anchorEl)) {\n return false;\n }\n const linkType = view.state.schema.marks[\"link\"];\n if (!linkType) return false;\n const pos = view.posAtDOM(anchorEl, 0);\n const $pos = view.state.doc.resolve(\n Math.min(pos + 1, view.state.doc.content.size),\n );\n const range = getMarkRange($pos, linkType);\n if (!range) return false;\n const mark = $pos\n .marks()\n .find((candidate) => candidate.type === linkType);\n const href = mark?.attrs[\"href\"] as string | undefined;\n if (href === undefined) return false;\n event.preventDefault();\n setLinkPopover({ url: href, range, anchor: anchorEl });\n return true;\n },\n },\n },\n onUpdate({ editor: currentEditor }) {\n const markdown = editorToMarkdown(currentEditor);\n sourceRef.current = markdown;\n setSource(markdown);\n onChangeRef.current?.(markdown);\n },\n },\n [sanitizeEmbeddedHtml, onlyView],\n );\n\n const toggleView = () => {\n if (viewMode === \"wysiwyg\") {\n setViewMode(\"markdown\");\n } else {\n // emitUpdate=false: cambiar de vista nunca dispara onChange (FR-004)\n editor?.commands.setContent(\n markdownToEditorContent(sourceRef.current),\n false,\n );\n setViewMode(\"wysiwyg\");\n }\n };\n\n const handleSourceChange = (value: string) => {\n sourceRef.current = value;\n setSource(value);\n onChangeRef.current?.(value);\n };\n\n const closeLinkPopover = () => setLinkPopover(null);\n\n const saveLinkPopover = (newUrl: string) => {\n if (!editor || !linkPopover) return;\n editor\n .chain()\n .focus()\n .setTextSelection(linkPopover.range)\n .extendMarkRange(\"link\")\n .setLink({ href: newUrl })\n .run();\n closeLinkPopover();\n };\n\n const removeLinkPopover = () => {\n if (!editor || !linkPopover) return;\n editor\n .chain()\n .focus()\n .setTextSelection(linkPopover.range)\n .extendMarkRange(\"link\")\n .unsetLink()\n .run();\n closeLinkPopover();\n };\n\n const rootClassName = [\n styles[\"root\"],\n resizable ? styles[\"resizable\"] : undefined,\n className,\n ]\n .filter(Boolean)\n .join(\" \");\n\n return (\n <div\n className={rootClassName}\n style={{ width: toCssSize(width), height: toCssSize(height) }}\n >\n <Toolbar\n editor={editor}\n viewMode={effectiveViewMode}\n onToggleView={toggleView}\n source={source}\n sanitizeEmbeddedHtml={sanitizeEmbeddedHtml}\n onlyView={onlyView}\n />\n <div className={styles[\"content\"]}>\n {effectiveViewMode === \"wysiwyg\" ? (\n <RenderedView editor={editor} />\n ) : (\n <MarkdownSourceView\n value={source}\n onChange={handleSourceChange}\n readOnly={onlyView}\n />\n )}\n </div>\n {linkPopover !== null && (\n <FloatingPanel anchor={linkPopover.anchor} autoFocus>\n <LinkPopover\n url={linkPopover.url}\n onlyView={onlyView}\n onNavigate={() => {\n window.open(linkPopover.url, \"_blank\", \"noopener,noreferrer\");\n closeLinkPopover();\n }}\n onCopy={() => {\n void navigator.clipboard.writeText(linkPopover.url);\n closeLinkPopover();\n }}\n onSave={saveLinkPopover}\n onRemove={removeLinkPopover}\n onClose={closeLinkPopover}\n />\n </FloatingPanel>\n )}\n </div>\n );\n}\n","import { Node, type Extensions, type Editor } from \"@tiptap/core\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Table from \"@tiptap/extension-table\";\nimport TableRow from \"@tiptap/extension-table-row\";\nimport TableCell from \"@tiptap/extension-table-cell\";\nimport TableHeader from \"@tiptap/extension-table-header\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport CodeBlockLowlight from \"@tiptap/extension-code-block-lowlight\";\nimport { createLowlight } from \"lowlight\";\nimport json from \"highlight.js/lib/languages/json\";\nimport sql from \"highlight.js/lib/languages/sql\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport java from \"highlight.js/lib/languages/java\";\nimport {\n editorHtmlToMarkdown,\n markdownToEditorHtml,\n sanitizeHtmlFragment,\n} from \"./pipeline\";\n\n/**\n * Registro selectivo: solo los 5 lenguajes ya ofrecidos por el selector de\n * lenguaje de bloque de código, en vez de `createLowlight(all)` (~190\n * gramáticas), para mantener el bundle acotado (Principio VIII).\n */\nexport const lowlight = createLowlight();\nlowlight.register({ json, sql, typescript, javascript, java });\n\nexport interface HtmlBlockOptions {\n sanitize: boolean;\n}\n\n/**\n * Atom node that carries an embedded raw-HTML block byte-exact through the\n * editor (FR-020): the source lives in an encoded attribute so WYSIWYG edits\n * elsewhere never rewrite it, and the node view renders it sanitized unless\n * the consumer opted out (FR-022, FR-023).\n */\nexport const HtmlBlock = Node.create<HtmlBlockOptions>({\n name: \"htmlBlock\",\n group: \"block\",\n atom: true,\n\n addOptions() {\n return { sanitize: true };\n },\n\n addAttributes() {\n return { content: { default: \"\" } };\n },\n\n parseHTML() {\n return [\n {\n tag: \"div[data-raw-html]\",\n getAttrs: (element) => {\n const raw = (element as HTMLElement).getAttribute(\"data-raw-html\");\n return raw === null ? false : { content: decodeURIComponent(raw) };\n },\n },\n ];\n },\n\n renderHTML({ node }) {\n const content = node.attrs[\"content\"] as string;\n return [\"div\", { \"data-raw-html\": encodeURIComponent(content) }];\n },\n\n addNodeView() {\n return ({ node }) => {\n const dom = document.createElement(\"div\");\n dom.setAttribute(\"data-html-block\", \"\");\n const raw = node.attrs[\"content\"] as string;\n dom.innerHTML = this.options.sanitize ? sanitizeHtmlFragment(raw) : raw;\n return { dom };\n };\n },\n});\n\nexport interface EditorExtensionOptions {\n sanitizeEmbeddedHtml: boolean;\n}\n\nexport function createEditorExtensions(\n options: EditorExtensionOptions,\n): Extensions {\n return [\n StarterKit.configure({ codeBlock: false }),\n CodeBlockLowlight.configure({ lowlight }),\n Table.configure({ resizable: false }),\n TableRow,\n TableHeader,\n TableCell,\n TaskList,\n TaskItem.configure({ nested: true }),\n Link.configure({ openOnClick: false }),\n Image,\n HtmlBlock.configure({ sanitize: options.sanitizeEmbeddedHtml }),\n ];\n}\n\n/** Markdown (GFM) → contenido HTML para `editor.commands.setContent`. */\nexport function markdownToEditorContent(markdown: string): string {\n return markdownToEditorHtml(markdown);\n}\n\n/** Documento actual del editor → Markdown (GFM). */\nexport function editorToMarkdown(editor: Editor): string {\n return editorHtmlToMarkdown(editor.getHTML());\n}\n","const EXTENDED_NUMBER_RE = '([-+]?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)|NaN|[-+]?Infinity'; // 0x..., 0..., decimal, float\n\nconst EXTENDED_NUMBER_MODE = {\n scope: 'number',\n match: EXTENDED_NUMBER_RE,\n relevance: 0\n};\n\n/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nWebsites: http://www.json.org, https://www.json5.org\nCategory: common, protocols, web\n*/\n\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /((\"(\\\\.|[^\\\\\"\\r\\n])*\")|('(\\\\.|[^\\\\'\\r\\n])*'))(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc', 'json5'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n EXTENDED_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n - PostgreSQL and PL/pgSQL - core\n - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n const regex = hljs.regex;\n const COMMENT_MODE = hljs.COMMENT('--', '$');\n const STRING = {\n scope: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ { match: /''/ } ]\n }\n ]\n };\n const QUOTED_IDENTIFIER = {\n begin: /\"/,\n end: /\"/,\n contains: [ { match: /\"\"/ } ]\n };\n\n const LITERALS = [\n \"true\",\n \"false\",\n // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n // \"null\",\n \"unknown\"\n ];\n\n const MULTI_WORD_TYPES = [\n \"double precision\",\n \"large object\",\n \"with timezone\",\n \"without timezone\"\n ];\n\n const TYPES = [\n 'bigint',\n 'binary',\n 'blob',\n 'boolean',\n 'char',\n 'character',\n 'clob',\n 'date',\n 'dec',\n 'decfloat',\n 'decimal',\n 'float',\n 'int',\n 'integer',\n 'interval',\n 'nchar',\n 'nclob',\n 'national',\n 'numeric',\n 'real',\n 'row',\n 'smallint',\n 'time',\n 'timestamp',\n 'varchar',\n 'varying', // modifier (character varying)\n 'varbinary'\n ];\n\n const NON_RESERVED_WORDS = [\n \"add\",\n \"asc\",\n \"collation\",\n \"desc\",\n \"final\",\n \"first\",\n \"last\",\n \"view\"\n ];\n\n // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n const RESERVED_WORDS = [\n \"abs\",\n \"acos\",\n \"all\",\n \"allocate\",\n \"alter\",\n \"and\",\n \"any\",\n \"are\",\n \"array\",\n \"array_agg\",\n \"array_max_cardinality\",\n \"as\",\n \"asensitive\",\n \"asin\",\n \"asymmetric\",\n \"at\",\n \"atan\",\n \"atomic\",\n \"authorization\",\n \"avg\",\n \"begin\",\n \"begin_frame\",\n \"begin_partition\",\n \"between\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"both\",\n \"by\",\n \"call\",\n \"called\",\n \"cardinality\",\n \"cascaded\",\n \"case\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"char\",\n \"char_length\",\n \"character\",\n \"character_length\",\n \"check\",\n \"classifier\",\n \"clob\",\n \"close\",\n \"coalesce\",\n \"collate\",\n \"collect\",\n \"column\",\n \"commit\",\n \"condition\",\n \"connect\",\n \"constraint\",\n \"contains\",\n \"convert\",\n \"copy\",\n \"corr\",\n \"corresponding\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"create\",\n \"cross\",\n \"cube\",\n \"cume_dist\",\n \"current\",\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_row\",\n \"current_schema\",\n \"current_time\",\n \"current_timestamp\",\n \"current_path\",\n \"current_role\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"cursor\",\n \"cycle\",\n \"date\",\n \"day\",\n \"deallocate\",\n \"dec\",\n \"decimal\",\n \"decfloat\",\n \"declare\",\n \"default\",\n \"define\",\n \"delete\",\n \"dense_rank\",\n \"deref\",\n \"describe\",\n \"deterministic\",\n \"disconnect\",\n \"distinct\",\n \"double\",\n \"drop\",\n \"dynamic\",\n \"each\",\n \"element\",\n \"else\",\n \"empty\",\n \"end\",\n \"end_frame\",\n \"end_partition\",\n \"end-exec\",\n \"equals\",\n \"escape\",\n \"every\",\n \"except\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exp\",\n \"external\",\n \"extract\",\n \"false\",\n \"fetch\",\n \"filter\",\n \"first_value\",\n \"float\",\n \"floor\",\n \"for\",\n \"foreign\",\n \"frame_row\",\n \"free\",\n \"from\",\n \"full\",\n \"function\",\n \"fusion\",\n \"get\",\n \"global\",\n \"grant\",\n \"group\",\n \"grouping\",\n \"groups\",\n \"having\",\n \"hold\",\n \"hour\",\n \"identity\",\n \"in\",\n \"indicator\",\n \"initial\",\n \"inner\",\n \"inout\",\n \"insensitive\",\n \"insert\",\n \"int\",\n \"integer\",\n \"intersect\",\n \"intersection\",\n \"interval\",\n \"into\",\n \"is\",\n \"join\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"language\",\n \"large\",\n \"last_value\",\n \"lateral\",\n \"lead\",\n \"leading\",\n \"left\",\n \"like\",\n \"like_regex\",\n \"listagg\",\n \"ln\",\n \"local\",\n \"localtime\",\n \"localtimestamp\",\n \"log\",\n \"log10\",\n \"lower\",\n \"match\",\n \"match_number\",\n \"match_recognize\",\n \"matches\",\n \"max\",\n \"member\",\n \"merge\",\n \"method\",\n \"min\",\n \"minute\",\n \"mod\",\n \"modifies\",\n \"module\",\n \"month\",\n \"multiset\",\n \"national\",\n \"natural\",\n \"nchar\",\n \"nclob\",\n \"new\",\n \"no\",\n \"none\",\n \"normalize\",\n \"not\",\n \"nth_value\",\n \"ntile\",\n \"null\",\n \"nullif\",\n \"numeric\",\n \"octet_length\",\n \"occurrences_regex\",\n \"of\",\n \"offset\",\n \"old\",\n \"omit\",\n \"on\",\n \"one\",\n \"only\",\n \"open\",\n \"or\",\n \"order\",\n \"out\",\n \"outer\",\n \"over\",\n \"overlaps\",\n \"overlay\",\n \"parameter\",\n \"partition\",\n \"pattern\",\n \"per\",\n \"percent\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"period\",\n \"portion\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"precedes\",\n \"precision\",\n \"prepare\",\n \"primary\",\n \"procedure\",\n \"ptf\",\n \"range\",\n \"rank\",\n \"reads\",\n \"real\",\n \"recursive\",\n \"ref\",\n \"references\",\n \"referencing\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"release\",\n \"result\",\n \"return\",\n \"returns\",\n \"revoke\",\n \"right\",\n \"rollback\",\n \"rollup\",\n \"row\",\n \"row_number\",\n \"rows\",\n \"running\",\n \"savepoint\",\n \"scope\",\n \"scroll\",\n \"search\",\n \"second\",\n \"seek\",\n \"select\",\n \"sensitive\",\n \"session_user\",\n \"set\",\n \"show\",\n \"similar\",\n \"sin\",\n \"sinh\",\n \"skip\",\n \"smallint\",\n \"some\",\n \"specific\",\n \"specifictype\",\n \"sql\",\n \"sqlexception\",\n \"sqlstate\",\n \"sqlwarning\",\n \"sqrt\",\n \"start\",\n \"static\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"submultiset\",\n \"subset\",\n \"substring\",\n \"substring_regex\",\n \"succeeds\",\n \"sum\",\n \"symmetric\",\n \"system\",\n \"system_time\",\n \"system_user\",\n \"table\",\n \"tablesample\",\n \"tan\",\n \"tanh\",\n \"then\",\n \"time\",\n \"timestamp\",\n \"timezone_hour\",\n \"timezone_minute\",\n \"to\",\n \"trailing\",\n \"translate\",\n \"translate_regex\",\n \"translation\",\n \"treat\",\n \"trigger\",\n \"trim\",\n \"trim_array\",\n \"true\",\n \"truncate\",\n \"uescape\",\n \"union\",\n \"unique\",\n \"unknown\",\n \"unnest\",\n \"update\",\n \"upper\",\n \"user\",\n \"using\",\n \"value\",\n \"values\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"varbinary\",\n \"varchar\",\n \"varying\",\n \"versioning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"width_bucket\",\n \"window\",\n \"with\",\n \"within\",\n \"without\",\n \"year\",\n ];\n\n // these are reserved words we have identified to be functions\n // and should only be highlighted in a dispatch-like context\n // ie, array_agg(...), etc.\n const RESERVED_FUNCTIONS = [\n \"abs\",\n \"acos\",\n \"array_agg\",\n \"asin\",\n \"atan\",\n \"avg\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"coalesce\",\n \"corr\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"cume_dist\",\n \"dense_rank\",\n \"deref\",\n \"element\",\n \"exp\",\n \"extract\",\n \"first_value\",\n \"floor\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"listagg\",\n \"ln\",\n \"log\",\n \"log10\",\n \"lower\",\n \"max\",\n \"min\",\n \"mod\",\n \"nth_value\",\n \"ntile\",\n \"nullif\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"rank\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"row_number\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"substring\",\n \"substring_regex\",\n \"sum\",\n \"tan\",\n \"tanh\",\n \"translate\",\n \"translate_regex\",\n \"treat\",\n \"trim\",\n \"trim_array\",\n \"unnest\",\n \"upper\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"width_bucket\",\n ];\n\n // these functions can\n const POSSIBLE_WITHOUT_PARENS = [\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_schema\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"session_user\",\n \"system_time\",\n \"system_user\",\n \"current_time\",\n \"localtime\",\n \"current_timestamp\",\n \"localtimestamp\"\n ];\n\n // those exist to boost relevance making these very\n // \"SQL like\" keyword combos worth +1 extra relevance\n const COMBOS = [\n \"create table\",\n \"insert into\",\n \"primary key\",\n \"foreign key\",\n \"not null\",\n \"alter table\",\n \"add constraint\",\n \"grouping sets\",\n \"on overflow\",\n \"character set\",\n \"respect nulls\",\n \"ignore nulls\",\n \"nulls first\",\n \"nulls last\",\n \"depth first\",\n \"breadth first\"\n ];\n\n const FUNCTIONS = RESERVED_FUNCTIONS;\n\n const KEYWORDS = [\n ...RESERVED_WORDS,\n ...NON_RESERVED_WORDS\n ].filter((keyword) => {\n return !RESERVED_FUNCTIONS.includes(keyword);\n });\n\n const VARIABLE = {\n scope: \"variable\",\n match: /@[a-z0-9][a-z0-9_]*/,\n };\n\n const OPERATOR = {\n scope: \"operator\",\n match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n relevance: 0,\n };\n\n const FUNCTION_CALL = {\n match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n relevance: 0,\n keywords: { built_in: FUNCTIONS }\n };\n\n // turns a multi-word keyword combo into a regex that doesn't\n // care about extra whitespace etc.\n // input: \"START QUERY\"\n // output: /\\bSTART\\s+QUERY\\b/\n function kws_to_regex(list) {\n return regex.concat(\n /\\b/,\n regex.either(...list.map((kw) => {\n return kw.replace(/\\s+/, \"\\\\s+\")\n })),\n /\\b/\n )\n }\n\n const MULTI_WORD_KEYWORDS = {\n scope: \"keyword\",\n match: kws_to_regex(COMBOS),\n relevance: 0,\n };\n\n // keywords with less than 3 letters are reduced in relevancy\n function reduceRelevancy(list, {\n exceptions, when\n } = {}) {\n const qualifyFn = when;\n exceptions = exceptions || [];\n return list.map((item) => {\n if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n return item;\n } else if (qualifyFn(item)) {\n return `${item}|0`;\n } else {\n return item;\n }\n });\n }\n\n return {\n name: 'SQL',\n case_insensitive: true,\n // does not include {} or HTML tags `</`\n illegal: /[{}]|<\\//,\n keywords: {\n $pattern: /\\b[\\w\\.]+/,\n keyword:\n reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n literal: LITERALS,\n type: TYPES,\n built_in: POSSIBLE_WITHOUT_PARENS\n },\n contains: [\n {\n scope: \"type\",\n match: kws_to_regex(MULTI_WORD_TYPES)\n },\n MULTI_WORD_KEYWORDS,\n FUNCTION_CALL,\n VARIABLE,\n STRING,\n QUOTED_IDENTIFIER,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n OPERATOR\n ]\n };\n}\n\nexport { sql as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nexport { typescript as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\n\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"self\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\",\n \"await\",\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-Za-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\nLanguage: Java\nAuthor: Vsevolod Solovyov <vsevolod.solovyov@gmail.com>\nCategory: common, enterprise\nWebsite: https://www.java.com/\n*/\n\n\n/**\n * Allows recursive regex expressions to a given depth\n *\n * ie: recurRegex(\"(abc~~~)\", /~~~/g, 2) becomes:\n * (abc(abc(abc)))\n *\n * @param {string} re\n * @param {RegExp} substitution (should be a g mode regex)\n * @param {number} depth\n * @returns {string}``\n */\nfunction recurRegex(re, substitution, depth) {\n if (depth === -1) return \"\";\n\n return re.replace(substitution, _ => {\n return recurRegex(re, substitution, depth - 1);\n });\n}\n\n/** @type LanguageFn */\nfunction java(hljs) {\n const regex = hljs.regex;\n\n // A Java identifier consisting of letters, digits, underscore or dollar sign, not beginning with a digit\n const JAVA_IDENT_RE = '[\\u00C0-\\u02B8a-zA-Z_$][\\u00C0-\\u02B8a-zA-Z_$0-9]*';\n\n // Optional 1..n pairs of square brackets identifying an array type\n const ARRAY_BRACKETS_OPTIONAL_RE = '(?:(?:\\\\s*\\\\[\\\\s*])+)?';\n\n // A simple Java type: a type name, optionally followed by type arguments and/or array brackets\n // '<@@@>' is replaced with the pattern for optional type arguments by recurRegex below.\n const SIMPLE_TYPE_RE = JAVA_IDENT_RE + '<@@@>' + ARRAY_BRACKETS_OPTIONAL_RE;\n\n // A bounded (? extends Number) or unbounded (?) wildcard type\n const WILDCARD_TYPE_RE = '\\\\?(?:\\\\s+(?:extends|super)\\\\s+' + SIMPLE_TYPE_RE + ')?';\n\n // A Java type argument, consisting of a wildcard or simple type\n const TYPE_ARG_RE = '(?:' + WILDCARD_TYPE_RE + '|' + SIMPLE_TYPE_RE + ')';\n\n // Pattern for optional generic type arguments in angle brackets with up to 2 levels of nested type arguments\n const TYPE_ARGS_OPTIONAL_RE = recurRegex('(?:\\\\s*<\\\\s*' + TYPE_ARG_RE + '(?:\\\\s*,\\\\s*' + TYPE_ARG_RE + ')*\\\\s*>)?',\n /<@@@>/g, 2);\n\n const MAIN_KEYWORDS = [\n 'synchronized',\n 'abstract',\n 'private',\n 'var',\n 'static',\n 'if',\n 'const ',\n 'for',\n 'while',\n 'strictfp',\n 'finally',\n 'protected',\n 'import',\n 'native',\n 'final',\n 'void',\n 'enum',\n 'else',\n 'break',\n 'transient',\n 'catch',\n 'instanceof',\n 'volatile',\n 'case',\n 'assert',\n 'package',\n 'default',\n 'public',\n 'try',\n 'switch',\n 'continue',\n 'throws',\n 'protected',\n 'public',\n 'private',\n 'module',\n 'requires',\n 'exports',\n 'do',\n 'sealed',\n 'yield',\n 'permits',\n 'goto',\n 'when'\n ];\n\n const BUILT_INS = [\n 'super',\n 'this'\n ];\n\n const LITERALS = [\n 'false',\n 'true',\n 'null'\n ];\n\n const TYPES = [\n 'char',\n 'boolean',\n 'long',\n 'float',\n 'int',\n 'byte',\n 'short',\n 'double'\n ];\n\n const KEYWORDS = {\n keyword: MAIN_KEYWORDS,\n literal: LITERALS,\n type: TYPES,\n built_in: BUILT_INS\n };\n\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + JAVA_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [ \"self\" ] // allow nested () inside our annotation\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [ hljs.C_BLOCK_COMMENT_MODE ],\n endsParent: true\n };\n\n return {\n name: 'Java',\n aliases: [ 'jsp' ],\n keywords: KEYWORDS,\n illegal: /<\\/|#/,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n // eat up @'s in emails to prevent them to be recognized as doctags\n begin: /\\w+@/,\n relevance: 0\n },\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n // relevance boost\n {\n begin: /import java\\.[a-z]+\\./,\n keywords: \"import\",\n relevance: 2\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n begin: /\"\"\"/,\n end: /\"\"\"/,\n className: \"string\",\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n {\n match: [\n /\\b(?:class|interface|enum|extends|implements|new)/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n // Exceptions for hyphenated keywords\n match: /non-sealed/,\n scope: \"keyword\"\n },\n {\n // Expression keywords prevent keyword-led expressions from being\n // recognized as variable or method declarations.\n beginKeywords: 'new throw return else yield assert',\n relevance: 0\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n ARRAY_BRACKETS_OPTIONAL_RE,\n /\\s*/,\n /=(?!=)/\n ],\n className: {\n 1: \"type\",\n 3: \"variable\",\n 6: \"operator\"\n }\n },\n {\n begin: [\n /record/,\n /\\s+/,\n JAVA_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n },\n contains: [\n PARAMS,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n begin: [\n JAVA_IDENT_RE,\n regex.concat(TYPE_ARGS_OPTIONAL_RE, ARRAY_BRACKETS_OPTIONAL_RE, /\\s+/),\n JAVA_IDENT_RE,\n /\\s*(?=\\()/\n ],\n className: {\n 1: \"type\",\n 3: \"title.function\"\n },\n keywords: KEYWORDS,\n contains: [\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n ANNOTATION,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMERIC,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n NUMERIC,\n ANNOTATION\n ]\n };\n}\n\nexport { java as default };\n","import { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport remarkGfm from \"remark-gfm\";\nimport remarkRehype from \"remark-rehype\";\nimport remarkStringify from \"remark-stringify\";\nimport rehypeStringify from \"rehype-stringify\";\nimport rehypeParse from \"rehype-parse\";\nimport rehypeRaw from \"rehype-raw\";\nimport rehypeRemark from \"rehype-remark\";\nimport rehypeSanitize, { defaultSchema } from \"rehype-sanitize\";\nimport rehypeHighlight from \"rehype-highlight\";\nimport { visit } from \"unist-util-visit\";\nimport type { Root as MdastRoot, RootContent } from \"mdast\";\nimport type { Root as HastRoot, Element, ElementContent } from \"hast\";\nimport type { State } from \"hast-util-to-mdast\";\nimport json from \"highlight.js/lib/languages/json\";\nimport sql from \"highlight.js/lib/languages/sql\";\nimport typescript from \"highlight.js/lib/languages/typescript\";\nimport javascript from \"highlight.js/lib/languages/javascript\";\nimport java from \"highlight.js/lib/languages/java\";\n\nconst HIGHLIGHT_LANGUAGES = { json, sql, typescript, javascript, java };\n\n/**\n * `rehype-sanitize`'s default (GFM) schema strips `class` from `code`/`span`,\n * which would silently discard the `hljs-*` classes rehype-highlight just\n * added. Extend it explicitly so exported HTML keeps the highlighting.\n */\nconst sanitizeSchemaWithHighlight = {\n ...defaultSchema,\n attributes: {\n ...defaultSchema.attributes,\n code: [...(defaultSchema.attributes?.code ?? []), \"className\"],\n span: [...(defaultSchema.attributes?.span ?? []), \"className\"],\n },\n};\n\nexport interface PipelineOptions {\n sanitize: boolean;\n}\n\nconst STRINGIFY_OPTIONS = {\n bullet: \"-\",\n listItemIndent: \"one\",\n fences: true,\n rule: \"-\",\n} as const;\n\nfunction isElement(node: ElementContent | HastRoot): node is Element {\n return node.type === \"element\";\n}\n\n/**\n * Replaces mdast raw-html nodes before remark-rehype so the WYSIWYG editor\n * can round-trip them byte-exact: block HTML becomes a placeholder element\n * carrying the encoded source; inline HTML degrades to visible plain text\n * (best effort, never executed).\n */\nfunction embedRawHtml() {\n return (tree: MdastRoot): void => {\n visit(tree, \"html\", (node, index, parent) => {\n if (parent === undefined || index === undefined) return;\n if (parent.type === \"paragraph\") {\n parent.children[index] = { type: \"text\", value: node.value };\n } else {\n const placeholder = {\n type: \"htmlEmbed\",\n data: {\n hName: \"div\",\n hProperties: { dataRawHtml: encodeURIComponent(node.value) },\n },\n };\n parent.children[index] = placeholder as unknown as RootContent;\n }\n });\n };\n}\n\n/**\n * remark-gfm emits `<li class=\"task-list-item\"><input …>` but Tiptap's\n * TaskList/TaskItem extensions only parse `data-type` attributes, so GFM\n * checklists would silently downgrade to plain lists without this rewrite.\n */\nfunction taskListsToTiptap() {\n return (tree: HastRoot): void => {\n visit(tree, \"element\", (node) => {\n if (node.tagName !== \"li\") return;\n const classes = Array.isArray(node.properties.className)\n ? node.properties.className\n : [];\n if (!classes.includes(\"task-list-item\")) return;\n\n let checked = false;\n node.children = node.children.filter((child) => {\n if (isElement(child) && child.tagName === \"input\") {\n checked = child.properties.checked === true;\n return false;\n }\n return true;\n });\n node.properties.dataType = \"taskItem\";\n node.properties.dataChecked = String(checked);\n node.properties.className = undefined;\n });\n visit(tree, \"element\", (node) => {\n if (node.tagName !== \"ul\") return;\n const hasTaskItem = node.children.some(\n (child) => isElement(child) && child.properties.dataType === \"taskItem\",\n );\n if (hasTaskItem) {\n node.properties.dataType = \"taskList\";\n node.properties.className = undefined;\n }\n });\n };\n}\n\n/**\n * Inverse of taskListsToTiptap: Tiptap wraps task item content in\n * `<label><input …></label><div>…</div>`, which hast-util-to-mdast does not\n * recognize as a GFM task item. Rewrites to `<li><input …> content`.\n */\nfunction tiptapTaskListsToGfm() {\n return (tree: HastRoot): void => {\n visit(tree, \"element\", (node) => {\n if (node.tagName !== \"li\" || node.properties.dataType !== \"taskItem\") {\n return;\n }\n const checked = node.properties.dataChecked === \"true\";\n const content: ElementContent[] = [];\n for (const child of node.children) {\n if (isElement(child) && child.tagName === \"label\") continue;\n if (isElement(child) && child.tagName === \"div\") {\n content.push(...child.children);\n } else {\n content.push(child);\n }\n }\n const checkbox: Element = {\n type: \"element\",\n tagName: \"input\",\n properties: { type: \"checkbox\", checked, disabled: true },\n children: [],\n };\n node.children = [checkbox, ...content];\n });\n };\n}\n\n/**\n * Tiptap wraps every list item's content in `<p>`, which hast-util-to-mdast\n * interprets as a loose list (blank lines between items). Unwrapping the\n * single paragraph keeps serialized lists tight/canonical.\n */\nfunction tightenListItems() {\n return (tree: HastRoot): void => {\n visit(tree, \"element\", (node) => {\n if (node.tagName !== \"li\") return;\n const paragraphs = node.children.filter(\n (child) => isElement(child) && child.tagName === \"p\",\n );\n if (paragraphs.length !== 1) return;\n node.children = node.children.flatMap((child) =>\n isElement(child) && child.tagName === \"p\" ? child.children : [child],\n );\n });\n };\n}\n\n/** Markdown (GFM) → HTML listo para `editor.commands.setContent`. */\nexport function markdownToEditorHtml(markdown: string): string {\n const file = unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(embedRawHtml)\n .use(remarkRehype)\n .use(taskListsToTiptap)\n .use(rehypeStringify)\n .processSync(markdown);\n return String(file);\n}\n\n/** HTML emitido por Tiptap (`editor.getHTML()`) → Markdown (GFM). */\nexport function editorHtmlToMarkdown(html: string): string {\n const file = unified()\n .use(rehypeParse, { fragment: true })\n .use(tiptapTaskListsToGfm)\n .use(tightenListItems)\n .use(rehypeRemark, {\n handlers: {\n div(state: State, node: Element) {\n const raw = node.properties.dataRawHtml;\n if (typeof raw === \"string\") {\n return { type: \"html\" as const, value: decodeURIComponent(raw) };\n }\n return state.all(node);\n },\n },\n })\n .use(remarkGfm)\n .use(remarkStringify, STRINGIFY_OPTIONS)\n .processSync(html);\n return String(file);\n}\n\n/** Markdown (GFM) → HTML completo para exportación (FR-013, FR-017). */\nexport function markdownToHtml(\n markdown: string,\n options: PipelineOptions,\n): string {\n const processor = unified()\n .use(remarkParse)\n .use(remarkGfm)\n .use(remarkRehype, { allowDangerousHtml: true })\n .use(rehypeRaw)\n .use(rehypeHighlight, {\n languages: HIGHLIGHT_LANGUAGES,\n ignoreMissing: true,\n });\n const withSanitize = options.sanitize\n ? processor.use(rehypeSanitize, sanitizeSchemaWithHighlight)\n : processor;\n const file = withSanitize.use(rehypeStringify).processSync(markdown);\n return String(file);\n}\n\n/** Sanitiza un fragmento HTML aislado (bloques de HTML embebido, FR-022). */\nexport function sanitizeHtmlFragment(html: string): string {\n const file = unified()\n .use(rehypeParse, { fragment: true })\n .use(rehypeSanitize)\n .use(rehypeStringify)\n .processSync(html);\n return String(file);\n}\n","import { EditorContent, type Editor } from \"@tiptap/react\";\n\nexport interface RenderedViewProps {\n editor: Editor | null;\n}\n\nexport function RenderedView({ editor }: RenderedViewProps) {\n return <EditorContent editor={editor} />;\n}\n",".root {\n --mdw-border: #d0d4da;\n --mdw-bg: #ffffff;\n --mdw-fg: #1f2328;\n --mdw-muted: #f6f7f9;\n --mdw-accent: #3d6fd8;\n --mdw-toolbar-gradient-from: #eeeeee;\n --mdw-toolbar-gradient-via: #dcdcdc;\n --mdw-toolbar-gradient-to: #cfcfcf;\n --mdw-toolbar-fg: #222222;\n --mdw-toolbar-font-family: Arial, sans-serif;\n --mdw-content-bg: var(--mdw-bg);\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n border: 1px solid var(--mdw-border);\n border-radius: 6px;\n background: var(--mdw-bg);\n color: var(--mdw-fg);\n font-family: system-ui, -apple-system, \"Segoe UI\", sans-serif;\n font-size: 14px;\n overflow: hidden;\n}\n\n.resizable {\n resize: both;\n overflow: auto;\n min-width: 320px;\n min-height: 200px;\n}\n\n.root *,\n.root *::before,\n.root *::after {\n box-sizing: inherit;\n}\n\n.content {\n flex: 1;\n min-height: 0;\n overflow: auto;\n display: flex;\n flex-direction: column;\n background: var(--mdw-content-bg);\n}\n\n.content > div {\n flex: 1;\n display: flex;\n flex-direction: column;\n}\n\n.content :global(.ProseMirror) {\n flex: 1;\n padding: 12px 16px;\n outline: none;\n white-space: pre-wrap;\n word-wrap: break-word;\n}\n\n.content :global(.ProseMirror p) {\n margin: 0 0 0.6em;\n}\n\n.content :global(.ProseMirror pre) {\n background: var(--mdw-muted);\n border: 1px solid var(--mdw-border);\n border-radius: 4px;\n padding: 8px 12px;\n font-family: ui-monospace, Consolas, monospace;\n font-size: 13px;\n overflow-x: auto;\n}\n\n.content :global(.hljs-keyword),\n.content :global(.hljs-selector-tag),\n.content :global(.hljs-literal) {\n color: #a626a4;\n}\n\n.content :global(.hljs-string),\n.content :global(.hljs-attr) {\n color: #50a14f;\n}\n\n.content :global(.hljs-comment),\n.content :global(.hljs-quote) {\n color: #a0a1a7;\n font-style: italic;\n}\n\n.content :global(.hljs-number),\n.content :global(.hljs-built_in) {\n color: #986801;\n}\n\n.content :global(.hljs-title),\n.content :global(.hljs-title.function_),\n.content :global(.hljs-title.class_) {\n color: #4078f2;\n}\n\n.content :global(.ProseMirror table) {\n border-collapse: collapse;\n margin: 0.6em 0;\n}\n\n.content :global(.ProseMirror th),\n.content :global(.ProseMirror td) {\n border: 1px solid var(--mdw-border);\n padding: 4px 8px;\n min-width: 3em;\n}\n\n.content :global(.ProseMirror th) {\n background: var(--mdw-muted);\n}\n\n.content :global(.ProseMirror hr) {\n border: none;\n border-top: 2px solid var(--mdw-border);\n margin: 1em 0;\n}\n\n.content :global(.ProseMirror img) {\n max-width: 100%;\n}\n\n.content :global(.ProseMirror blockquote) {\n border-left: 3px solid var(--mdw-border);\n margin: 0.6em 0;\n padding-left: 12px;\n color: #57606a;\n}\n\n.content :global(.ProseMirror ul[data-type=\"taskList\"]) {\n list-style: none;\n padding-left: 0.25em;\n}\n\n.content :global(.ProseMirror ul[data-type=\"taskList\"] li) {\n display: flex;\n gap: 0.5em;\n}\n\n.content :global(.ProseMirror ul[data-type=\"taskList\"] li > div) {\n flex: 1;\n}\n\n.content :global(.ProseMirror div[data-html-block]) {\n border: 1px dashed var(--mdw-border);\n border-radius: 4px;\n padding: 6px 10px;\n margin: 0.6em 0;\n}\n\n.source {\n flex: 1;\n width: 100%;\n border: none;\n resize: none;\n outline: none;\n padding: 12px 16px;\n font-family: ui-monospace, Consolas, monospace;\n font-size: 13px;\n line-height: 1.5;\n color: inherit;\n background: transparent;\n}\n\n.toolbar {\n position: relative;\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n min-height: 36px;\n padding: 2px 3px;\n gap: 2px;\n background: linear-gradient(\n to bottom,\n var(--mdw-toolbar-gradient-from) 0%,\n var(--mdw-toolbar-gradient-via) 45%,\n var(--mdw-toolbar-gradient-to) 100%\n );\n color: var(--mdw-toolbar-fg);\n font-family: var(--mdw-toolbar-font-family);\n border-bottom: 1px solid #999;\n box-shadow:\n inset 0 1px 0 #fff,\n 0 1px 2px rgba(0, 0, 0, 0.15);\n overflow-x: auto;\n overflow-y: visible;\n}\n\n.readOnlyNotice {\n padding: 0 8px;\n font-size: 13px;\n font-style: italic;\n color: var(--mdw-toolbar-fg);\n font-family: var(--mdw-toolbar-font-family);\n}\n\n.toolbar > .button,\n.toolbar > .separator {\n flex-shrink: 0;\n}\n\n.separator {\n width: 1px;\n height: 25px;\n margin: 0 3px;\n background: #aaa;\n box-shadow: 1px 0 0 #fff;\n}\n\n.spacer {\n flex-shrink: 0;\n margin-left: auto;\n}\n\n.button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 29px;\n height: 29px;\n padding: 0;\n border: 1px solid transparent;\n border-radius: 2px;\n background: transparent;\n color: var(--mdw-toolbar-fg);\n font-family: var(--mdw-toolbar-font-family);\n font-size: 15px;\n cursor: pointer;\n}\n\n.button svg {\n width: 17px;\n height: 17px;\n stroke: currentColor;\n fill: none;\n stroke-width: 1.8;\n stroke-linecap: round;\n stroke-linejoin: round;\n}\n\n.button:hover:not(:disabled) {\n background: linear-gradient(to bottom, #ffffff, #d8d8d8);\n border-color: #999;\n box-shadow:\n inset 0 1px 0 #fff,\n 0 1px 1px rgba(0, 0, 0, 0.15);\n}\n\n.button:active:not(:disabled),\n.button[aria-pressed=\"true\"] {\n background: #c8c8c8;\n border-color: #999;\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.25);\n}\n\n.button:focus-visible {\n outline: 2px solid var(--mdw-accent);\n outline-offset: 1px;\n}\n\n.button:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.textButton {\n width: auto;\n padding: 0 10px;\n font-size: 13px;\n}\n\n.boldGlyph {\n font-weight: bold;\n font-size: 17px;\n}\n\n.italicGlyph {\n font-family: Georgia, serif;\n font-style: italic;\n font-weight: bold;\n font-size: 17px;\n}\n\n.strikeGlyph {\n font-size: 16px;\n text-decoration: line-through;\n}\n\n.htmlIcon {\n font-family: ui-monospace, monospace;\n font-weight: bold;\n font-size: 11px;\n}\n\n.headingSelect {\n flex-shrink: 1;\n flex-basis: 118px;\n min-width: 30px;\n width: 118px;\n height: 29px;\n padding: 0 25px 0 9px;\n border: 1px solid #999;\n border-radius: 2px;\n background-color: #e9e9e9;\n background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23222' stroke-width='1.5'/%3E%3C/svg%3E\");\n background-repeat: no-repeat;\n background-position: right 8px center;\n color: var(--mdw-toolbar-fg);\n font-family: var(--mdw-toolbar-font-family);\n font-size: 13px;\n cursor: pointer;\n box-shadow: inset 0 1px 0 #fff;\n appearance: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.headingSelect:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n.dialog {\n display: flex;\n flex-direction: column;\n gap: 8px;\n width: 260px;\n max-width: calc(100vw - 24px);\n padding: 10px 12px;\n border: 1px solid var(--mdw-border);\n border-radius: 6px;\n background: var(--mdw-bg);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n box-sizing: border-box;\n}\n\n.dialogField {\n display: flex;\n flex-direction: column;\n gap: 2px;\n font-size: 12px;\n}\n\n.dialogField input,\n.dialogField textarea,\n.dialogField select {\n width: 100%;\n border: 1px solid var(--mdw-border);\n border-radius: 4px;\n padding: 4px 6px;\n font: inherit;\n font-size: 13px;\n}\n\n.dialogField textarea {\n resize: vertical;\n font-family: ui-monospace, Consolas, monospace;\n}\n\n.dialogActions {\n display: flex;\n gap: 6px;\n justify-content: flex-end;\n flex-wrap: nowrap;\n}\n\n.dialogActions button {\n flex: 0 0 auto;\n white-space: nowrap;\n}\n\n.tablePicker {\n align-items: center;\n min-width: 0;\n}\n\n.tablePickerLabel {\n font-size: 12px;\n text-align: center;\n min-height: 1.2em;\n}\n\n.tablePickerGrid {\n display: grid;\n gap: 2px;\n padding: 2px;\n}\n\n.tablePickerGrid:focus-visible {\n outline: 2px solid var(--mdw-accent);\n outline-offset: 2px;\n}\n\n.tablePickerCell {\n width: 16px;\n height: 16px;\n border: 1px solid #999;\n border-radius: 2px;\n background: var(--mdw-bg);\n cursor: pointer;\n}\n\n.tablePickerCell[data-selected=\"true\"] {\n background: #dbe4f8;\n border-color: var(--mdw-accent);\n}\n\n.menu {\n display: flex;\n flex-direction: column;\n min-width: 190px;\n padding: 4px;\n border: 1px solid var(--mdw-border);\n border-radius: 6px;\n background: var(--mdw-bg);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);\n}\n\n.menuItem {\n text-align: left;\n border: none;\n border-radius: 4px;\n background: transparent;\n color: inherit;\n font: inherit;\n font-size: 13px;\n padding: 6px 8px;\n cursor: pointer;\n}\n\n.menuItem:hover,\n.menuItem:focus-visible {\n background: #e4e7eb;\n outline: none;\n}\n\n.menuSeparator {\n height: 1px;\n margin: 4px 2px;\n background: var(--mdw-border);\n border: none;\n}\n\n.dangerLink {\n align-self: flex-start;\n border: none;\n background: transparent;\n color: #b42318;\n font: inherit;\n font-size: 12px;\n text-decoration: underline;\n cursor: pointer;\n padding: 0;\n}\n\n.dangerLink:hover,\n.dangerLink:focus-visible {\n color: #8c1c11;\n outline: none;\n}\n","import styles from \"../MarkdownEditor.module.css\";\n\nexport interface MarkdownSourceViewProps {\n value: string;\n onChange: (value: string) => void;\n readOnly?: boolean;\n}\n\nexport function MarkdownSourceView({\n value,\n onChange,\n readOnly = false,\n}: MarkdownSourceViewProps) {\n return (\n <textarea\n className={styles[\"source\"]}\n aria-label=\"Código fuente Markdown\"\n spellCheck={false}\n value={value}\n readOnly={readOnly}\n onChange={(event) => onChange(event.target.value)}\n />\n );\n}\n","import { useEffect, useReducer, useState, type MouseEvent } from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport type { ViewMode } from \"../types\";\nimport { ToolbarButton } from \"./buttons/ToolbarButton\";\nimport { InsertDialog, type DialogKind } from \"./buttons/InsertDialogs\";\nimport { TableSizePicker } from \"./buttons/TableSizePicker\";\nimport { CodeLanguagePicker } from \"./buttons/CodeLanguagePicker\";\nimport { FloatingPanel } from \"./buttons/FloatingPanel\";\nimport { ExportMenu } from \"./buttons/ExportMenu\";\nimport { Separator } from \"./buttons/Separator\";\nimport {\n IconCode,\n IconCodeBlock,\n IconBullets,\n IconNumbered,\n IconChecklist,\n IconIndent,\n IconOutdent,\n IconQuote,\n IconTable,\n IconLink,\n IconImage,\n IconHr,\n} from \"./buttons/icons\";\nimport styles from \"../MarkdownEditor.module.css\";\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\nconst HEADING_LEVELS: readonly HeadingLevel[] = [1, 2, 3, 4, 5, 6];\n\nexport interface ToolbarProps {\n editor: Editor | null;\n viewMode: ViewMode;\n onToggleView: () => void;\n source: string;\n sanitizeEmbeddedHtml: boolean;\n onlyView?: boolean;\n}\n\nexport function Toolbar({\n editor,\n viewMode,\n onToggleView,\n source,\n sanitizeEmbeddedHtml,\n onlyView = false,\n}: ToolbarProps) {\n const [, forceUpdate] = useReducer((count: number) => count + 1, 0);\n const [openDialog, setOpenDialog] = useState<\n DialogKind | \"table\" | \"codeLanguage\" | null\n >(null);\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n\n const openDialogAt = (\n kind: DialogKind | \"table\" | \"codeLanguage\",\n event: MouseEvent<HTMLElement>,\n ) => {\n setAnchor(event.currentTarget);\n setOpenDialog(kind);\n };\n\n useEffect(() => {\n if (!editor) return;\n editor.on(\"transaction\", forceUpdate);\n return () => {\n editor.off(\"transaction\", forceUpdate);\n };\n }, [editor]);\n\n if (onlyView) {\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Barra de herramientas\"\n className={styles[\"toolbar\"]}\n >\n <span className={styles[\"readOnlyNotice\"]}>Edición desactivada</span>\n <div className={styles[\"spacer\"]}>\n <ExportMenu source={source} sanitize={sanitizeEmbeddedHtml} />\n </div>\n </div>\n );\n }\n\n const canFormat = viewMode === \"wysiwyg\" && editor !== null;\n\n const activeHeading = canFormat\n ? (HEADING_LEVELS.find((level) =>\n editor.isActive(\"heading\", { level }),\n ) ?? null)\n : null;\n\n const listItemType =\n canFormat && editor.isActive(\"taskItem\") ? \"taskItem\" : \"listItem\";\n\n const closeDialog = () => setOpenDialog(null);\n\n return (\n <div\n role=\"toolbar\"\n aria-label=\"Barra de herramientas\"\n className={styles[\"toolbar\"]}\n >\n <ToolbarButton\n label=\"Ver código Markdown\"\n pressed={viewMode === \"markdown\"}\n onClick={onToggleView}\n >\n <IconCode />\n </ToolbarButton>\n\n <select\n className={styles[\"headingSelect\"]}\n aria-label=\"Nivel de encabezado\"\n disabled={!canFormat}\n value={activeHeading === null ? \"p\" : `h${activeHeading}`}\n onChange={(event) => {\n if (!editor) return;\n const value = event.target.value;\n if (value === \"p\") {\n editor.chain().focus().setParagraph().run();\n } else {\n const level = Number(value.slice(1)) as HeadingLevel;\n editor.chain().focus().setHeading({ level }).run();\n }\n }}\n >\n <option value=\"p\">Párrafo</option>\n {HEADING_LEVELS.map((level) => (\n <option key={level} value={`h${level}`}>\n Encabezado {level}\n </option>\n ))}\n </select>\n\n <ToolbarButton\n label=\"Negrita\"\n className={styles[\"boldGlyph\"]}\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"bold\")}\n onClick={() => editor?.chain().focus().toggleBold().run()}\n >\n B\n </ToolbarButton>\n <ToolbarButton\n label=\"Cursiva\"\n className={styles[\"italicGlyph\"]}\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"italic\")}\n onClick={() => editor?.chain().focus().toggleItalic().run()}\n >\n i\n </ToolbarButton>\n <ToolbarButton\n label=\"Tachado\"\n className={styles[\"strikeGlyph\"]}\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"strike\")}\n onClick={() => editor?.chain().focus().toggleStrike().run()}\n >\n S\n </ToolbarButton>\n\n <Separator />\n\n <ToolbarButton\n label=\"Lista con viñetas\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"bulletList\")}\n onClick={() => editor?.chain().focus().toggleBulletList().run()}\n >\n <IconBullets />\n </ToolbarButton>\n <ToolbarButton\n label=\"Lista ordenada\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"orderedList\")}\n onClick={() => editor?.chain().focus().toggleOrderedList().run()}\n >\n <IconNumbered />\n </ToolbarButton>\n <ToolbarButton\n label=\"Lista de tareas\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"taskList\")}\n onClick={() => editor?.chain().focus().toggleTaskList().run()}\n >\n <IconChecklist />\n </ToolbarButton>\n <ToolbarButton\n label=\"Aumentar sangría\"\n disabled={!canFormat || !editor.can().sinkListItem(listItemType)}\n onClick={() => editor?.chain().focus().sinkListItem(listItemType).run()}\n >\n <IconIndent />\n </ToolbarButton>\n <ToolbarButton\n label=\"Disminuir sangría\"\n disabled={!canFormat || !editor.can().liftListItem(listItemType)}\n onClick={() => editor?.chain().focus().liftListItem(listItemType).run()}\n >\n <IconOutdent />\n </ToolbarButton>\n\n <Separator />\n\n <ToolbarButton\n label=\"Bloque de código\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"codeBlock\")}\n onClick={(event) => openDialogAt(\"codeLanguage\", event)}\n >\n <IconCodeBlock />\n </ToolbarButton>\n <ToolbarButton\n label=\"Cita\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"blockquote\")}\n onClick={() => editor?.chain().focus().toggleBlockquote().run()}\n >\n <IconQuote />\n </ToolbarButton>\n <ToolbarButton\n label=\"Insertar tabla\"\n disabled={!canFormat}\n onClick={(event) => openDialogAt(\"table\", event)}\n >\n <IconTable />\n </ToolbarButton>\n <ToolbarButton\n label=\"Línea horizontal\"\n disabled={!canFormat}\n onClick={() => editor?.chain().focus().setHorizontalRule().run()}\n >\n <IconHr />\n </ToolbarButton>\n\n <Separator />\n\n <ToolbarButton\n label=\"Insertar enlace\"\n disabled={!canFormat}\n pressed={canFormat && editor.isActive(\"link\")}\n onClick={(event) => openDialogAt(\"link\", event)}\n >\n <IconLink />\n </ToolbarButton>\n <ToolbarButton\n label=\"Insertar imagen\"\n disabled={!canFormat}\n onClick={(event) => openDialogAt(\"image\", event)}\n >\n <IconImage />\n </ToolbarButton>\n <ToolbarButton\n label=\"Insertar HTML\"\n disabled={!canFormat}\n onClick={(event) => openDialogAt(\"html\", event)}\n >\n <span className={styles[\"htmlIcon\"]}>HTML</span>\n </ToolbarButton>\n\n <div className={styles[\"spacer\"]}>\n <ExportMenu source={source} sanitize={sanitizeEmbeddedHtml} />\n </div>\n\n {openDialog === \"table\" && editor !== null && (\n <FloatingPanel anchor={anchor}>\n <TableSizePicker\n onSelect={({ cols, rows }) => {\n editor\n .chain()\n .focus()\n .insertTable({ rows, cols, withHeaderRow: true })\n .run();\n closeDialog();\n }}\n onClose={closeDialog}\n />\n </FloatingPanel>\n )}\n {openDialog === \"codeLanguage\" && editor !== null && (\n <FloatingPanel anchor={anchor}>\n <CodeLanguagePicker\n currentLanguage={\n (editor.getAttributes(\"codeBlock\")[\"language\"] as\n | string\n | undefined) ?? null\n }\n onSelect={(language) => {\n if (editor.isActive(\"codeBlock\")) {\n editor\n .chain()\n .focus()\n .updateAttributes(\"codeBlock\", { language })\n .run();\n } else {\n editor.chain().focus().toggleCodeBlock({ language }).run();\n }\n closeDialog();\n }}\n onClose={closeDialog}\n />\n </FloatingPanel>\n )}\n {openDialog !== null &&\n openDialog !== \"table\" &&\n openDialog !== \"codeLanguage\" &&\n editor !== null && (\n <FloatingPanel anchor={anchor}>\n <InsertDialog\n kind={openDialog}\n editor={editor}\n onClose={closeDialog}\n />\n </FloatingPanel>\n )}\n </div>\n );\n}\n","import type { ButtonHTMLAttributes } from \"react\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport interface ToolbarButtonProps\n extends ButtonHTMLAttributes<HTMLButtonElement> {\n label: string;\n pressed?: boolean;\n}\n\nexport function ToolbarButton({\n label,\n pressed,\n className,\n children,\n ...rest\n}: ToolbarButtonProps) {\n const buttonClass =\n className === undefined\n ? styles[\"button\"]\n : `${styles[\"button\"]} ${className}`;\n return (\n <button\n type=\"button\"\n className={buttonClass}\n aria-label={label}\n title={label}\n {...(pressed !== undefined ? { \"aria-pressed\": pressed } : {})}\n {...rest}\n >\n {children}\n </button>\n );\n}\n","import {\n useEffect,\n useId,\n useRef,\n useState,\n type FormEvent,\n type ReactNode,\n} from \"react\";\nimport type { Editor } from \"@tiptap/core\";\nimport { ensureProtocol } from \"../../markdown/links\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport type DialogKind = \"image\" | \"link\" | \"html\";\n\ninterface DialogShellProps {\n title: string;\n onSubmit: () => void;\n onClose: () => void;\n children: ReactNode;\n}\n\nfunction DialogShell({ title, onSubmit, onClose, children }: DialogShellProps) {\n const ref = useRef<HTMLFormElement>(null);\n\n useEffect(() => {\n const first = ref.current?.querySelector<HTMLElement>(\"input, textarea\");\n first?.focus();\n }, []);\n\n const handleSubmit = (event: FormEvent) => {\n event.preventDefault();\n onSubmit();\n };\n\n return (\n <form\n ref={ref}\n className={styles[\"dialog\"]}\n role=\"dialog\"\n aria-label={title}\n onSubmit={handleSubmit}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n onClose();\n }\n }}\n >\n {children}\n <div className={styles[\"dialogActions\"]}>\n <button\n type=\"button\"\n className={`${styles[\"button\"]} ${styles[\"textButton\"]}`}\n onClick={onClose}\n >\n Cancelar\n </button>\n <button\n type=\"submit\"\n className={`${styles[\"button\"]} ${styles[\"textButton\"]}`}\n >\n Insertar\n </button>\n </div>\n </form>\n );\n}\n\ninterface FieldProps {\n label: string;\n children: (id: string) => ReactNode;\n}\n\nfunction Field({ label, children }: FieldProps) {\n const id = useId();\n return (\n <div className={styles[\"dialogField\"]}>\n <label htmlFor={id}>{label}</label>\n {children(id)}\n </div>\n );\n}\n\nexport interface InsertDialogProps {\n kind: DialogKind;\n editor: Editor;\n onClose: () => void;\n}\n\nexport function InsertDialog({ kind, editor, onClose }: InsertDialogProps) {\n const [url, setUrl] = useState(\"\");\n const [text, setText] = useState(\"\");\n const [html, setHtml] = useState(\"\");\n // Leído una sola vez al montar: si hay selección activa, el enlace se\n // aplica sobre ese texto y no se pide un campo de texto adicional (FR-001,\n // FR-003). No reactivo a propósito — el diálogo no debe cambiar de forma\n // mientras está abierto si la selección cambiara por otra causa.\n const [hasSelectionForLink] = useState(\n () => kind === \"link\" && !editor.state.selection.empty,\n );\n\n const submit = () => {\n const chain = editor.chain().focus();\n if (kind === \"image\" && url) {\n chain.setImage({ src: url, alt: text }).run();\n } else if (kind === \"link\" && url) {\n const href = ensureProtocol(url);\n if (hasSelectionForLink) {\n chain.extendMarkRange(\"link\").setLink({ href }).run();\n } else if (text) {\n chain\n .insertContent({\n type: \"text\",\n text,\n marks: [{ type: \"link\", attrs: { href } }],\n })\n .run();\n }\n } else if (kind === \"html\" && html) {\n chain\n .insertContent({ type: \"htmlBlock\", attrs: { content: html } })\n .run();\n }\n onClose();\n };\n\n if (kind === \"html\") {\n return (\n <DialogShell\n title=\"Insertar HTML embebido\"\n onSubmit={submit}\n onClose={onClose}\n >\n <Field label=\"Código HTML\">\n {(id) => (\n <textarea\n id={id}\n rows={4}\n value={html}\n onChange={(e) => setHtml(e.target.value)}\n />\n )}\n </Field>\n </DialogShell>\n );\n }\n\n const isImage = kind === \"image\";\n return (\n <DialogShell\n title={isImage ? \"Insertar imagen\" : \"Insertar enlace\"}\n onSubmit={submit}\n onClose={onClose}\n >\n <Field label={isImage ? \"URL de la imagen\" : \"URL del enlace\"}>\n {(id) => (\n <input\n id={id}\n type={isImage ? \"url\" : \"text\"}\n required\n value={url}\n onChange={(e) => setUrl(e.target.value)}\n />\n )}\n </Field>\n {!(kind === \"link\" && hasSelectionForLink) && (\n <Field label={isImage ? \"Texto alternativo\" : \"Texto del enlace\"}>\n {(id) => (\n <input\n id={id}\n type=\"text\"\n value={text}\n onChange={(e) => setText(e.target.value)}\n />\n )}\n </Field>\n )}\n </DialogShell>\n );\n}\n","/**\n * Anteponer \"http://\" cuando la URL no especifica protocolo. Uniforme: no\n * depende de que el valor empiece con \"www\" ni de ningún patrón textual\n * particular, solo de la ausencia de \"://\" (FR-004, FR-005, FR-006).\n */\nexport function ensureProtocol(url: string): string {\n return url.includes(\"://\") ? url : `http://${url}`;\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\n/** Convención: columnas × filas. \"3 × 4\" significa 3 columnas y 4 filas. */\nexport interface TableSize {\n cols: number;\n rows: number;\n}\n\nexport interface TableSizePickerProps {\n /** Columnas máximas de la cuadrícula. Default: 10. */\n maxCols?: number;\n /** Filas máximas de la cuadrícula. Default: 10. */\n maxRows?: number;\n /** Invocado al confirmar (clic o Enter) con la dimensión elegida. */\n onSelect: (size: TableSize) => void;\n /** Invocado al cancelar (Escape). */\n onClose: () => void;\n}\n\nexport function TableSizePicker({\n maxCols = 10,\n maxRows = 10,\n onSelect,\n onClose,\n}: TableSizePickerProps) {\n // null = ninguna celda seleccionada inicialmente\n const [size, setSize] = useState<TableSize | null>(null);\n const gridRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n gridRef.current?.focus();\n }, []);\n\n const clamp = (value: number, max: number) =>\n Math.min(Math.max(value, 1), max);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n onClose();\n return;\n }\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n if (size !== null) onSelect(size);\n return;\n }\n const deltas: Record<string, [number, number]> = {\n ArrowRight: [1, 0],\n ArrowLeft: [-1, 0],\n ArrowDown: [0, 1],\n ArrowUp: [0, -1],\n };\n const delta = deltas[event.key];\n if (delta === undefined) return;\n event.preventDefault();\n const current = size ?? { cols: 0, rows: 0 };\n setSize({\n cols: clamp(current.cols + delta[0], maxCols),\n rows: clamp(current.rows + delta[1], maxRows),\n });\n };\n\n const label =\n size === null ? \"Selecciona el tamaño\" : `${size.cols} × ${size.rows}`;\n\n return (\n <div\n className={`${styles[\"dialog\"]} ${styles[\"tablePicker\"]}`}\n role=\"dialog\"\n aria-label=\"Insertar tabla\"\n >\n <div className={styles[\"tablePickerLabel\"]} aria-live=\"polite\">\n {label}\n </div>\n <div\n ref={gridRef}\n className={styles[\"tablePickerGrid\"]}\n style={{ gridTemplateColumns: `repeat(${maxCols}, 16px)` }}\n tabIndex={0}\n role=\"group\"\n aria-label=\"Tamaño de la tabla (columnas × filas)\"\n onKeyDown={handleKeyDown}\n >\n {Array.from({ length: maxRows }, (_, rowIndex) =>\n Array.from({ length: maxCols }, (_, colIndex) => {\n const cell: TableSize = {\n cols: colIndex + 1,\n rows: rowIndex + 1,\n };\n const selected =\n size !== null &&\n cell.cols <= size.cols &&\n cell.rows <= size.rows;\n return (\n <div\n key={`${cell.cols}x${cell.rows}`}\n className={styles[\"tablePickerCell\"]}\n data-cell={`${cell.cols}x${cell.rows}`}\n data-selected={selected ? \"true\" : \"false\"}\n aria-hidden=\"true\"\n onMouseEnter={() => setSize(cell)}\n onClick={() => onSelect(cell)}\n />\n );\n }),\n )}\n </div>\n </div>\n );\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport const CODE_LANGUAGES = [\n { value: \"json\", label: \"JSON\" },\n { value: \"sql\", label: \"SQL\" },\n { value: \"typescript\", label: \"TypeScript\" },\n { value: \"javascript\", label: \"JavaScript\" },\n { value: \"java\", label: \"Java\" },\n] as const;\n\nexport type CodeLanguageValue =\n | (typeof CODE_LANGUAGES)[number][\"value\"]\n | \"other\";\n\nexport interface CodeLanguagePickerProps {\n /** Lenguaje actualmente aplicado al bloque de código (o null si no hay uno activo). */\n currentLanguage: string | null;\n onSelect: (language: string) => void;\n onClose: () => void;\n}\n\nexport function CodeLanguagePicker({\n currentLanguage,\n onSelect,\n onClose,\n}: CodeLanguagePickerProps) {\n const isKnown = CODE_LANGUAGES.some(\n (lang) => lang.value === currentLanguage,\n );\n const [choice, setChoice] = useState<CodeLanguageValue>(\n isKnown ? (currentLanguage as CodeLanguageValue) : \"other\",\n );\n const [otherValue, setOtherValue] = useState(\n !isKnown && currentLanguage ? currentLanguage : \"\",\n );\n const formRef = useRef<HTMLFormElement>(null);\n const otherFieldId = useId();\n\n useEffect(() => {\n formRef.current?.querySelector<HTMLElement>(\"select\")?.focus();\n }, []);\n\n const submit = () => {\n const language = choice === \"other\" ? otherValue.trim() : choice;\n if (language) onSelect(language);\n };\n\n return (\n <form\n ref={formRef}\n className={styles[\"dialog\"]}\n role=\"dialog\"\n aria-label=\"Lenguaje del bloque de código\"\n onSubmit={(event) => {\n event.preventDefault();\n submit();\n }}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n onClose();\n }\n }}\n >\n <div className={styles[\"dialogField\"]}>\n <label htmlFor=\"mdw-code-language\">Lenguaje</label>\n <select\n id=\"mdw-code-language\"\n value={choice}\n onChange={(event) =>\n setChoice(event.target.value as CodeLanguageValue)\n }\n >\n {CODE_LANGUAGES.map((lang) => (\n <option key={lang.value} value={lang.value}>\n {lang.label}\n </option>\n ))}\n <option value=\"other\">Otro…</option>\n </select>\n </div>\n {choice === \"other\" && (\n <div className={styles[\"dialogField\"]}>\n <label htmlFor={otherFieldId}>Especificar lenguaje</label>\n <input\n id={otherFieldId}\n type=\"text\"\n value={otherValue}\n onChange={(event) => setOtherValue(event.target.value)}\n />\n </div>\n )}\n <div className={styles[\"dialogActions\"]}>\n <button\n type=\"button\"\n className={`${styles[\"button\"]} ${styles[\"textButton\"]}`}\n onClick={onClose}\n >\n Cancelar\n </button>\n <button\n type=\"submit\"\n className={`${styles[\"button\"]} ${styles[\"textButton\"]}`}\n >\n Aplicar\n </button>\n </div>\n </form>\n );\n}\n","import { useLayoutEffect, useRef, useState, type ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport interface FloatingPanelProps {\n /** Elemento ancla (normalmente el botón que abrió el panel). */\n anchor: HTMLElement | null;\n /** Alineación horizontal del panel respecto al ancla. */\n align?: \"start\" | \"end\";\n /** Enfoca el primer elemento interactivo del contenido al montarse. */\n autoFocus?: boolean;\n children: ReactNode;\n}\n\n/**\n * Renderiza su contenido en un portal a `document.body`, posicionado con\n * `position: fixed` a partir del rect del ancla. Evita que el panel quede\n * recortado por el `overflow` de la toolbar (necesario para el scroll\n * horizontal de la barra) o del contenedor raíz del componente.\n */\nexport function FloatingPanel({\n anchor,\n align = \"start\",\n autoFocus = false,\n children,\n}: FloatingPanelProps) {\n const panelRef = useRef<HTMLDivElement>(null);\n const [style, setStyle] = useState<{\n top: number;\n left?: number;\n right?: number;\n } | null>(null);\n\n useLayoutEffect(() => {\n if (!anchor) return;\n const rect = anchor.getBoundingClientRect();\n if (align === \"end\") {\n setStyle({\n top: rect.bottom,\n right: Math.max(0, window.innerWidth - rect.right),\n });\n } else {\n setStyle({ top: rect.bottom, left: rect.left });\n }\n }, [anchor, align]);\n\n useLayoutEffect(() => {\n if (style === null || !autoFocus) return;\n panelRef.current\n ?.querySelector<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n )\n ?.focus();\n // Solo al aparecer: no queremos robar el foco en cada reposicionamiento.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [style !== null]);\n\n if (style === null) return null;\n\n return createPortal(\n <div\n ref={panelRef}\n className={styles[\"root\"]}\n style={{\n position: \"fixed\",\n top: style.top,\n left: style.left,\n right: style.right,\n zIndex: 1000,\n // El wrapper solo restablece las custom properties/tipografía del\n // componente para el contenido portado; no debe verse como una caja.\n border: \"none\",\n overflow: \"visible\",\n background: \"transparent\",\n width: \"auto\",\n height: \"auto\",\n }}\n >\n {children}\n </div>,\n document.body,\n );\n}\n","import { useRef, useState } from \"react\";\nimport { markdownToHtml } from \"../../markdown/pipeline\";\nimport { IconDownload } from \"./icons\";\nimport { FloatingPanel } from \"./FloatingPanel\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport interface ExportMenuProps {\n source: string;\n sanitize: boolean;\n}\n\nexport function ExportMenu({ source, sanitize }: ExportMenuProps) {\n const [open, setOpen] = useState(false);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const close = () => {\n setOpen(false);\n buttonRef.current?.focus();\n };\n\n const copy = (content: string) => {\n void navigator.clipboard.writeText(content);\n close();\n };\n\n return (\n <>\n <button\n ref={buttonRef}\n type=\"button\"\n className={styles[\"button\"]}\n aria-label=\"Export\"\n title=\"Export\"\n aria-haspopup=\"menu\"\n aria-expanded={open}\n onClick={() => setOpen((value) => !value)}\n >\n <IconDownload />\n </button>\n {open && (\n <FloatingPanel anchor={buttonRef.current} align=\"end\" autoFocus>\n <div\n role=\"menu\"\n aria-label=\"Exportar contenido\"\n className={styles[\"menu\"]}\n onKeyDown={(event) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n close();\n }\n }}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className={styles[\"menuItem\"]}\n onClick={() => copy(source)}\n >\n Copiar como Markdown\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className={styles[\"menuItem\"]}\n onClick={() => copy(markdownToHtml(source, { sanitize }))}\n >\n Copiar como HTML\n </button>\n </div>\n </FloatingPanel>\n )}\n </>\n );\n}\n","import type { SVGProps } from \"react\";\n\ntype IconProps = SVGProps<SVGSVGElement>;\n\nconst base = { viewBox: \"0 0 24 24\", \"aria-hidden\": true } as const;\n\nexport function IconCode(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M9 7L4 12L9 17\" />\n <path d=\"M15 7L20 12L15 17\" />\n <path d=\"M14 4L10 20\" />\n </svg>\n );\n}\n\nexport function IconCodeBlock(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M8 6L3 12L8 18\" />\n <path d=\"M16 6L21 12L16 18\" />\n </svg>\n );\n}\n\nexport function IconBullets(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <circle cx=\"4\" cy=\"6\" r=\"1\" />\n <circle cx=\"4\" cy=\"12\" r=\"1\" />\n <circle cx=\"4\" cy=\"18\" r=\"1\" />\n <path d=\"M9 6H21\" />\n <path d=\"M9 12H21\" />\n <path d=\"M9 18H21\" />\n </svg>\n );\n}\n\nexport function IconNumbered(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M4 5H5V9\" />\n <path d=\"M3 9H6\" />\n <path d=\"M3 13H6\" />\n <path d=\"M3 17C3 15 6 15 6 17C6 19 3 19 3 19H6\" />\n <path d=\"M10 6H21\" />\n <path d=\"M10 12H21\" />\n <path d=\"M10 18H21\" />\n </svg>\n );\n}\n\nexport function IconChecklist(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <rect x=\"3\" y=\"3\" width=\"6\" height=\"6\" />\n <path d=\"M4 6L6 8L9 4\" />\n <path d=\"M12 6H21\" />\n <rect x=\"3\" y=\"14\" width=\"6\" height=\"6\" />\n <path d=\"M12 17H21\" />\n </svg>\n );\n}\n\nexport function IconIndent(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M3 6H21\" />\n <path d=\"M11 12H21\" />\n <path d=\"M3 18H21\" />\n <path d=\"M3 9.5L6 12L3 14.5\" />\n </svg>\n );\n}\n\nexport function IconOutdent(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M3 6H21\" />\n <path d=\"M11 12H21\" />\n <path d=\"M3 18H21\" />\n <path d=\"M6 9.5L3 12L6 14.5\" />\n </svg>\n );\n}\n\nexport function IconQuote(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M7 8H4V12H8V8C8 5 6 4 4 4\" />\n <path d=\"M17 8H14V12H18V8C18 5 16 4 14 4\" />\n </svg>\n );\n}\n\nexport function IconTable(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" />\n <path d=\"M3 10H21\" />\n <path d=\"M3 15H21\" />\n <path d=\"M9 4V20\" />\n <path d=\"M15 4V20\" />\n </svg>\n );\n}\n\nexport function IconLink(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M10 13C11.5 14.5 14 14.5 15.5 13L18 10.5C20 8.5 20 5.5 18 3.5C16 1.5 13 1.5 11 3.5L9.5 5\" />\n <path d=\"M14 11C12.5 9.5 10 9.5 8.5 11L6 13.5C4 15.5 4 18.5 6 20.5C8 22.5 11 22.5 13 20.5L14.5 19\" />\n </svg>\n );\n}\n\nexport function IconImage(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" />\n <circle cx=\"8\" cy=\"9\" r=\"2\" />\n <path d=\"M3 17L8 12L12 16L15 13L21 19\" />\n </svg>\n );\n}\n\nexport function IconHr(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M3 12H21\" />\n <path d=\"M6 6H18\" opacity=\"0.35\" />\n <path d=\"M6 18H18\" opacity=\"0.35\" />\n </svg>\n );\n}\n\nexport function IconDownload(props: IconProps) {\n return (\n <svg {...base} {...props}>\n <path d=\"M12 3V15\" />\n <path d=\"M7 10L12 15L17 10\" />\n <path d=\"M4 19H20\" />\n </svg>\n );\n}\n","import styles from \"../../MarkdownEditor.module.css\";\n\nexport function Separator() {\n return <span className={styles[\"separator\"]} aria-hidden=\"true\" />;\n}\n","import { useEffect, useId, useRef, useState } from \"react\";\nimport { ensureProtocol } from \"../../markdown/links\";\nimport styles from \"../../MarkdownEditor.module.css\";\n\nexport interface LinkPopoverProps {\n url: string;\n onlyView: boolean;\n onNavigate: () => void;\n onCopy: () => void;\n onSave: (newUrl: string) => void;\n onRemove: () => void;\n onClose: () => void;\n}\n\nexport function LinkPopover({\n url,\n onlyView,\n onNavigate,\n onCopy,\n onSave,\n onRemove,\n onClose,\n}: LinkPopoverProps) {\n const [mode, setMode] = useState<\"menu\" | \"edit\">(\"menu\");\n const [inputValue, setInputValue] = useState(url);\n const rootRef = useRef<HTMLDivElement>(null);\n const inputId = useId();\n\n useEffect(() => {\n if (mode === \"edit\") {\n rootRef.current?.querySelector<HTMLInputElement>(\"input\")?.focus();\n }\n }, [mode]);\n\n useEffect(() => {\n const handlePointerDown = (event: PointerEvent) => {\n if (\n rootRef.current !== null &&\n !rootRef.current.contains(event.target as Node)\n ) {\n onClose();\n }\n };\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n };\n }, [onClose]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.stopPropagation();\n onClose();\n }\n };\n\n const save = () => {\n if (!inputValue) return;\n onSave(ensureProtocol(inputValue));\n };\n\n if (mode === \"edit\") {\n return (\n <div\n ref={rootRef}\n className={styles[\"dialog\"]}\n role=\"dialog\"\n aria-label=\"Editar enlace\"\n onKeyDown={handleKeyDown}\n >\n <div className={styles[\"dialogField\"]}>\n <label htmlFor={inputId}>URL del enlace</label>\n <input\n id={inputId}\n type=\"text\"\n value={inputValue}\n onChange={(event) => setInputValue(event.target.value)}\n />\n </div>\n <button\n type=\"button\"\n className={styles[\"dangerLink\"]}\n onClick={onRemove}\n >\n Eliminar link\n </button>\n <div className={styles[\"dialogActions\"]}>\n <button\n type=\"button\"\n className={`${styles[\"button\"]} ${styles[\"textButton\"]}`}\n onClick={save}\n >\n Guardar\n </button>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={rootRef}\n role=\"menu\"\n aria-label=\"Acciones del enlace\"\n className={styles[\"menu\"]}\n onKeyDown={handleKeyDown}\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n className={styles[\"menuItem\"]}\n onClick={onNavigate}\n >\n Ir a la url\n </button>\n <button\n type=\"button\"\n role=\"menuitem\"\n className={styles[\"menuItem\"]}\n onClick={onCopy}\n >\n Copiar url\n </button>\n {!onlyView && (\n <>\n <hr className={styles[\"menuSeparator\"]} />\n <button\n type=\"button\"\n role=\"menuitem\"\n className={styles[\"menuItem\"]}\n onClick={() => setMode(\"edit\")}\n >\n Editar url\n </button>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAKA,QAAM,qBAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;A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","names":["useRef","useState","LITERALS","LITERALS","TYPES","KEYWORDS","decimalDigits","frac","TYPES","IDENT_RE","KEYWORDS","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","decimalDigits","frac","BUILT_INS","LITERALS","TYPES","KEYWORDS","javascript","javascript","jsx","useEffect","useState","jsx","jsx","useEffect","useRef","useState","jsx","jsxs","useState","useRef","useEffect","_","useEffect","useId","useRef","useState","jsx","jsxs","useState","useRef","useId","useEffect","useRef","useState","jsx","useRef","useState","useRef","useState","jsx","jsxs","jsx","jsxs","useState","useRef","jsx","jsx","jsxs","useState","useEffect","useEffect","useId","useRef","useState","Fragment","jsx","jsxs","useState","useRef","useId","useEffect","jsx","jsxs","useState","useRef"]}