@bitcobblers/wod-wiki-ui 0.10.42 → 0.11.43
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.
- package/dist/{chunk-S77JRUQM.mjs → chunk-PZXX6GBK.mjs} +375 -343
- package/dist/chunk-PZXX6GBK.mjs.map +1 -0
- package/dist/extensions/index.cjs +371 -334
- package/dist/extensions/index.cjs.map +1 -1
- package/dist/extensions/index.mjs +1 -1
- package/dist/index.cjs +377 -356
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +20 -83
- package/dist/index.d.ts +20 -83
- package/dist/index.mjs +8 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-S77JRUQM.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.bun/@codemirror+theme-one-dark@6.1.3/node_modules/@codemirror/theme-one-dark/dist/index.js","../src/extensions/theme.ts","../src/extensions/line-ids.ts","../src/extensions/link-open.ts","../src/utils/cn.ts","../src/extensions/section-state.ts","../src/extensions/whiteboard-linter.ts","../src/extensions/whiteboard-autocomplete.ts","../src/extensions/section-geometry.ts","../src/extensions/preview-decorations.ts","../src/extensions/embed-preview.ts","../src/extensions/frontmatter-preview.ts","../src/extensions/markdown-syntax-hiding.ts","../src/extensions/markdown-tables.ts","../src/extensions/gutter-unified.ts","../src/extensions/inline-button-decoration.ts","../src/extensions/runtime-panel-state.ts","../src/extensions/sessionQueryBlock.ts","../src/extensions/smart-increment.ts","../src/extensions/whiteboard-overlay.ts","../src/extensions/cursor-focus-panel.ts","../src/widgets/RowsTable.tsx","../src/blocks/RowsResultsChrome.tsx","../src/widgets/useChartShape.ts","../src/widgets/WqlEmptyState.tsx","../src/widgets/QueryValue.tsx","../src/widgets/chartData.ts","../src/widgets/chartPalette.ts","../src/widgets/WqlTimeseries.tsx","../src/widgets/WqlBars.tsx","../src/widgets/WqlTable.tsx","../src/widgets/TopList.tsx","../src/widgets/StackedBar.tsx","../src/widgets/GoalRings.tsx","../src/widgets/ZoneDistribution.tsx","../src/widgets/WidgetChart.tsx","../src/utils/blockQueryPatcher.ts","../src/composer/ComposerRegistry.ts","../src/composer/suggestionSources.ts","../src/composer/useSuggestions.ts","../src/composer/queryClauses.ts","../src/composer/QueryPalette.tsx","../src/composer/diagnostics.ts","../src/composer/WqlDiagnosticsStrip.tsx","../src/composer/useWqlStageCounts.ts","../src/composer/WqlComposer.tsx","../src/composer/dateRangeSlot.tsx","../src/blocks/WqlQueryInspectorModal.tsx","../src/blocks/QueryBlockView.tsx","../src/extensions/query-block-preview.tsx","../src/extensions/widget-block-preview.tsx","../../../node_modules/.bun/@lezer+markdown@1.7.2/node_modules/@lezer/markdown/dist/index.js","../../../node_modules/.bun/@lezer+html@1.3.13/node_modules/@lezer/html/dist/index.js","../../../node_modules/.bun/@lezer+css@1.3.6/node_modules/@lezer/css/dist/index.js","../../../node_modules/.bun/@codemirror+lang-css@6.3.1/node_modules/@codemirror/lang-css/dist/index.js","../../../node_modules/.bun/@lezer+javascript@1.5.4/node_modules/@lezer/javascript/dist/index.js","../../../node_modules/.bun/@codemirror+lang-javascript@6.2.5/node_modules/@codemirror/lang-javascript/dist/index.js","../../../node_modules/.bun/@codemirror+lang-html@6.4.12/node_modules/@codemirror/lang-html/dist/index.js","../../../node_modules/.bun/@codemirror+lang-markdown@6.5.2/node_modules/@codemirror/lang-markdown/dist/index.js","../src/extensions/editorPreset.ts"],"names":["EditorView","values","ViewPlugin","hash","EditorState","syntaxTree","Decoration","RangeSetBuilder","StateField","WidgetType","cursor","StateEffect","lineNumbers","keymap","buildDecorations","jsxs","jsx","blockContentId","useMemo","data","ResponsiveContainer","CartesianGrid","XAxis","YAxis","Tooltip","BarChart","Legend","Bar","useState","useEffect","timeClause","timeStr","colon","wql","window","rest","filterClauses","clauses","headMatch","invalid","parseQuery","Fragment","useRef","isFindQuery","useCallback","next","X","missing","isDashboardWidgetType","isRowsQuery","unknownWidgetTypeMessage","markdown","createRoot","Type","Line","elt","count","parser","nodeTypes","spec","tags","node","m","Element","styleTags","parseMixed","attrs","space","dash","callee","ExternalTokenizer","LRParser","identifier","newline","slash","question","bracketL","ContextTracker","spec_identifier","LocalTokenGroup","cache","NodeWeakMap","IterMode","LRLanguage","indentNodeProp","continuedIndent","foldNodeProp","foldInside","LanguageSupport","base","elementName","autoCloseTags","selfClosers","to","EditorSelection","defineLanguageFacet","NodeProp","insert","changes","Prec","whiteboardScriptLanguage"],"mappings":"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","file":"chunk-S77JRUQM.mjs","sourcesContent":["import { EditorView } from '@codemirror/view';\nimport { HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { tags } from '@lezer/highlight';\n\n// Using https://github.com/one-dark/vscode-one-dark-theme/ as reference for the colors\nconst chalky = \"#e5c07b\", coral = \"#e06c75\", cyan = \"#56b6c2\", invalid = \"#ffffff\", ivory = \"#abb2bf\", stone = \"#7d8799\", // Brightened compared to original to increase contrast\nmalibu = \"#61afef\", sage = \"#98c379\", whiskey = \"#d19a66\", violet = \"#c678dd\", darkBackground = \"#21252b\", highlightBackground = \"#2c313a\", background = \"#282c34\", tooltipBackground = \"#353a42\", selection = \"#3E4451\", cursor = \"#528bff\";\n/**\nThe colors used in the theme, as CSS color strings.\n*/\nconst color = {\n chalky,\n coral,\n cyan,\n invalid,\n ivory,\n stone,\n malibu,\n sage,\n whiskey,\n violet,\n darkBackground,\n highlightBackground,\n background,\n tooltipBackground,\n selection,\n cursor\n};\n/**\nThe editor theme styles for One Dark.\n*/\nconst oneDarkTheme = /*@__PURE__*/EditorView.theme({\n \"&\": {\n color: ivory,\n backgroundColor: background\n },\n \".cm-content\": {\n caretColor: cursor\n },\n \".cm-cursor, .cm-dropCursor\": { borderLeftColor: cursor },\n \"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection\": { backgroundColor: selection },\n \".cm-panels\": { backgroundColor: darkBackground, color: ivory },\n \".cm-panels.cm-panels-top\": { borderBottom: \"2px solid black\" },\n \".cm-panels.cm-panels-bottom\": { borderTop: \"2px solid black\" },\n \".cm-searchMatch\": {\n backgroundColor: \"#72a1ff59\",\n outline: \"1px solid #457dff\"\n },\n \".cm-searchMatch.cm-searchMatch-selected\": {\n backgroundColor: \"#6199ff2f\"\n },\n \".cm-activeLine\": { backgroundColor: \"#6699ff0b\" },\n \".cm-selectionMatch\": { backgroundColor: \"#aafe661a\" },\n \"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket\": {\n backgroundColor: \"#bad0f847\"\n },\n \".cm-gutters\": {\n backgroundColor: background,\n color: stone,\n border: \"none\"\n },\n \".cm-activeLineGutter\": {\n backgroundColor: highlightBackground\n },\n \".cm-foldPlaceholder\": {\n backgroundColor: \"transparent\",\n border: \"none\",\n color: \"#ddd\"\n },\n \".cm-tooltip\": {\n border: \"none\",\n backgroundColor: tooltipBackground\n },\n \".cm-tooltip .cm-tooltip-arrow:before\": {\n borderTopColor: \"transparent\",\n borderBottomColor: \"transparent\"\n },\n \".cm-tooltip .cm-tooltip-arrow:after\": {\n borderTopColor: tooltipBackground,\n borderBottomColor: tooltipBackground\n },\n \".cm-tooltip-autocomplete\": {\n \"& > ul > li[aria-selected]\": {\n backgroundColor: highlightBackground,\n color: ivory\n }\n }\n}, { dark: true });\n/**\nThe highlighting style for code in the One Dark theme.\n*/\nconst oneDarkHighlightStyle = /*@__PURE__*/HighlightStyle.define([\n { tag: tags.keyword,\n color: violet },\n { tag: [tags.name, tags.deleted, tags.character, tags.propertyName, tags.macroName],\n color: coral },\n { tag: [/*@__PURE__*/tags.function(tags.variableName), tags.labelName],\n color: malibu },\n { tag: [tags.color, /*@__PURE__*/tags.constant(tags.name), /*@__PURE__*/tags.standard(tags.name)],\n color: whiskey },\n { tag: [/*@__PURE__*/tags.definition(tags.name), tags.separator],\n color: ivory },\n { tag: [tags.typeName, tags.className, tags.number, tags.changed, tags.annotation, tags.modifier, tags.self, tags.namespace],\n color: chalky },\n { tag: [tags.operator, tags.operatorKeyword, tags.url, tags.escape, tags.regexp, tags.link, /*@__PURE__*/tags.special(tags.string)],\n color: cyan },\n { tag: [tags.meta, tags.comment],\n color: stone },\n { tag: tags.strong,\n fontWeight: \"bold\" },\n { tag: tags.emphasis,\n fontStyle: \"italic\" },\n { tag: tags.strikethrough,\n textDecoration: \"line-through\" },\n { tag: tags.link,\n color: stone,\n textDecoration: \"underline\" },\n { tag: tags.heading,\n fontWeight: \"bold\",\n color: coral },\n { tag: [tags.atom, tags.bool, /*@__PURE__*/tags.special(tags.variableName)],\n color: whiskey },\n { tag: [tags.processingInstruction, tags.string, tags.inserted],\n color: sage },\n { tag: tags.invalid,\n color: invalid },\n]);\n/**\nExtension to enable the One Dark theme (both the editor theme and\nthe highlight style).\n*/\nconst oneDark = [oneDarkTheme, /*@__PURE__*/syntaxHighlighting(oneDarkHighlightStyle)];\n\nexport { color, oneDark, oneDarkHighlightStyle, oneDarkTheme };\n","import { EditorView } from \"@codemirror/view\";\nimport type { Extension } from \"@codemirror/state\";\nimport { oneDark } from \"@codemirror/theme-one-dark\";\n\nexport function editorTheme(isDark: boolean): Extension {\n const baseTheme = EditorView.theme({\n \"&\": {\n height: \"auto\",\n minHeight: \"100%\",\n width: \"100%\",\n maxWidth: \"100%\",\n boxSizing: \"border-box\",\n fontSize: \"14px\",\n textAlign: \"left\",\n },\n \"&.cm-focused\": {\n outline: \"none\",\n },\n \".cm-scroller\": {\n overflow: \"visible\",\n width: \"100%\",\n maxWidth: \"100%\",\n boxSizing: \"border-box\",\n },\n \".cm-content\": {\n fontFamily: \"JetBrains Mono, ui-monospace, SFMono-Regular, monospace\",\n lineHeight: \"22px\",\n padding: \"0\",\n margin: \"0 3px\",\n textAlign: \"left\",\n },\n \".cm-gutters\": {\n backgroundColor: isDark ? \"#252841\" : \"transparent\",\n color: isDark ? \"#A0AEC0\" : \"#717D96\",\n border: \"none\",\n padding: \"0\",\n },\n \".cm-activeLine\": {\n backgroundColor: isDark ? \"rgba(165, 180, 252, 0.08)\" : \"rgba(129, 140, 248, 0.08)\",\n },\n \".cm-activeLineGutter\": {\n backgroundColor: isDark ? \"rgba(165, 180, 252, 0.08)\" : \"rgba(129, 140, 248, 0.08)\",\n },\n \"&.cm-focused .cm-selectionBackground\": {\n backgroundColor: isDark ? \"rgba(165, 180, 252, 0.3)\" : \"rgba(129, 140, 248, 0.35)\",\n },\n \".cm-selectionBackground\": {\n backgroundColor: isDark ? \"rgba(100, 160, 255, 0.20)\" : \"rgba(30, 100, 230, 0.25)\",\n },\n \"::selection\": {\n backgroundColor: isDark ? \"rgba(100, 160, 255, 0.35) !important\" : \"rgba(30, 100, 230, 0.50) !important\",\n },\n }, { dark: isDark });\n\n return isDark ? [oneDark, baseTheme] : [baseTheme];\n}\n","import { Decoration, ViewPlugin, ViewUpdate, EditorView } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\n\n/**\n * Extension that adds ID attributes to line elements in the editor.\n */\nexport const lineIdsExtension = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = this.getDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = this.getDecorations(update.view);\n }\n }\n\n getDecorations(view: EditorView) {\n const builder = new RangeSetBuilder<Decoration>();\n const { doc } = view.state;\n let workoutCount = 0;\n\n for (let i = 1; i <= doc.lines; i++) {\n const line = doc.line(i);\n const text = line.text;\n const trimmed = text.trim();\n\n let id: string | null = null;\n\n const headerMatch = text.match(/^(#{1,6})\\s+(.*)$/);\n if (headerMatch) {\n let label = headerMatch[2].trim();\n const timeMatch = label.match(/(\\d{1,2}:\\d{2})/);\n if (timeMatch) {\n const timestamp = timeMatch[1];\n label = label.replace(timestamp, \"\").replace(/\\s+/g, \" \").trim();\n if (!label) label = timestamp;\n }\n id = label.toLowerCase().replace(/[^\\w]+/g, \"-\");\n } else if (/^```(time|log)/.test(trimmed)) {\n workoutCount++;\n id = `workout-line-${i}`;\n }\n\n if (id && line.from >= view.viewport.from && line.to <= view.viewport.to) {\n builder.add(\n line.from,\n line.from,\n Decoration.line({\n attributes: { id },\n }),\n );\n }\n }\n\n return builder.finish();\n }\n },\n {\n decorations: (v) => v.decorations,\n },\n);\n","import { Facet } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { EditorView, hoverTooltip, ViewPlugin, ViewUpdate } from \"@codemirror/view\";\nimport { syntaxTree } from \"@codemirror/language\";\n\nexport type NavigationHook = (url: string, view: EditorView) => void;\n\nexport const navigationFacet = Facet.define<NavigationHook, NavigationHook | null>({\n combine(values) {\n return values.length > 0 ? values[values.length - 1] : null;\n },\n});\n\nfunction isNavigableUrl(url: string): boolean {\n return /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(url);\n}\n\nexport function urlAtPos(view: EditorView, pos: number): string | null {\n const tree = syntaxTree(view.state);\n let foundUrl: string | null = null;\n\n tree.cursorAt(pos).iterate((node) => {\n if (node.name === \"URL\") {\n const text = view.state.doc.sliceString(node.from, node.to);\n if (isNavigableUrl(text)) {\n foundUrl = text;\n return false;\n }\n }\n if (node.name === \"Autolink\") {\n let text = view.state.doc.sliceString(node.from, node.to);\n if (text.startsWith(\"<\") && text.endsWith(\">\")) {\n text = text.slice(1, -1);\n }\n if (isNavigableUrl(text)) {\n foundUrl = text;\n return false;\n }\n }\n });\n\n return foundUrl;\n}\n\nconst linkHoverTooltip = hoverTooltip(\n (view, pos) => {\n const url = urlAtPos(view, pos);\n if (!url) return null;\n\n return {\n pos,\n end: pos,\n above: true,\n create() {\n const dom = document.createElement(\"div\");\n dom.className =\n \"cm-link-tooltip px-2 py-1 text-[11px] text-muted-foreground bg-popover border border-border rounded shadow-sm flex items-center gap-1.5\";\n dom.innerHTML =\n '<kbd class=\"px-1 py-0.5 rounded bg-muted border border-border/70 font-mono text-[10px]\">Ctrl</kbd>' +\n '<span>+Click to open link</span>';\n return { dom };\n },\n };\n },\n { hoverTime: 300 },\n);\n\nconst ctrlClickPlugin = ViewPlugin.fromClass(\n class {\n private handler: (e: MouseEvent) => void;\n private view: EditorView;\n\n constructor(view: EditorView) {\n this.view = view;\n this.handler = (e: MouseEvent) => {\n if (!(e.ctrlKey || e.metaKey) || e.button !== 0) return;\n\n const pos = view.posAtCoords({ x: e.clientX, y: e.clientY });\n if (pos == null) return;\n\n const url = urlAtPos(view, pos);\n if (!url) return;\n\n e.preventDefault();\n e.stopPropagation();\n\n const navHook = view.state.facet(navigationFacet);\n if (navHook) {\n navHook(url, view);\n } else if (typeof window !== \"undefined\") {\n window.open(url, \"_blank\", \"noopener,noreferrer\");\n }\n };\n\n view.dom.addEventListener(\"mousedown\", this.handler, true);\n }\n\n destroy() {\n this.view.dom.removeEventListener(\"mousedown\", this.handler, true);\n }\n\n update(_update: ViewUpdate) {}\n },\n);\n\nconst linkCursorTheme = EditorView.domEventHandlers({\n mousemove(e, view) {\n const pos = view.posAtCoords({ x: e.clientX, y: e.clientY });\n if (pos == null) return false;\n const url = urlAtPos(view, pos);\n view.dom.style.cursor = url && (e.ctrlKey || e.metaKey) ? \"pointer\" : \"\";\n return false;\n },\n keydown(_e, view) {\n view.dom.style.cursor = \"\";\n return false;\n },\n});\n\nexport const linkOpen: Extension = [\n linkHoverTooltip,\n ctrlClickPlugin,\n linkCursorTheme,\n];\n","import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport function hashCode(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return Math.abs(hash);\n}\n","import { StateField, StateEffect, EditorState } from \"@codemirror/state\";\nimport { parseQueryWidgetSuffix } from '@bitcobblers/wod-wiki-wql';\nimport { hashCode } from \"../utils/cn\";\n\nexport type EditorDialect = \"time\" | \"log\";\nconst VALID_DIALECTS: EditorDialect[] = [\"time\", \"log\"];\n\ninterface DialectFenceMatch {\n dialect: EditorDialect;\n sport?: string;\n}\n\nexport type EditorSectionType = \"markdown\" | \"time\" | \"log\" | \"frontmatter\" | \"code\" | \"widget\" | \"embed\" | \"query\";\n\nexport type EditorSectionSubtype =\n | \"heading\"\n | \"paragraph\"\n | \"list\"\n | \"blockquote\"\n | \"table\"\n | \"unknown\";\n\nexport type EmbedType = \"image\" | \"link\" | \"youtube\";\n\nexport interface EditorSection {\n id: string;\n type: EditorSectionType;\n subtype?: EditorSectionSubtype;\n from: number;\n to: number;\n startLine: number;\n endLine: number;\n contentFrom?: number;\n contentTo?: number;\n sport?: string;\n widgetName?: string;\n contentId?: string;\n queryType?: string;\n queryError?: string;\n embed?: {\n type: EmbedType;\n url: string;\n label: string;\n videoId?: string;\n height?: number;\n };\n}\n\nexport interface SectionState {\n sections: EditorSection[];\n}\n\nexport const forceSectionParse = StateEffect.define<null>();\n\nexport function blockContentId(content: string): string {\n const normalized = content\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join('\\n');\n return `wblk-${hashCode(normalized).toString(36)}`;\n}\n\nfunction generateSectionId(type: string, startLine: number, content: string): string {\n return `${type}-${startLine}-${hashCode(content).toString(36)}`;\n}\n\nfunction mapIdentities(\n oldSections: EditorSection[],\n newSections: EditorSection[],\n): EditorSection[] {\n return newSections.map((nSec) => {\n const match = oldSections.find(\n (oSec) => oSec.type === nSec.type && Math.abs(oSec.startLine - nSec.startLine) <= 2,\n );\n return match ? { ...nSec, id: match.id } : nSec;\n });\n}\n\nfunction matchDialectFence(trimmed: string): DialectFenceMatch | null {\n const match = trimmed.match(/^```\\s*(\\w+)(?::(\\w+))?\\s*$/);\n if (!match) return null;\n const tag = match[1].toLowerCase() as EditorDialect;\n if (!VALID_DIALECTS.includes(tag)) return null;\n return { dialect: tag, sport: match[2]?.toLowerCase() };\n}\n\nfunction matchWidgetFence(trimmed: string): string | null {\n const match = trimmed.match(/^```\\s*widget:([\\w-]+)\\s*$/);\n return match ? match[1] : null;\n}\n\ninterface ContentFenceMatch {\n kind: 'query';\n widgetType?: string;\n widgetError?: string;\n}\n\nfunction matchContentFence(trimmed: string): ContentFenceMatch | null {\n const match = trimmed.match(/^```\\s*query(\\S*)\\s*$/i);\n if (!match) return null;\n const rawSuffix = match[1] ?? \"\";\n // Bare ```query renders the default widget — no suffix to parse.\n if (rawSuffix === \"\") return { kind: \"query\" };\n // Strip the `:` separator before parsing the widget type/spans\n // (`query:table-2-full` → suffix `table-2-full`).\n const parsed = parseQueryWidgetSuffix(rawSuffix.replace(/^:/, \"\"));\n return {\n kind: \"query\",\n widgetType: parsed.type,\n widgetError: parsed.error,\n };\n}\n\nfunction matchGenericFence(trimmed: string): string | null {\n const match = trimmed.match(/^```\\s*(\\S+)\\s*$/);\n if (!match) return null;\n const tag = match[1].toLowerCase();\n if (VALID_DIALECTS.includes(tag as EditorDialect)) return null;\n if (tag.startsWith(\"widget:\")) return null;\n if (tag.startsWith(\"query\")) return null;\n return match[1];\n}\n\nfunction matchMarkdownEmbed(trimmed: string): EditorSection['embed'] | null {\n const imgMatch = trimmed.match(/^!\\[([^\\]]*)\\]\\(([^)]+)\\)$/);\n if (imgMatch) {\n const label = imgMatch[1];\n const url = imgMatch[2];\n return { type: \"image\", url, label };\n }\n const linkMatch = trimmed.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)$/);\n if (linkMatch) {\n const label = linkMatch[1];\n const url = linkMatch[2];\n return { type: \"link\", url, label };\n }\n return null;\n}\n\nfunction detectMarkdownSubtype(lines: string[]): EditorSectionSubtype {\n const first = lines.find((l) => l.trim().length > 0)?.trim() ?? \"\";\n if (/^#{1,6}\\s/.test(first)) return \"heading\";\n if (/^[-*+]\\s|^\\d+\\.\\s/.test(first)) return \"list\";\n if (/^>\\s?/.test(first)) return \"blockquote\";\n if (first.startsWith(\"|\") && lines.some((l) => /^\\|[\\s:]*-+/.test(l.trim()))) return \"table\";\n return \"paragraph\";\n}\n\nfunction scanFenced(state: EditorState, openLineNum: number): {\n closeLine: number; contentFrom: number; contentTo: number;\n} {\n const openLine = state.doc.line(openLineNum);\n const contentFrom = openLine.to + 1;\n for (let i = openLineNum + 1; i <= state.doc.lines; i++) {\n const l = state.doc.line(i);\n if (l.text.trim().startsWith(\"```\")) {\n return { closeLine: i, contentFrom, contentTo: l.from };\n }\n }\n const last = state.doc.line(state.doc.lines);\n return { closeLine: state.doc.lines, contentFrom, contentTo: last.to };\n}\n\nfunction parseSections(state: EditorState): EditorSection[] {\n const sections: EditorSection[] = [];\n let currentMdLines: string[] = [];\n let mdStartLine = 1;\n let mdStartPos = 0;\n\n function flushMarkdown(endLine: number, endPos: number) {\n if (currentMdLines.length === 0) return;\n const content = currentMdLines.join(\"\\n\");\n if (content.trim().length > 0) {\n const embed = currentMdLines.length === 1 ? matchMarkdownEmbed(content.trim()) : null;\n if (embed) {\n sections.push({\n id: generateSectionId(\"embed\", mdStartLine, content),\n type: \"embed\",\n from: mdStartPos,\n to: endPos,\n startLine: mdStartLine,\n endLine,\n embed,\n });\n } else {\n sections.push({\n id: generateSectionId(\"markdown\", mdStartLine, content),\n type: \"markdown\",\n subtype: detectMarkdownSubtype(currentMdLines),\n from: mdStartPos,\n to: endPos,\n startLine: mdStartLine,\n endLine,\n });\n }\n }\n currentMdLines = [];\n }\n\n let lineNum = 1;\n while (lineNum <= state.doc.lines) {\n const line = state.doc.line(lineNum);\n const trimmed = line.text.trim();\n\n const dialectMatch = matchDialectFence(trimmed);\n const widgetMatch = matchWidgetFence(trimmed);\n const contentMatch = matchContentFence(trimmed);\n const genericFence = matchGenericFence(trimmed);\n\n if (dialectMatch || widgetMatch || contentMatch || genericFence) {\n flushMarkdown(lineNum - 1, line.from);\n\n const { closeLine, contentFrom, contentTo } = scanFenced(state, lineNum);\n const closeLineObj = state.doc.line(closeLine);\n const innerContent = state.doc.sliceString(contentFrom, contentTo);\n\n if (dialectMatch) {\n sections.push({\n id: generateSectionId(dialectMatch.dialect, lineNum, innerContent),\n type: dialectMatch.dialect,\n from: line.from,\n to: closeLineObj.to,\n startLine: lineNum,\n endLine: closeLine,\n contentFrom,\n contentTo,\n sport: dialectMatch.sport,\n contentId: blockContentId(innerContent),\n });\n } else if (widgetMatch) {\n sections.push({\n id: generateSectionId(\"widget\", lineNum, innerContent),\n type: \"widget\",\n widgetName: widgetMatch,\n from: line.from,\n to: closeLineObj.to,\n startLine: lineNum,\n endLine: closeLine,\n contentFrom,\n contentTo,\n });\n } else if (contentMatch) {\n sections.push({\n id: generateSectionId(\"query\", lineNum, innerContent),\n type: \"query\",\n from: line.from,\n to: closeLineObj.to,\n startLine: lineNum,\n endLine: closeLine,\n contentFrom,\n contentTo,\n queryType: contentMatch.widgetType,\n queryError: contentMatch.widgetError,\n });\n } else if (genericFence) {\n sections.push({\n id: generateSectionId(\"code\", lineNum, innerContent),\n type: \"code\",\n from: line.from,\n to: closeLineObj.to,\n startLine: lineNum,\n endLine: closeLine,\n contentFrom,\n contentTo,\n });\n }\n\n lineNum = closeLine + 1;\n mdStartLine = lineNum;\n mdStartPos = lineNum <= state.doc.lines ? state.doc.line(lineNum).from : state.doc.length;\n continue;\n }\n\n // ── Frontmatter (--- delimiters) ──\n // Rules (Jekyll / Hugo / YAML front matter convention):\n // 1. The opening --- must be on line 1 OR preceded only by blank lines.\n // 2. The line immediately after the opening --- must NOT be blank\n // (blank-after means it's a Markdown thematic break / hr, not YAML).\n // 3. The block between the delimiters must contain at least one\n // \"key: value\" line so we don't treat empty --- --- pairs as frontmatter.\n if (trimmed === \"---\") {\n const lineCount = state.doc.lines;\n const nextLineText = lineNum < lineCount ? state.doc.line(lineNum + 1).text.trim() : \"\";\n if (nextLineText !== \"\") {\n let foundClose = false;\n let closeLine = lineNum;\n let hasKeyValueLine = false;\n\n for (let j = lineNum + 1; j <= lineCount; j++) {\n const jTrimmed = state.doc.line(j).text.trim();\n if (matchDialectFence(jTrimmed) || matchGenericFence(jTrimmed)) break;\n if (jTrimmed === \"---\") {\n closeLine = j;\n foundClose = true;\n break;\n }\n if (/^[A-Za-z_][\\w-]*\\s*:/.test(jTrimmed)) {\n hasKeyValueLine = true;\n }\n }\n\n if (foundClose && hasKeyValueLine) {\n flushMarkdown(lineNum - 1, line.from);\n\n const closeLineObj = state.doc.line(closeLine);\n const content = state.doc.sliceString(line.from, closeLineObj.to);\n sections.push({\n id: generateSectionId(\"frontmatter\", lineNum, content),\n type: \"frontmatter\",\n from: line.from,\n to: closeLineObj.to,\n startLine: lineNum,\n endLine: closeLine,\n contentFrom: line.to + 1,\n contentTo: closeLineObj.from - 1,\n });\n\n lineNum = closeLine + 1;\n mdStartLine = lineNum;\n mdStartPos = lineNum <= lineCount ? state.doc.line(lineNum).from : state.doc.length;\n continue;\n }\n }\n }\n\n if (currentMdLines.length === 0) {\n mdStartLine = lineNum;\n mdStartPos = line.from;\n }\n currentMdLines.push(line.text);\n lineNum++;\n }\n\n flushMarkdown(state.doc.lines, state.doc.length);\n return sections;\n}\n\nexport const sectionField = StateField.define<SectionState>({\n create(state) {\n return { sections: parseSections(state) };\n },\n update(value, tr) {\n if (tr.docChanged || tr.effects.some((e) => e.is(forceSectionParse))) {\n const newSections = parseSections(tr.state);\n return { sections: mapIdentities(value.sections, newSections) };\n }\n return value;\n },\n});\n\nexport function sectionAtPos(state: EditorState, pos: number): EditorSection | null {\n const { sections } = state.field(sectionField);\n return sections.find((s) => pos >= s.from && pos <= s.to) ?? null;\n}\n\nexport function activeCursorSection(state: EditorState): EditorSection | null {\n const pos = state.selection.main.head;\n return sectionAtPos(state, pos);\n}\n","import { linter } from \"@codemirror/lint\";\nimport type { Diagnostic } from \"@codemirror/lint\";\nimport { EditorView } from \"@codemirror/view\";\nimport { EditorState } from \"@codemirror/state\";\nimport { syntaxTree } from \"@codemirror/language\";\nimport { whiteboardScriptLanguage } from '@bitcobblers/wod-wiki-lang';\nimport { sectionField } from \"./section-state\";\n\nexport function findWorkoutErrors(content: string, offsetInDoc: number): Diagnostic[] {\n if (!content.trim()) return [];\n\n const doc = content.endsWith(\"\\n\") ? content : content + \"\\n\";\n const tempState = EditorState.create({\n doc,\n extensions: [whiteboardScriptLanguage],\n });\n\n const tree = syntaxTree(tempState);\n const diagnostics: Diagnostic[] = [];\n\n tree.iterate({\n enter(node) {\n if (node.type.isError) {\n const from = offsetInDoc + node.from;\n const to = offsetInDoc + Math.max(node.to, node.from + 1);\n diagnostics.push({\n from,\n to: Math.min(to, from + 50),\n severity: \"error\",\n message: \"Syntax error in Whiteboard Script\",\n });\n }\n },\n });\n\n return diagnostics;\n}\n\nexport function workoutLintSource(view: EditorView): Diagnostic[] {\n // The linter may run against states that don't include the section-state\n // extension (e.g. standalone script editors) — nothing to lint then.\n const { sections } = view.state.field(sectionField, false) ?? { sections: [] };\n const diagnostics: Diagnostic[] = [];\n\n for (const section of sections) {\n if (section.type !== \"time\" && section.type !== \"log\") continue;\n if (section.contentFrom === undefined || section.contentTo === undefined) continue;\n\n const innerContent = view.state.doc.sliceString(\n section.contentFrom,\n section.contentTo,\n );\n\n const errors = findWorkoutErrors(innerContent, section.contentFrom);\n diagnostics.push(...errors);\n }\n\n return diagnostics;\n}\n\nexport const wodLinter = linter(workoutLintSource, {\n delay: 500,\n});\n","import {\n autocompletion,\n snippet,\n} from \"@codemirror/autocomplete\";\nimport type {\n CompletionContext,\n CompletionResult,\n Completion,\n} from \"@codemirror/autocomplete\";\nimport { EditorView, keymap } from \"@codemirror/view\";\nimport type { Extension } from \"@codemirror/state\";\nimport { activeCursorSection } from \"./section-state\";\n\nconst FENCE_TAGS: Completion[] = [\n {\n label: \"```time\",\n detail: \"Whiteboard Script (timer)\",\n type: \"keyword\",\n apply: snippet(\"```time\\n${}\\n```\"),\n boost: 90,\n },\n {\n label: \"```log\",\n detail: \"Whiteboard Script (log/completed)\",\n type: \"keyword\",\n apply: snippet(\"```log\\n${}\\n```\"),\n boost: 85,\n },\n {\n label: \"```query\",\n detail: \"WQL Analytics Query\",\n type: \"keyword\",\n apply: snippet(\"```query\\n${}\\n```\"),\n boost: 80,\n },\n {\n label: \"```widget\",\n detail: \"Custom React Widget\",\n type: \"keyword\",\n apply: snippet(\"```widget:${name}\\n${}\\n```\"),\n boost: 75,\n },\n];\n\nexport function fenceCompletion(context: CompletionContext): CompletionResult | null {\n const line = context.state.doc.lineAt(context.pos);\n const textBefore = line.text.slice(0, context.pos - line.from);\n\n const match = textBefore.match(/^`{1,3}(\\w*)$/);\n if (!match) return null;\n\n const section = activeCursorSection(context.state);\n if (section && section.type !== \"markdown\") return null;\n\n return {\n from: line.from,\n options: FENCE_TAGS,\n validFor: /^`{1,3}\\w*$/,\n };\n}\n\nexport function wrapInTimeFence(view: EditorView): boolean {\n const { from, to } = view.state.selection.main;\n const selected = view.state.doc.sliceString(from, to);\n\n if (!selected) {\n view.dispatch({\n changes: { from, insert: \"```time\\n\\n```\" },\n selection: { anchor: from + 8 },\n });\n } else {\n view.dispatch({\n changes: {\n from,\n to,\n insert: `\\`\\`\\`time\\n${selected}\\n\\`\\`\\``,\n },\n });\n }\n return true;\n}\n\nexport function handleFenceAutoWrap(event: InputEvent, view: EditorView): boolean {\n if (event.data !== \"`\") return false;\n const { from, to } = view.state.selection.main;\n if (from === to) return false;\n\n const selected = view.state.doc.sliceString(from, to);\n view.dispatch({\n changes: {\n from,\n to,\n insert: `\\`\\`\\`time\\n${selected}\\n\\`\\`\\``,\n },\n });\n return true;\n}\n\nexport const wodAutoWrap: Extension = EditorView.domEventHandlers({\n beforeinput: handleFenceAutoWrap,\n});\n\nexport const wodEditorKeymap = keymap.of([\n {\n key: \"Mod-Shift-w\",\n run: wrapInTimeFence,\n },\n]);\n\nexport const wodAutocompletion: Extension = autocompletion({\n override: [fenceCompletion],\n});\n","import { ViewPlugin, ViewUpdate, EditorView } from \"@codemirror/view\";\nimport { sectionField, type EditorSection } from \"./section-state\";\n\nexport interface SectionRect {\n sectionId: string;\n top: number;\n height: number;\n type: EditorSection[\"type\"];\n subtype?: EditorSection[\"subtype\"];\n widgetName?: string;\n}\n\nexport type GeometryListener = (rects: SectionRect[], docVersion: number) => void;\nclass SectionGeometryPlugin {\n rects: SectionRect[] = [];\n docVersion: number = 0;\n private listeners: Set<GeometryListener> = new Set();\n private pendingNotify: number | null = null;\n\n constructor(private view: EditorView) {\n this.measure();\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged) {\n this.docVersion++;\n }\n if (update.docChanged || update.geometryChanged) {\n this.measure();\n }\n }\n\n addListener(fn: GeometryListener): () => void {\n this.listeners.add(fn);\n fn(this.rects, this.docVersion);\n return () => {\n this.listeners.delete(fn);\n };\n }\n\n private measure() {\n try {\n const sectionState = this.view.state.field(sectionField, false);\n const sections = sectionState?.sections ?? [];\n const docLength = this.view.state.doc.length;\n\n this.rects = sections.map((sec) => {\n const from = Math.max(0, Math.min(sec.from, docLength));\n const to = Math.max(0, Math.min(sec.to, docLength));\n\n let top = 0;\n let bottom = 20;\n\n try {\n const topBlock = this.view.lineBlockAt(from);\n const bottomBlock = this.view.lineBlockAt(to);\n top = topBlock.top;\n bottom = bottomBlock.top + bottomBlock.height;\n } catch {\n // lineBlockAt fallback\n }\n\n const height = Math.max(bottom - top, 20);\n\n return {\n sectionId: sec.id,\n top,\n height,\n type: sec.type,\n subtype: sec.subtype,\n widgetName: sec.widgetName,\n };\n });\n\n this.notify();\n } catch {\n // Best-effort measurement\n }\n }\n\n private notify() {\n if (typeof requestAnimationFrame === 'function') {\n if (this.pendingNotify !== null) return;\n this.pendingNotify = requestAnimationFrame(() => {\n this.pendingNotify = null;\n for (const listener of this.listeners) {\n listener(this.rects, this.docVersion);\n }\n });\n } else {\n for (const listener of this.listeners) {\n listener(this.rects, this.docVersion);\n }\n }\n }\n\n destroy() {\n if (this.pendingNotify !== null && typeof cancelAnimationFrame === 'function') {\n cancelAnimationFrame(this.pendingNotify);\n }\n this.listeners.clear();\n }\n}\n\nexport const sectionGeometry = ViewPlugin.fromClass(SectionGeometryPlugin);\n","import { Decoration,\n EditorView } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, EditorState, RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField } from \"./section-state\";\n\nconst fenceOpenDeco = Decoration.line({\n attributes: { class: \"cm-wod-fence cm-wod-fence-open\" },\n});\n\nconst fenceCloseDeco = Decoration.line({\n attributes: { class: \"cm-wod-fence cm-wod-fence-close\" },\n});\n\nconst workoutInnerDeco = Decoration.line({\n attributes: { class: \"cm-wod-inner\" },\n});\n\nfunction buildWorkoutDecorations(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n\n for (const section of sections) {\n if (section.type !== \"time\" && section.type !== \"log\") continue;\n\n const startLine = state.doc.line(section.startLine);\n const endLine = state.doc.line(section.endLine);\n\n builder.add(startLine.from, startLine.from, fenceOpenDeco);\n\n for (let l = section.startLine + 1; l < section.endLine; l++) {\n const line = state.doc.line(l);\n builder.add(line.from, line.from, workoutInnerDeco);\n }\n\n if (section.endLine > section.startLine) {\n builder.add(endLine.from, endLine.from, fenceCloseDeco);\n }\n }\n\n return builder.finish();\n}\n\nconst scriptBlockDecoField = StateField.define<DecorationSet>({\n create(state) {\n return buildWorkoutDecorations(state);\n },\n update(deco, tr) {\n if (tr.docChanged) {\n return buildWorkoutDecorations(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nconst scriptBlockBaseTheme = EditorView.baseTheme({\n \".cm-wod-fence\": {\n opacity: \"0.5\",\n fontSize: \"0.85em\",\n },\n \".cm-wod-fence-open\": {\n borderRadius: \"6px 6px 0 0\",\n },\n \".cm-wod-fence-close\": {\n borderRadius: \"0 0 6px 6px\",\n },\n \".cm-wod-inner\": {\n paddingLeft: \"8px\",\n backgroundColor: \"rgba(128, 128, 128, 0.05)\",\n },\n});\n\nexport const previewDecorations: Extension = [\n scriptBlockDecoField,\n scriptBlockBaseTheme,\n];\n","import { Decoration,\n EditorView,\n WidgetType } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { EditorState, StateField, RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField } from \"./section-state\";\n\nclass EmbedSpacerWidget extends WidgetType {\n constructor(readonly height: number) {\n super();\n }\n\n eq(other: EmbedSpacerWidget): boolean {\n return other.height === this.height;\n }\n\n toDOM(): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"cm-embed-spacer\";\n el.style.height = `${this.height}px`;\n el.style.pointerEvents = \"none\";\n return el;\n }\n\n get estimatedHeight(): number {\n return this.height;\n }\n\n get block(): boolean {\n return true;\n }\n}\n\nfunction buildEmbedDecorations(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n\n for (const section of sections) {\n if (section.type === \"embed\" && section.embed?.height) {\n const line = state.doc.line(section.startLine);\n builder.add(\n line.from,\n line.from,\n Decoration.widget({\n widget: new EmbedSpacerWidget(section.embed.height),\n side: 1,\n }),\n );\n }\n }\n\n return builder.finish();\n}\n\nconst embedPreviewField = StateField.define<DecorationSet>({\n create(state) {\n return buildEmbedDecorations(state);\n },\n update(deco, tr) {\n if (tr.docChanged) {\n return buildEmbedDecorations(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nexport const embedPreviewDecorations: Extension = [\n embedPreviewField,\n];\n","import { Decoration,\n EditorView,\n WidgetType } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, EditorState, RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField, type EditorSection } from \"./section-state\";\n\nexport class DefaultFrontmatterWidget extends WidgetType {\n constructor(readonly props: Record<string, string>) {\n super();\n }\n\n eq(other: DefaultFrontmatterWidget): boolean {\n const keysA = Object.keys(this.props);\n const keysB = Object.keys(other.props);\n if (keysA.length !== keysB.length) return false;\n return keysA.every((k) => this.props[k] === other.props[k]);\n }\n\n toDOM(): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"cm-frontmatter-preview p-3 my-1 rounded-lg border border-border/80 bg-muted/20 text-xs font-mono\";\n const entries = Object.entries(this.props);\n if (entries.length === 0) {\n el.textContent = \"Empty frontmatter\";\n return el;\n }\n const dl = document.createElement(\"dl\");\n dl.className = \"grid grid-cols-[auto_1fr] gap-x-3 gap-y-1\";\n for (const [k, v] of entries) {\n const dt = document.createElement(\"dt\");\n dt.className = \"text-muted-foreground font-semibold\";\n dt.textContent = `${k}:`;\n const dd = document.createElement(\"dd\");\n dd.className = \"text-foreground truncate\";\n dd.textContent = v;\n dl.appendChild(dt);\n dl.appendChild(dd);\n }\n el.appendChild(dl);\n return el;\n }\n}\n\nfunction parseFrontmatterProps(\n state: EditorState,\n section: EditorSection,\n): Record<string, string> {\n const text = state.doc.sliceString(section.from, section.to);\n const lines = text.split(\"\\n\").filter((l) => !l.trim().startsWith(\"---\"));\n const props: Record<string, string> = {};\n for (const line of lines) {\n const colonIdx = line.indexOf(\":\");\n if (colonIdx > 0) {\n const k = line.slice(0, colonIdx).trim();\n const v = line.slice(colonIdx + 1).trim();\n if (k) props[k] = v;\n }\n }\n return props;\n}\n\nfunction buildFrontmatterDecos(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n\n for (const section of sections) {\n if (section.type !== \"frontmatter\") continue;\n // Hide preview when cursor is inside the frontmatter block\n if (cursor >= section.from && cursor <= section.to) continue;\n\n const props = parseFrontmatterProps(state, section);\n builder.add(\n section.from,\n section.to,\n Decoration.replace({\n widget: new DefaultFrontmatterWidget(props),\n block: true,\n }),\n );\n }\n\n return builder.finish();\n}\n\nexport const frontmatterPreviewField = StateField.define<DecorationSet>({\n create(state) {\n return buildFrontmatterDecos(state);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\n return buildFrontmatterDecos(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nexport const frontmatterPreview: Extension = [\n frontmatterPreviewField,\n];\n","import { Decoration, EditorView } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, EditorState, RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField } from \"./section-state\";\n\nconst HEADING_RE = /^(#{1,6}) /;\nconst BOLD_RE = /\\*\\*([^*\\n]+)\\*\\*/g;\nconst ITALIC_STAR_RE = /(?<!\\*)\\*([^*\\n]+)\\*(?!\\*)/g;\n\nconst HEADING_LINE_DECOS = [1, 2, 3, 4, 5, 6].map((level) =>\n Decoration.line({ attributes: { class: `cm-md-heading cm-md-heading-${level}` } }),\n);\n\nconst hideSyntaxDeco = Decoration.replace({});\nconst boldDeco = Decoration.mark({ class: \"cm-md-bold font-bold\" });\nconst italicDeco = Decoration.mark({ class: \"cm-md-italic italic\" });\n\nfunction buildDecorations(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n\n for (const section of sections) {\n if (section.type !== \"markdown\") continue;\n\n for (let l = section.startLine; l <= section.endLine; l++) {\n const line = state.doc.line(l);\n const isCursorOnLine = cursor >= line.from && cursor <= line.to;\n\n const headingMatch = line.text.match(HEADING_RE);\n if (headingMatch) {\n const level = headingMatch[1].length;\n builder.add(line.from, line.from, HEADING_LINE_DECOS[level - 1]);\n if (!isCursorOnLine) {\n builder.add(line.from, line.from + headingMatch[0].length, hideSyntaxDeco);\n }\n }\n\n if (!isCursorOnLine) {\n let match: RegExpExecArray | null;\n BOLD_RE.lastIndex = 0;\n while ((match = BOLD_RE.exec(line.text)) !== null) {\n const start = line.from + match.index;\n const end = start + match[0].length;\n builder.add(start, start + 2, hideSyntaxDeco);\n builder.add(start + 2, end - 2, boldDeco);\n builder.add(end - 2, end, hideSyntaxDeco);\n }\n\n ITALIC_STAR_RE.lastIndex = 0;\n while ((match = ITALIC_STAR_RE.exec(line.text)) !== null) {\n const start = line.from + match.index;\n const end = start + match[0].length;\n builder.add(start, start + 1, hideSyntaxDeco);\n builder.add(start + 1, end - 1, italicDeco);\n builder.add(end - 1, end, hideSyntaxDeco);\n }\n }\n }\n }\n\n return builder.finish();\n}\n\nconst markdownSyntaxHidingField = StateField.define<DecorationSet>({\n create(state) {\n return buildDecorations(state);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\n return buildDecorations(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nconst markdownSyntaxHidingTheme = EditorView.baseTheme({\n \".cm-md-heading-1\": { fontSize: \"1.3em\", fontWeight: \"bold\" },\n \".cm-md-heading-2\": { fontSize: \"1.2em\", fontWeight: \"bold\" },\n \".cm-md-heading-3\": { fontSize: \"1.1em\", fontWeight: \"bold\" },\n});\n\nexport function markdownSyntaxHiding(): Extension {\n return [markdownSyntaxHidingField, markdownSyntaxHidingTheme];\n}\n","import { Decoration,\n EditorView,\n WidgetType } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, EditorState, RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField, type EditorSection } from \"./section-state\";\n\nfunction isTableSeparator(line: string): boolean {\n return /^\\|[\\s:]*-+[\\s:]*(\\|[\\s:]*-+[\\s:]*)*\\|$/.test(line.trim());\n}\n\nfunction parseTableCells(line: string): string[] {\n const trimmed = line.trim();\n const inner = trimmed.startsWith(\"|\") && trimmed.endsWith(\"|\") ? trimmed.slice(1, -1) : trimmed;\n return inner.split(\"|\").map((c) => c.trim());\n}\n\nclass MarkdownTableWidget extends WidgetType {\n constructor(readonly head: string[], readonly rows: string[][]) {\n super();\n }\n\n eq(other: MarkdownTableWidget): boolean {\n if (this.head.length !== other.head.length || this.rows.length !== other.rows.length) return false;\n return this.head.every((h, i) => h === other.head[i]);\n }\n\n toDOM(): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"cm-table-preview my-2 overflow-auto border border-border/80 rounded-lg\";\n const table = document.createElement(\"table\");\n table.className = \"w-full text-xs font-mono border-collapse\";\n\n const thead = document.createElement(\"thead\");\n const htr = document.createElement(\"tr\");\n htr.className = \"border-b border-border bg-muted/40 text-muted-foreground text-left\";\n for (const h of this.head) {\n const th = document.createElement(\"th\");\n th.className = \"py-1.5 px-3 font-semibold\";\n th.textContent = h;\n htr.appendChild(th);\n }\n thead.appendChild(htr);\n table.appendChild(thead);\n\n const tbody = document.createElement(\"tbody\");\n for (const row of this.rows) {\n const tr = document.createElement(\"tr\");\n tr.className = \"border-b border-border/40 hover:bg-muted/20\";\n for (const cell of row) {\n const td = document.createElement(\"td\");\n td.className = \"py-1.5 px-3 text-foreground\";\n td.textContent = cell;\n tr.appendChild(td);\n }\n tbody.appendChild(tr);\n }\n table.appendChild(tbody);\n wrap.appendChild(table);\n return wrap;\n }\n}\n\nfunction parseSectionTable(state: EditorState, section: EditorSection): { head: string[]; rows: string[][] } | null {\n const lines: string[] = [];\n for (let l = section.startLine; l <= section.endLine; l++) {\n lines.push(state.doc.line(l).text);\n }\n const tableLines = lines.filter((l) => l.trim().startsWith(\"|\"));\n if (tableLines.length < 2) return null;\n if (!isTableSeparator(tableLines[1])) return null;\n\n const head = parseTableCells(tableLines[0]);\n const rows = tableLines.slice(2).map(parseTableCells);\n return { head, rows };\n}\n\nfunction buildTableDecos(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n\n for (const section of sections) {\n if (section.type !== \"markdown\" || section.subtype !== \"table\") continue;\n if (cursor >= section.from && cursor <= section.to) continue;\n\n const parsed = parseSectionTable(state, section);\n if (!parsed) continue;\n\n builder.add(\n section.from,\n section.to,\n Decoration.replace({\n widget: new MarkdownTableWidget(parsed.head, parsed.rows),\n block: true,\n }),\n );\n }\n\n return builder.finish();\n}\n\nconst tablePreviewField = StateField.define<DecorationSet>({\n create(state) {\n return buildTableDecos(state);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\n return buildTableDecos(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nexport const markdownTablePreview: Extension = [\n tablePreviewField,\n];\n","import { StateEffect, StateField, RangeSetBuilder } from \"@codemirror/state\";\nimport { GutterMarker, gutter, EditorView } from \"@codemirror/view\";\nimport { forEachDiagnostic } from \"@codemirror/lint\";\n\nexport const setGutterHighlights = StateEffect.define<Set<number>>();\n\nexport const gutterHighlightsField = StateField.define<Set<number>>({\n create() {\n return new Set();\n },\n update(value, tr) {\n for (const e of tr.effects) {\n if (e.is(setGutterHighlights)) return e.value;\n }\n return value;\n },\n});\n\ntype MarkerKind = \"runtime\" | \"error\" | \"warning\" | \"info\";\n\nconst KIND_CLASS: Record<MarkerKind, string> = {\n runtime: \"cm-gutter-runtime\",\n error: \"cm-gutter-error\",\n warning: \"cm-gutter-warning\",\n info: \"cm-gutter-info\",\n};\n\nclass UnifiedMarker extends GutterMarker {\n constructor(readonly kind: MarkerKind) {\n super();\n }\n\n toDOM() {\n const el = document.createElement(\"div\");\n el.className = `cm-unified-gutter-marker ${KIND_CLASS[this.kind]}`;\n return el;\n }\n}\n\nconst markerCache = new Map<MarkerKind, UnifiedMarker>([\n [\"runtime\", new UnifiedMarker(\"runtime\")],\n [\"error\", new UnifiedMarker(\"error\")],\n [\"warning\", new UnifiedMarker(\"warning\")],\n [\"info\", new UnifiedMarker(\"info\")],\n]);\n\nconst unifiedGutterInstance = gutter({\n class: \"cm-unified-gutter\",\n markers(view) {\n const builder = new RangeSetBuilder<GutterMarker>();\n const highlights = view.state.field(gutterHighlightsField);\n const lineMarkers = new Map<number, MarkerKind>();\n\n for (const lineNum of highlights) {\n if (lineNum >= 1 && lineNum <= view.state.doc.lines) {\n lineMarkers.set(lineNum, \"runtime\");\n }\n }\n\n forEachDiagnostic(view.state, (d) => {\n const line = view.state.doc.lineAt(d.from).number;\n if (lineMarkers.get(line) === \"runtime\") return;\n const existing = lineMarkers.get(line);\n if (!existing || (d.severity === \"error\" && existing !== \"error\")) {\n lineMarkers.set(line, d.severity as MarkerKind);\n }\n });\n\n const sortedLines = Array.from(lineMarkers.keys()).sort((a, b) => a - b);\n for (const l of sortedLines) {\n const line = view.state.doc.line(l);\n const marker = markerCache.get(lineMarkers.get(l)!);\n if (marker) {\n builder.add(line.from, line.from, marker);\n }\n }\n\n return builder.finish();\n },\n initialSpacer: () => new UnifiedMarker(\"info\"),\n});\n\nexport const gutterUnified = [\n gutterHighlightsField,\n unifiedGutterInstance,\n];\n\nexport function dispatchGutterHighlights(\n view: EditorView,\n lineNumbers: number[],\n): void {\n view.dispatch({ effects: setGutterHighlights.of(new Set(lineNumbers)) });\n}\n","import { Decoration,\n EditorView,\n WidgetType,\n ViewPlugin,\n ViewUpdate } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\n\nexport type ButtonAction = (action: string, params: Record<string, string>) => void;\n\nconst BUTTON_RE = /\\[([^\\]]+)\\]\\{\\.button([^}]*)\\}/g;\n\nfunction parseAttrs(raw: string): Record<string, string> {\n const params: Record<string, string> = {};\n const attrMatches = raw.matchAll(/(\\w+)=(\"[^\"]*\"|'[^']*'|\\S+)/g);\n for (const m of attrMatches) {\n const key = m[1];\n let val = m[2];\n if ((val.startsWith('\"') && val.endsWith('\"')) || (val.startsWith(\"'\") && val.endsWith(\"'\"))) {\n val = val.slice(1, -1);\n }\n params[key] = val;\n }\n return params;\n}\n\nclass InlineButtonWidget extends WidgetType {\n constructor(\n readonly label: string,\n readonly params: Record<string, string>,\n readonly onAction: ButtonAction,\n ) {\n super();\n }\n\n eq(other: InlineButtonWidget): boolean {\n if (this.label !== other.label) return false;\n const k1 = Object.keys(this.params);\n const k2 = Object.keys(other.params);\n if (k1.length !== k2.length) return false;\n return k1.every((k) => this.params[k] === other.params[k]);\n }\n\n toDOM(): HTMLElement {\n const btn = document.createElement(\"button\");\n btn.type = \"button\";\n btn.className =\n \"cm-inline-button inline-flex items-center gap-1 px-2.5 py-0.5 my-0.5 rounded-full text-xs font-semibold bg-primary text-primary-foreground hover:bg-primary/90 transition-colors shadow-sm cursor-pointer select-none\";\n btn.textContent = this.label;\n btn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const actionName = this.params.action || this.params.cmd || \"click\";\n this.onAction(actionName, this.params);\n });\n return btn;\n }\n}\n\nfunction buildButtonDecos(\n view: EditorView,\n onAction: ButtonAction,\n): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n for (const { from, to } of view.visibleRanges) {\n const text = view.state.doc.sliceString(from, to);\n BUTTON_RE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = BUTTON_RE.exec(text)) !== null) {\n const start = from + match.index;\n const end = start + match[0].length;\n const label = match[1];\n const params = parseAttrs(match[2]);\n builder.add(\n start,\n end,\n Decoration.replace({\n widget: new InlineButtonWidget(label, params, onAction),\n }),\n );\n }\n }\n return builder.finish();\n}\n\nclass InlineButtonPlugin {\n decorations: DecorationSet;\n\n constructor(view: EditorView, readonly onAction: ButtonAction) {\n this.decorations = buildButtonDecos(view, onAction);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged) {\n this.decorations = buildButtonDecos(update.view, this.onAction);\n }\n }\n}\n\nexport function inlineButtonDecoration(onAction: ButtonAction): Extension {\n return ViewPlugin.define(\n (view) => new InlineButtonPlugin(view, onAction),\n { decorations: (v) => v.decorations },\n );\n}\n","import { StateEffect, StateField } from \"@codemirror/state\";\nimport { Decoration, EditorView, WidgetType } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport type { ScriptBlock } from '@bitcobblers/wod-wiki-core';\n\nexport interface RuntimePanelEntry {\n sectionId: string;\n block: ScriptBlock;\n afterPos: number;\n expanded?: boolean;\n}\n\nexport const RUNTIME_PANEL_HEIGHT_PX = 500;\nexport const RUNTIME_PANEL_HEIGHT_EXPANDED_PX = 600;\n\nexport const addRuntimePanel = StateEffect.define<RuntimePanelEntry>();\nexport const removeRuntimePanel = StateEffect.define<{ sectionId: string }>();\nexport const expandRuntimePanel = StateEffect.define<{ sectionId: string; expanded: boolean }>();\n\nclass RuntimeSpacerWidget extends WidgetType {\n constructor(readonly height: number) {\n super();\n }\n\n eq(other: RuntimeSpacerWidget): boolean {\n return other.height === this.height;\n }\n\n toDOM(): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"cm-runtime-panel-spacer\";\n el.style.height = `${this.height}px`;\n el.style.pointerEvents = \"none\";\n return el;\n }\n\n get block(): boolean {\n return true;\n }\n}\n\nfunction buildRuntimePanelDecos(panels: Map<string, RuntimePanelEntry>): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const sorted = Array.from(panels.values()).sort((a, b) => a.afterPos - b.afterPos);\n\n for (const entry of sorted) {\n const height = entry.expanded ? RUNTIME_PANEL_HEIGHT_EXPANDED_PX : RUNTIME_PANEL_HEIGHT_PX;\n builder.add(\n entry.afterPos,\n entry.afterPos,\n Decoration.widget({\n widget: new RuntimeSpacerWidget(height),\n block: true,\n side: 1,\n }),\n );\n }\n\n return builder.finish();\n}\n\nexport const runtimePanelField = StateField.define<Map<string, RuntimePanelEntry>>({\n create() {\n return new Map();\n },\n update(panels, tr) {\n let next = panels;\n for (const e of tr.effects) {\n if (e.is(addRuntimePanel)) {\n next = new Map(next);\n next.set(e.value.sectionId, e.value);\n } else if (e.is(removeRuntimePanel)) {\n if (next.has(e.value.sectionId)) {\n next = new Map(next);\n next.delete(e.value.sectionId);\n }\n } else if (e.is(expandRuntimePanel)) {\n const existing = next.get(e.value.sectionId);\n if (existing) {\n next = new Map(next);\n next.set(e.value.sectionId, { ...existing, expanded: e.value.expanded });\n }\n }\n }\n return next;\n },\n provide: (f) =>\n EditorView.decorations.compute([f], (state) => buildRuntimePanelDecos(state.field(f))),\n});\n\nexport function dispatchAddRuntimePanel(\n view: EditorView,\n sectionId: string,\n block: ScriptBlock,\n afterPos: number,\n expanded = false,\n): void {\n view.dispatch({\n effects: addRuntimePanel.of({ sectionId, block, afterPos, expanded }),\n });\n}\n\nexport function dispatchRemoveRuntimePanel(view: EditorView, sectionId: string): void {\n view.dispatch({ effects: removeRuntimePanel.of({ sectionId }) });\n}\n\nexport function dispatchExpandRuntimePanel(\n view: EditorView,\n sectionId: string,\n expanded: boolean,\n): void {\n view.dispatch({ effects: expandRuntimePanel.of({ sectionId, expanded }) });\n}\n","import type { EditorState } from \"@codemirror/state\";\nimport { sectionField } from \"./section-state\";\n\nexport function sessionQueryWql(resultId: string): string {\n // C4: target always explicit — `all` = every output type.\n return `rows:all{result:${resultId}}`;\n}\n\nexport function sessionQueryInsert(\n state: EditorState,\n blockId: string,\n resultId: string,\n runBlock?: { id?: string; contentId?: string },\n): { from: number; insert: string } | null {\n const sections = state.field(sectionField).sections;\n let section = sections.find((s) => s.id === blockId);\n if (!section && runBlock?.contentId) {\n section = sections.find((s) => s.contentId === runBlock.contentId);\n }\n if (!section && runBlock?.id) {\n section = sections.find((s) => s.id === runBlock.id);\n }\n if (!section && runBlock) {\n section = sections.find((s) => s.type === \"time\" || s.type === \"log\");\n }\n if (!section || (section.type !== \"time\" && section.type !== \"log\")) {\n return null;\n }\n return {\n from: section.to,\n insert: `\\n\\n\\`\\`\\`query:table\\n${sessionQueryWql(resultId)}\\n\\`\\`\\``,\n };\n}\n","import { EditorView, keymap } from \"@codemirror/view\";\nimport type { Extension } from \"@codemirror/state\";\n\nfunction parseTimeString(timeStr: string): [number, number, number, number] | null {\n const parts = timeStr.split(':');\n if (parts.length < 1 || parts.length > 4) return null;\n const numbers = parts.map((p) => parseInt(p, 10));\n if (numbers.some((n) => isNaN(n))) return null;\n while (numbers.length < 4) {\n numbers.unshift(0);\n }\n return numbers as [number, number, number, number];\n}\n\nfunction formatTimeString(days: number, hours: number, minutes: number, seconds: number): string {\n const parts: number[] = [];\n if (days > 0) {\n parts.push(days, hours, minutes, seconds);\n } else if (hours > 0) {\n parts.push(hours, minutes, seconds);\n } else if (minutes > 0) {\n parts.push(minutes, seconds);\n } else {\n parts.push(seconds);\n }\n return parts.map((p, i) => (i === 0 ? String(p) : String(p).padStart(2, '0'))).join(':');\n}\n\nfunction incrementTime(\n days: number,\n hours: number,\n minutes: number,\n seconds: number,\n digitIndex: number,\n delta: number,\n): [number, number, number, number] {\n let totalSeconds = days * 86400 + hours * 3600 + minutes * 60 + seconds;\n const multipliers = [86400, 3600, 60, 1];\n const step = multipliers[digitIndex] ?? 1;\n\n totalSeconds = Math.max(0, totalSeconds + delta * step);\n\n const d = Math.floor(totalSeconds / 86400);\n totalSeconds %= 86400;\n const h = Math.floor(totalSeconds / 3600);\n totalSeconds %= 3600;\n const m = Math.floor(totalSeconds / 60);\n const s = totalSeconds % 60;\n\n return [d, h, m, s];\n}\n\nfunction findTimeAtCursor(\n line: string,\n column: number,\n): { timeStr: string; startCol: number; endCol: number; digitIndex: number } | null {\n const timeRegex = /\\b(\\d{1,2}(?::\\d{2}){1,3})\\b/g;\n let match: RegExpExecArray | null;\n\n while ((match = timeRegex.exec(line)) !== null) {\n const startCol = match.index;\n const endCol = startCol + match[0].length;\n\n if (column >= startCol && column <= endCol) {\n const timeStr = match[0];\n const cursorOffset = Math.min(column - startCol, timeStr.length - 1);\n const colonCount = (timeStr.slice(0, cursorOffset).match(/:/g) || []).length;\n const totalColons = (timeStr.match(/:/g) || []).length;\n const digitIndex = 4 - (totalColons + 1) + colonCount;\n\n return { timeStr, startCol, endCol, digitIndex };\n }\n }\n\n return null;\n}\n\nfunction handleSmartIncrement(view: EditorView, delta: number): boolean {\n const sel = view.state.selection.main;\n const line = view.state.doc.lineAt(sel.head);\n const col = sel.head - line.from;\n\n const found = findTimeAtCursor(line.text, col);\n if (!found) return false;\n\n const parsed = parseTimeString(found.timeStr);\n if (!parsed) return false;\n\n const [d, h, m, s] = incrementTime(parsed[0], parsed[1], parsed[2], parsed[3], found.digitIndex, delta);\n const nextTime = formatTimeString(d, h, m, s);\n\n view.dispatch({\n changes: {\n from: line.from + found.startCol,\n to: line.from + found.endCol,\n insert: nextTime,\n },\n });\n\n return true;\n}\n\nexport const smartIncrement: Extension = keymap.of([\n {\n key: \"Alt-ArrowUp\",\n run: (view) => handleSmartIncrement(view, 1),\n },\n {\n key: \"Alt-ArrowDown\",\n run: (view) => handleSmartIncrement(view, -1),\n },\n]);\n","import type { Extension } from \"@codemirror/state\";\nimport type { EditorView } from \"@codemirror/view\";\nimport type { EditorSection } from \"./section-state\";\n\nexport interface OverlayAction {\n label: string;\n icon: string;\n action: (view: EditorView, section: EditorSection) => void;\n}\n\nlet overlayActions: OverlayAction[] = [];\n\nexport function configureOverlayActions(actions: OverlayAction[]) {\n overlayActions = actions;\n}\n\nexport function getOverlayActions(): OverlayAction[] {\n return overlayActions;\n}\n\nexport const wodOverlayPanel: Extension = [];\n","import { Decoration,\n EditorView } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField,\n EditorState,\n RangeSetBuilder } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { sectionField, type EditorSection } from \"./section-state\";\nimport type { ICodeStatement, IMetric } from '@bitcobblers/wod-wiki-core';\nimport { createParser } from '@bitcobblers/wod-wiki-lang';\n\nexport interface CursorFocusState {\n sectionId: string;\n section: EditorSection;\n lineFrom: number;\n docLine: number;\n statementIndex: number;\n statement: ICodeStatement;\n focusedMetric: IMetric | null;\n focusedMetricIndex: number;\n allStatements: ICodeStatement[];\n}\n\nconst METRIC_MARK_CLASS: Record<string, string> = {\n duration: \"cm-metric-duration\",\n rep: \"cm-metric-rep\",\n rounds: \"cm-metric-rounds\",\n distance: \"cm-metric-distance\",\n resistance: \"cm-metric-resistance\",\n action: \"cm-metric-action\",\n pace: \"cm-metric-pace\",\n heart_rate: \"cm-metric-heart_rate\",\n power: \"cm-metric-power\",\n calories: \"cm-metric-calories\",\n};\n\nfunction parseStatements(\n section: EditorSection,\n state: EditorState,\n): ICodeStatement[] | null {\n if (section.type !== \"time\" && section.type !== \"log\") return null;\n if (section.contentFrom === undefined || section.contentTo === undefined) return null;\n const content = state.doc.sliceString(section.contentFrom, section.contentTo);\n try {\n // Headless string parse — a bare EditorState carries no Lezer tree, so\n // extractStatements() on one always yields zero statements.\n return createParser().read(content, section.sport).statements as ICodeStatement[];\n } catch {\n return null;\n }\n}\n\nfunction buildDecorations(\n state: EditorState,\n): { focus: CursorFocusState | null; decos: DecorationSet } {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n const cursorLine = state.doc.lineAt(cursor);\n\n let focus: CursorFocusState | null = null;\n\n for (const section of sections) {\n if (section.type !== \"time\" && section.type !== \"log\") continue;\n\n const statements = parseStatements(section, state);\n if (!statements) continue;\n\n const isCursorInSection = cursor >= section.from && cursor <= section.to;\n\n for (let idx = 0; idx < statements.length; idx++) {\n const stmt = statements[idx];\n const lineNum = section.startLine + 1 + idx;\n if (lineNum >= section.endLine) break;\n\n const line = state.doc.line(lineNum);\n const isCursorOnLine = isCursorInSection && cursorLine.number === lineNum;\n\n for (let mIdx = 0; mIdx < stmt.metrics.length; mIdx++) {\n const m = stmt.metrics[mIdx];\n const cls = METRIC_MARK_CLASS[m.type] || \"cm-metric-generic\";\n builder.add(\n line.from,\n line.to,\n Decoration.mark({\n class: `cm-metric-mark ${cls}`,\n }),\n );\n\n if (isCursorOnLine && !focus) {\n focus = {\n sectionId: section.id,\n section,\n lineFrom: line.from,\n docLine: lineNum,\n statementIndex: idx,\n statement: stmt,\n focusedMetric: m,\n focusedMetricIndex: mIdx,\n allStatements: statements,\n };\n }\n }\n }\n }\n\n return { focus, decos: builder.finish() };\n}\n\ninterface InternalState {\n focus: CursorFocusState | null;\n decos: DecorationSet;\n}\n\nconst cursorFocusInternal = StateField.define<InternalState>({\n create(state) {\n return buildDecorations(state);\n },\n update(_value, tr) {\n return buildDecorations(tr.state);\n },\n provide: (f) => EditorView.decorations.from(f, (val) => val.decos),\n});\n\nexport function getCursorFocusState(state: EditorState): CursorFocusState | null {\n return state.field(cursorFocusInternal, false)?.focus ?? null;\n}\n\nexport const cursorFocusExtension: Extension = [\n cursorFocusInternal,\n];\n","import { useMemo, type ReactNode } from 'react';\nimport type { Segment, StoredOutputStatement } from '@bitcobblers/wod-wiki-core';\nimport type { RowsQueryResult, RowsRun } from '@bitcobblers/wod-wiki-wql';\nimport { getAnalyticsFromLogs } from '@bitcobblers/wod-wiki-lang';\n\nexport interface RowsTableProps {\n result: RowsQueryResult;\n /** Optional per-run chrome rendered inside the section header (#948 RPE). */\n renderRunHeaderExtra?: (run: RowsRun) => ReactNode;\n /** Optional segment grid renderer (e.g. app's ReviewGrid). Default: clean plain table rows. */\n renderSegments?: (segments: Segment[], run: RowsRun) => ReactNode;\n}\n\nfunction formatRunHeader(run: RowsRun): string {\n const date = new Date(run.timestamp).toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n return date;\n}\n\nfunction PlainSegmentList({ segments }: { segments: Segment[] }) {\n if (segments.length === 0) {\n return (\n <div className=\"text-xs text-muted-foreground py-2 px-3\">\n No segmented output recorded for this run.\n </div>\n );\n }\n\n return (\n <div className=\"overflow-auto border border-border/40 rounded-b-md\">\n <table className=\"w-full text-xs font-mono\">\n <thead>\n <tr className=\"border-b border-border/60 bg-muted/20 text-muted-foreground text-left\">\n <th className=\"py-1.5 px-3 font-medium\">Segment</th>\n <th className=\"py-1.5 px-3 font-medium text-right\">Time</th>\n <th className=\"py-1.5 px-3 font-medium text-right\">Metrics</th>\n </tr>\n </thead>\n <tbody>\n {segments.map((seg) => {\n const metricSummary = Object.entries(seg.metric ?? {})\n .map(([k, v]) => `${k}: ${v}`)\n .join(', ');\n return (\n <tr key={seg.id} className=\"border-b border-border/20 hover:bg-muted/30\">\n <td className=\"py-1.5 px-3 font-medium text-foreground\">{seg.name || 'Segment'}</td>\n <td className=\"py-1.5 px-3 text-right tabular-nums text-muted-foreground\">\n {seg.elapsed ? `${Math.round(seg.elapsed)}s` : '—'}\n </td>\n <td className=\"py-1.5 px-3 text-right text-muted-foreground\">{metricSummary || '—'}</td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n );\n}\n\nexport function RowsTable({\n result,\n renderRunHeaderExtra,\n renderSegments,\n}: RowsTableProps) {\n const runs = useMemo(\n () =>\n result.runs.map((run) => {\n // Event rows are the promoted statement snapshots — structurally the\n // stored-statement shape the analytics reader walks.\n const statements = run.events as unknown as StoredOutputStatement[];\n const startTime = run.events[0]?.timeSpan?.started ?? run.timestamp;\n return {\n run,\n segments: getAnalyticsFromLogs(statements, startTime).segments as Segment[],\n };\n }),\n [result],\n );\n\n if (runs.length === 0) {\n return (\n <div className=\"flex items-center justify-center text-sm text-muted-foreground px-4 py-6 text-center\">\n No workout logs matched this rows query.\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col gap-4\">\n {runs.map(({ run, segments }) => (\n <section key={run.resultId}>\n {runs.length > 1 && (\n <div className=\"flex items-center justify-between gap-2 text-[11px] font-semibold text-muted-foreground px-2 py-1.5 bg-muted/40 rounded-t-md border-b border-border/60\">\n <span>{formatRunHeader(run)}</span>\n {renderRunHeaderExtra?.(run)}\n </div>\n )}\n {renderSegments ? (\n renderSegments(segments, run)\n ) : (\n <PlainSegmentList segments={segments} />\n )}\n </section>\n ))}\n </div>\n );\n}\n","import { useCallback, useEffect, useState } from 'react';\nimport { type Segment, type UnifiedEventRecord, MetricType } from '@bitcobblers/wod-wiki-core';\nimport { parseQuery, isRowsQuery, type RowsQueryResult, type RowsRun } from '@bitcobblers/wod-wiki-wql';\nimport type { QueryExecutor } from '../contracts/query';\nimport { RowsTable } from '../widgets/RowsTable';\nimport { cn } from '../utils/cn';\n\nconst RPE_SCALE = Array.from({ length: 10 }, (_, i) => i + 1);\n\nexport function readSessionRpe(events: UnifiedEventRecord[] | undefined): number | undefined {\n if (!events) return undefined;\n for (const statement of events) {\n for (const metric of statement.metrics) {\n if (metric.type === MetricType.SessionRPE || (metric.type as string) === 'session_rpe') {\n if (typeof metric.value === 'number') return metric.value;\n }\n }\n }\n return undefined;\n}\n\nexport interface RowsResultsChromeProps {\n /** The session result id from the written `rows:{result:…}` query. */\n resultId: string;\n /** The session-scoped rows result (one run). */\n sessionResult: RowsQueryResult;\n /** Injected QueryExecutor for widened query execution. */\n executor?: QueryExecutor;\n /** Optional RPE capture handler. */\n onCaptureRpe?: (resultId: string, rpe: number) => Promise<void>;\n /** Re-run the parent query after a capture so the grid reflects the RPE. */\n onCaptured?: () => void;\n /** Optional segment grid renderer. */\n renderSegments?: (segments: Segment[], run: RowsRun) => React.ReactNode;\n}\n\nfunction RpeChip({\n resultId,\n events,\n readOnly,\n onCapture,\n}: {\n resultId: string;\n events: RowsRun['events'];\n readOnly?: boolean;\n onCapture: (rpe: number) => Promise<void>;\n}) {\n const value = readSessionRpe(events);\n const [open, setOpen] = useState(false);\n const [pending, setPending] = useState(false);\n\n if (readOnly) {\n return value !== undefined ? (\n <span className=\"text-[10px] font-mono text-muted-foreground\" data-testid={`rpe-readonly-${resultId}`}>\n RPE {value}\n </span>\n ) : null;\n }\n\n const pick = async (rpe: number) => {\n setPending(true);\n try {\n await onCapture(rpe);\n setOpen(false);\n } finally {\n setPending(false);\n }\n };\n\n return (\n <span className=\"inline-flex items-center gap-1\" data-testid={`rpe-chip-${resultId}`}>\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className={cn(\n 'text-[10px] font-mono px-1.5 py-0.5 rounded border transition-colors',\n value !== undefined\n ? 'border-border text-foreground hover:border-primary'\n : 'border-dashed border-muted-foreground/50 text-muted-foreground hover:text-foreground hover:border-primary',\n )}\n title={value !== undefined ? 'Update session RPE' : 'Rate this session’s effort'}\n >\n {value !== undefined ? `RPE ${value}` : 'RPE —'}\n </button>\n {open && (\n <span className=\"inline-flex gap-0.5\" data-testid={`rpe-scale-${resultId}`}>\n {RPE_SCALE.map((rpe) => (\n <button\n key={rpe}\n type=\"button\"\n disabled={pending}\n onClick={() => void pick(rpe)}\n aria-label={`RPE ${rpe}`}\n className={cn(\n 'h-5 min-w-[1.25rem] px-0.5 text-[10px] font-medium rounded border border-border',\n rpe === value && 'bg-primary text-primary-foreground',\n rpe <= 3 && 'hover:bg-green-100 hover:text-green-900',\n rpe > 3 && rpe <= 6 && 'hover:bg-yellow-100 hover:text-yellow-900',\n rpe > 6 && rpe <= 8 && 'hover:bg-orange-100 hover:text-orange-900',\n rpe > 8 && 'hover:bg-red-100 hover:text-red-900',\n )}\n >\n {rpe}\n </button>\n ))}\n </span>\n )}\n </span>\n );\n}\n\nexport function RowsResultsChrome({\n resultId,\n sessionResult,\n executor,\n onCaptureRpe,\n onCaptured,\n renderSegments,\n}: RowsResultsChromeProps) {\n const [widened, setWidened] = useState(false);\n const [wideResult, setWideResult] = useState<RowsQueryResult | undefined>(undefined);\n\n const sessionRun = sessionResult.runs[0];\n const blockContentId = sessionRun?.events[0]?.blockContentId;\n\n const handleCapture = useCallback(\n async (rpe: number) => {\n if (onCaptureRpe) {\n await onCaptureRpe(resultId, rpe);\n }\n onCaptured?.();\n },\n [resultId, onCaptureRpe, onCaptured],\n );\n\n useEffect(() => {\n if (!widened || !blockContentId || !executor) {\n setWideResult(undefined);\n return;\n }\n let cancelled = false;\n const wideQuery = parseQuery(`rows:all{block:${blockContentId}}`);\n if (!isRowsQuery(wideQuery)) return;\n\n void executor\n .runRows(wideQuery)\n .then((res) => {\n if (!cancelled) setWideResult(res);\n })\n .catch(() => {\n if (!cancelled) setWideResult(undefined);\n });\n\n return () => {\n cancelled = true;\n };\n }, [widened, blockContentId, executor]);\n\n const displayedResult = widened && wideResult ? wideResult : sessionResult;\n const versionCount = wideResult?.runs.length ?? (widened ? 1 : undefined);\n const canWiden = Boolean(blockContentId);\n\n return (\n <div className=\"flex flex-col gap-3\" data-testid=\"rows-results-chrome\">\n <div className=\"flex items-center justify-between gap-2 pb-2 border-b border-border/60 text-xs\">\n <div className=\"inline-flex items-center rounded-md border border-border bg-muted/40 p-0.5\">\n <button\n type=\"button\"\n onClick={() => setWidened(false)}\n className={cn(\n 'px-2 py-0.5 rounded text-[11px] font-medium transition-colors',\n !widened\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n )}\n >\n This session\n </button>\n <button\n type=\"button\"\n disabled={!canWiden}\n onClick={() => setWidened(true)}\n title={canWiden ? undefined : 'No block content association for this run'}\n className={cn(\n 'px-2 py-0.5 rounded text-[11px] font-medium transition-colors',\n widened\n ? 'bg-background text-foreground shadow-sm'\n : 'text-muted-foreground hover:text-foreground',\n !canWiden && 'opacity-40 cursor-not-allowed',\n )}\n >\n All versions{versionCount !== undefined ? ` (${versionCount})` : ''}\n </button>\n </div>\n\n <div className=\"flex items-center gap-2\">\n <RpeChip\n resultId={resultId}\n events={sessionRun?.events}\n onCapture={handleCapture}\n />\n </div>\n </div>\n\n <RowsTable\n result={displayedResult}\n renderSegments={renderSegments}\n renderRunHeaderExtra={(run) =>\n run.resultId === resultId ? (\n <RpeChip resultId={resultId} events={run.events} onCapture={handleCapture} />\n ) : (\n <RpeChip resultId={run.resultId} events={run.events} readOnly onCapture={handleCapture} />\n )\n }\n />\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\n\nexport type ChartShape =\n | { kind: 'error'; message: string }\n | { kind: 'empty' }\n | { kind: 'scalar'; value: number }\n | { kind: 'bars' }\n | { kind: 'timeseries' };\n\nexport function useChartShape(result: QueryResult | undefined): ChartShape {\n return useMemo(() => {\n if (!result) return { kind: 'empty' };\n if (result.parsed.error) return { kind: 'error', message: result.parsed.error };\n if (result.series.length === 0) return { kind: 'empty' };\n if (result.series.length === 1 && result.series[0].points.length === 1) {\n return { kind: 'scalar', value: result.series[0].points[0].value };\n }\n const hasTimeAxis = result.series.some((s) => s.points.length > 1);\n return { kind: hasTimeAxis ? 'timeseries' : 'bars' };\n }, [result]);\n}\n","import { useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\n\nexport interface WqlEmptyStateProps {\n result: QueryResult | undefined;\n className?: string;\n}\n\nexport function WqlEmptyState({ result, className }: WqlEmptyStateProps) {\n const message = useMemo(() => {\n if (!result) return 'Loading…';\n if (result.parsed.error) return `Query error: ${result.parsed.error}`;\n if (result.series.length === 0) return 'No data for this range.';\n return null;\n }, [result]);\n\n if (message === null) return null;\n\n return (\n <div className={`h-full flex flex-col items-center justify-center text-sm text-muted-foreground px-4 text-center ${className ?? ''}`}>\n {message}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\n\nexport interface QueryValueProps {\n result: QueryResult;\n unit?: string;\n label: string;\n thresholds?: { green: [number, number]; red: [number, number] };\n}\n\nexport function QueryValue({ result, unit: unitProp, label, thresholds }: QueryValueProps) {\n const shape = useChartShape(result);\n const unit = result.series[0]?.unit ?? unitProp ?? '';\n\n const value = useMemo(() => {\n if (shape.kind === 'scalar') return shape.value;\n if (result.series.length === 0) return 0;\n return result.series[0].points[result.series[0].points.length - 1]?.value ?? 0;\n }, [result, shape]);\n\n const colorClass = useMemo(() => {\n if (!thresholds) return 'text-foreground';\n if (value >= thresholds.green[0] && value <= thresholds.green[1]) return 'text-success';\n if (value >= thresholds.red[0]) return 'text-destructive';\n return 'text-warning';\n }, [value, thresholds]);\n\n return (\n <div className=\"h-full flex flex-col items-center justify-center\">\n <WqlEmptyState result={result} />\n {result.series.length > 0 && !result.parsed.error && (\n <>\n <div className={`text-5xl font-bold tabular-nums ${colorClass}`}>\n {value.toLocaleString()}\n <span className=\"text-lg font-normal text-muted-foreground ml-1\">{unit}</span>\n </div>\n <div className=\"text-xs text-muted-foreground mt-2 text-center\">{label}</div>\n </>\n )}\n </div>\n );\n}\n","import type { Series } from '@bitcobblers/wod-wiki-wql';\n\nexport interface MergedPoint {\n ts: number;\n [label: string]: number | string;\n}\n\nexport function mergeSeries(series: Series[]): MergedPoint[] {\n const map = new Map<number, MergedPoint>();\n for (const s of series) {\n for (const p of s.points) {\n if (!map.has(p.ts)) map.set(p.ts, { ts: p.ts });\n map.get(p.ts)![s.label] = p.value;\n }\n }\n return Array.from(map.values()).sort((a, b) => a.ts - b.ts);\n}\n\nexport function compactNumber(value: number): string {\n const n = typeof value === 'number' ? value : Number(value);\n if (Math.abs(n) >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n\nexport function formatTimestamp(ts: number): string {\n return new Date(ts).toLocaleDateString('en-US', { month: 'short', day: 'numeric' });\n}\n\nexport function tooltipTimestamp(ts: number): string {\n return new Date(ts).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\n}\n","/** Series palette for analytics charts — maps onto the metric token set. */\nexport const SERIES_COLORS = [\n 'hsl(var(--metric-time))',\n 'hsl(var(--metric-effort))',\n 'hsl(var(--metric-rep))',\n 'hsl(var(--metric-rounds))',\n 'hsl(var(--metric-distance))',\n 'hsl(var(--metric-resistance))',\n 'hsl(var(--metric-action))',\n 'hsl(var(--primary))',\n];\n","import { useMemo } from 'react';\nimport {\n ResponsiveContainer,\n LineChart,\n Line,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n} from 'recharts';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\nimport { mergeSeries, formatTimestamp, tooltipTimestamp } from './chartData';\nimport { SERIES_COLORS } from './chartPalette';\n\nexport interface WqlTimeseriesProps {\n result: QueryResult;\n unit?: string;\n}\n\nexport function WqlTimeseries({ result, unit: unitProp }: WqlTimeseriesProps) {\n const shape = useChartShape(result);\n const data = useMemo(() => mergeSeries(result.series), [result]);\n const unit = result.series[0]?.unit ?? unitProp;\n\n if (shape.kind !== 'timeseries' && shape.kind !== 'scalar') {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LineChart data={data} margin={{ top: 4, right: 8, bottom: 0, left: -12 }}>\n <CartesianGrid stroke=\"hsl(var(--border))\" vertical={false} />\n <XAxis\n dataKey=\"ts\"\n tickFormatter={formatTimestamp}\n tickLine={false}\n axisLine={{ stroke: 'hsl(var(--border))' }}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n />\n <YAxis\n tickLine={false}\n axisLine={false}\n width={64}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n unit={unit ? ` ${unit}` : ''}\n />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--popover))',\n borderColor: 'hsl(var(--border))',\n fontSize: '12px',\n color: 'hsl(var(--popover-foreground))',\n }}\n labelFormatter={(v) => tooltipTimestamp(v as number)}\n formatter={(v) => [`${Number(v).toLocaleString()} ${unit ?? ''}`.trim(), '']}\n />\n {result.series.length > 1 && (\n <Legend wrapperStyle={{ fontSize: 11 }} />\n )}\n {result.series.map((s, i) => (\n <Line\n key={s.key}\n type=\"monotone\"\n dataKey={s.label}\n name={s.label}\n stroke={SERIES_COLORS[i % SERIES_COLORS.length]}\n strokeWidth={2}\n dot={false}\n />\n ))}\n </LineChart>\n </ResponsiveContainer>\n );\n}\n","import { useMemo } from 'react';\nimport {\n ResponsiveContainer,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Cell,\n} from 'recharts';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\nimport { SERIES_COLORS } from './chartPalette';\nimport { compactNumber } from './chartData';\n\nexport interface WqlBarsProps {\n result: QueryResult;\n unit?: string;\n}\n\nexport function WqlBars({ result, unit: unitProp }: WqlBarsProps) {\n const shape = useChartShape(result);\n\n const data = useMemo(\n () =>\n result.series.map((s, i) => ({\n name: s.label,\n value: s.points[0]?.value ?? 0,\n fill: SERIES_COLORS[i % SERIES_COLORS.length],\n })),\n [result],\n );\n\n const unit = result.series[0]?.unit ?? unitProp;\n\n if (shape.kind !== 'bars' && shape.kind !== 'scalar') {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={data} margin={{ top: 4, right: 8, bottom: 0, left: 48 }}>\n <CartesianGrid stroke=\"hsl(var(--border))\" vertical={false} />\n <XAxis\n dataKey=\"name\"\n tickLine={false}\n axisLine={{ stroke: 'hsl(var(--border))' }}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n />\n <YAxis\n tickLine={false}\n axisLine={false}\n width={48}\n tickFormatter={compactNumber}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n unit={unit ? ` ${unit}` : ''}\n />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--popover))',\n borderColor: 'hsl(var(--border))',\n fontSize: '12px',\n color: 'hsl(var(--popover-foreground))',\n }}\n formatter={(v, _n, p) => {\n const label = typeof p?.payload?.name === 'string' ? p.payload.name : '';\n return [`${Number(v).toLocaleString()} ${unit ?? ''}`.trim(), label];\n }}\n />\n <Bar dataKey=\"value\" radius={[4, 4, 0, 0]}>\n {data.map((d) => (\n <Cell key={d.name} fill={d.fill} />\n ))}\n </Bar>\n </BarChart>\n </ResponsiveContainer>\n );\n}\n","import { useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\nimport { formatTimestamp } from './chartData';\n\nexport interface WqlTableProps {\n result: QueryResult;\n unit?: string;\n}\n\nconst MAX_ROWS = 12;\n\nexport function WqlTable({ result, unit: unitProp }: WqlTableProps) {\n const shape = useChartShape(result);\n const unit = result.series[0]?.unit ?? unitProp ?? '';\n\n const rows = useMemo(() => {\n if (shape.kind === 'scalar') {\n return {\n head: ['Metric', 'Value'],\n body: [[result.series[0]?.label ?? 'scalar', format(shape.value)]],\n more: 0,\n };\n }\n if (shape.kind === 'bars') {\n const all = result.series.map((s) => [\n s.label,\n format(s.points[0]?.value ?? 0),\n ]);\n return {\n head: ['Series', 'Value'],\n body: all.slice(0, MAX_ROWS),\n more: Math.max(0, all.length - MAX_ROWS),\n };\n }\n if (shape.kind === 'timeseries') {\n const timestamps = Array.from(\n new Set(result.series.flatMap((s) => s.points.map((p) => p.ts))),\n ).sort((a, b) => b - a);\n\n const seriesMap = new Map<string, Map<number, number>>();\n for (const s of result.series) {\n seriesMap.set(s.label, new Map(s.points.map((p) => [p.ts, p.value])));\n }\n\n const head = ['Date', ...result.series.map((s) => s.label)];\n const body = timestamps.slice(0, MAX_ROWS).map((ts) => [\n formatTimestamp(ts),\n ...result.series.map((s) => {\n const v = seriesMap.get(s.label)?.get(ts);\n return v !== undefined ? format(v) : '—';\n }),\n ]);\n return { head, body, more: Math.max(0, timestamps.length - MAX_ROWS) };\n }\n return { head: [], body: [], more: 0 };\n }, [result, shape]);\n\n function format(v: number): string {\n return `${v.toLocaleString()}${unit ? ` ${unit}` : ''}`;\n }\n\n if (shape.kind === 'error' || shape.kind === 'empty') {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <div className=\"h-full overflow-auto\">\n <table className=\"w-full text-[11px] font-mono\">\n <thead>\n <tr className=\"border-b border-border text-muted-foreground text-left\">\n {rows.head.map((h, i) => (\n <th\n key={h}\n className={`py-1 px-2 font-medium ${i === 0 ? 'text-left' : 'text-right'}`}\n >\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.body.map((row, rIdx) => (\n <tr\n key={rIdx}\n className=\"border-b border-border/40 hover:bg-muted/30 transition-colors\"\n >\n {row.map((cell, cIdx) => (\n <td\n key={cIdx}\n className={`py-1 px-2 text-foreground tabular-nums ${cIdx === 0 ? 'text-left' : 'text-right'}`}\n >\n {cell}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n {rows.more > 0 && (\n <div className=\"text-[11px] text-muted-foreground pt-2\">… {rows.more} more rows</div>\n )}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\nimport { SERIES_COLORS } from './chartPalette';\n\nexport interface TopListProps {\n result: QueryResult;\n unit?: string;\n limit?: number;\n}\n\nexport function TopList({ result, unit: unitProp, limit = 8 }: TopListProps) {\n const shape = useChartShape(result);\n const unit = result.series[0]?.unit ?? unitProp;\n\n const rows = useMemo(\n () =>\n result.series\n .map((s) => ({ name: s.label, value: s.points[0]?.value ?? 0 }))\n .sort((a, b) => b.value - a.value)\n .slice(0, limit),\n [result, limit],\n );\n\n const max = rows[0]?.value || 1;\n\n if (shape.kind === 'error' || shape.kind === 'empty') {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <div className=\"space-y-2 pt-1\">\n {rows.map((r, i) => (\n <div key={r.name} className=\"flex items-center gap-3\">\n <span className=\"text-xs text-muted-foreground w-4 text-right\">{i + 1}</span>\n <span className=\"text-xs w-36 truncate text-foreground\">{r.name}</span>\n <div className=\"flex-1 h-4 bg-muted/60 rounded-sm overflow-hidden\">\n <div\n className=\"h-full rounded-sm\"\n style={{\n width: `${(r.value / max) * 100}%`,\n background: SERIES_COLORS[i % SERIES_COLORS.length],\n }}\n />\n </div>\n <span className=\"text-xs tabular-nums text-muted-foreground w-20 text-right\">\n {r.value.toLocaleString()} {unit}\n </span>\n </div>\n ))}\n </div>\n );\n}\n","import { useMemo } from 'react';\nimport {\n ResponsiveContainer,\n BarChart,\n Bar,\n XAxis,\n YAxis,\n CartesianGrid,\n Tooltip,\n Legend,\n} from 'recharts';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { useChartShape } from './useChartShape';\nimport { WqlEmptyState } from './WqlEmptyState';\nimport { mergeSeries, formatTimestamp, tooltipTimestamp, compactNumber } from './chartData';\nimport { SERIES_COLORS } from './chartPalette';\n\nexport interface StackedBarProps {\n result: QueryResult;\n unit?: string;\n}\n\nconst INTENSITY_ORDER = ['low', 'moderate', 'high'];\n\nexport function StackedBar({ result, unit: unitProp }: StackedBarProps) {\n const shape = useChartShape(result);\n const data = useMemo(() => mergeSeries(result.series), [result]);\n const unit = result.series[0]?.unit ?? unitProp;\n\n const keys = useMemo(() => {\n const labels = result.series.map((s) => s.label);\n return labels.sort((a, b) => {\n const ai = INTENSITY_ORDER.indexOf(a);\n const bi = INTENSITY_ORDER.indexOf(b);\n if (ai === -1 && bi === -1) return a.localeCompare(b);\n if (ai === -1) return 1;\n if (bi === -1) return -1;\n return ai - bi;\n });\n }, [result]);\n\n if (shape.kind !== 'timeseries' && shape.kind !== 'bars') {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <BarChart data={data} margin={{ top: 4, right: 8, bottom: 0, left: 48 }}>\n <CartesianGrid stroke=\"hsl(var(--border))\" vertical={false} />\n <XAxis\n dataKey=\"ts\"\n tickFormatter={formatTimestamp}\n tickLine={false}\n axisLine={{ stroke: 'hsl(var(--border))' }}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n />\n <YAxis\n tickLine={false}\n axisLine={false}\n width={48}\n tickFormatter={compactNumber}\n stroke=\"hsl(var(--muted-foreground))\"\n tick={{ fill: 'hsl(var(--muted-foreground))', fontSize: 10 }}\n unit={unit ? ` ${unit}` : ''}\n />\n <Tooltip\n contentStyle={{\n backgroundColor: 'hsl(var(--popover))',\n borderColor: 'hsl(var(--border))',\n fontSize: '12px',\n color: 'hsl(var(--popover-foreground))',\n }}\n labelFormatter={(v) => tooltipTimestamp(v as number)}\n formatter={(v, _n, p) => {\n const label = typeof p?.payload?.name === 'string' ? p.payload.name : '';\n return [`${Number(v).toLocaleString()} ${unit ?? ''}`.trim(), label];\n }}\n />\n <Legend wrapperStyle={{ fontSize: 11 }} />\n {keys.map((k) => {\n const index = result.series.findIndex((s) => s.label === k);\n return (\n <Bar\n key={k}\n dataKey={k}\n stackId=\"a\"\n fill={SERIES_COLORS[index >= 0 ? index % SERIES_COLORS.length : 0]}\n />\n );\n })}\n </BarChart>\n </ResponsiveContainer>\n );\n}\n","import type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { WqlEmptyState } from './WqlEmptyState';\n\nexport interface GoalRingsProps {\n result: QueryResult | undefined;\n params?: string[];\n label?: string;\n unit?: string;\n}\n\nexport function GoalRings({ result, params, label, unit }: GoalRingsProps) {\n if (!result || result.series.length === 0) {\n return <WqlEmptyState result={result} />;\n }\n\n const rawTarget = params && params.length > 0 ? params[0] : undefined;\n const targetValue = rawTarget ? parseFloat(rawTarget) : undefined;\n const hasValidTarget = targetValue !== undefined && !isNaN(targetValue) && targetValue > 0;\n\n const displayUnit = unit ?? result.unit ?? result.parsed.displayUnit ?? '';\n\n return (\n <div\n className=\"flex flex-wrap items-center justify-around gap-4 h-full p-2\"\n data-testid=\"goal-rings-widget\"\n >\n {result.series.map((s, idx) => {\n const lastPoint = s.points.length > 0 ? s.points[s.points.length - 1] : undefined;\n const currentVal = lastPoint ? lastPoint.value : 0;\n const pct = hasValidTarget ? Math.round((currentVal / targetValue) * 100) : undefined;\n const itemLabel = s.label || label || (result.series.length === 1 ? 'Target' : `Series ${idx + 1}`);\n\n return (\n <GoalRingItem\n key={s.key || idx}\n label={itemLabel}\n current={currentVal}\n target={targetValue}\n pct={pct}\n unit={s.unit || displayUnit}\n />\n );\n })}\n </div>\n );\n}\n\nfunction GoalRingItem({\n label,\n current,\n target,\n pct,\n unit,\n}: {\n label: string;\n current: number;\n target?: number;\n pct?: number;\n unit: string;\n}) {\n const formattedCurrent = current.toLocaleString();\n const formattedTarget = target ? target.toLocaleString() : undefined;\n\n const radius = 38;\n const circumference = 2 * Math.PI * radius;\n const clampedPct = pct !== undefined ? Math.min(Math.max(pct, 0), 100) : 0;\n const strokeDashoffset = circumference - (clampedPct / 100) * circumference;\n\n let strokeColor = 'stroke-primary';\n let textColor = 'text-foreground';\n if (pct !== undefined) {\n if (pct >= 100) {\n strokeColor = 'stroke-emerald-500';\n textColor = 'text-emerald-500';\n } else if (pct >= 75) {\n strokeColor = 'stroke-primary';\n } else if (pct >= 50) {\n strokeColor = 'stroke-amber-500';\n } else {\n strokeColor = 'stroke-rose-500';\n }\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center min-w-28 text-center\" data-testid=\"goal-ring-item\">\n <div className=\"relative w-24 h-24 flex items-center justify-center\">\n <svg className=\"w-full h-full transform -rotate-90\" viewBox=\"0 0 100 100\">\n <circle\n cx=\"50\"\n cy=\"50\"\n r={radius}\n className=\"stroke-muted\"\n strokeWidth=\"8\"\n fill=\"transparent\"\n />\n {pct !== undefined && (\n <circle\n cx=\"50\"\n cy=\"50\"\n r={radius}\n className={`${strokeColor} transition-all duration-500 ease-out`}\n strokeWidth=\"8\"\n strokeDasharray={circumference}\n strokeDashoffset={strokeDashoffset}\n strokeLinecap=\"round\"\n fill=\"transparent\"\n />\n )}\n </svg>\n\n <div className=\"absolute flex flex-col items-center justify-center\">\n {pct !== undefined ? (\n <span className={`text-base font-bold tabular-nums leading-none ${textColor}`}>\n {pct}%\n </span>\n ) : (\n <span className=\"text-sm font-semibold tabular-nums leading-none text-foreground\">\n {formattedCurrent}\n </span>\n )}\n {pct !== undefined && (\n <span className=\"text-[10px] text-muted-foreground mt-0.5\">\n {formattedCurrent} {unit}\n </span>\n )}\n </div>\n </div>\n\n <div className=\"mt-2 flex flex-col items-center max-w-32\">\n <span className=\"text-xs font-medium text-foreground truncate w-full\" title={label}>\n {label}\n </span>\n {formattedTarget && (\n <span className=\"text-[10px] text-muted-foreground\">\n Goal: {formattedTarget} {unit}\n </span>\n )}\n </div>\n </div>\n );\n}\n","import type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { WqlEmptyState } from './WqlEmptyState';\n\nexport interface ZoneDistributionProps {\n result: QueryResult | undefined;\n params?: string[];\n unit?: string;\n}\n\ninterface ZoneConfig {\n key: 'low' | 'moderate' | 'high';\n label: string;\n sublabel: string;\n colorClass: string;\n bgClass: string;\n target: number;\n actual: number;\n pct: number;\n}\n\nfunction parseTargetNum(val: string | undefined, fallback: number): number {\n if (!val) return fallback;\n const num = parseFloat(val);\n return isNaN(num) ? fallback : num;\n}\n\nexport function ZoneDistribution({ result, params }: ZoneDistributionProps) {\n if (!result || result.series.length === 0) {\n return <WqlEmptyState result={result} />;\n }\n\n let targetLow = 80;\n let targetMod = 0;\n let targetHigh = 20;\n\n if (params && params.length > 0) {\n const rawTokens = params[0].trim().split(/\\s+/);\n if (rawTokens.length >= 3) {\n targetLow = parseTargetNum(rawTokens[0], 80);\n targetMod = parseTargetNum(rawTokens[1], 0);\n targetHigh = parseTargetNum(rawTokens[2], 20);\n } else if (rawTokens.length === 2) {\n targetLow = parseTargetNum(rawTokens[0], 80);\n targetHigh = parseTargetNum(rawTokens[1], 20);\n targetMod = Math.max(0, 100 - (targetLow + targetHigh));\n } else if (rawTokens.length === 1) {\n targetLow = parseTargetNum(rawTokens[0], 80);\n targetHigh = Math.max(0, 100 - targetLow);\n targetMod = 0;\n }\n }\n\n let lowVal = 0;\n let modVal = 0;\n let highVal = 0;\n\n result.series.forEach((s, idx) => {\n const lastPoint = s.points.length > 0 ? s.points[s.points.length - 1] : undefined;\n const val = lastPoint ? lastPoint.value : 0;\n const nameLower = (s.label || s.key || '').toLowerCase();\n\n if (nameLower.includes('low') || nameLower.includes('z1') || nameLower.includes('z2') || idx === 0) {\n lowVal += val;\n } else if (nameLower.includes('mod') || nameLower.includes('tempo') || nameLower.includes('z3') || idx === 1) {\n modVal += val;\n } else if (nameLower.includes('high') || nameLower.includes('hard') || nameLower.includes('z4') || nameLower.includes('z5') || idx === 2) {\n highVal += val;\n } else {\n lowVal += val;\n }\n });\n\n const grandTotal = lowVal + modVal + highVal;\n const actualLowPct = grandTotal > 0 ? Math.round((lowVal / grandTotal) * 100) : 0;\n const actualModPct = grandTotal > 0 ? Math.round((modVal / grandTotal) * 100) : 0;\n const actualHighPct = grandTotal > 0 ? Math.round((highVal / grandTotal) * 100) : 0;\n\n const zones: ZoneConfig[] = [\n {\n key: 'low',\n label: 'Low / Aerobic',\n sublabel: 'Zone 1–2',\n colorClass: 'bg-emerald-500',\n bgClass: 'text-emerald-500',\n target: targetLow,\n actual: lowVal,\n pct: actualLowPct,\n },\n {\n key: 'moderate',\n label: 'Moderate / Tempo',\n sublabel: 'Zone 3',\n colorClass: 'bg-amber-500',\n bgClass: 'text-amber-500',\n target: targetMod,\n actual: modVal,\n pct: actualModPct,\n },\n {\n key: 'high',\n label: 'High / Anaerobic',\n sublabel: 'Zone 4–5',\n colorClass: 'bg-rose-500',\n bgClass: 'text-rose-500',\n target: targetHigh,\n actual: highVal,\n pct: actualHighPct,\n },\n ];\n\n return (\n <div\n className=\"flex flex-col justify-between h-full p-2 gap-4\"\n data-testid=\"zone-distribution-widget\"\n >\n <div className=\"flex flex-col gap-1.5\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground px-0.5\">\n <span>Actual vs Target Distribution</span>\n <span className=\"font-mono text-[10px]\">\n T: {targetLow}/{targetMod}/{targetHigh}%\n </span>\n </div>\n <div className=\"w-full h-5 rounded-md overflow-hidden flex bg-muted/60 p-0.5 gap-0.5\">\n {zones.map((z) =>\n z.pct > 0 ? (\n <div\n key={z.key}\n className={`${z.colorClass} h-full rounded-sm transition-all duration-500 flex items-center justify-center`}\n style={{ width: `${z.pct}%` }}\n title={`${z.label}: ${z.pct}% (Target: ${z.target}%)`}\n >\n {z.pct >= 10 && (\n <span className=\"text-[10px] font-bold text-white leading-none drop-shadow-sm\">\n {z.pct}%\n </span>\n )}\n </div>\n ) : null,\n )}\n </div>\n </div>\n\n <div className=\"grid grid-cols-3 gap-2\">\n {zones.map((z) => {\n const delta = z.pct - z.target;\n return (\n <div\n key={z.key}\n className=\"flex flex-col bg-muted/20 border border-border/50 rounded-lg p-2 text-center\"\n data-testid={`zone-card-${z.key}`}\n >\n <div className=\"flex items-center justify-center gap-1.5 mb-1\">\n <span className={`w-2 h-2 rounded-full ${z.colorClass}`} />\n <span className=\"text-xs font-semibold text-foreground truncate\">{z.label}</span>\n </div>\n <span className=\"text-[10px] text-muted-foreground mb-1.5\">{z.sublabel}</span>\n\n <div className=\"flex items-baseline justify-center gap-1\">\n <span className=\"text-lg font-bold tabular-nums text-foreground\">{z.pct}%</span>\n <span className=\"text-[10px] text-muted-foreground\">/ {z.target}%</span>\n </div>\n\n {z.target > 0 && (\n <span\n className={`text-[10px] font-medium tabular-nums mt-0.5 ${\n Math.abs(delta) <= 5\n ? 'text-emerald-500'\n : delta > 0\n ? 'text-amber-500'\n : 'text-muted-foreground'\n }`}\n >\n {delta > 0 ? `+${delta}%` : `${delta}%`}\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { isDashboardWidgetType, PLANNED_WIDGET_TYPES, resolveWidgetType, unknownWidgetTypeMessage } from '@bitcobblers/wod-wiki-wql';\nimport { QueryValue } from './QueryValue';\nimport { WqlTimeseries } from './WqlTimeseries';\nimport { WqlBars } from './WqlBars';\nimport { WqlTable } from './WqlTable';\nimport { TopList } from './TopList';\nimport { StackedBar } from './StackedBar';\nimport { GoalRings } from './GoalRings';\nimport { ZoneDistribution } from './ZoneDistribution';\nimport { WqlEmptyState } from './WqlEmptyState';\n\nexport interface WidgetChartProps {\n /** Raw widget type from the fence suffix; '' picks the dashboard default (table). */\n type: string;\n result: QueryResult | undefined;\n /** Fallback label for value widgets (widget title or metric). */\n label?: string;\n unit?: string;\n /** Positional widget parameters from the block body (e.g. goal target or zone targets). */\n params?: string[];\n}\n\nexport function WidgetChart({ type, result, label, unit, params }: WidgetChartProps) {\n if (type !== '' && !isDashboardWidgetType(type)) {\n return <WidgetProblemBadge message={unknownWidgetTypeMessage(type)} />;\n }\n\n const resolved = resolveWidgetType(type);\n\n if (!result || result.parsed.error || result.series.length === 0) {\n return <WqlEmptyState result={result} />;\n }\n\n return (\n <div className=\"w-full h-full min-h-[160px]\">\n {renderChart(resolved, result, label, unit, params)}\n </div>\n );\n}\n\nfunction renderChart(\n type: string,\n result: QueryResult,\n label?: string,\n unit?: string,\n params?: string[],\n): ReactNode {\n switch (type) {\n case 'value':\n return <QueryValue result={result} label={label ?? ''} unit={unit} />;\n case 'timeseries':\n return <WqlTimeseries result={result} unit={unit} />;\n case 'bar':\n case 'bars':\n return <WqlBars result={result} unit={unit} />;\n case 'top':\n case 'toplist':\n return <TopList result={result} unit={unit} />;\n case 'stacked':\n case 'stacked-bar':\n return <StackedBar result={result} unit={unit} />;\n case 'goal-rings':\n return <GoalRings result={result} params={params} label={label} unit={unit} />;\n case 'zone-distribution':\n return <ZoneDistribution result={result} params={params} unit={unit} />;\n case 'table':\n return <WqlTable result={result} unit={unit} />;\n default:\n if (Array.isArray(PLANNED_WIDGET_TYPES) ? (PLANNED_WIDGET_TYPES as readonly string[]).includes(type) : (PLANNED_WIDGET_TYPES as any).has?.(type)) {\n return <PlannedWidgetPlaceholder type={type} />;\n }\n return <WqlTable result={result} unit={unit} />;\n }\n}\n\nexport function WidgetProblemBadge({ message }: { message: string }) {\n return (\n <div\n role=\"alert\"\n data-testid=\"widget-problem\"\n className=\"flex items-center justify-center h-full p-4 rounded-md border border-destructive/50 bg-destructive/10 text-destructive text-xs font-medium text-center\"\n >\n {message}\n </div>\n );\n}\n\nexport function ProposedMetricBadge({ metric }: { metric: string }) {\n return (\n <div\n role=\"status\"\n className=\"flex flex-col items-center justify-center h-full p-4 rounded-md border border-dashed border-border bg-muted/20 text-muted-foreground text-xs text-center gap-1\"\n >\n <span className=\"font-mono font-medium text-foreground\">{metric}</span>\n <span>Calculated metric pending engine support</span>\n </div>\n );\n}\n\nfunction PlannedWidgetPlaceholder({ type }: { type: string }) {\n return (\n <div className=\"flex items-center justify-center h-full text-xs text-muted-foreground font-mono bg-muted/20 rounded p-4 text-center\">\n widget:{type} renderer in progress\n </div>\n );\n}\n","/**\n * blockQueryPatcher — utilities to extract and patch WQL queries inside ```query\n * fenced block sources (#842).\n *\n * Supports both plain line queries and structured YAML key-value blocks.\n * Preserves sibling keys, comments, formatting, and quotes when patching.\n */\n\nexport interface ExtractedQuery {\n queryIndex: number;\n query: string;\n isYamlKey: boolean;\n lineIndex: number;\n}\n\nconst YAML_QUERY_LINE_REGEX = /^(\\s*query\\s*:\\s*)(['\"]?)(.*?)\\2(\\s*)$/;\n\nfunction unquote(val: string): string {\n const trimmed = val.trim();\n if (\n (trimmed.startsWith('\"') && trimmed.endsWith('\"')) ||\n (trimmed.startsWith(\"'\") && trimmed.endsWith(\"'\"))\n ) {\n return trimmed.slice(1, -1);\n }\n return trimmed;\n}\n\nexport function extractBlockQueries(blockContent: string): ExtractedQuery[] {\n const lines = blockContent.split('\\n');\n const yamlQueries: ExtractedQuery[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const match = lines[i].match(YAML_QUERY_LINE_REGEX);\n if (match) {\n yamlQueries.push({\n queryIndex: yamlQueries.length,\n query: unquote(match[3]),\n isYamlKey: true,\n lineIndex: i,\n });\n }\n }\n\n if (yamlQueries.length > 0) {\n return yamlQueries;\n }\n\n const lineQueries: ExtractedQuery[] = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (!line || line.startsWith('#') || line.startsWith('//')) {\n continue;\n }\n lineQueries.push({\n queryIndex: lineQueries.length,\n query: line,\n isYamlKey: false,\n lineIndex: i,\n });\n }\n\n return lineQueries;\n}\n\nexport function patchBlockQuery(\n blockContent: string,\n newQuery: string,\n queryIndex = 0,\n): string {\n const extracted = extractBlockQueries(blockContent);\n const target = extracted.find((e) => e.queryIndex === queryIndex);\n\n if (!target) {\n return blockContent;\n }\n\n const lines = blockContent.split('\\n');\n const oldLine = lines[target.lineIndex];\n\n if (target.isYamlKey) {\n const match = oldLine.match(YAML_QUERY_LINE_REGEX);\n if (match) {\n const prefix = match[1];\n const quote = match[2];\n const suffix = match[4];\n lines[target.lineIndex] = `${prefix}${quote}${newQuery}${quote}${suffix}`;\n } else {\n lines[target.lineIndex] = `query: ${newQuery}`;\n }\n } else {\n const leadingWhitespace = oldLine.match(/^\\s*/)?.[0] ?? '';\n lines[target.lineIndex] = `${leadingWhitespace}${newQuery}`;\n }\n\n return lines.join('\\n');\n}\n","import { useMemo, useSyncExternalStore } from 'react';\nimport type { ComponentType } from 'react';\n\nexport interface CustomSlotEditorProps<TValue> {\n value: TValue | undefined;\n onChange: (value: TValue) => void;\n onClose: () => void;\n}\n\nexport interface CustomSlotDefinition<TValue = unknown> {\n type: string;\n label: string;\n icon: string;\n placeholder: string;\n placeholderText: string;\n description: string;\n Editor: ComponentType<CustomSlotEditorProps<TValue>>;\n wqlGenerator: (value: TValue) => string;\n formatValue?: (value: TValue) => string;\n parseValue?: (raw: string) => TValue | undefined;\n validate?: (value: TValue) => string | null;\n wqlValidator?: (wql: string) => string | null;\n plane?: 'content' | 'metrics' | 'both';\n}\n\nexport class ComposerRegistry {\n private readonly slots = new Map<string, CustomSlotDefinition<any>>();\n private readonly listeners = new Set<() => void>();\n private cachedList: CustomSlotDefinition<any>[] = [];\n\n registerSlot<TValue>(def: CustomSlotDefinition<TValue>): () => void {\n this.slots.set(def.type, def);\n this.cachedList = Array.from(this.slots.values());\n this.notify();\n return () => this.unregisterSlot(def.type);\n }\n\n unregisterSlot(type: string): void {\n if (this.slots.delete(type)) {\n this.cachedList = Array.from(this.slots.values());\n this.notify();\n }\n }\n\n getSlot(type: string): CustomSlotDefinition<any> | undefined {\n return this.slots.get(type);\n }\n\n listSlots(): CustomSlotDefinition<any>[] {\n return this.cachedList;\n }\n getAllSlots(): CustomSlotDefinition<any>[] {\n return this.cachedList;\n }\n\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private notify(): void {\n for (const listener of this.listeners) {\n listener();\n }\n }\n}\n\nexport const composerRegistry = new ComposerRegistry();\n\nexport function useComposerSlots(registry: ComposerRegistry = composerRegistry): CustomSlotDefinition<any>[] {\n const slots = useSyncExternalStore(\n (cb) => registry.subscribe(cb),\n () => registry.listSlots(),\n );\n return useMemo(() => slots, [slots]);\n}\n","import type { BlockIndexRow } from '@bitcobblers/wod-wiki-core';\n\nexport interface SuggestionItem {\n value: string;\n label?: string;\n description?: string;\n icon?: string;\n}\n\nexport type SuggestionCachePolicy = 'static' | { ttlMs: number };\n\nexport interface SuggestionBinding {\n load: () => Promise<SuggestionItem[]>;\n cache: SuggestionCachePolicy;\n open: boolean;\n emptyText: string;\n}\n\nexport function tagsFromStaticBlocks(blocks: BlockIndexRow[]): string[] {\n const set = new Set<string>();\n for (const b of blocks) {\n const row = b as any;\n if (row.frontmatter?.tags && Array.isArray(row.frontmatter.tags)) {\n for (const t of row.frontmatter.tags) {\n if (typeof t === 'string' && t.trim().length > 0) set.add(t.trim());\n }\n }\n }\n return Array.from(set).sort((a, b) => a.localeCompare(b));\n}\n\nfunction catalogOf(noteId: string): string {\n return noteId.startsWith('feeds/') ? noteId.split('/')[1]! : noteId.split('/')[0]!;\n}\n\nexport function catalogIdsFromBlocks(blocks: BlockIndexRow[]): string[] {\n const set = new Set<string>();\n for (const b of blocks) {\n if (b.sourceId && b.sourceId.startsWith('collection:')) {\n set.add(catalogOf(b.noteId));\n }\n }\n return Array.from(set).sort((a, b) => a.localeCompare(b));\n}\n\nexport function blockTypesFromBlocks(blocks: BlockIndexRow[]): string[] {\n const set = new Set<string>();\n for (const b of blocks) {\n if (b.dataType && b.dataType.trim().length > 0) set.add(b.dataType.trim());\n }\n return Array.from(set).sort((a, b) => a.localeCompare(b));\n}\n\nexport function mergeTagSuggestions(userLabels: string[], corpusLabels: string[]): string[] {\n const map = new Map<string, string>();\n for (const label of corpusLabels) {\n const trimmed = label.trim();\n if (trimmed) map.set(trimmed.toLowerCase(), trimmed);\n }\n for (const label of userLabels) {\n const trimmed = label.trim();\n if (trimmed) map.set(trimmed.toLowerCase(), trimmed);\n }\n return Array.from(map.values()).sort((a, b) => a.localeCompare(b));\n}\n\nconst builtinBindings: Record<string, SuggestionBinding> = {\n tag: {\n load: async () => [],\n cache: { ttlMs: 30_000 },\n open: true,\n emptyText: 'No tags yet — type one to filter by it',\n },\n effort: {\n load: async () => [],\n cache: { ttlMs: 60_000 },\n open: true,\n emptyText: 'No efforts yet — create one on an effort page',\n },\n discipline: {\n load: async () => [\n { value: 'crossfit', label: 'CrossFit' },\n { value: 'weightlifting', label: 'Weightlifting' },\n { value: 'cardio', label: 'Cardio' },\n { value: 'gymnastics', label: 'Gymnastics' },\n { value: 'climbing', label: 'Climbing' },\n { value: 'yoga', label: 'Yoga' },\n { value: 'habits', label: 'Habits' },\n ],\n cache: 'static',\n open: false,\n emptyText: 'No disciplines available',\n },\n catalog: {\n load: async () => [],\n cache: 'static',\n open: false,\n emptyText: 'No catalogs in the static corpus',\n },\n type: {\n load: async () => [\n { value: 'wod', label: 'WOD' },\n { value: 'movement', label: 'Movement' },\n { value: 'workout', label: 'Workout' },\n ],\n cache: { ttlMs: 300_000 },\n open: false,\n emptyText: 'No indexed block types yet',\n },\n has: {\n load: async () => ['timer', 'image', 'metric', 'rx'].map((value) => ({ value })),\n cache: 'static',\n open: false,\n emptyText: 'No features available',\n },\n};\n\nexport const SUGGESTION_BINDINGS: Record<string, SuggestionBinding> = { ...builtinBindings };\n\nexport function setSuggestionBinding(type: string, binding: SuggestionBinding | undefined): void {\n if (binding) {\n SUGGESTION_BINDINGS[type] = binding;\n } else if (builtinBindings[type]) {\n SUGGESTION_BINDINGS[type] = builtinBindings[type];\n } else {\n delete SUGGESTION_BINDINGS[type];\n }\n invalidateSuggestions(type);\n}\n\nexport function getSuggestionBinding(type: string): SuggestionBinding | undefined {\n return SUGGESTION_BINDINGS[type];\n}\n\ninterface CacheEntry {\n items: SuggestionItem[];\n expiresAt: number;\n}\n\nconst cache = new Map<string, CacheEntry>();\n\nexport async function loadSuggestions(type: string): Promise<SuggestionItem[]> {\n const binding = getSuggestionBinding(type);\n if (!binding) return [];\n\n const now = Date.now();\n const cached = cache.get(type);\n if (cached && cached.expiresAt > now) {\n return cached.items;\n }\n\n try {\n const items = await binding.load();\n const ttlMs = typeof binding.cache === 'object' ? binding.cache.ttlMs : Number.POSITIVE_INFINITY;\n cache.set(type, { items, expiresAt: now + ttlMs });\n return items;\n } catch {\n return cached ? cached.items : [];\n }\n}\n\nexport function invalidateSuggestions(type?: string): void {\n if (type) {\n cache.delete(type);\n } else {\n cache.clear();\n }\n}\n","import { useEffect, useState } from 'react';\nimport {\n getSuggestionBinding,\n loadSuggestions,\n type SuggestionBinding,\n type SuggestionItem,\n} from './suggestionSources';\n\nexport interface ClauseSuggestions {\n items: SuggestionItem[];\n /** True while the first load for this slot is in flight. */\n loading: boolean;\n /** The slot's binding (cache policy, open flag, empty-state copy). */\n binding?: SuggestionBinding;\n}\n\nexport function useSuggestions(type: string): ClauseSuggestions {\n const binding = getSuggestionBinding(type);\n const [items, setItems] = useState<SuggestionItem[]>([]);\n const [loading, setLoading] = useState(Boolean(binding));\n\n useEffect(() => {\n if (!binding) {\n setItems([]);\n setLoading(false);\n return;\n }\n let cancelled = false;\n setLoading(true);\n loadSuggestions(type).then((result) => {\n if (cancelled) return;\n setItems(result);\n setLoading(false);\n });\n return () => {\n cancelled = true;\n };\n }, [type, binding]);\n\n return { items, loading, binding };\n}\n","/**\n * Shared query-clause model + WQL compiler for the WqlComposer.\n *\n * Source-pivot model (issue #838, decision #836): a single `source` head\n * slot — journal | collections | feeds | notes | blocks | efforts | metrics —\n * pivots the query kind. Content sources compile the `find:` skeleton; `metrics`\n * compiles the aggregate skeleton (`agg:metric{filters} by {dims}.rollup(p)\n * [in unit] [where find:…]`). The find target and scope are derived from the\n * source value (the legacy `target`/`scope` clause types are retired).\n *\n * Static option lists live here; dynamic typeahead data sources live in\n * ./suggestionSources (issue #831). All vocab is sourced from the canonical\n * modules (@bitcobblers/wod-wiki-engine) — never hardcoded in the composer (decision #824).\n *\n * Supports freeform token slots, placeholder guidance, and keyboard navigation.\n */\n\nimport { composerRegistry } from './ComposerRegistry';\nimport { WQL_AGGREGATORS, WQL_COMPARISON_OPS, WQL_CALC_TARGETS, WQL_DISPLAY_UNITS, WQL_FIND_TARGETS, WQL_METRIC_AGGREGATES, WQL_METRIC_FAMILIES, WQL_ROLLUP_PERIODS, WQL_SOURCES, WQL_TAG_KEYS, WQL_VIRTUAL_DIMS, parseWqlSuffixes, splitAtWhere } from '@bitcobblers/wod-wiki-wql';\n\nexport type ClauseType =\n | 'source'\n | 'text'\n | 'catalog'\n | 'tag'\n | 'effort'\n | 'discipline'\n | 'intensity'\n | 'origin'\n | 'type'\n | 'has'\n | 'time'\n | 'where'\n | 'agg'\n | 'metric'\n | 'groupby'\n | 'rollup'\n | 'unit'\n | 'result'\n | 'block'\n | 'note'\n | 'output';\n\nexport interface QueryClause {\n id: string;\n /** Built-in ClauseType or a custom slot type id from the ComposerRegistry. */\n type: string;\n label: string;\n value: string;\n inputType?: 'radio' | 'freetext' | 'select';\n placeholder?: string;\n icon?: string;\n prefix?: string;\n}\n\n// ── Source planes ───────────────────────────────────────────────────────────\n\n/** Content sources compile `find:note in <scope>`; notes/blocks use `all`. */\nexport const CONTENT_SOURCES = WQL_SOURCES.filter((s) => s !== 'metrics');\n\n/** The plane a source value belongs to — everything but `metrics` is content. */\nexport function sourcePlane(source: string): 'content' | 'metrics' {\n return source === 'metrics' ? 'metrics' : 'content';\n}\n\n/** Clause types that only make sense on the metrics plane. */\nexport const METRICS_ONLY_TYPES: ReadonlySet<string> = new Set(['agg', 'metric', 'groupby', 'rollup', 'unit']);\n\n// ── Options & Data Sources ──────────────────────────────────────────────────\n\nexport const SOURCE_OPTIONS = [\n { value: 'journal', label: 'Journal', description: 'Find notes in the personal journal' },\n { value: 'collections', label: 'Collections', description: 'Find notes in workout catalogs' },\n { value: 'feeds', label: 'Feeds', description: 'Find notes in subscribed feeds' },\n { value: 'notes', label: 'All Notes', description: 'Find notes across every source' },\n { value: 'blocks', label: 'Blocks', description: 'Find fenced workout/dashboard regions' },\n { value: 'efforts', label: 'Efforts', description: 'Find registered efforts (bundled + custom)' },\n { value: 'metrics', label: 'Metrics', description: 'Aggregate analytics facts' },\n { value: 'rows', label: 'Sessions (rows)', description: 'Raw workout logs as per-round rows (#949)' },\n];\n\nexport const TIME_OPTIONS = [\n { value: 'last 1d', label: 'Past 24 hours' },\n { value: 'last 1w', label: 'Past week' },\n { value: 'last 2w', label: 'Past 2 weeks' },\n { value: 'last 4w', label: 'Past month' },\n { value: 'last 12w', label: 'Past quarter' },\n { value: 'last 52w', label: 'Past year' },\n { value: 'all', label: 'All time' },\n];\n\n/** Aggregate head vocab — canonical homes (decision #824). */\nexport const AGG_OPTIONS = WQL_AGGREGATORS.map((v) => ({ value: v, label: v }));\nexport const ROLLUP_OPTIONS = WQL_ROLLUP_PERIODS.map((v) => ({\n value: v,\n label: v === '1d' ? 'Daily (1d)' : 'Weekly (1w)',\n}));\nexport const GROUPBY_OPTIONS = [...WQL_VIRTUAL_DIMS, ...WQL_TAG_KEYS].map((v) => ({ value: v, label: v }));\nexport const METRIC_OPTIONS = [...WQL_METRIC_AGGREGATES, ...WQL_METRIC_FAMILIES, ...WQL_CALC_TARGETS]\n .map((v) => ({ value: v, label: v }));\nexport const UNIT_OPTIONS = WQL_DISPLAY_UNITS.map((v) => ({ value: v, label: v }));\n\n/**\n * Where-join editor vocab — the same source of truth the analytics composer\n * completes against (src/parser/wql-language.ts, aggregators from the AST\n * contract in services/analytics/query/wql.ts). Issue #831.\n */\nexport const WHERE_AGGREGATORS: readonly string[] = WQL_AGGREGATORS;\nexport const WHERE_METRICS: readonly string[] = [...WQL_METRIC_AGGREGATES, ...WQL_METRIC_FAMILIES, ...WQL_CALC_TARGETS];\nexport const WHERE_OPERATORS: readonly string[] = WQL_COMPARISON_OPS;\n\n// ── Metadata ────────────────────────────────────────────────────────────────\n\nexport interface ClauseMeta {\n label: string;\n inputType: 'radio' | 'freetext' | 'select';\n placeholder: string;\n placeholderText: string;\n icon: string;\n description: string;\n prefix?: string;\n required?: boolean;\n}\n\nexport const CLAUSE_META: Record<ClauseType, ClauseMeta> = {\n source: { label: 'Source', inputType: 'select', placeholder: 'journal, notes, metrics…', placeholderText: 'source: [plane]', icon: '🌐', description: 'What to search (notes/blocks) or aggregate (metrics)' },\n text: { label: 'Contains', inputType: 'freetext', placeholder: 'Text query...', placeholderText: 'text: [query]', icon: '🔍', description: 'Raw text substring search', prefix: 'text:' },\n catalog: { label: 'Catalog', inputType: 'select', placeholder: 'Pick catalog...', placeholderText: 'catalog: [id]', icon: '📁', description: 'Filter by static catalog', prefix: 'catalog:' },\n tag: { label: 'Tag', inputType: 'select', placeholder: 'Pick tag...', placeholderText: 'tags: [tag]', icon: '🏷', description: 'Filter by note/workout tags', prefix: 'tags:' },\n effort: { label: 'Effort', inputType: 'select', placeholder: 'Pick effort...', placeholderText: 'effort: [movement]', icon: '💪', description: 'Filter by movement/workout', prefix: 'effort:' },\n discipline:{ label: 'Discipline', inputType: 'select', placeholder: 'Pick discipline...', placeholderText: 'discipline: [name]', icon: '⚙', description: 'Filter by domain discipline', prefix: 'discipline:' },\n intensity: { label: 'Intensity', inputType: 'select', placeholder: 'low, moderate, high…', placeholderText: 'intensity: [tier]', icon: '🔥', description: 'Effort intensity tier', prefix: 'intensity:' },\n origin: { label: 'Origin', inputType: 'select', placeholder: 'bundled, user…', placeholderText: 'origin: [registry]', icon: '🔖', description: 'Effort registry origin', prefix: 'origin:' },\n type: { label: 'Block Type', inputType: 'select', placeholder: 'wod, dashboard...', placeholderText: 'type: [wod|heading]', icon: '📦', description: 'Fenced block type', prefix: 'type:' },\n has: { label: 'Has Feature',inputType: 'select', placeholder: 'timer, image...', placeholderText: 'has: [timer|image]', icon: '✨', description: 'Note/block feature presence', prefix: 'has:' },\n time: { label: 'Time Window',inputType: 'select', placeholder: 'Time range', placeholderText: 'last: [time range]', icon: '⏱', description: 'Date window (last Nw/Nd)', prefix: 'last:' },\n where: { label: 'Metric Join',inputType: 'freetext', placeholder: 'sum:totalVolume{} > 5000', placeholderText: 'where: [metric join]', icon: '📊', description: 'Cross-store analytics join', prefix: 'where:' },\n agg: { label: 'Aggregate', inputType: 'select', placeholder: 'sum, avg…', placeholderText: 'agg: [sum|avg|…]', icon: '∑', description: 'Aggregation function' },\n metric: { label: 'Metric', inputType: 'select', placeholder: 'totalVolume, reps…', placeholderText: 'metric: [key]', icon: '📈', description: 'Canonical metric key to aggregate' },\n groupby: { label: 'Group By', inputType: 'select', placeholder: 'week, effort…', placeholderText: 'by: [dim]', icon: '🗂', description: 'Group results by dimension' },\n rollup: { label: 'Rollup', inputType: 'select', placeholder: '1d or 1w', placeholderText: 'rollup: [1d|1w]', icon: '🗓', description: 'Bucket period for rollups' },\n unit: { label: 'Unit', inputType: 'select', placeholder: 'kg, lb, km…', placeholderText: 'in: [unit]', icon: '📏', description: 'Display unit directive' },\n result: { label: 'Session', inputType: 'freetext', placeholder: 'result id…', placeholderText: 'result: [id]', icon: '🏁', description: 'Scope to one workout session', prefix: 'result:' },\n block: { label: 'Block', inputType: 'freetext', placeholder: 'block content id…', placeholderText: 'block: [contentId]', icon: '🧱', description: 'Scope to all versions of a block', prefix: 'block:' },\n note: { label: 'Note', inputType: 'freetext', placeholder: 'note id…', placeholderText: 'note: [id]', icon: '📓', description: 'Scope to one note', prefix: 'note:' },\n output: { label: 'Output Type',inputType: 'select', placeholder: 'segment, milestone…', placeholderText: 'rows:[type]', icon: '📋', description: 'Output-statement type for rows queries' },\n};\n\nconst CUSTOM_FALLBACK_ICON = '\\u{1F9E9}';\n\n/**\n * Metadata lookup for pills, popovers, and menus: built-in clauses come from\n * CLAUSE_META; custom slot types resolve through the ComposerRegistry;\n * anything else gets a generic fallback so a stale clause still renders.\n */\nexport function getClauseMeta(type: string): ClauseMeta {\n const builtin = (CLAUSE_META as Record<string, ClauseMeta>)[type];\n if (builtin) return builtin;\n const custom = composerRegistry.getSlot(type);\n if (custom) {\n return {\n label: custom.label,\n inputType: 'freetext',\n placeholder: custom.placeholder,\n placeholderText: custom.placeholderText,\n icon: custom.icon,\n description: custom.description ?? '',\n };\n }\n return {\n label: type,\n inputType: 'freetext',\n placeholder: `${type}...`,\n placeholderText: `${type}: [value]`,\n icon: CUSTOM_FALLBACK_ICON,\n description: '',\n };\n}\n\n// ── WQL Generation ──────────────────────────────────────────────────────────\n\n/**\n * Maps a single clause to its WQL fragment syntax.\n */\nexport function clauseToWql(clause: QueryClause): { key?: string; filterStr?: string } {\n if (!clause.value.trim()) return {};\n const val = clause.value.trim();\n\n switch (clause.type) {\n case 'text': {\n // Multi-word values take a quoted phrase form so they parse (#867);\n // already-quoted values pass through unchanged.\n const needsQuotes = /\\s/.test(val) && !(val.startsWith('\"') && val.endsWith('\"'));\n return { filterStr: `text:${needsQuotes ? `\"${val}\"` : val}` };\n }\n case 'catalog': return { filterStr: `catalog:${val}` };\n case 'tag': return { filterStr: `tags:${val}` };\n case 'effort': return { filterStr: `effort:${val}` };\n case 'discipline': return { filterStr: `discipline:${val}` };\n case 'intensity': return { filterStr: `intensity:${val}` };\n case 'origin': return { filterStr: `origin:${val}` };\n case 'type': return { filterStr: `type:${val}` };\n case 'has': return { filterStr: `has:${val}` };\n case 'result': return { filterStr: `result:${val}` };\n case 'block': return { filterStr: `block:${val}` };\n case 'note': return { filterStr: `note:${val}` };\n default: {\n // Custom slot types compile through their registered wqlGenerator.\n const def = composerRegistry.getSlot(clause.type);\n if (!def) return {};\n if (!def.parseValue) return {};\n const value = def.parseValue(val);\n if (value === undefined) return {};\n const fragment = def.wqlGenerator(value);\n return fragment.trim() ? { filterStr: fragment } : {};\n }\n }\n}\n\n/**\n * Composes a full WQL string from an array of QueryClauses.\n *\n * Content planes: find:<target>{<filters>} in <scope> [last <n><unit>] [where <join>]\n * — target/scope derived from `source` (journal|collections|feeds → note in\n * <source>; notes → note in all; blocks → block in all; anything else →\n * note in <verbatim value>, the salvage path for exotic scopes).\n * Metrics plane: <agg>:<metric>{<filters>} [by {<dims>}] [.rollup(<p>)] [in <unit>] [where <find join>]\n */\nexport function clausesToWql(clauses: QueryClause[]): string {\n const whereClause = clauses.find((c) => c.type === 'where');\n const whereStr = whereClause?.value?.trim() ? `where ${whereClause.value.trim()}` : '';\n\n // Filter clauses\n const filterParts: string[] = [];\n for (const c of clauses) {\n const res = clauseToWql(c);\n if (res.filterStr) {\n filterParts.push(res.filterStr);\n }\n }\n const filterBraces = filterParts.length > 0 ? `{${filterParts.join(', ')}}` : '';\n\n const source = clauseValue(clauses, 'source', 'notes');\n\n if (source === 'rows') {\n // Rows plane (#949, C4): rows:<target>{<filters>} [last <n><unit>] —\n // target always explicit; `all` = every output type (bare head retired).\n const output = clauseValue(clauses, 'output', '') || 'all';\n const timeClause = clauses.find((c) => c.type === 'time');\n let timeStr = '';\n if (timeClause && timeClause.value && timeClause.value !== 'all') {\n const rawVal = timeClause.value.trim();\n timeStr = rawVal.startsWith('last') ? rawVal : `last ${rawVal}`;\n }\n return [\n `rows:${output}${filterBraces}`,\n timeStr,\n ].filter(Boolean).join(' ').trim();\n }\n\n if (source === 'metrics') {\n const agg = clauseValue(clauses, 'agg', 'sum');\n const metric = clauseValue(clauses, 'metric', '');\n const dims = clauses.filter((c) => c.type === 'groupby' && c.value.trim()).map((c) => c.value.trim());\n const rollup = clauseValue(clauses, 'rollup', '');\n const unit = clauseValue(clauses, 'unit', '');\n\n const byStr = dims.length ? `by {${dims.join(', ')}}` : '';\n const rollupStr = rollup ? `.rollup(${rollup})` : '';\n\n // Rollup attaches to the by-clause when present, to the head otherwise.\n const head = byStr\n ? `${agg}:${metric}${filterBraces}`\n : `${agg}:${metric}${filterBraces}${rollupStr}`;\n\n return [\n head,\n `${byStr}${byStr ? rollupStr : ''}`,\n unit ? `in ${unit}` : '',\n whereStr,\n ].filter(Boolean).join(' ').trim();\n }\n\n const target = source === 'blocks' ? 'block' : source === 'efforts' ? 'effort' : 'note';\n const scope = source === 'notes' || source === 'blocks' || source === 'efforts' ? 'all' : source;\n\n const timeClause = clauses.find((c) => c.type === 'time');\n let timeStr = '';\n if (timeClause && timeClause.value && timeClause.value !== 'all') {\n const rawVal = timeClause.value.trim();\n timeStr = rawVal.startsWith('last') ? rawVal : `last ${rawVal}`;\n }\n\n return [\n `find:${target}${filterBraces}`,\n `in ${scope}`,\n timeStr,\n whereStr,\n ].filter(Boolean).join(' ').trim();\n}\n\n// ── WQL → Clauses (URL restore) ─────────────────────────────────────────────\n\n/** Built-in filter key → clause type, derived from CLAUSE_META `prefix` so a\n * new built-in filter clause is declared once (metadata) and compiled once\n * (clauseToWql). Positional head/kind clauses are not `{...}` filters, so\n * they are excluded. */\nconst POSITIONAL_CLAUSE_TYPES = new Set(['source', 'time', 'where', 'agg', 'metric', 'groupby', 'rollup', 'unit', 'output']);\nconst FILTER_KEY_TO_CLAUSE_TYPE: Record<string, ClauseType> = Object.fromEntries(\n (Object.entries(CLAUSE_META) as [ClauseType, ClauseMeta][])\n .filter(([type]) => !POSITIONAL_CLAUSE_TYPES.has(type))\n .map(([type, meta]) => [meta.prefix!.replace(/:$/, ''), type]),\n);\n\n/** Split a `{...}` body at top-level commas (depth-aware so values carrying\n * nested braces — e.g. a where-style custom fragment — stay intact). */\nfunction splitTopLevel(body: string): string[] {\n const parts: string[] = [];\n let depth = 0;\n let inQuote = false;\n let start = 0;\n for (let i = 0; i < body.length; i++) {\n const c = body[i];\n if (c === '\"') inQuote = !inQuote;\n else if (!inQuote && c === '{') depth++;\n else if (!inQuote && c === '}') depth = Math.max(0, depth - 1);\n else if (!inQuote && c === ',' && depth === 0) {\n parts.push(body.slice(start, i));\n start = i + 1;\n }\n }\n parts.push(body.slice(start));\n return parts;\n}\n\n/** Split at the first top-level `where` keyword (same rule as the query\n * service's parser: depth-0, word-bounded). */\nexport function splitWhereTail(text: string): { head: string; where?: string } {\n const { primary, where } = splitAtWhere(text);\n return { head: primary, where };\n}\n\nconst RESTORE_FIND_HEAD_RE = /^find:([a-zA-Z0-9_-]*)/;\nconst RESTORE_AGG_HEAD_RE = /^([a-zA-Z0-9_-]+):([a-zA-Z0-9_.-]*)/;\nfunction restoreClause(id: string, type: string, value: string): QueryClause {\n return { id, type, ...getClauseMeta(type), value };\n}\n\n/** Map one `{...}` filter fragment to a clause. Returns null when the\n * fragment is not composer-expressible (negation, unknown key, or a custom\n * slot whose generator does not reproduce the fragment verbatim). */\nfunction filterFragmentToClause(fragment: string, index: number): QueryClause | null {\n if (fragment.startsWith('!')) return null;\n const colon = fragment.indexOf(':');\n if (colon <= 0) return null;\n const key = fragment.slice(0, colon);\n const value = fragment.slice(colon + 1);\n if (!value.trim()) return null;\n if (key === 'source') {\n return restoreClause(`c-source-${index}`, 'source', value);\n }\n\n const builtin = FILTER_KEY_TO_CLAUSE_TYPE[key];\n if (builtin) {\n // Unquote a quoted text phrase on restore so the chip shows the spaced\n // form, not the `\"…\"` literal (#867).\n const restoredValue =\n builtin === 'text' && value.length >= 2 && value.startsWith('\"') && value.endsWith('\"')\n ? value.slice(1, -1)\n : value;\n return restoreClause(`c-${builtin}-${index}`, builtin, restoredValue);\n }\n\n for (const slot of composerRegistry.getAllSlots()) {\n if (!slot.parseValue || !slot.formatValue) continue;\n const typed = slot.parseValue(value);\n if (typed !== undefined && slot.wqlGenerator(typed) === fragment) {\n return restoreClause(`c-${slot.type}-${index}`, slot.type, slot.formatValue(typed));\n }\n }\n return null;\n}\n\n/** Restore the `{...}` filter body into clauses, or null when any fragment\n * is not composer-expressible. Shared by the find and aggregate branches. */\nfunction restoreFilters(rest: string): QueryClause[] | null {\n if (!rest) return [];\n if (!rest.startsWith('{') || !rest.endsWith('}')) return null;\n const body = rest.slice(1, -1);\n const fragments = splitTopLevel(body).map((f) => f.trim()).filter(Boolean);\n const clauses: QueryClause[] = [];\n for (let i = 0; i < fragments.length; i++) {\n const clause = filterFragmentToClause(fragments[i], i);\n if (!clause) return null;\n clauses.push(clause);\n }\n return clauses;\n}\n\n/**\n * Restore composer clauses from a WQL string — the inverse of\n * `clausesToWql`, used to hydrate composer state from the URL.\n *\n * Unlike `parseQuery`, this is a *salvage* parser: it mirrors the compiler's\n * structure on both planes without validating the fragments, so composer-\n * reachable states that are WQL-invalid (e.g. `text:hello world`, a `1m`\n * rollup period, an empty metric) still restore exactly — the diagnostics\n * strip then attributes the parse error to the offending slot.\n *\n * Returns null when the string cannot be a composer product: a negated\n * filter, or an unknown/custom-less filter key.\n */\nexport function wqlToClauses(wql: string): QueryClause[] | null {\n const suffixes = parseWqlSuffixes(wql.trim());\n // Duplicate-suffix strings are not composer products (C3) — reject rather\n // than round-trip a silently truncated query.\n if (suffixes.conflicts?.length) return null;\n const { where, displayUnit, groupBy, rollup, window, legacyScope, primaryText } = suffixes;\n // C1: the composer time clause is last-only; a civil-date range window is\n // not a composer product — keep it in raw-text editing.\n if (window?.kind === 'range') return null;\n\n // Rows plane (#949): rows[:<outputType>]{<filters>} [last <n><unit>] —\n // restore onto the dedicated rows source so the round-trip is lossless.\n const rowsMatch = /^rows(?:\\:([a-zA-Z0-9_-]+))?\\:?/.exec(primaryText);\n if (rowsMatch) {\n if (where || groupBy || rollup) return null;\n const rest = primaryText.slice(rowsMatch[0].length).trim();\n const filterClauses = restoreFilters(rest);\n if (!filterClauses) return null;\n const clauses: QueryClause[] = [\n restoreClause('c-source', 'source', 'rows'),\n restoreClause('c-time', 'time', window?.kind === 'relative' ? `last ${window.size}${window.unit}` : 'all'),\n ...(rowsMatch[1] ? [restoreClause('c-output', 'output', rowsMatch[1])] : []),\n ...filterClauses,\n ];\n return clauses;\n }\n\n if (primaryText.startsWith('find:')) {\n const headMatch = RESTORE_FIND_HEAD_RE.exec(primaryText);\n if (!headMatch) return null;\n const targetValue = headMatch[1];\n // C7 closed target enum: an unknown find target must surface the engine's\n // parse error, not silently salvage into a different query.\n if (!(WQL_FIND_TARGETS as readonly string[]).includes(targetValue)) return null;\n const rest = primaryText.slice(headMatch[0].length).trim();\n\n const filterClauses = restoreFilters(rest);\n if (!filterClauses) return null;\n\n const timeValue = window?.kind === 'relative' ? `last ${window.size}${window.unit}` : 'all';\n const sourceClauseIdx = filterClauses.findIndex((c) => c.type === 'source');\n const sourceFromFilter = sourceClauseIdx !== -1 ? filterClauses[sourceClauseIdx].value : undefined;\n const scopeValue = legacyScope ?? sourceFromFilter;\n const remainingFilterClauses = sourceClauseIdx !== -1\n ? filterClauses.filter((_, idx) => idx !== sourceClauseIdx)\n : filterClauses;\n\n // target+scope collapse into the single source slot: blocks/efforts drop\n // the scope (the engine ignores it for registry targets); an unknown\n // scope word restores verbatim so exotic scopes round-trip (salvage).\n const sourceValue = targetValue === 'block'\n ? 'blocks'\n : targetValue === 'effort'\n ? 'efforts'\n : !scopeValue || scopeValue === 'all'\n ? 'notes'\n : scopeValue;\n\n const clauses: QueryClause[] = [\n restoreClause('c-source', 'source', sourceValue),\n restoreClause('c-time', 'time', timeValue),\n ...remainingFilterClauses,\n ];\n if (where) clauses.push(restoreClause('c-where', 'where', where));\n return clauses;\n }\n\n // Aggregate branch: <agg>:<metric>{<filters>} [by {<dims>}] [.rollup(<p>)] [in <unit>]\n // C1: the metrics plane has no time slot — a windowed aggregate is not a\n // composer product (reject, raw text preserved; otherwise apply would\n // rewrite the query without its window).\n if (window) return null;\n const headMatch = RESTORE_AGG_HEAD_RE.exec(primaryText);\n if (!headMatch) return null;\n const aggValue = headMatch[1];\n const metricValue = headMatch[2] ?? '';\n const rest = primaryText.slice(headMatch[0].length).trim();\n\n const filterClauses = restoreFilters(rest);\n if (!filterClauses) return null;\n\n const dimValues = groupBy ?? [];\n const rollupValue = rollup?.raw ?? '';\n const unitValue = displayUnit ?? '';\n\n const clauses: QueryClause[] = [\n restoreClause('c-source', 'source', 'metrics'),\n restoreClause('c-agg', 'agg', aggValue),\n restoreClause('c-metric', 'metric', metricValue),\n ...filterClauses,\n ...dimValues.map((d, i) => restoreClause(`c-groupby-${i}`, 'groupby', d)),\n ];\n if (rollupValue) clauses.push(restoreClause('c-rollup', 'rollup', rollupValue));\n if (unitValue) clauses.push(restoreClause('c-unit', 'unit', unitValue));\n if (where) clauses.push(restoreClause('c-where', 'where', where));\n return clauses;\n}\n\n// ── Source pivot ────────────────────────────────────────────────────────────\n\n/**\n * Set the aggregate metric, re-basing the clause list on the metrics plane\n * when needed (sidebar / launcher flows, issue #839): content planes pivot\n * via `pivotClauses` (shared filters survive), a missing source or metric\n * clause is seeded, and the metric value lands on the first metric clause.\n */\nexport function setMetricClause(clauses: QueryClause[], metric: string): QueryClause[] {\n const withSource = clauses.some((c) => c.type === 'source')\n ? clauses\n : [restoreClause('c-source', 'source', 'metrics'), ...clauses];\n const pivoted = clauseValue(withSource, 'source') === 'metrics'\n ? withSource\n : pivotClauses(withSource, 'metrics');\n return pivoted.some((c) => c.type === 'metric')\n ? pivoted.map((c) => (c.type === 'metric' ? { ...c, value: metric } : c))\n : [...pivoted, restoreClause('c-metric', 'metric', metric)];\n}\n\n/**\n * Re-base the clause list on a new source value (decision #836): shared\n * filter clauses survive the pivot; kind-specific clauses are dropped\n * (content plane: time/where and any metrics head; metrics plane: time/\n * where). Pivoting to metrics seeds the head slots (agg=sum, metric empty\n * for placeholder guidance).\n */\nexport function pivotClauses(clauses: QueryClause[], source: string): QueryClause[] {\n const next = clauses\n .filter((c) => !METRICS_ONLY_TYPES.has(c.type) && c.type !== 'time' && c.type !== 'where')\n .map((c) => (c.type === 'source' ? { ...c, value: source } : c));\n\n if (source === 'metrics') {\n const sourceIdx = next.findIndex((c) => c.type === 'source');\n const head: QueryClause[] = [];\n if (!next.some((c) => c.type === 'agg')) head.push(restoreClause('c-agg', 'agg', 'sum'));\n if (!next.some((c) => c.type === 'metric')) head.push(restoreClause('c-metric', 'metric', ''));\n next.splice(sourceIdx >= 0 ? sourceIdx + 1 : next.length, 0, ...head);\n }\n return next;\n}\n\n// ── Default Clauses ─────────────────────────────────────────────────────────\n\nexport function defaultClauses(): QueryClause[] {\n return [\n { id: 'c-source', type: 'source', ...CLAUSE_META.source, value: 'notes' },\n { id: 'c-time', type: 'time', ...CLAUSE_META.time, value: 'last 2w' },\n ];\n}\n\n/** Default clauses for aggregate/metrics queries (source=metrics, agg=sum, empty metric). */\nexport function defaultMetricsClauses(): QueryClause[] {\n return [\n { id: 'c-source', type: 'source', ...CLAUSE_META.source, value: 'metrics' },\n { id: 'c-agg', type: 'agg', ...CLAUSE_META.agg, value: 'sum' },\n { id: 'c-metric', type: 'metric', ...CLAUSE_META.metric, value: '' },\n ];\n}\n\n/**\n * Value of the first clause of `type`, trimmed, or `fallback` when absent or\n * empty. Mirrors the lookup/defaulting `clausesToWql` performs, so consumers\n * (e.g. the Library shelf) share one defaulting rule with the compiler.\n */\nexport function clauseValue(clauses: QueryClause[], type: string, fallback = ''): string {\n return clauses.find((c) => c.type === type)?.value?.trim() || fallback;\n}\n","import { useState, useRef, useEffect } from 'react';\nimport type { KeyboardEvent } from 'react';\nimport { Plus, X, ChevronDown, Check } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { composerRegistry, useComposerSlots, type CustomSlotDefinition } from './ComposerRegistry';\nimport { useSuggestions } from './useSuggestions';\nimport {\n type QueryClause,\n type ClauseType,\n CLAUSE_META,\n getClauseMeta,\n SOURCE_OPTIONS,\n TIME_OPTIONS,\n AGG_OPTIONS,\n ROLLUP_OPTIONS,\n GROUPBY_OPTIONS,\n METRIC_OPTIONS,\n UNIT_OPTIONS,\n} from './queryClauses';\nimport { WQL_INTENSITY_TIERS } from '@bitcobblers/wod-wiki-wql';\n\nexport interface TokenSlotPillProps {\n clause: QueryClause;\n isActive?: boolean;\n invalid?: boolean;\n invalidReason?: string;\n onClick?: () => void;\n onRemove?: () => void;\n onChange?: (patch: Partial<QueryClause>) => void;\n compact?: boolean;\n placeholderOverride?: string;\n}\n\nexport function TokenSlotPill({\n clause,\n isActive,\n invalid = false,\n invalidReason,\n onClick,\n onRemove,\n onChange,\n compact = false,\n placeholderOverride,\n}: TokenSlotPillProps) {\n const meta = getClauseMeta(clause.type);\n const customDef = composerRegistry.getSlot(clause.type);\n const [open, setOpen] = useState(false);\n const pillRef = useRef<HTMLDivElement>(null);\n\n const hasValue = Boolean(clause.value && clause.value.trim());\n\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n if (!open) setOpen(true);\n } else if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n setOpen((o) => !o);\n } else if (e.key === 'Escape') {\n if (!open) return;\n e.stopPropagation();\n setOpen(false);\n }\n };\n\n return (\n <div className=\"relative inline-flex items-center\">\n <div\n ref={pillRef}\n data-testid={`token-slot-${clause.type}`}\n role=\"button\"\n tabIndex={0}\n onClick={() => {\n onClick?.();\n setOpen((o) => !o);\n }}\n onKeyDown={handleKeyDown}\n title={invalid ? invalidReason : undefined}\n className={cn(\n 'inline-flex items-center gap-1 px-2.5 py-1 rounded-full text-xs font-mono transition-colors cursor-pointer select-none border',\n invalid\n ? 'bg-destructive/10 text-destructive border-destructive/40 hover:bg-destructive/20'\n : isActive\n ? 'bg-primary text-primary-foreground border-primary font-medium shadow-sm'\n : hasValue\n ? 'bg-muted/80 text-foreground border-border hover:bg-muted'\n : 'bg-muted/40 text-muted-foreground border-dashed border-border hover:bg-muted/60',\n compact && 'px-2 py-0.5 text-[11px]',\n )}\n >\n <span className=\"text-[10px] opacity-70\">{meta.icon}</span>\n <span className=\"font-semibold text-[11px] opacity-90\">{meta.label}:</span>\n <span data-testid={`token-slot-value-${clause.type}`} className={cn('truncate max-w-44', !hasValue && 'italic opacity-60')}>\n {hasValue ? clause.value : placeholderOverride || meta.placeholder}\n </span>\n {onRemove && !meta.required && (\n <button\n type=\"button\"\n data-testid={`token-slot-remove-${clause.type}`}\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className=\"ml-1 p-0.5 rounded-full hover:bg-black/10 text-inherit opacity-70 hover:opacity-100\"\n title={`Remove ${meta.label}`}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </div>\n\n {open && onChange && (customDef ? (\n <CustomSlotPopover\n clause={clause}\n definition={customDef}\n onClose={() => setOpen(false)}\n onChange={(val) => {\n const strVal = customDef.formatValue ? customDef.formatValue(val) : String(val ?? '');\n onChange({ value: strVal });\n setOpen(false);\n }}\n />\n ) : (\n <ClausePopover\n clause={clause}\n onClose={() => setOpen(false)}\n onChange={(patch) => {\n onChange(patch);\n setOpen(false);\n }}\n />\n ))}\n </div>\n );\n}\n\nexport const MULTI_VALUE_TYPES: Record<string, true> = {\n tag: true,\n catalog: true,\n effort: true,\n discipline: true,\n intensity: true,\n origin: true,\n type: true,\n has: true,\n};\n\nconst STATIC_OPTIONS: Record<string, { value: string; label: string }[]> = {\n source: SOURCE_OPTIONS.map((o) => ({ value: o.value, label: o.label })),\n time: TIME_OPTIONS.map((o) => ({ value: o.value, label: o.label })),\n agg: AGG_OPTIONS,\n rollup: ROLLUP_OPTIONS,\n groupby: GROUPBY_OPTIONS,\n metric: METRIC_OPTIONS,\n unit: UNIT_OPTIONS,\n intensity: WQL_INTENSITY_TIERS.map((v) => ({ value: v, label: v })),\n origin: ['builtin', 'user', 'canonical', 'custom'].map((v) => ({ value: v, label: v })),\n};\n\nfunction emptyStateMessage({\n loading,\n itemCount,\n filter,\n binding,\n allSelected = false,\n}: {\n loading: boolean;\n itemCount: number;\n filter: string;\n binding?: { open: boolean; emptyText: string };\n allSelected?: boolean;\n}): string {\n if (loading) return 'Loading…';\n if (allSelected) return 'All options selected';\n if (itemCount === 0) return binding?.emptyText ?? 'Nothing here yet';\n if (!filter.trim()) return 'No options';\n const open = binding?.open ?? true;\n return open ? 'No matches — press Enter to use the typed value' : 'No matches — no such option';\n}\n\nexport function ClausePopover({\n clause,\n onClose,\n onChange,\n}: {\n clause: QueryClause;\n onClose: () => void;\n onChange: (patch: Partial<QueryClause>) => void;\n}) {\n const meta = getClauseMeta(clause.type);\n const isMulti = MULTI_VALUE_TYPES[clause.type] === true;\n const selectedValues = isMulti\n ? clause.value.split('|').map((v) => v.trim()).filter(Boolean)\n : [];\n // Multi-select slots open with an empty combobox; the current selection\n // lives in the chip row, not in the input.\n const [val, setVal] = useState(isMulti ? '' : clause.value);\n const [highlightIdx, setHighlightIdx] = useState(0);\n const [filter, setFilter] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n // Focus the filter input when present; otherwise the popover itself so\n // Up/Down + Enter keyboard selection works for target/scope/time slots.\n if (inputRef.current) inputRef.current.focus();\n else popoverRef.current?.focus();\n }, []);\n\n // Backdrop click\n useEffect(() => {\n const handler = (e: MouseEvent) => {\n if (popoverRef.current && !popoverRef.current.contains(e.target as Node)) {\n onClose();\n }\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [onClose]);\n\n const { items: dynamicItems, loading, binding } = useSuggestions(clause.type);\n const staticItems = STATIC_OPTIONS[clause.type];\n\n // A suggestion binding wins when registered; otherwise static vocab.\n const items = binding\n ? dynamicItems.map((s) => ({ value: s.value, label: s.label ?? s.value }))\n : (staticItems ?? dynamicItems.map((s) => ({ value: s.value, label: s.label ?? s.value })));\n\n // Free-text filter input: hidden for closed static selects (Up/Down cycles\n // the full list), shown for metric/unit (typed values also accepted) and\n // freetext/suggestion slots so typed values filter or enter verbatim.\n const showFilterInput = !staticItems || clause.type === 'metric' || clause.type === 'unit';\n\n // Already-picked values leave the option list in multi-select mode.\n const availableItems = isMulti\n ? items.filter((item) => !selectedValues.includes(item.value))\n : items;\n\n const query = showFilterInput ? val : filter;\n const filteredItems = showFilterInput\n ? availableItems.filter((item) =>\n item.value.toLowerCase().includes(query.toLowerCase())\n || item.label.toLowerCase().includes(query.toLowerCase()))\n : availableItems;\n\n // Visible commit affordance for typed free text (#854).\n const typedValue = query.trim();\n const canCommitTyped =\n showFilterInput &&\n typedValue.length > 0 &&\n (binding?.open ?? true) &&\n !selectedValues.some((v) => v.toLowerCase() === typedValue.toLowerCase()) &&\n !filteredItems.some((item) => item.value.toLowerCase() === typedValue.toLowerCase());\n\n // Single-select slots hand the value up and the pill closes the popover;\n // multi-select slots append to the OR-list, clear the combobox, and stay\n // open for the next pick.\n const commitValue = (value: string) => {\n if (!isMulti) {\n onChange({ value });\n onClose();\n return;\n }\n if (selectedValues.includes(value)) return;\n onChange({ value: [...selectedValues, value].join('|') });\n setVal('');\n setFilter('');\n setHighlightIdx(0);\n inputRef.current?.focus();\n };\n\n const removeValue = (value: string) => {\n onChange({ value: selectedValues.filter((v) => v !== value).join('|') });\n };\n\n // Handled keys stop at the popover so an embedding container (the\n // palette's result list, issue #834) doesn't also navigate/select.\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightIdx((i) => Math.min(i + 1, Math.max(0, filteredItems.length - 1)));\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n e.stopPropagation();\n setHighlightIdx((i) => Math.max(i - 1, 0));\n } else if (e.key === 'Enter') {\n e.preventDefault();\n e.stopPropagation();\n if (filteredItems[highlightIdx]) {\n commitValue(filteredItems[highlightIdx].value);\n } else if (query.trim() && (binding?.open ?? true)) {\n // Open slots accept user-typed values not present in the list (#831).\n commitValue(query.trim());\n }\n } else if (e.key === 'Backspace' && isMulti && query === '' && selectedValues.length > 0) {\n // Standard combobox affordance: Backspace on an empty input pops the last chip.\n e.preventDefault();\n removeValue(selectedValues[selectedValues.length - 1]);\n } else if (e.key === 'Escape') {\n e.stopPropagation();\n onClose();\n }\n };\n\n return (\n <div\n ref={popoverRef}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className=\"absolute left-0 top-full mt-1.5 w-64 p-2 rounded-lg border border-border bg-popover text-popover-foreground shadow-lg z-50 flex flex-col gap-1.5\"\n data-testid={`clause-popover-${clause.type}`}\n >\n {showFilterInput ? (\n <input\n ref={inputRef}\n type=\"text\"\n data-testid=\"wql-composer-input\"\n value={val}\n onChange={(e) => {\n setVal(e.target.value);\n setHighlightIdx(0);\n }}\n placeholder={meta.placeholder ?? `Search ${clause.label}...`}\n className=\"w-full rounded border border-border bg-background px-2 py-1 text-xs font-mono focus:outline-none focus:border-primary\"\n />\n ) : (\n <input type=\"hidden\" data-testid=\"wql-composer-input\" value=\"\" readOnly />\n )}\n {isMulti && selectedValues.length > 0 && (\n <div className=\"flex flex-wrap gap-1 py-1 border-b border-border/50\">\n {selectedValues.map((v) => (\n <span\n key={v}\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded bg-primary/20 text-primary text-[10px] font-mono\"\n >\n {v}\n <button\n type=\"button\"\n onClick={() => removeValue(v)}\n className=\"hover:text-destructive\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n </span>\n ))}\n </div>\n )}\n\n <div className=\"max-h-44 overflow-y-auto flex flex-col gap-0.5\">\n {canCommitTyped && (\n <button\n type=\"button\"\n onClick={() => commitValue(typedValue)}\n className=\"flex items-center justify-between px-2 py-1 text-xs text-left rounded hover:bg-muted/60 transition-colors font-mono\"\n data-testid={`clause-commit-typed-${clause.type}`}\n >\n <span className=\"truncate\">\n Search for <span className=\"font-semibold\">“{typedValue}”</span>\n </span>\n <span className=\"text-muted-foreground/60 ml-1 shrink-0\">↵</span>\n </button>\n )}\n {filteredItems.map((item, idx) => {\n const selected = selectedValues.includes(item.value)\n || (!isMulti && clause.value === item.value);\n return (\n <button\n key={item.value}\n type=\"button\"\n onClick={() => commitValue(item.value)}\n className={cn(\n 'flex items-center justify-between px-2 py-1 text-xs text-left rounded hover:bg-muted/60 transition-colors font-mono',\n idx === highlightIdx ? 'bg-primary/15 font-semibold text-primary' : selected && 'bg-primary/10 text-primary font-medium',\n )}\n >\n <span className=\"truncate\">{item.label || item.value}</span>\n {selected && <Check className=\"w-3 h-3 text-primary shrink-0\" />}\n </button>\n );\n })}\n\n {filteredItems.length === 0 && !canCommitTyped && (\n <div className=\"text-[11px] text-muted-foreground text-center py-2 italic\">\n {emptyStateMessage({\n loading,\n itemCount: availableItems.length,\n filter: query,\n binding,\n allSelected: isMulti && items.length > 0 && availableItems.length === 0,\n })}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nexport function CustomSlotPopover<TValue>({\n clause,\n definition,\n onClose,\n onChange,\n}: {\n clause: QueryClause;\n definition: CustomSlotDefinition<TValue>;\n onClose: () => void;\n onChange: (value: TValue) => void;\n}) {\n const Editor = definition.Editor;\n const initialValue = definition.parseValue && clause.value\n ? definition.parseValue(clause.value)\n : (clause.value as unknown as TValue);\n\n return (\n <div\n className=\"absolute left-0 top-full mt-1.5 w-72 p-3 rounded-lg border border-border bg-popover text-popover-foreground shadow-lg z-50\"\n data-testid=\"custom-slot-popover\"\n >\n <Editor value={initialValue} onChange={onChange} onClose={onClose} />\n </div>\n );\n}\n\nexport function AddFilterDropdown({\n clauses,\n onAdd,\n}: {\n clauses: QueryClause[];\n onAdd: (clause: QueryClause) => void;\n}) {\n const [open, setOpen] = useState(false);\n const customSlots = useComposerSlots();\n const existingTypes = new Set(clauses.map((c) => c.type));\n\n const builtInAvailable = (Object.keys(CLAUSE_META) as ClauseType[]).filter(\n (type) => !CLAUSE_META[type].required && !existingTypes.has(type),\n );\n const customAvailable = customSlots.filter((s) => !existingTypes.has(s.type));\n return (\n <div className=\"relative inline-flex items-center\">\n <button\n type=\"button\"\n data-testid=\"add-filter-button\"\n onClick={() => setOpen((o) => !o)}\n className=\"inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-mono text-muted-foreground border border-dashed border-border hover:bg-muted/60 hover:text-foreground transition-colors cursor-pointer\"\n >\n <Plus className=\"w-3 h-3\" />\n <span>Filter</span>\n </button>\n {open && (\n <div\n className=\"absolute left-0 top-full mt-1.5 w-48 p-1.5 rounded-lg border border-border bg-popover text-popover-foreground shadow-lg z-50 flex flex-col gap-0.5 max-h-56 overflow-y-auto\"\n data-testid=\"add-filter-dropdown\"\n >\n {builtInAvailable.map((type) => {\n const meta = CLAUSE_META[type];\n return (\n <button\n key={type}\n type=\"button\"\n onClick={() => {\n onAdd({ id: `${type}-${Date.now()}`, type, ...meta, value: '' });\n setOpen(false);\n }}\n className=\"flex items-center gap-2 px-2 py-1 text-xs text-left rounded hover:bg-muted font-mono\"\n >\n <span>{meta.icon}</span>\n <span>{meta.label}</span>\n </button>\n );\n })}\n\n {customAvailable.map((slot) => (\n <button\n key={slot.type}\n type=\"button\"\n onClick={() => {\n onAdd({\n id: `${slot.type}-${Date.now()}`,\n type: slot.type,\n label: slot.label,\n icon: slot.icon,\n placeholder: slot.placeholder,\n value: '',\n });\n setOpen(false);\n }}\n className=\"flex items-center gap-2 px-2 py-1 text-xs text-left rounded hover:bg-muted font-mono\"\n >\n <span>{slot.icon}</span>\n <span>{slot.label}</span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n}\n\nexport function AddCalcDropdown({\n clauses,\n onAdd,\n}: {\n clauses: QueryClause[];\n onAdd: (clause: QueryClause) => void;\n}) {\n const [open, setOpen] = useState(false);\n const existingTypes = new Set(clauses.map((c) => c.type));\n\n const calcTypes: ClauseType[] = ['agg', 'metric', 'groupby', 'rollup', 'unit', 'where'];\n const available = calcTypes.filter((t) => !existingTypes.has(t));\n\n if (available.length === 0) return null;\n\n return (\n <div className=\"relative inline-flex items-center\">\n <button\n type=\"button\"\n onClick={() => setOpen((o) => !o)}\n className=\"inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-mono text-muted-foreground border border-dashed border-border hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <Plus className=\"w-3 h-3\" />\n <span>Add Calc</span>\n <ChevronDown className=\"w-3 h-3 ml-0.5 opacity-60\" />\n </button>\n\n {open && (\n <div\n className=\"absolute left-0 top-full mt-1.5 w-44 p-1.5 rounded-lg border border-border bg-popover text-popover-foreground shadow-lg z-50 flex flex-col gap-0.5\"\n data-testid=\"add-calc-dropdown\"\n >\n {available.map((type) => {\n const meta = CLAUSE_META[type];\n return (\n <button\n key={type}\n type=\"button\"\n onClick={() => {\n onAdd({ id: `${type}-${Date.now()}`, type, ...meta, value: '' });\n setOpen(false);\n }}\n className=\"flex items-center gap-2 px-2 py-1 text-xs text-left rounded hover:bg-muted font-mono\"\n >\n <span>{meta.icon}</span>\n <span>{meta.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import { parseQuery, type ParsedFindQuery, type ParsedAggregateQuery } from '@bitcobblers/wod-wiki-wql';\nimport { composerRegistry } from './ComposerRegistry';\nimport { clausesToWql, type QueryClause } from './queryClauses';\nimport type { AnyParsedQuery } from './useWqlStageCounts';\nexport interface WqlDiagnostics {\n valid: boolean;\n /** The composed WQL string for the current clause set. */\n wql: string;\n ast: AnyParsedQuery;\n error?: string;\n offendingClauseId?: string;\n}\n\nexport interface WqlFindSummary {\n target: string;\n scope: string;\n timeWindow?: string;\n hasJoin: boolean;\n filterCount: number;\n}\n\nexport function summarizeFind(ast: ParsedFindQuery): WqlFindSummary {\n const sourceFilter = ast.filters.find((f) => f.key === 'source');\n const scope = sourceFilter ? sourceFilter.values.map((v) => v.value).join(',') : 'all';\n return {\n target: ast.target,\n scope,\n timeWindow: ast.window\n ? ast.window.kind === 'relative'\n ? `last ${ast.window.size}${ast.window.unit}`\n : `from ${ast.window.start}${ast.window.end ? ` to ${ast.window.end}` : ''}`\n : undefined,\n hasJoin: Boolean(ast.join),\n filterCount: ast.filters.length,\n };\n}\n\nexport interface WqlAggregateSummary {\n agg: string;\n metric: string;\n groupBy?: string;\n rollup?: string;\n unit?: string;\n timeWindow?: string;\n hasJoin: boolean;\n filterCount: number;\n}\n\nexport function summarizeAggregate(ast: ParsedAggregateQuery): WqlAggregateSummary {\n return {\n agg: ast.agg,\n metric: ast.metric,\n groupBy: ast.groupBy.length > 0 ? ast.groupBy.join(', ') : undefined,\n rollup: ast.rollup ? `${ast.rollup.size}${ast.rollup.unit}` : undefined,\n unit: ast.displayUnit,\n hasJoin: Boolean(ast.join),\n filterCount: ast.filters.length,\n };\n}\n\nfunction customSlotError(clause: QueryClause): string | null {\n const custom = composerRegistry.getSlot(clause.type);\n if (!custom) return null;\n const value = clause.value.trim();\n if (!value) return null;\n const parsed = custom.parseValue ? custom.parseValue(value) : value;\n if (parsed === undefined) return `Invalid ${custom.label} value`;\n return custom.validate ? custom.validate(parsed) : null;\n}\n\nexport function diagnoseClauses(clauses: QueryClause[]): WqlDiagnostics {\n for (const clause of clauses) {\n const error = customSlotError(clause);\n if (error) {\n return {\n valid: false,\n wql: clausesToWql(clauses),\n ast: { family: 'aggregate', raw: '', agg: 'sum', metric: '', filters: [], groupBy: [], error },\n error,\n offendingClauseId: clause.id,\n };\n }\n }\n\n const wql = clausesToWql(clauses);\n const ast = parseQuery(wql);\n\n if (ast.error) {\n return {\n valid: false,\n wql,\n ast,\n error: ast.error,\n };\n }\n\n return {\n valid: true,\n wql,\n ast,\n };\n}\n","import { AlertCircle, CheckCircle2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { isAggregateQuery, isFindQuery } from '@bitcobblers/wod-wiki-wql';\nimport { summarizeAggregate, summarizeFind, type WqlDiagnostics } from './diagnostics';\nimport type { WqlStageCounts } from './useWqlStageCounts';\n\nexport interface WqlDiagnosticsStripProps {\n diagnostics: WqlDiagnostics;\n offendingLabel?: string;\n stages?: WqlStageCounts;\n actions?: ReactNode;\n className?: string;\n}\n\nfunction SummaryChip({ label, value, testId }: { label: string; value: string; testId: string }) {\n const legacyTestId = testId.startsWith('diag-') ? testId.replace('diag-', 'wql-') : testId;\n return (\n <span data-testid={testId} className=\"inline-flex items-center gap-1 whitespace-nowrap\">\n <span className=\"opacity-60\">{label}:</span>\n <span data-testid={legacyTestId} className=\"font-semibold text-foreground\">{value}</span>\n </span>\n );\n}\n\nexport function WqlDiagnosticsStrip({\n diagnostics,\n offendingLabel,\n stages,\n actions,\n className,\n}: WqlDiagnosticsStripProps) {\n const { valid, ast, error } = diagnostics;\n\n return (\n <div\n data-testid=\"wql-diagnostics-strip\"\n className={cn(\n 'flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5 px-3 py-1.5 rounded-lg text-xs font-mono border transition-colors',\n valid\n ? 'bg-muted/30 border-border text-muted-foreground'\n : 'bg-destructive/5 border-destructive/30 text-destructive',\n className,\n )}\n >\n <div className=\"flex flex-wrap items-center gap-x-3 gap-y-1\">\n <div className=\"flex items-center gap-1.5 font-medium\" data-testid=\"wql-validity-badge\" data-valid={valid}>\n {valid ? (\n <>\n <CheckCircle2 className=\"w-3.5 h-3.5 text-emerald-500 shrink-0\" />\n <span className=\"text-emerald-600 dark:text-emerald-400\">Valid</span>\n </>\n ) : (\n <>\n <AlertCircle className=\"w-3.5 h-3.5 text-destructive shrink-0\" />\n <span>\n {offendingLabel ? `${offendingLabel}: ` : ''}\n {error || 'Syntax error'}\n </span>\n </>\n )}\n </div>\n\n {valid && isFindQuery(ast) && (\n <div className=\"flex flex-wrap items-center gap-x-3 text-[11px] opacity-80 border-l border-border/50 pl-3\">\n {(() => {\n const summary = summarizeFind(ast);\n return (\n <>\n <SummaryChip label=\"target\" value={summary.target} testId=\"diag-summary-target\" />\n <SummaryChip label=\"scope\" value={summary.scope} testId=\"diag-summary-scope\" />\n {summary.timeWindow && (\n <SummaryChip label=\"time\" value={summary.timeWindow} testId=\"diag-summary-time\" />\n )}\n {summary.hasJoin && (\n <span data-testid=\"diag-summary-join\" className=\"text-primary font-semibold\">\n +join\n </span>\n )}\n </>\n );\n })()}\n </div>\n )}\n\n {valid && isAggregateQuery(ast) && (\n <div className=\"flex flex-wrap items-center gap-x-3 text-[11px] opacity-80 border-l border-border/50 pl-3\">\n {(() => {\n const summary = summarizeAggregate(ast);\n return (\n <>\n <SummaryChip label=\"agg\" value={summary.agg} testId=\"diag-summary-agg\" />\n {summary.metric && (\n <SummaryChip label=\"metric\" value={summary.metric} testId=\"diag-summary-metric\" />\n )}\n {summary.groupBy && (\n <SummaryChip label=\"by\" value={summary.groupBy} testId=\"diag-summary-groupby\" />\n )}\n {summary.rollup && (\n <SummaryChip label=\"every\" value={summary.rollup} testId=\"diag-summary-rollup\" />\n )}\n {summary.unit && (\n <SummaryChip label=\"as\" value={summary.unit} testId=\"diag-summary-unit\" />\n )}\n </>\n );\n })()}\n </div>\n )}\n\n {valid && stages && (\n <div\n data-testid=\"diag-stage-counts\"\n className=\"text-[11px] font-semibold text-primary border-l border-border/50 pl-3\"\n >\n {stages.kind === 'find' ? (\n <span>{stages.matched} matched</span>\n ) : (\n <span>\n {stages.selected} selected → {stages.aggregated} aggregated ({stages.groups} series)\n </span>\n )}\n </div>\n )}\n </div>\n\n {actions && <div className=\"flex items-center gap-1.5 ml-auto\">{actions}</div>}\n </div>\n );\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { isFindQuery, type AnyParsedQuery } from '@bitcobblers/wod-wiki-wql';\nimport type { FindQueryResult, QueryResult } from '../contracts/query';\n\nexport type { AnyParsedQuery };\n\nexport type WqlExecutor = (ast: AnyParsedQuery) => Promise<FindQueryResult | QueryResult>;\n\nexport type WqlStageCounts =\n | { kind: 'find'; selected: number; matched: number }\n | { kind: 'aggregate'; selected: number; buckets: number; aggregated: number; groups: number };\n\nexport const DEFAULT_DIAGNOSTICS_DEBOUNCE_MS = 150;\n\nexport function useWqlStageCounts(\n ast: AnyParsedQuery,\n valid: boolean,\n execute: WqlExecutor | undefined,\n debounceMs: number = DEFAULT_DIAGNOSTICS_DEBOUNCE_MS,\n): WqlStageCounts | undefined {\n const [stages, setStages] = useState<WqlStageCounts | undefined>(undefined);\n\n const executorRef = useRef(execute);\n executorRef.current = execute;\n\n const runnable = valid && !ast.error && execute !== undefined;\n\n useEffect(() => {\n if (!runnable) {\n setStages(undefined);\n return;\n }\n setStages(undefined);\n let cancelled = false;\n const timer = setTimeout(() => {\n executorRef.current?.(ast)\n .then((result) => {\n if (cancelled) return;\n setStages(\n isFindQuery(ast)\n ? { kind: 'find', ...(result as FindQueryResult).stages }\n : { kind: 'aggregate', ...(result as QueryResult).stages },\n );\n })\n .catch(() => {\n if (!cancelled) setStages(undefined);\n });\n }, debounceMs);\n return () => {\n cancelled = true;\n clearTimeout(timer);\n };\n }, [ast, runnable, debounceMs]);\n\n return runnable ? stages : undefined;\n}\n","/**\n * WqlComposer — shared omni command bar for composing WQL queries\n * of both kinds: content find: queries and analytics aggregate queries.\n */\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { KeyboardEvent, ReactNode } from 'react';\nimport { Command } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { useComposerSlots } from './ComposerRegistry';\nimport { TokenSlotPill, AddFilterDropdown, AddCalcDropdown } from './QueryPalette';\nimport { diagnoseClauses } from './diagnostics';\nimport { WqlDiagnosticsStrip } from './WqlDiagnosticsStrip';\nimport {\n useWqlStageCounts,\n DEFAULT_DIAGNOSTICS_DEBOUNCE_MS,\n type WqlExecutor,\n type AnyParsedQuery,\n} from './useWqlStageCounts';\nimport {\n type ClauseType,\n type QueryClause,\n getClauseMeta,\n clauseValue,\n sourcePlane,\n defaultClauses,\n pivotClauses,\n wqlToClauses,\n} from './queryClauses';\nimport { parseQuery } from '@bitcobblers/wod-wiki-wql';\n\n// ── Public API ───────────────────────────────────────────────────────────────\n\nexport interface WqlValidationState {\n /** True when the composed WQL parses without error. */\n valid: boolean;\n /** Parser error message when invalid. */\n error?: string;\n}\n\nexport interface WqlComposerProps {\n /** Seed clauses for uncontrolled usage. Defaults to source/time. */\n initialClauses?: QueryClause[];\n /** Controlled clauses. When provided, the component does not own clause state. */\n clauses?: QueryClause[];\n /** Fired whenever the clause list changes (add / edit / remove). */\n onClausesChange?: (clauses: QueryClause[]) => void;\n /** Fired (including on mount) with the composed WQL string. */\n onWqlChange?: (wql: string) => void;\n /** Fired (including on mount) with parse validation state. */\n onValidationChange?: (state: WqlValidationState) => void;\n /** Fired (including on mount) with the parsed AST. */\n onAstChange?: (ast: AnyParsedQuery) => void;\n /**\n * Fired on Enter when no free text is pending — the run-on-submit signal\n * for hosts like the analytics explorer. Receives the composed WQL.\n */\n onSubmit?: (wql: string) => void;\n /** Render the diagnostics strip (badge, AST summary, stage counts). Default true. */\n showDiagnostics?: boolean;\n /**\n * Executor for live stage counts in the diagnostics strip.\n */\n execute?: WqlExecutor;\n /** Debounce for live execution feedback. Default 150ms. */\n debounceMs?: number;\n /** Extension point: extra content rendered inside the bar, after the free-text input. */\n customSlots?: ReactNode;\n /** Host actions appended on the diagnostics line. */\n diagnosticsActions?: ReactNode;\n /**\n * Clause types kept in the model but NOT rendered as pills.\n */\n hiddenClauseTypes?: ClauseType[];\n /** Focus the free-text input on mount. */\n autoFocus?: boolean;\n /** Free-text input placeholder. */\n placeholder?: string;\n className?: string;\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport function WqlComposer({\n initialClauses,\n clauses: controlledClauses,\n onClausesChange,\n onWqlChange,\n onValidationChange,\n onAstChange,\n onSubmit,\n showDiagnostics = true,\n execute,\n debounceMs = DEFAULT_DIAGNOSTICS_DEBOUNCE_MS,\n customSlots,\n diagnosticsActions,\n hiddenClauseTypes,\n autoFocus = false,\n placeholder = 'Type search term and press Enter...',\n className,\n}: WqlComposerProps) {\n const [internalClauses, setInternalClauses] = useState<QueryClause[]>(\n () => initialClauses ?? defaultClauses(),\n );\n const clauses = controlledClauses ?? internalClauses;\n const hiddenTypes = useMemo(() => new Set<string>(hiddenClauseTypes), [hiddenClauseTypes]);\n\n const [activeSlotIdx, setActiveSlotIdx] = useState<number | null>(null);\n const [freeText, setFreeText] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n\n useEffect(() => {\n if (!autoFocus) return;\n const t = setTimeout(() => inputRef.current?.focus(), 0);\n return () => clearTimeout(t);\n }, [autoFocus]);\n\n const setClauses = useCallback(\n (next: QueryClause[]) => {\n if (controlledClauses === undefined) setInternalClauses(next);\n onClausesChange?.(next);\n },\n [controlledClauses, onClausesChange],\n );\n\n const registeredSlots = useComposerSlots();\n const diagnostics = useMemo(() => diagnoseClauses(clauses), [clauses, registeredSlots]);\n\n const callbacksRef = useRef({ onWqlChange, onValidationChange, onAstChange });\n callbacksRef.current = { onWqlChange, onValidationChange, onAstChange };\n\n useEffect(() => {\n const validation: WqlValidationState = diagnostics.valid\n ? { valid: true }\n : { valid: false, error: diagnostics.error };\n callbacksRef.current.onWqlChange?.(diagnostics.wql);\n callbacksRef.current.onAstChange?.(diagnostics.ast);\n callbacksRef.current.onValidationChange?.(validation);\n }, [diagnostics]);\n\n const stages = useWqlStageCounts(diagnostics.ast, diagnostics.valid, execute, debounceMs);\n\n const offendingClause = diagnostics.offendingClauseId\n ? clauses.find((c) => c.id === diagnostics.offendingClauseId)\n : undefined;\n const offendingLabel = offendingClause ? getClauseMeta(offendingClause.type).label : undefined;\n\n const updateClause = (idx: number, patch: Partial<QueryClause>) => {\n const updated = clauses.map((c, i) => (i === idx ? { ...c, ...patch } : c));\n const edited = clauses[idx];\n if (edited?.type === 'source' && patch.value !== undefined && patch.value !== edited.value) {\n setClauses(pivotClauses(updated, patch.value));\n return;\n }\n setClauses(updated);\n };\n\n const removeClause = (idx: number) => {\n setClauses(clauses.filter((_, i) => i !== idx));\n };\n\n const makeClause = (type: string, value: string): QueryClause => {\n const meta = getClauseMeta(type);\n return {\n id: `c-${Date.now()}-${Math.random()}`,\n type,\n label: meta.label,\n value,\n inputType: meta.inputType,\n placeholder: meta.placeholder,\n };\n };\n\n const pending = useMemo((): { kind: 'query'; clauses: QueryClause[] } | { kind: 'text'; value: string } | { kind: 'invalid'; reason: string } | null => {\n const raw = freeText.trim();\n if (!raw) return null;\n const restored = wqlToClauses(raw);\n if (restored) {\n const parsed = parseQuery(raw);\n if (!('error' in parsed && parsed.error)) return { kind: 'query', clauses: restored };\n return { kind: 'invalid', reason: String(parsed.error) };\n }\n const words = raw.match(/[a-zA-Z0-9_-]+/g);\n if (!words || words.length === 0) {\n return { kind: 'invalid', reason: 'No searchable text — use words, or a full WQL query like find:note{tags:strength}' };\n }\n if (words.length > 1) {\n return { kind: 'text', value: raw };\n }\n return { kind: 'text', value: words[0]! };\n }, [freeText]);\n\n const addClause = (clause: QueryClause) => {\n const type = clause.type;\n const seed =\n type === 'time' ? 'last 2w'\n : type === 'where' ? 'sum:totalVolume{} > 5000'\n : type === 'agg' ? 'sum'\n : type === 'groupby' ? 'week'\n : type === 'rollup' ? '1w'\n : clause.value;\n setClauses([...clauses, { ...clause, value: seed }]);\n };\n\n const addCalc = (clause: QueryClause) => {\n const { type, value } = clause;\n if (type === 'metric') {\n if (clauses.some((c) => c.type === 'metric')) return;\n const afterIdx = Math.max(\n clauses.findIndex((c) => c.type === 'agg'),\n clauses.findIndex((c) => c.type === 'source'),\n );\n const next = [...clauses];\n next.splice(afterIdx + 1, 0, makeClause('metric', value));\n setClauses(next);\n return;\n }\n\n if (type !== 'agg') {\n addClause(clause);\n return;\n }\n const agg = value || 'sum';\n const existingIdx = clauses.findIndex((c) => c.type === 'agg');\n if (existingIdx >= 0) {\n updateClause(existingIdx, { value: agg });\n return;\n }\n if (sourcePlane(clauseValue(clauses, 'source', 'notes')) !== 'metrics') {\n setClauses(pivotClauses(clauses, 'metrics').map((c) => (c.type === 'agg' ? { ...c, value: agg } : c)));\n return;\n }\n const sourceIdx = clauses.findIndex((c) => c.type === 'source');\n const next = [...clauses];\n next.splice(sourceIdx + 1, 0, makeClause('agg', agg));\n setClauses(next);\n };\n\n const handleKeyDown = (e: KeyboardEvent<HTMLInputElement>) => {\n if (e.key !== 'Enter') return;\n if (freeText.trim()) {\n e.preventDefault();\n e.stopPropagation();\n if (pending?.kind === 'query') {\n setClauses(pending.clauses);\n setFreeText('');\n } else if (pending?.kind === 'text') {\n setClauses([...clauses, makeClause('text', pending.value)]);\n setFreeText('');\n }\n return;\n }\n if (onSubmit) {\n e.preventDefault();\n onSubmit(diagnostics.wql);\n }\n };\n\n return (\n <div className=\"space-y-1\">\n <div\n onClick={() => inputRef.current?.focus()}\n className={cn(\n 'flex flex-wrap items-center gap-1.5 min-h-[46px] rounded-xl border border-border bg-muted/20 px-3 py-1.5 text-xs transition-all cursor-text shadow-xs',\n activeSlotIdx !== null && 'border-primary/60 bg-background ring-2 ring-primary/20 shadow-md',\n className,\n )}\n data-testid=\"wql-composer\"\n >\n <Command className=\"size-4 text-amber-500 shrink-0 mr-0.5\" />\n\n {clauses.map((clause, idx) =>\n hiddenTypes.has(clause.type) ? null : (\n <TokenSlotPill\n key={clause.id}\n clause={clause}\n isActive={activeSlotIdx === idx}\n invalid={diagnostics.offendingClauseId === clause.id}\n invalidReason={diagnostics.offendingClauseId === clause.id ? diagnostics.error : undefined}\n onClick={() => setActiveSlotIdx(idx)}\n onChange={(patch) => updateClause(idx, patch)}\n onRemove={() => removeClause(idx)}\n compact\n />\n ),\n )}\n\n <input\n ref={inputRef}\n type=\"text\"\n value={freeText}\n placeholder={placeholder}\n onChange={(e) => setFreeText(e.target.value)}\n onKeyDown={handleKeyDown}\n className=\"flex-1 min-w-[140px] bg-transparent text-xs focus:outline-none placeholder:text-muted-foreground/40 font-mono\"\n data-testid=\"wql-composer-input\"\n />\n\n {customSlots}\n </div>\n\n {pending && (\n <div\n className={cn(\n 'px-1.5 text-[11px] font-mono',\n pending.kind === 'invalid' ? 'text-red-500' : 'text-muted-foreground',\n )}\n data-testid=\"wql-composer-pending\"\n role={pending.kind === 'invalid' ? 'alert' : undefined}\n >\n {pending.kind === 'query' && '↵ Use as query'}\n {pending.kind === 'text' && `↵ Search text: ${pending.value}`}\n {pending.kind === 'invalid' && pending.reason}\n </div>\n )}\n\n {showDiagnostics ? (\n <WqlDiagnosticsStrip\n diagnostics={diagnostics}\n offendingLabel={offendingLabel}\n stages={stages}\n actions={\n <>\n <AddCalcDropdown clauses={clauses} onAdd={addCalc} />\n <AddFilterDropdown clauses={clauses} onAdd={addClause} />\n {diagnosticsActions}\n </>\n }\n />\n ) : (\n <div className=\"flex items-center justify-end gap-1.5 px-1.5\" data-testid=\"wql-add-row\">\n <AddCalcDropdown clauses={clauses} onAdd={addCalc} />\n <AddFilterDropdown clauses={clauses} onAdd={addClause} />\n {diagnosticsActions}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport type {\n CustomSlotDefinition,\n CustomSlotEditorProps,\n} from './ComposerRegistry';\n\nexport interface DateRange {\n start: string;\n end: string;\n}\n\nconst ISO_DATE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nfunction DateRangeEditor({ value, onChange, onClose }: CustomSlotEditorProps<DateRange>) {\n const [start, setStart] = useState(value?.start ?? '');\n const [end, setEnd] = useState(value?.end ?? '');\n const ready = ISO_DATE.test(start) && ISO_DATE.test(end);\n\n return (\n <div className=\"space-y-2 text-xs\" data-testid=\"date-range-editor\">\n <div className=\"grid grid-cols-2 gap-1.5\">\n <div>\n <label className=\"text-[9px] uppercase font-bold text-muted-foreground\">Start</label>\n <input\n type=\"date\"\n value={start}\n onChange={(e) => setStart(e.target.value)}\n className=\"w-full rounded border border-border bg-background px-1.5 py-1 text-xs font-mono\"\n data-testid=\"date-range-start\"\n />\n </div>\n <div>\n <label className=\"text-[9px] uppercase font-bold text-muted-foreground\">End</label>\n <input\n type=\"date\"\n value={end}\n onChange={(e) => setEnd(e.target.value)}\n className=\"w-full rounded border border-border bg-background px-1.5 py-1 text-xs font-mono\"\n data-testid=\"date-range-end\"\n />\n </div>\n </div>\n <div className=\"pt-1 flex items-center justify-between border-t border-border/50\">\n <code className=\"text-[10px] font-mono text-muted-foreground\">\n {ready ? `daterange:${start}_${end}` : 'daterange: <start>_<end>'}\n </code>\n <div className=\"flex gap-1\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-2.5 py-1 rounded border border-border text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n disabled={!ready}\n onClick={() => onChange({ start, end })}\n className=\"px-2.5 py-1 rounded bg-primary text-primary-foreground text-xs font-medium hover:bg-primary/90 transition-colors disabled:opacity-40\"\n data-testid=\"date-range-apply\"\n >\n Set Range\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nexport const dateRangeSlot: CustomSlotDefinition<DateRange> = {\n type: 'date-range',\n label: 'Date Range',\n icon: '📅',\n placeholder: 'Pick a workout date range...',\n placeholderText: 'daterange: [start_end]',\n description: 'Filter workouts to an explicit date range',\n Editor: DateRangeEditor,\n wqlGenerator: (value) => `daterange:${value.start}_${value.end}`,\n formatValue: (value) => `${value.start}_${value.end}`,\n parseValue: (raw) => {\n const [start, end] = raw.split('_');\n return start && end && ISO_DATE.test(start) && ISO_DATE.test(end) ? { start, end } : undefined;\n },\n validate: (value) => (value.end >= value.start ? null : 'Date range end must not precede its start'),\n};\n","import { useState, useEffect, useCallback } from 'react';\nimport { X } from 'lucide-react';\nimport {\n WqlComposer,\n clausesToWql,\n wqlToClauses,\n defaultMetricsClauses,\n type QueryClause,\n type WqlExecutor,\n} from '../composer';\nimport { isFindQuery } from '@bitcobblers/wod-wiki-wql';\nimport type { QueryExecutor } from '../contracts/query';\n\nexport interface WqlQueryInspectorModalProps {\n isOpen: boolean;\n onClose: () => void;\n initialQuery: string;\n onApply: (newQuery: string) => void;\n title?: string;\n subtitle?: string;\n executor?: QueryExecutor;\n}\n\nexport function WqlQueryInspectorModal({\n isOpen,\n onClose,\n initialQuery,\n onApply,\n title = 'Edit Block Query',\n subtitle = 'Use the Omni-Composer to edit this block query.',\n executor,\n}: WqlQueryInspectorModalProps) {\n const [clauses, setClauses] = useState<QueryClause[]>([]);\n const [isValid, setIsValid] = useState<boolean>(true);\n\n useEffect(() => {\n if (isOpen) {\n const restored = wqlToClauses(initialQuery);\n setClauses(restored ?? defaultMetricsClauses());\n }\n }, [isOpen, initialQuery]);\n\n const diagnosticsExecutor = useCallback<WqlExecutor>(\n (ast) => {\n if (executor) {\n return isFindQuery(ast) ? executor.runFind(ast) : executor.runQuery(ast.raw);\n }\n return Promise.resolve({\n parsed: ast,\n series: [],\n stages: { selected: 0, buckets: 0, aggregated: 0, groups: 0 },\n matched: [],\n } as any);\n },\n [executor],\n );\n\n const handleApply = () => {\n if (!isValid) return;\n const nextWql = clausesToWql(clauses);\n onApply(nextWql);\n onClose();\n };\n\n if (!isOpen) return null;\n\n return (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"wql-inspector-title\"\n className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-background/80 backdrop-blur-sm\"\n >\n <div className=\"w-full max-w-2xl bg-card border border-border rounded-xl shadow-2xl overflow-hidden flex flex-col max-h-[90vh]\">\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border/80 bg-muted/20\">\n <div>\n <h2 id=\"wql-inspector-title\" className=\"text-base font-semibold text-foreground\">\n {title}\n </h2>\n <p className=\"text-xs text-muted-foreground\">{subtitle}</p>\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"p-1 rounded-md text-muted-foreground hover:text-foreground hover:bg-muted transition-colors\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n <div className=\"p-6 overflow-y-auto space-y-4\">\n <WqlComposer\n clauses={clauses}\n onClausesChange={setClauses}\n onValidationChange={(v) => setIsValid(v.valid)}\n execute={diagnosticsExecutor}\n showDiagnostics\n />\n </div>\n\n <div className=\"flex items-center justify-between px-6 py-3 border-t border-border/80 bg-muted/10\">\n <div className=\"text-xs text-muted-foreground font-mono\">\n {clausesToWql(clauses)}\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"px-3 py-1.5 text-xs font-medium text-muted-foreground hover:text-foreground rounded-lg border border-border hover:bg-muted transition-colors\"\n >\n Cancel\n </button>\n <button\n type=\"button\"\n onClick={handleApply}\n disabled={!isValid}\n className=\"px-3 py-1.5 text-xs font-medium text-primary-foreground bg-primary hover:bg-primary/90 disabled:opacity-50 disabled:cursor-not-allowed rounded-lg shadow transition-colors\"\n >\n Apply to Block\n </button>\n </div>\n </div>\n </div>\n </div>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { Edit3 } from 'lucide-react';\nimport { type Segment } from '@bitcobblers/wod-wiki-core';\nimport { parseQuery, isFindQuery, isRowsQuery, splitWidgetBody, substituteTokens, isDashboardWidgetType, unknownTokensMessage, unknownWidgetTypeMessage, type QueryResult, type FindQueryResult, type RowsQueryResult, type RowsRun } from '@bitcobblers/wod-wiki-wql';\nimport type { QueryExecutor } from '../contracts/query';\nimport { RowsTable } from '../widgets/RowsTable';\nimport { RowsResultsChrome } from './RowsResultsChrome';\nimport { useChartShape } from '../widgets/useChartShape';\nimport { QueryValue } from '../widgets/QueryValue';\nimport { WqlTimeseries } from '../widgets/WqlTimeseries';\nimport { WqlBars } from '../widgets/WqlBars';\nimport { WqlEmptyState } from '../widgets/WqlEmptyState';\nimport { WidgetChart, WidgetProblemBadge } from '../widgets/WidgetChart';\nimport { extractBlockQueries } from '../utils/blockQueryPatcher';\nimport { WqlQueryInspectorModal } from './WqlQueryInspectorModal';\n\nexport interface QueryBlockViewProps {\n /** Raw text between the ```query fences — the WQL query string or block source. */\n query: string;\n /** Injected QueryExecutor for executing WQL queries (zero singleton coupling). */\n executor?: QueryExecutor;\n /** Optional callback or subscription hook for when a result is saved, replacing hardcoded resultRecorder coupling. */\n onResultSaved?: (callback: () => void) => (() => void) | void;\n /** Present when the query block is editable — opens the WQL composer. */\n onSaveQuery?: (nextQuery: string) => void;\n /** When multiple queries appear in one block, the index of this query. */\n queryIndex?: number;\n /** When true, editing the query is disallowed. */\n readOnly?: boolean;\n /** Fence-suffix widget type override (e.g. `query:chart`, `query:value`). */\n widgetType?: string;\n /** Frontmatter/syntax parse error for the enclosing widget block. */\n widgetError?: string;\n /** Token values from the note's frontmatter, for `$token` substitution. */\n tokenValues?: Record<string, string>;\n /** Optional RPE capture handler. */\n onCaptureRpe?: (resultId: string, rpe: number) => Promise<void>;\n /** Optional custom segment grid renderer. */\n renderSegments?: (segments: Segment[], run: RowsRun) => React.ReactNode;\n}\n\nexport function QueryBlockView({\n query,\n executor,\n onResultSaved,\n onSaveQuery,\n queryIndex: _queryIndex = 0,\n readOnly = false,\n widgetType,\n widgetError,\n tokenValues,\n onCaptureRpe,\n renderSegments,\n}: QueryBlockViewProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const extracted = useMemo(() => extractBlockQueries(query), [query]);\n const { query: effectiveQuery, params: effectiveParams, missing } = useMemo(() => {\n const raw = extracted.length > 0 ? extracted[0].query : query;\n const { query: body, params: rawParams } = splitWidgetBody(raw);\n const subQuery = substituteTokens(body, tokenValues ?? {});\n const paramSubs = rawParams.map((p) => substituteTokens(p, tokenValues ?? {}));\n const missing = [...new Set([...subQuery.missing, ...paramSubs.flatMap((s) => s.missing)])];\n return { query: subQuery.query, params: paramSubs.map((s) => s.query), missing };\n }, [extracted, query, tokenValues]);\n\n const parsed = useMemo(() => parseQuery(effectiveQuery), [effectiveQuery]);\n const unknownType =\n widgetType != null && widgetType !== '' && !isDashboardWidgetType(widgetType);\n const [result, setResult] = useState<QueryResult | undefined>(undefined);\n const [findResult, setFindResult] = useState<FindQueryResult | undefined>(undefined);\n const [rowsResult, setRowsResult] = useState<RowsQueryResult | undefined>(undefined);\n const [runError, setRunError] = useState<string | undefined>(undefined);\n const [rowsRefreshKey, setRowsRefreshKey] = useState(0);\n\n useEffect(() => {\n if (onResultSaved) {\n const unsub = onResultSaved(() => {\n setRowsRefreshKey((k) => k + 1);\n });\n return () => {\n if (typeof unsub === 'function') unsub();\n };\n }\n }, [onResultSaved]);\n\n useEffect(() => {\n let cancelled = false;\n setRunError(undefined);\n setResult(undefined);\n setFindResult(undefined);\n setRowsResult(undefined);\n\n if (parsed.error) return;\n if (widgetError || unknownType || missing.length > 0) return;\n if (!executor) return;\n\n if (isFindQuery(parsed)) {\n void executor\n .runFind(parsed)\n .then((res) => {\n if (!cancelled) setFindResult(res);\n })\n .catch((err) => {\n if (!cancelled) setRunError(err instanceof Error ? err.message : String(err));\n });\n } else if (isRowsQuery(parsed)) {\n let retryTimer: number | NodeJS.Timeout | undefined;\n const executeRows = (attemptCount: number) => {\n void executor\n .runRows(parsed)\n .then((res) => {\n if (cancelled) return;\n setRowsResult(res);\n if (res.runs.length === 0 && attemptCount < 4) {\n const delays = [50, 150, 350, 750];\n retryTimer = setTimeout(() => {\n if (!cancelled) executeRows(attemptCount + 1);\n }, delays[attemptCount] ?? 500);\n }\n })\n .catch((err) => {\n if (!cancelled) setRunError(err instanceof Error ? err.message : String(err));\n });\n };\n executeRows(0);\n return () => {\n cancelled = true;\n if (retryTimer) clearTimeout(retryTimer);\n };\n } else {\n void executor\n .runQuery(effectiveQuery)\n .then((res) => {\n if (!cancelled) setResult(res);\n })\n .catch((err) => {\n if (!cancelled) setRunError(err instanceof Error ? err.message : String(err));\n });\n }\n\n return () => {\n cancelled = true;\n };\n }, [effectiveQuery, parsed, widgetError, unknownType, missing, executor, rowsRefreshKey]);\n\n const canEdit = onSaveQuery !== undefined && !readOnly;\n const onEdit = canEdit ? () => setIsModalOpen(true) : undefined;\n\n const resultId = useMemo(() => {\n if (!isRowsQuery(parsed)) return undefined;\n const resultFilter = parsed.filters.find((f) => f.key === 'result');\n return resultFilter?.values[0]?.value;\n }, [parsed]);\n\n return (\n <div data-testid=\"query-block-view\">\n {widgetError ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <div className=\"text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded p-2\">\n {widgetError}\n </div>\n </QueryBlockShell>\n ) : unknownType ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <WidgetProblemBadge message={unknownWidgetTypeMessage(widgetType)} />\n </QueryBlockShell>\n ) : missing.length > 0 ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <WidgetProblemBadge message={unknownTokensMessage(missing)} />\n </QueryBlockShell>\n ) : parsed.error ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <div className=\"text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded p-2\">\n Query syntax error: {parsed.error}\n </div>\n </QueryBlockShell>\n ) : runError ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <div className=\"text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded p-2\">\n Query execution error: {runError}\n </div>\n </QueryBlockShell>\n ) : isRowsQuery(parsed) ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n {rowsResult?.error ? (\n <div className=\"text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded p-2\">\n {rowsResult.error}\n </div>\n ) : resultId && rowsResult && rowsResult.runs.length > 0 ? (\n <RowsResultsChrome\n resultId={resultId}\n sessionResult={rowsResult}\n executor={executor}\n onCaptureRpe={onCaptureRpe}\n onCaptured={() => setRowsRefreshKey((k) => k + 1)}\n renderSegments={renderSegments}\n />\n ) : rowsResult ? (\n <RowsTable result={rowsResult} renderSegments={renderSegments} />\n ) : (\n <div className=\"text-xs text-muted-foreground py-2\">Loading rows…</div>\n )}\n </QueryBlockShell>\n ) : isFindQuery(parsed) ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <FindResultList parsed={parsed} result={findResult} />\n </QueryBlockShell>\n ) : (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <AnalyticsChart\n result={result}\n metric={parsed.metric}\n widgetType={widgetType}\n params={effectiveParams}\n />\n </QueryBlockShell>\n )}\n\n {canEdit && (\n <WqlQueryInspectorModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n initialQuery={effectiveQuery}\n executor={executor}\n onApply={(nextQuery) => {\n onSaveQuery(nextQuery);\n }}\n />\n )}\n </div>\n );\n}\n\nfunction AnalyticsChart({\n result,\n metric,\n widgetType,\n params,\n}: {\n result: QueryResult | undefined;\n metric: string;\n widgetType?: string;\n params?: string[];\n}) {\n const shape = useChartShape(result);\n\n if (widgetType != null && widgetType !== '') {\n return <WidgetChart type={widgetType} result={result} label={metric} params={params} />;\n }\n\n if (shape.kind === 'scalar') {\n return <QueryValue result={result!} label={metric} />;\n }\n if (shape.kind === 'timeseries') {\n return <WqlTimeseries result={result!} />;\n }\n if (shape.kind === 'bars') {\n return <WqlBars result={result!} />;\n }\n return <WqlEmptyState result={result} />;\n}\n\nfunction FindResultList({ parsed, result }: { parsed: FindQueryResult['parsed']; result: FindQueryResult | undefined }) {\n if (!result) {\n return <div className=\"text-xs text-muted-foreground py-2\">Loading…</div>;\n }\n const isBlock = parsed.target === 'block';\n const items = isBlock ? result.blocks : result.notes;\n\n if (items.length === 0) {\n return (\n <div className=\"text-xs text-muted-foreground py-2\">\n No {parsed.target}s matched this query.\n </div>\n );\n }\n\n return (\n <div className=\"space-y-1\">\n <div className=\"text-[11px] font-medium text-muted-foreground mb-1\">\n {items.length} {parsed.target}{items.length === 1 ? '' : 's'} matched\n </div>\n <ul className=\"space-y-0.5 max-h-48 overflow-y-auto font-mono text-xs\">\n {items.map((item) => (\n <li key={item.id} className=\"py-0.5 px-1.5 rounded hover:bg-muted/50 truncate\">\n {isBlock ? (item as any).title || (item as any).blockContentId || item.id : (item as any).title || item.id}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nfunction QueryBlockShell({\n children,\n onEdit,\n readOnly,\n}: {\n children: React.ReactNode;\n onEdit?: () => void;\n readOnly?: boolean;\n}) {\n return (\n <div className=\"relative group/block my-2 p-3 rounded-lg border border-border/80 bg-card/60 shadow-sm\">\n {onEdit && !readOnly && (\n <button\n type=\"button\"\n onClick={onEdit}\n title=\"Edit query in Omni-Composer\"\n className=\"absolute top-2 right-2 p-1 rounded bg-muted/80 text-muted-foreground hover:text-foreground opacity-0 group-hover/block:opacity-100 transition-opacity z-10\"\n >\n <Edit3 className=\"w-3.5 h-3.5\" />\n </button>\n )}\n {children}\n </div>\n );\n}\n","import { Decoration, WidgetType, EditorView } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, RangeSetBuilder, EditorState } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport React from \"react\";\n// @ts-ignore\nimport { createRoot } from \"react-dom/client\";\nimport { sectionField, type EditorSection } from \"./section-state\";\nimport { QueryBlockView } from \"../blocks/QueryBlockView\";\nimport type { QueryExecutor } from \"../contracts/query\";\nimport { patchBlockQuery } from \"../utils/blockQueryPatcher\";\n\ntype Root = { render: (c: React.ReactNode) => void; unmount: () => void };\n\nexport interface QueryBlockPreviewOptions {\n executor?: QueryExecutor;\n onResultSaved?: (callback: () => void) => (() => void) | void;\n readOnly?: boolean;\n onSaveQuery?: (sectionId: string, nextQuery: string) => void;\n}\n\nclass ReactQueryBlock extends WidgetType {\n private root: Root | null = null;\n\n constructor(\n readonly queryText: string,\n readonly sectionId: string,\n readonly widgetType?: string,\n readonly widgetError?: string,\n readonly options?: QueryBlockPreviewOptions,\n ) {\n super();\n }\n\n eq(other: ReactQueryBlock): boolean {\n return (\n this.queryText === other.queryText &&\n this.sectionId === other.sectionId &&\n this.widgetType === other.widgetType &&\n this.widgetError === other.widgetError &&\n this.options?.executor === other.options?.executor\n );\n }\n\n toDOM(view: EditorView): HTMLElement {\n const container = document.createElement(\"div\");\n container.className = \"cm-query-block-preview my-2\";\n const root = createRoot(container) as Root;\n this.root = root;\n\n const handleSaveQuery = (nextQuery: string) => {\n if (this.options?.onSaveQuery) {\n this.options.onSaveQuery(this.sectionId, nextQuery);\n } else {\n saveBlockQuerySource(view, this.sectionId, nextQuery);\n }\n };\n\n root.render(\n <QueryBlockView\n query={this.queryText}\n widgetType={this.widgetType}\n widgetError={this.widgetError}\n readOnly={this.options?.readOnly}\n executor={this.options?.executor}\n onResultSaved={this.options?.onResultSaved}\n onSaveQuery={handleSaveQuery}\n />,\n );\n\n return container;\n }\n\n updateDOM(_dom: HTMLElement, view: EditorView): boolean {\n if (!this.root) return false;\n const handleSaveQuery = (nextQuery: string) => {\n if (this.options?.onSaveQuery) {\n this.options.onSaveQuery(this.sectionId, nextQuery);\n } else {\n saveBlockQuerySource(view, this.sectionId, nextQuery);\n }\n };\n this.root.render(\n <QueryBlockView\n query={this.queryText}\n widgetType={this.widgetType}\n widgetError={this.widgetError}\n readOnly={this.options?.readOnly}\n executor={this.options?.executor}\n onResultSaved={this.options?.onResultSaved}\n onSaveQuery={handleSaveQuery}\n />,\n );\n return true;\n }\n\n destroy(): void {\n if (this.root) {\n setTimeout(() => {\n try {\n this.root?.unmount();\n } catch {\n // unmount\n }\n }, 0);\n }\n }\n\n get block(): boolean {\n return true;\n }\n}\n\nfunction buildQueryBlockDecos(state: EditorState, options?: QueryBlockPreviewOptions): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n\n for (const section of sections) {\n if (section.type !== \"query\") continue;\n\n // Show raw markdown if cursor is within the block\n if (cursor >= section.from && cursor <= section.to) continue;\n\n if (section.contentFrom === undefined || section.contentTo === undefined) continue;\n const rawContent = state.doc.sliceString(section.contentFrom, section.contentTo);\n\n builder.add(\n section.from,\n section.to,\n Decoration.replace({\n widget: new ReactQueryBlock(\n rawContent,\n section.id,\n section.queryType,\n section.queryError,\n options,\n ),\n block: true,\n }),\n );\n }\n\n return builder.finish();\n}\n\nexport function saveBlockQuerySource(\n view: EditorView,\n sectionId: string,\n newQuery: string,\n queryIndex = 0,\n): { ok: boolean; patchedContent?: string; message?: string } {\n const section = findQueryBlockSection(view, sectionId);\n if (!section || section.contentFrom === undefined || section.contentTo === undefined) {\n return { ok: false, message: \"Query block section not found\" };\n }\n\n const currentContent = view.state.doc.sliceString(section.contentFrom, section.contentTo);\n const patchedContent = patchBlockQuery(currentContent, newQuery, queryIndex);\n\n view.dispatch({\n changes: {\n from: section.contentFrom,\n to: section.contentTo,\n insert: patchedContent,\n },\n });\n\n return { ok: true, patchedContent };\n}\n\nexport function findQueryBlockSection(view: EditorView, sectionId: string): EditorSection | null {\n const { sections } = view.state.field(sectionField);\n return sections.find((s) => s.id === sectionId) ?? null;\n}\n\nexport function queryBlockPreview(options?: QueryBlockPreviewOptions): Extension {\n const decoField = StateField.define<DecorationSet>({\n create(state) {\n return buildQueryBlockDecos(state, options);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\n return buildQueryBlockDecos(tr.state, options);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n });\n\n return [decoField];\n}\n","/**\n * Widget Block Preview\n *\n * CM6 extension that replaces ```widget:<name> ... ``` fenced blocks with a\n * full-width React component mounted via a React portal/root. The entire fenced\n * block (including fence lines) is replaced by a non-editable block decoration.\n *\n * Usage in markdown:\n * ```widget:my-widget\n * {\"key\":\"value\"}\n * ```\n *\n * The widget component receives:\n * - config: parsed JSON from the block body (or {} on parse error)\n * - rawContent: raw string between the fences\n * - sectionId: stable section identifier\n *\n * Ported from src/components/Editor/extensions/widget-block-preview.tsx during\n * the @bitcobblers/wod-wiki-ui extraction (#968/#970). The edit affordances (pencil →\n * textarea → Ctrl+Enter save / Escape undo, invalid-JSON error inlay) are part\n * of the public e2e contract (data-widget-section-id, widget-preview-surface,\n * widget-error-inlay, widget-markdown-editor) and must survive the move.\n */\n\nimport {\n Decoration,\n EditorView,\n WidgetType,\n keymap,\n} from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport {\n Extension,\n StateField,\n Range,\n EditorState,\n Prec,\n StateEffect,\n} from \"@codemirror/state\";\nimport type { Line } from \"@codemirror/state\";\nimport { createRoot } from \"react-dom/client\";\nimport * as React from \"react\";\nimport { ArrowUturnLeftIcon, CheckIcon, PencilSquareIcon } from \"@heroicons/react/20/solid\";\n\nimport { cn } from \"../utils/cn\";\nimport { sectionField } from \"./section-state\";\nimport type { EditorSection } from \"./section-state\";\n\n/** Minimal react-dom root surface used by the widget DOM bridge. */\ntype Root = { render: (c: React.ReactNode) => void; unmount: () => void };\n\n// ── Widget authoring contract (mirrors src/components/Editor/widgets/types) ──\n\n/** Parsed JSON object passed into a widget component. */\nexport type WidgetConfig = Record<string, unknown>;\n\n/** Props passed to every registered widget component. */\nexport interface WidgetProps {\n /** Parsed JSON object from the fenced widget body. */\n config: WidgetConfig;\n /** Exact source text between the opening and closing fences. */\n rawContent: string;\n /** Stable section identifier generated by section-state.ts. */\n sectionId: string;\n}\n\n/** Registry of widget names to React components. */\nexport type WidgetRegistry = Map<string, React.ComponentType<WidgetProps>>;\n\n// ── Local atoms (ported from src/components/atoms — ui-package-local copies\n// because the package cannot import the @/ alias) ────────────────────────\n\nexport type WidgetEditButtonMode = \"view\" | \"editing\" | \"error\";\n\nconst WIDGET_EDIT_BUTTON_LABELS: Record<WidgetEditButtonMode, string> = {\n view: \"Edit widget\",\n editing: \"Save widget\",\n error: \"Undo changes\",\n};\n\nfunction getModeClickHandler(\n mode: WidgetEditButtonMode,\n enterEditMode: () => void,\n onSave: () => void,\n onUndo: () => void,\n): () => void {\n if (mode === \"editing\") return onSave;\n if (mode === \"error\") return onUndo;\n return enterEditMode;\n}\n\nfunction iconVisibilityClass(isVisible: boolean): string {\n return isVisible\n ? \"opacity-100 scale-100 rotate-0\"\n : \"pointer-events-none opacity-0 scale-75 -rotate-12\";\n}\n\nconst WidgetEditButton = React.forwardRef<\n HTMLButtonElement,\n Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, \"onClick\" | \"title\" | \"children\"> & {\n mode: WidgetEditButtonMode;\n enterEditMode: () => void;\n onSave: () => void;\n onUndo: () => void;\n }\n>(({ mode, enterEditMode, onSave, onUndo, className, type = \"button\", ...props }, ref) => {\n const label = WIDGET_EDIT_BUTTON_LABELS[mode];\n const onClick = getModeClickHandler(mode, enterEditMode, onSave, onUndo);\n\n return (\n <button\n {...props}\n ref={ref}\n type={type}\n aria-label={label}\n title={label}\n data-mode={mode}\n onClick={onClick}\n className={cn(\n \"absolute right-2 top-2 inline-flex h-8 w-8 items-center justify-center rounded-full border border-border/80 bg-background/90 shadow-sm backdrop-blur-sm transition-all duration-200 ease-out hover:bg-muted/80 hover:shadow-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 cursor-pointer\",\n mode === \"view\" && \"text-muted-foreground hover:text-foreground\",\n mode === \"editing\" && \"text-emerald-600 hover:text-emerald-700 dark:text-emerald-400 dark:hover:text-emerald-300\",\n mode === \"error\" && \"text-amber-600 hover:text-amber-700 dark:text-amber-400 dark:hover:text-amber-300\",\n className,\n )}\n >\n <span className=\"relative h-4 w-4\" aria-hidden=\"true\">\n <PencilSquareIcon\n data-icon-state=\"view\"\n className={cn(\n \"absolute inset-0 h-4 w-4 transition-all duration-200 ease-out\",\n iconVisibilityClass(mode === \"view\"),\n )}\n />\n <CheckIcon\n data-icon-state=\"editing\"\n className={cn(\n \"absolute inset-0 h-4 w-4 transition-all duration-200 ease-out\",\n iconVisibilityClass(mode === \"editing\"),\n )}\n />\n <ArrowUturnLeftIcon\n data-icon-state=\"error\"\n className={cn(\n \"absolute inset-0 h-4 w-4 transition-all duration-200 ease-out\",\n iconVisibilityClass(mode === \"error\"),\n )}\n />\n </span>\n </button>\n );\n});\n\nWidgetEditButton.displayName = \"WidgetEditButton\";\n\nconst EditableMarkdown = React.forwardRef<\n HTMLTextAreaElement,\n Omit<React.TextareaHTMLAttributes<HTMLTextAreaElement>, \"children\"> & { hasError?: boolean }\n>(({ className, hasError = false, spellCheck = false, ...props }, ref) => {\n return (\n <textarea\n {...props}\n ref={ref}\n spellCheck={spellCheck}\n className={cn(\n \"min-h-[160px] w-full rounded-xl border bg-background px-4 py-3 font-mono text-sm leading-6 text-foreground shadow-sm outline-none transition-colors duration-200 ease-out placeholder:text-muted-foreground/70\",\n \"focus:border-ring focus:ring-2 focus:ring-ring/20\",\n hasError\n ? \"border-destructive/70 focus:border-destructive focus:ring-destructive/20\"\n : \"border-border/70\",\n className,\n )}\n />\n );\n});\n\nEditableMarkdown.displayName = \"EditableMarkdown\";\n\n// ── Edit-mode state ─────────────────────────────────────────────────\n\n/** Effect to toggle edit mode for a specific widget block */\nexport const toggleWidgetEdit = StateEffect.define<{ sectionId: string; editing: boolean }>();\n\n/** StateField to track which widgets are currently being edited as raw text */\nexport const editingWidgetsField = StateField.define<Set<string>>({\n create: () => new Set(),\n update(value, tr) {\n let next = value;\n for (const effect of tr.effects) {\n if (effect.is(toggleWidgetEdit)) {\n next = new Set(next);\n if (effect.value.editing) next.add(effect.value.sectionId);\n else next.delete(effect.value.sectionId);\n }\n }\n return next;\n },\n});\n\ninterface WidgetConfigParseFailure {\n ok: false;\n config: {};\n message: string;\n}\n\ninterface WidgetConfigParseSuccess {\n ok: true;\n config: WidgetConfig;\n}\n\ntype WidgetConfigParseResult = WidgetConfigParseSuccess | WidgetConfigParseFailure;\n\nexport interface WidgetEditState {\n isEditing: boolean;\n isDirty: boolean;\n error: string | null;\n originalMarkdown: string;\n currentMarkdown: string;\n hasFocus: boolean;\n}\n\ninterface WidgetBlockPreviewWrapperProps {\n widgetName: string;\n rawContent: string;\n sectionId: string;\n registry: WidgetRegistry;\n view: EditorView;\n}\n\nfunction stripEditorTrailingNewline(rawContent: string): string {\n return rawContent.endsWith(\"\\n\") ? rawContent.slice(0, -1) : rawContent;\n}\n\nfunction normalizeWidgetMarkdown(markdown: string): string {\n const content = markdown.replace(/\\n+$/, \"\");\n return `${content}\\n`;\n}\n\nfunction parseWidgetConfig(rawContent: string): WidgetConfigParseResult {\n const source = rawContent.trim();\n\n if (source.length === 0) {\n return { ok: true, config: {} };\n }\n\n try {\n const parsed = JSON.parse(source);\n if (!parsed || Array.isArray(parsed) || typeof parsed !== \"object\") {\n return {\n ok: false,\n config: {},\n message: \"Widget config must be a JSON object.\",\n };\n }\n\n return { ok: true, config: parsed as WidgetConfig };\n } catch (error) {\n return {\n ok: false,\n config: {},\n message: error instanceof Error ? error.message : \"Invalid JSON.\",\n };\n }\n}\n\nfunction findWidgetSection(view: EditorView, sectionId: string): EditorSection | null {\n const { sections } = view.state.field(sectionField);\n return sections.find((section) => section.type === \"widget\" && section.id === sectionId) ?? null;\n}\n\nfunction saveWidgetSource(view: EditorView, sectionId: string, markdown: string): WidgetConfigParseResult | null {\n const parsed = parseWidgetConfig(markdown);\n if (!parsed.ok) {\n return parsed;\n }\n\n const section = findWidgetSection(view, sectionId);\n if (!section || section.contentFrom == null || section.contentTo == null) {\n return {\n ok: false,\n config: {},\n message: \"Unable to locate widget source in the editor.\",\n };\n }\n\n view.dispatch({\n changes: {\n from: section.contentFrom,\n to: section.contentTo,\n insert: normalizeWidgetMarkdown(markdown),\n },\n });\n\n return parsed;\n}\n\nfunction renderMissingWidget(widgetName: string): React.ReactNode {\n return (\n <div className=\"rounded-xl border border-dashed border-border/70 bg-muted/30 px-4 py-5 text-sm text-muted-foreground\">\n <span className=\"font-mono\">widget:{widgetName}</span>\n <span className=\"ml-2 opacity-70\">is not registered</span>\n </div>\n );\n}\n\nfunction renderInvalidWidget(widgetName: string, message: string): React.ReactNode {\n return (\n <div className=\"rounded-xl border border-destructive/30 bg-destructive/5 px-4 py-5 text-sm text-destructive shadow-sm\">\n <p className=\"font-medium\">Widget config error</p>\n <p className=\"mt-1 font-mono text-xs leading-5 text-destructive/90\">widget:{widgetName}</p>\n <p className=\"mt-2 font-mono text-xs leading-5 text-destructive/90\">{message}</p>\n </div>\n );\n}\n\nfunction WidgetBlockPreviewWrapper({\n widgetName,\n rawContent,\n sectionId,\n registry,\n view,\n}: WidgetBlockPreviewWrapperProps): React.ReactElement {\n const containerRef = React.useRef<HTMLDivElement | null>(null);\n const textareaRef = React.useRef<HTMLTextAreaElement | null>(null);\n const previewSurfaceRef = React.useRef<HTMLDivElement | null>(null);\n const originalMarkdown = React.useMemo(() => stripEditorTrailingNewline(rawContent), [rawContent]);\n const [state, setState] = React.useState<WidgetEditState>(() => ({\n isEditing: false,\n isDirty: false,\n error: null,\n originalMarkdown,\n currentMarkdown: originalMarkdown,\n hasFocus: false,\n }));\n\n React.useEffect(() => {\n setState((prev) => ({\n ...prev,\n isEditing: false,\n isDirty: false,\n error: null,\n originalMarkdown,\n currentMarkdown: originalMarkdown,\n }));\n }, [originalMarkdown]);\n\n React.useEffect(() => {\n if (!state.isEditing) return;\n const frame = window.requestAnimationFrame(() => {\n textareaRef.current?.focus();\n const length = textareaRef.current?.value.length ?? 0;\n textareaRef.current?.setSelectionRange(length, length);\n });\n\n return () => window.cancelAnimationFrame(frame);\n }, [state.isEditing]);\n\n const previewComponent = registry.get(widgetName);\n const previewParse = React.useMemo(() => parseWidgetConfig(state.originalMarkdown), [state.originalMarkdown]);\n\n const setFocus = React.useCallback((focused: boolean) => {\n setState((prev) => (prev.hasFocus === focused ? prev : { ...prev, hasFocus: focused }));\n }, []);\n\n // Enter edit mode via React state — no CM6 dispatch needed.\n const enterEditMode = React.useCallback(() => {\n setState((prev) => ({\n ...prev,\n isEditing: true,\n isDirty: false,\n error: null,\n currentMarkdown: prev.originalMarkdown,\n }));\n }, []);\n\n // Perform a CM6 save and return success/failure.\n const performSave = React.useCallback((markdown: string): boolean => {\n const result = saveWidgetSource(view, sectionId, markdown);\n if (!result?.ok) {\n setState((prev) => ({ ...prev, error: result?.message ?? \"Invalid JSON.\" }));\n return false;\n }\n const saved = stripEditorTrailingNewline(normalizeWidgetMarkdown(markdown));\n setState({ isEditing: false, isDirty: false, error: null,\n originalMarkdown: saved, currentMarkdown: saved, hasFocus: false });\n return true;\n }, [view, sectionId]);\n\n // Save button / Ctrl+Enter — read from DOM to avoid stale closure after onChange.\n const onSave = React.useCallback(() => {\n performSave(textareaRef.current?.value ?? state.currentMarkdown);\n }, [performSave, state.currentMarkdown]);\n\n // Undo button / Escape — discard changes and return to preview.\n const onUndo = React.useCallback(() => {\n setState((prev) => ({\n ...prev,\n isEditing: false,\n isDirty: false,\n error: null,\n currentMarkdown: prev.originalMarkdown,\n }));\n }, []);\n\n const handleMarkdownChange = React.useCallback((event: React.ChangeEvent<HTMLTextAreaElement>) => {\n const nextMarkdown = event.target.value;\n setState((prev) => {\n const nextValidation = prev.error ? parseWidgetConfig(nextMarkdown) : null;\n return {\n ...prev,\n currentMarkdown: nextMarkdown,\n isDirty: nextMarkdown !== prev.originalMarkdown,\n error: nextValidation?.ok === false ? nextValidation.message : nextValidation?.ok ? null : prev.error,\n };\n });\n }, []);\n\n // Textarea blur: read value directly from DOM to avoid stale-closure issues\n // when blur fires before React has flushed the preceding onChange state update.\n const handleTextareaBlur = React.useCallback(() => {\n setFocus(false);\n const currentValue = textareaRef.current?.value;\n if (currentValue === undefined) return; // textarea not mounted — not in edit mode\n const result = saveWidgetSource(view, sectionId, currentValue);\n if (!result?.ok) {\n setState((prev) => ({\n ...prev,\n isDirty: currentValue !== prev.originalMarkdown,\n error: result?.message ?? \"Unable to save widget source.\",\n }));\n return;\n }\n const saved = stripEditorTrailingNewline(normalizeWidgetMarkdown(currentValue));\n setState({ isEditing: false, isDirty: false, error: null,\n originalMarkdown: saved, currentMarkdown: saved, hasFocus: false });\n }, [sectionId, view, setFocus]);\n\n // Container blur: only manages focus state; actual saving is done by handleTextareaBlur.\n const handleBlurCapture = React.useCallback((event: React.FocusEvent<HTMLDivElement>) => {\n const relatedTarget = event.relatedTarget;\n if (relatedTarget instanceof Node && containerRef.current?.contains(relatedTarget)) {\n return;\n }\n setFocus(false);\n }, [setFocus]);\n\n const handlePreviewKeyDown = React.useCallback((event: KeyboardEvent | React.KeyboardEvent) => {\n if (event.key === \"Enter\" && !state.isEditing) {\n event.preventDefault();\n enterEditMode();\n }\n }, [enterEditMode, state.isEditing]);\n\n React.useEffect(() => {\n const el = previewSurfaceRef.current;\n if (!el) return;\n el.addEventListener(\"keydown\", handlePreviewKeyDown as EventListener);\n return () => el.removeEventListener(\"keydown\", handlePreviewKeyDown as EventListener);\n }, [handlePreviewKeyDown]);\n\n const handleTextareaKeyDown = React.useCallback((event: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onUndo();\n } else if (event.key === \"Enter\" && (event.ctrlKey || event.metaKey)) {\n event.preventDefault();\n onSave();\n }\n }, [onSave, onUndo]);\n\n const buttonMode = state.error ? \"error\" : state.isEditing ? \"editing\" : \"view\";\n const iconVisible = state.hasFocus || state.isEditing || state.error !== null;\n\n let previewNode: React.ReactNode;\n if (!previewComponent) {\n previewNode = renderMissingWidget(widgetName);\n } else if (!previewParse.ok) {\n previewNode = renderInvalidWidget(widgetName, previewParse.message);\n } else {\n previewNode = React.createElement(previewComponent, {\n config: previewParse.config,\n rawContent: state.originalMarkdown,\n sectionId,\n });\n }\n\n return (\n <div\n ref={containerRef}\n data-widget-section-id={sectionId}\n data-widget-mode={buttonMode}\n className={cn(\n \"group relative rounded-2xl border border-transparent bg-background/95 p-3 transition-colors duration-200 ease-out hover:border-border\",\n state.isEditing && state.error === null && \"border-emerald-500/40 ring-1 ring-emerald-500/15\",\n state.error !== null && \"border-destructive/40 ring-1 ring-destructive/15\",\n )}\n onMouseDownCapture={(event) => {\n if (!state.isEditing) {\n event.preventDefault();\n }\n }}\n onFocusCapture={() => setFocus(true)}\n onBlurCapture={handleBlurCapture}\n onKeyDownCapture={handlePreviewKeyDown as React.KeyboardEventHandler<HTMLDivElement>}\n >\n <WidgetEditButton\n mode={buttonMode}\n enterEditMode={enterEditMode}\n onSave={onSave}\n onUndo={onUndo}\n className={cn(\n \"z-10 focus-visible:opacity-100 focus-visible:scale-100 group-focus-within:pointer-events-auto group-focus-within:opacity-100 group-focus-within:scale-100\",\n iconVisible\n ? \"pointer-events-auto opacity-100 scale-100\"\n : \"pointer-events-none opacity-0 scale-95 group-hover:pointer-events-auto group-hover:opacity-100 group-hover:scale-100\",\n )}\n />\n\n {state.isEditing ? (\n <div className=\"flex flex-col gap-2\">\n {state.error !== null && (\n <div\n data-testid=\"widget-error-inlay\"\n className=\"rounded-lg border border-destructive/30 bg-destructive/5 px-3 py-2 text-xs text-destructive\"\n >\n Invalid JSON: {state.error}\n </div>\n )}\n <EditableMarkdown\n ref={textareaRef}\n data-testid=\"widget-markdown-editor\"\n value={state.currentMarkdown}\n onChange={handleMarkdownChange}\n onBlur={handleTextareaBlur}\n onKeyDown={handleTextareaKeyDown}\n hasError={state.error !== null}\n />\n </div>\n ) : (\n <div\n ref={previewSurfaceRef}\n data-testid=\"widget-preview-surface\"\n tabIndex={0}\n onKeyDown={handlePreviewKeyDown as React.KeyboardEventHandler<HTMLDivElement>}\n >\n {previewNode}\n </div>\n )}\n </div>\n );\n}\n\n/** Small widget that only renders the Save/Undo buttons while a widget is in raw edit mode */\nclass FloatingEditControls extends WidgetType {\n constructor(\n readonly sectionId: string,\n ) {\n super();\n }\n\n eq(other: FloatingEditControls): boolean {\n return this.sectionId === other.sectionId;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"relative h-0 w-full\"; // Zero height, button absolute right\n\n const root = createRoot(wrapper);\n root.render(\n <div className=\"absolute right-0 top-1 z-50\">\n <WidgetEditButton\n mode=\"editing\"\n enterEditMode={() => {}}\n onSave={() => {\n view.dispatch({\n effects: toggleWidgetEdit.of({ sectionId: this.sectionId, editing: false }),\n });\n }}\n onUndo={() => {\n view.dispatch({\n effects: toggleWidgetEdit.of({ sectionId: this.sectionId, editing: false }),\n });\n }}\n />\n </div>\n );\n\n return wrapper;\n }\n\n ignoreEvent(): boolean {\n return false;\n }\n}\n\n// ── React widget DOM bridge ──────────────────────────────────────────\n\nclass ReactWidgetBlock extends WidgetType {\n private root: Root | null = null;\n\n constructor(\n readonly widgetName: string,\n readonly rawContent: string,\n readonly sectionId: string,\n readonly registry: WidgetRegistry,\n ) {\n super();\n }\n\n eq(other: ReactWidgetBlock): boolean {\n return (\n this.widgetName === other.widgetName &&\n this.rawContent === other.rawContent &&\n this.sectionId === other.sectionId\n );\n }\n\n toDOM(view: EditorView): HTMLElement {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"cm-widget-block-preview\";\n wrapper.style.cssText =\n \"display:block; width:100%; min-height:1.5em; outline:none;\";\n\n this.root = createRoot(wrapper);\n this.root.render(\n React.createElement(WidgetBlockPreviewWrapper, {\n widgetName: this.widgetName,\n rawContent: this.rawContent,\n sectionId: this.sectionId,\n registry: this.registry,\n view,\n }),\n );\n\n return wrapper;\n }\n\n destroy(): void {\n if (this.root) {\n const r = this.root;\n this.root = null;\n\n const isTestEnv = typeof process !== \"undefined\" && process.env?.NODE_ENV === \"test\";\n if (isTestEnv) {\n // Unmount synchronously in tests so pending unmounts don't bleed into subsequent\n // tests (deferred approach causes race conditions in bun:test).\n r.unmount();\n } else {\n queueMicrotask(() => {\n try {\n r.unmount();\n } catch {\n // Ignore errors if already unmounted or cleaned up\n }\n });\n }\n }\n }\n\n /** Allow pointer events inside the widget. */\n ignoreEvent(): boolean {\n return false;\n }\n\n get estimatedHeight(): number {\n return 200;\n }\n}\n\n// ── Decoration builder ───────────────────────────────────────────────\n\nfunction buildWidgetDecos(state: EditorState, registry: WidgetRegistry): DecorationSet {\n let sectionState;\n try {\n sectionState = state.field(sectionField);\n } catch (e) {\n console.warn(\"[widget-block-preview] sectionField not found in state\", e);\n return Decoration.none;\n }\n const { sections } = sectionState;\n const editingIds = state.field(editingWidgetsField);\n const decos: Range<Decoration>[] = [];\n const cursorHead = state.selection.main.head;\n\n for (const section of sections) {\n if (section.type !== \"widget\" || !section.widgetName) continue;\n\n const doc = state.doc;\n if (section.startLine > doc.lines || section.endLine > doc.lines) continue;\n\n const isEditing = editingIds.has(section.id);\n\n // If editing, don't replace the block — just add a floating save button\n if (isEditing) {\n decos.push(\n Decoration.widget({\n widget: new FloatingEditControls(section.id),\n side: 1,\n block: false,\n }).range(section.from),\n );\n continue;\n }\n\n // Skip replace decoration when cursor is inside widget range (reveals source)\n if (cursorHead >= section.from && cursorHead <= section.to) continue;\n\n // Extract raw content between the fences\n const rawContent =\n section.contentFrom != null && section.contentTo != null\n ? doc.sliceString(section.contentFrom, section.contentTo)\n : \"\";\n\n decos.push(\n Decoration.replace({\n widget: new ReactWidgetBlock(\n section.widgetName,\n rawContent,\n section.id,\n registry,\n ),\n block: true,\n }).range(section.from, section.to),\n );\n }\n\n decos.sort((a, b) => a.from - b.from);\n return Decoration.set(decos);\n}\n\n// ── Arrow-key navigation into widget blocks ─────────────────────────\n\nfunction widgetSectionAtLine(\n sections: EditorSection[],\n line: Line,\n): EditorSection | null {\n return sections.find(\n (section) =>\n section.type === \"widget\" &&\n line.from >= section.from &&\n line.from <= section.to,\n ) ?? null;\n}\n\nfunction moveToLinePreservingColumn(view: EditorView, targetLine: Line): void {\n const { head } = view.state.selection.main;\n const currentLine = view.state.doc.lineAt(head);\n const currentColumn = Math.max(0, head - currentLine.from);\n const targetColumn = Math.min(currentColumn, targetLine.length);\n const targetPosition = targetLine.from + targetColumn;\n\n view.dispatch({\n selection: { anchor: targetPosition, head: targetPosition },\n scrollIntoView: true,\n });\n}\n\nfunction skipWidgetDown(view: EditorView): boolean {\n const { head } = view.state.selection.main;\n const currentLine = view.state.doc.lineAt(head);\n const { sections } = view.state.field(sectionField);\n const editingIds = view.state.field(editingWidgetsField);\n\n // If cursor is already inside a non-editing widget, let normal movement handle it\n const currentWidget = widgetSectionAtLine(sections, currentLine);\n if (currentWidget && !editingIds.has(currentWidget.id)) return false;\n\n const nextLineNumber = currentLine.number + 1;\n if (nextLineNumber > view.state.doc.lines) return false;\n const nextLine = view.state.doc.line(nextLineNumber);\n\n // If the next line is inside a non-editing widget, move onto its first line (reveals it)\n const nextWidget = widgetSectionAtLine(sections, nextLine);\n if (!nextWidget || editingIds.has(nextWidget.id)) return false;\n\n moveToLinePreservingColumn(view, view.state.doc.line(nextWidget.startLine));\n return true;\n}\n\nfunction skipWidgetUp(view: EditorView): boolean {\n const { head } = view.state.selection.main;\n const currentLine = view.state.doc.lineAt(head);\n const { sections } = view.state.field(sectionField);\n const editingIds = view.state.field(editingWidgetsField);\n\n // If cursor is already inside a non-editing widget, let normal movement handle it\n const currentWidget = widgetSectionAtLine(sections, currentLine);\n if (currentWidget && !editingIds.has(currentWidget.id)) return false;\n\n const prevLineNumber = currentLine.number - 1;\n if (prevLineNumber < 1) return false;\n const prevLine = view.state.doc.line(prevLineNumber);\n\n // If the previous line is inside a non-editing widget, move onto its last line (reveals it)\n const prevWidget = widgetSectionAtLine(sections, prevLine);\n if (!prevWidget || editingIds.has(prevWidget.id)) return false;\n\n moveToLinePreservingColumn(view, view.state.doc.line(prevWidget.endLine));\n return true;\n}\n\nconst widgetNavKeymap = Prec.high(keymap.of([\n { key: \"ArrowDown\", run: skipWidgetDown },\n { key: \"ArrowUp\", run: skipWidgetUp },\n]));\n\n// ── Factory ──────────────────────────────────────────────────────────\n\n/**\n * Create a CM6 Extension that replaces widget fenced blocks with React components.\n * Block decorations MUST come from a StateField (not a ViewPlugin) per CM6 constraints.\n */\nexport function widgetBlockPreview(registry: WidgetRegistry): Extension {\n const widgetPreviewField = StateField.define<DecorationSet>({\n create(state) {\n return buildWidgetDecos(state, registry);\n },\n update(value, tr) {\n // Only rebuild decorations if:\n // 1. The document changed (content/structure update)\n // 2. An edit-toggle effect was dispatched\n // 3. The selection moved (cursor inside a widget reveals its source)\n const hasToggle = tr.effects.some((e) => e.is(toggleWidgetEdit));\n const selectionChanged = !tr.startState.selection.eq(tr.newSelection);\n\n if (tr.docChanged || hasToggle || selectionChanged) {\n return buildWidgetDecos(tr.state, registry);\n }\n return value;\n },\n provide: (f) => EditorView.decorations.from(f),\n });\n\n return [widgetPreviewField, editingWidgetsField, widgetNavKeymap];\n}\n","import { NodeType, NodeProp, NodeSet, Tree, Parser, parseMixed } from '@lezer/common';\nimport { styleTags, tags, Tag } from '@lezer/highlight';\n\nclass CompositeBlock {\n static create(type, value, from, parentHash, end) {\n let hash = (parentHash + (parentHash << 8) + type + (value << 4)) | 0;\n return new CompositeBlock(type, value, from, hash, end, [], []);\n }\n constructor(type, \n // Used for indentation in list items, markup character in lists\n value, from, hash, end, children, positions) {\n this.type = type;\n this.value = value;\n this.from = from;\n this.hash = hash;\n this.end = end;\n this.children = children;\n this.positions = positions;\n this.hashProp = [[NodeProp.contextHash, hash]];\n }\n addChild(child, pos) {\n if (child.prop(NodeProp.contextHash) != this.hash)\n child = new Tree(child.type, child.children, child.positions, child.length, this.hashProp);\n this.children.push(child);\n this.positions.push(pos);\n }\n toTree(nodeSet, end = this.end) {\n let last = this.children.length - 1;\n if (last >= 0)\n end = Math.max(end, this.positions[last] + this.children[last].length + this.from);\n return new Tree(nodeSet.types[this.type], this.children, this.positions, end - this.from).balance({\n makeTree: (children, positions, length) => new Tree(NodeType.none, children, positions, length, this.hashProp)\n });\n }\n}\nvar Type;\n(function (Type) {\n Type[Type[\"Document\"] = 1] = \"Document\";\n Type[Type[\"CodeBlock\"] = 2] = \"CodeBlock\";\n Type[Type[\"FencedCode\"] = 3] = \"FencedCode\";\n Type[Type[\"Blockquote\"] = 4] = \"Blockquote\";\n Type[Type[\"HorizontalRule\"] = 5] = \"HorizontalRule\";\n Type[Type[\"BulletList\"] = 6] = \"BulletList\";\n Type[Type[\"OrderedList\"] = 7] = \"OrderedList\";\n Type[Type[\"ListItem\"] = 8] = \"ListItem\";\n Type[Type[\"ATXHeading1\"] = 9] = \"ATXHeading1\";\n Type[Type[\"ATXHeading2\"] = 10] = \"ATXHeading2\";\n Type[Type[\"ATXHeading3\"] = 11] = \"ATXHeading3\";\n Type[Type[\"ATXHeading4\"] = 12] = \"ATXHeading4\";\n Type[Type[\"ATXHeading5\"] = 13] = \"ATXHeading5\";\n Type[Type[\"ATXHeading6\"] = 14] = \"ATXHeading6\";\n Type[Type[\"SetextHeading1\"] = 15] = \"SetextHeading1\";\n Type[Type[\"SetextHeading2\"] = 16] = \"SetextHeading2\";\n Type[Type[\"HTMLBlock\"] = 17] = \"HTMLBlock\";\n Type[Type[\"LinkReference\"] = 18] = \"LinkReference\";\n Type[Type[\"Paragraph\"] = 19] = \"Paragraph\";\n Type[Type[\"CommentBlock\"] = 20] = \"CommentBlock\";\n Type[Type[\"ProcessingInstructionBlock\"] = 21] = \"ProcessingInstructionBlock\";\n // Inline\n Type[Type[\"Escape\"] = 22] = \"Escape\";\n Type[Type[\"Entity\"] = 23] = \"Entity\";\n Type[Type[\"HardBreak\"] = 24] = \"HardBreak\";\n Type[Type[\"Emphasis\"] = 25] = \"Emphasis\";\n Type[Type[\"StrongEmphasis\"] = 26] = \"StrongEmphasis\";\n Type[Type[\"Link\"] = 27] = \"Link\";\n Type[Type[\"Image\"] = 28] = \"Image\";\n Type[Type[\"InlineCode\"] = 29] = \"InlineCode\";\n Type[Type[\"HTMLTag\"] = 30] = \"HTMLTag\";\n Type[Type[\"Comment\"] = 31] = \"Comment\";\n Type[Type[\"ProcessingInstruction\"] = 32] = \"ProcessingInstruction\";\n Type[Type[\"Autolink\"] = 33] = \"Autolink\";\n // Smaller tokens\n Type[Type[\"HeaderMark\"] = 34] = \"HeaderMark\";\n Type[Type[\"QuoteMark\"] = 35] = \"QuoteMark\";\n Type[Type[\"ListMark\"] = 36] = \"ListMark\";\n Type[Type[\"LinkMark\"] = 37] = \"LinkMark\";\n Type[Type[\"EmphasisMark\"] = 38] = \"EmphasisMark\";\n Type[Type[\"CodeMark\"] = 39] = \"CodeMark\";\n Type[Type[\"CodeText\"] = 40] = \"CodeText\";\n Type[Type[\"CodeInfo\"] = 41] = \"CodeInfo\";\n Type[Type[\"LinkTitle\"] = 42] = \"LinkTitle\";\n Type[Type[\"LinkLabel\"] = 43] = \"LinkLabel\";\n Type[Type[\"URL\"] = 44] = \"URL\";\n})(Type || (Type = {}));\n/**\nData structure used to accumulate a block's content during [leaf\nblock parsing](#BlockParser.leaf).\n*/\nclass LeafBlock {\n /**\n @internal\n */\n constructor(\n /**\n The start position of the block.\n */\n start, \n /**\n The block's text content.\n */\n content) {\n this.start = start;\n this.content = content;\n /**\n @internal\n */\n this.marks = [];\n /**\n The block parsers active for this block.\n */\n this.parsers = [];\n }\n}\n/**\nData structure used during block-level per-line parsing.\n*/\nclass Line {\n constructor() {\n /**\n The line's full text.\n */\n this.text = \"\";\n /**\n The base indent provided by the composite contexts (that have\n been handled so far).\n */\n this.baseIndent = 0;\n /**\n The string position corresponding to the base indent.\n */\n this.basePos = 0;\n /**\n The number of contexts handled @internal\n */\n this.depth = 0;\n /**\n Any markers (i.e. block quote markers) parsed for the contexts.\n A block parser that moves across lines, covering such marks, may\n need to include these in its node structure.\n */\n this.markers = [];\n /**\n The position of the next non-whitespace character beyond any\n list, blockquote, or other composite block markers.\n */\n this.pos = 0;\n /**\n The column of the next non-whitespace character.\n */\n this.indent = 0;\n /**\n The character code of the character after `pos`.\n */\n this.next = -1;\n }\n /**\n @internal\n */\n forward() {\n if (this.basePos > this.pos)\n this.forwardInner();\n }\n /**\n @internal\n */\n forwardInner() {\n let newPos = this.skipSpace(this.basePos);\n this.indent = this.countIndent(newPos, this.pos, this.indent);\n this.pos = newPos;\n this.next = newPos == this.text.length ? -1 : this.text.charCodeAt(newPos);\n }\n /**\n Skip whitespace after the given position, return the position of\n the next non-space character or the end of the line if there's\n only space after `from`.\n */\n skipSpace(from) { return skipSpace(this.text, from); }\n /**\n @internal\n */\n reset(text) {\n this.text = text;\n this.baseIndent = this.basePos = this.pos = this.indent = 0;\n this.forwardInner();\n this.depth = 1;\n while (this.markers.length)\n this.markers.pop();\n }\n /**\n Move the line's base position forward to the given position.\n This should only be called by composite [block\n parsers](#BlockParser.parse) or [markup skipping\n functions](#NodeSpec.composite).\n */\n moveBase(to) {\n this.basePos = to;\n this.baseIndent = this.countIndent(to, this.pos, this.indent);\n }\n /**\n Move the line's base position forward to the given _column_.\n */\n moveBaseColumn(indent) {\n this.baseIndent = indent;\n this.basePos = this.findColumn(indent);\n }\n /**\n Store a composite-block-level marker. Should be called from\n [markup skipping functions](#NodeSpec.composite) when they\n consume any non-whitespace characters.\n */\n addMarker(elt) {\n this.markers.push(elt);\n }\n /**\n Find the column position at `to`, optionally starting at a given\n position and column.\n */\n countIndent(to, from = 0, indent = 0) {\n for (let i = from; i < to; i++)\n indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n return indent;\n }\n /**\n Find the position corresponding to the given column.\n */\n findColumn(goal) {\n let i = 0;\n for (let indent = 0; i < this.text.length && indent < goal; i++)\n indent += this.text.charCodeAt(i) == 9 ? 4 - indent % 4 : 1;\n return i;\n }\n /**\n @internal\n */\n scrub() {\n if (!this.baseIndent)\n return this.text;\n let result = \"\";\n for (let i = 0; i < this.basePos; i++)\n result += \" \";\n return result + this.text.slice(this.basePos);\n }\n}\nfunction skipForList(bl, cx, line) {\n if (line.pos == line.text.length ||\n (bl != cx.block && line.indent >= cx.stack[line.depth + 1].value + line.baseIndent))\n return true;\n if (line.indent >= line.baseIndent + 4)\n return false;\n let size = (bl.type == Type.OrderedList ? isOrderedList : isBulletList)(line, cx, false);\n return size > 0 &&\n (bl.type != Type.BulletList || isHorizontalRule(line, cx, false) < 0) &&\n line.text.charCodeAt(line.pos + size - 1) == bl.value;\n}\nconst DefaultSkipMarkup = {\n [Type.Blockquote](bl, cx, line) {\n if (line.next != 62 /* '>' */)\n return false;\n line.markers.push(elt(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1));\n line.moveBase(line.pos + (space(line.text.charCodeAt(line.pos + 1)) ? 2 : 1));\n bl.end = cx.lineStart + line.text.length;\n return true;\n },\n [Type.ListItem](bl, _cx, line) {\n if (line.indent < line.baseIndent + bl.value && line.next > -1)\n return false;\n line.moveBaseColumn(line.baseIndent + bl.value);\n return true;\n },\n [Type.OrderedList]: skipForList,\n [Type.BulletList]: skipForList,\n [Type.Document]() { return true; }\n};\nfunction space(ch) { return ch == 32 || ch == 9 || ch == 10 || ch == 13; }\nfunction skipSpace(line, i = 0) {\n while (i < line.length && space(line.charCodeAt(i)))\n i++;\n return i;\n}\nfunction skipSpaceBack(line, i, to) {\n while (i > to && space(line.charCodeAt(i - 1)))\n i--;\n return i;\n}\nfunction isFencedCode(line) {\n if (line.next != 96 && line.next != 126 /* '`~' */)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n pos++;\n if (pos < line.pos + 3)\n return -1;\n if (line.next == 96)\n for (let i = pos; i < line.text.length; i++)\n if (line.text.charCodeAt(i) == 96)\n return -1;\n return pos;\n}\nfunction isBlockquote(line) {\n return line.next != 62 /* '>' */ ? -1 : line.text.charCodeAt(line.pos + 1) == 32 ? 2 : 1;\n}\nfunction isHorizontalRule(line, cx, breaking) {\n if (line.next != 42 && line.next != 45 && line.next != 95 /* '_-*' */)\n return -1;\n let count = 1;\n for (let pos = line.pos + 1; pos < line.text.length; pos++) {\n let ch = line.text.charCodeAt(pos);\n if (ch == line.next)\n count++;\n else if (!space(ch))\n return -1;\n }\n // Setext headers take precedence\n if (breaking && line.next == 45 && isSetextUnderline(line) > -1 && line.depth == cx.stack.length &&\n cx.parser.leafBlockParsers.indexOf(DefaultLeafBlocks.SetextHeading) > -1)\n return -1;\n return count < 3 ? -1 : 1;\n}\nfunction inList(cx, type) {\n for (let i = cx.stack.length - 1; i >= 0; i--)\n if (cx.stack[i].type == type)\n return true;\n return false;\n}\nfunction isBulletList(line, cx, breaking) {\n return (line.next == 45 || line.next == 43 || line.next == 42 /* '-+*' */) &&\n (line.pos == line.text.length - 1 || space(line.text.charCodeAt(line.pos + 1))) &&\n (!breaking || inList(cx, Type.BulletList) || line.skipSpace(line.pos + 2) < line.text.length) ? 1 : -1;\n}\nfunction isOrderedList(line, cx, breaking) {\n let pos = line.pos, next = line.next;\n for (;;) {\n if (next >= 48 && next <= 57 /* '0-9' */)\n pos++;\n else\n break;\n if (pos == line.text.length)\n return -1;\n next = line.text.charCodeAt(pos);\n }\n if (pos == line.pos || pos > line.pos + 9 ||\n (next != 46 && next != 41 /* '.)' */) ||\n (pos < line.text.length - 1 && !space(line.text.charCodeAt(pos + 1))) ||\n breaking && !inList(cx, Type.OrderedList) &&\n (line.skipSpace(pos + 1) == line.text.length || pos > line.pos + 1 || line.next != 49 /* '1' */))\n return -1;\n return pos + 1 - line.pos;\n}\nfunction isAtxHeading(line) {\n if (line.next != 35 /* '#' */)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == 35)\n pos++;\n if (pos < line.text.length && line.text.charCodeAt(pos) != 32)\n return -1;\n let size = pos - line.pos;\n return size > 6 ? -1 : size;\n}\nfunction isSetextUnderline(line) {\n if (line.next != 45 && line.next != 61 /* '-=' */ || line.indent >= line.baseIndent + 4)\n return -1;\n let pos = line.pos + 1;\n while (pos < line.text.length && line.text.charCodeAt(pos) == line.next)\n pos++;\n let end = pos;\n while (pos < line.text.length && space(line.text.charCodeAt(pos)))\n pos++;\n return pos == line.text.length ? end : -1;\n}\nconst EmptyLine = /^[ \\t]*$/, CommentEnd = /-->/, ProcessingEnd = /\\?>/;\nconst HTMLBlockStyle = [\n [/^<(?:script|pre|style)(?:\\s|>|$)/i, /<\\/(?:script|pre|style)>/i],\n [/^\\s*<!--/, CommentEnd],\n [/^\\s*<\\?/, ProcessingEnd],\n [/^\\s*<![A-Z]/, />/],\n [/^\\s*<!\\[CDATA\\[/, /\\]\\]>/],\n [/^\\s*<\\/?(?:address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)(?:\\s|\\/?>|$)/i, EmptyLine],\n [/^\\s*(?:<\\/[a-z][\\w-]*\\s*>|<[a-z][\\w-]*(\\s+[a-z:_][\\w-.]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*>)\\s*$/i, EmptyLine]\n];\nfunction isHTMLBlock(line, _cx, breaking) {\n if (line.next != 60 /* '<' */)\n return -1;\n let rest = line.text.slice(line.pos);\n for (let i = 0, e = HTMLBlockStyle.length - (breaking ? 1 : 0); i < e; i++)\n if (HTMLBlockStyle[i][0].test(rest))\n return i;\n return -1;\n}\nfunction getListIndent(line, pos) {\n let indentAfter = line.countIndent(pos, line.pos, line.indent);\n let skipped = line.skipSpace(pos);\n let indented = line.countIndent(skipped, pos, indentAfter);\n return indented >= indentAfter + 5 || skipped == line.text.length ? indentAfter + 1 : indented;\n}\nfunction addCodeText(marks, from, to) {\n let last = marks.length - 1;\n if (last >= 0 && marks[last].to == from && marks[last].type == Type.CodeText)\n marks[last].to = to;\n else\n marks.push(elt(Type.CodeText, from, to));\n}\n// Rules for parsing blocks. A return value of false means the rule\n// doesn't apply here, true means it does. When true is returned and\n// `p.line` has been updated, the rule is assumed to have consumed a\n// leaf block. Otherwise, it is assumed to have opened a context.\nconst DefaultBlockParsers = {\n LinkReference: undefined,\n IndentedCode(cx, line) {\n let base = line.baseIndent + 4;\n if (line.indent < base)\n return false;\n let start = line.findColumn(base);\n let from = cx.lineStart + start, to = cx.lineStart + line.text.length;\n let marks = [], pendingMarks = [];\n addCodeText(marks, from, to);\n while (cx.nextLine() && line.depth >= cx.stack.length) {\n if (line.pos == line.text.length) { // Empty\n addCodeText(pendingMarks, cx.lineStart - 1, cx.lineStart);\n for (let m of line.markers)\n pendingMarks.push(m);\n }\n else if (line.indent < base) {\n break;\n }\n else {\n if (pendingMarks.length) {\n for (let m of pendingMarks) {\n if (m.type == Type.CodeText)\n addCodeText(marks, m.from, m.to);\n else\n marks.push(m);\n }\n pendingMarks = [];\n }\n addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n for (let m of line.markers)\n marks.push(m);\n to = cx.lineStart + line.text.length;\n let codeStart = cx.lineStart + line.findColumn(line.baseIndent + 4);\n if (codeStart < to)\n addCodeText(marks, codeStart, to);\n }\n }\n if (pendingMarks.length) {\n pendingMarks = pendingMarks.filter(m => m.type != Type.CodeText);\n if (pendingMarks.length)\n line.markers = pendingMarks.concat(line.markers);\n }\n cx.addNode(cx.buffer.writeElements(marks, -from).finish(Type.CodeBlock, to - from), from);\n return true;\n },\n FencedCode(cx, line) {\n let fenceEnd = isFencedCode(line);\n if (fenceEnd < 0)\n return false;\n let from = cx.lineStart + line.pos, ch = line.next, len = fenceEnd - line.pos;\n let infoFrom = line.skipSpace(fenceEnd), infoTo = skipSpaceBack(line.text, line.text.length, infoFrom);\n let marks = [elt(Type.CodeMark, from, from + len)];\n if (infoFrom < infoTo)\n marks.push(elt(Type.CodeInfo, cx.lineStart + infoFrom, cx.lineStart + infoTo));\n for (let first = true, empty = true, hasLine = false; cx.nextLine() && line.depth >= cx.stack.length; first = false) {\n let i = line.pos;\n if (line.indent - line.baseIndent < 4)\n while (i < line.text.length && line.text.charCodeAt(i) == ch)\n i++;\n if (i - line.pos >= len && line.skipSpace(i) == line.text.length) {\n for (let m of line.markers)\n marks.push(m);\n if (empty && hasLine)\n addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n marks.push(elt(Type.CodeMark, cx.lineStart + line.pos, cx.lineStart + i));\n cx.nextLine();\n break;\n }\n else {\n hasLine = true;\n if (!first) {\n addCodeText(marks, cx.lineStart - 1, cx.lineStart);\n empty = false;\n }\n for (let m of line.markers)\n marks.push(m);\n let textStart = cx.lineStart + line.basePos, textEnd = cx.lineStart + line.text.length;\n if (textStart < textEnd) {\n addCodeText(marks, textStart, textEnd);\n empty = false;\n }\n }\n }\n cx.addNode(cx.buffer.writeElements(marks, -from)\n .finish(Type.FencedCode, cx.prevLineEnd() - from), from);\n return true;\n },\n Blockquote(cx, line) {\n let size = isBlockquote(line);\n if (size < 0)\n return false;\n cx.startContext(Type.Blockquote, line.pos);\n cx.addNode(Type.QuoteMark, cx.lineStart + line.pos, cx.lineStart + line.pos + 1);\n line.moveBase(line.pos + size);\n return null;\n },\n HorizontalRule(cx, line) {\n if (isHorizontalRule(line, cx, false) < 0)\n return false;\n let from = cx.lineStart + line.pos;\n cx.nextLine();\n cx.addNode(Type.HorizontalRule, from);\n return true;\n },\n BulletList(cx, line) {\n let size = isBulletList(line, cx, false);\n if (size < 0)\n return false;\n if (cx.block.type != Type.BulletList)\n cx.startContext(Type.BulletList, line.basePos, line.next);\n let newBase = getListIndent(line, line.pos + 1);\n cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n line.moveBaseColumn(newBase);\n return null;\n },\n OrderedList(cx, line) {\n let size = isOrderedList(line, cx, false);\n if (size < 0)\n return false;\n if (cx.block.type != Type.OrderedList)\n cx.startContext(Type.OrderedList, line.basePos, line.text.charCodeAt(line.pos + size - 1));\n let newBase = getListIndent(line, line.pos + size);\n cx.startContext(Type.ListItem, line.basePos, newBase - line.baseIndent);\n cx.addNode(Type.ListMark, cx.lineStart + line.pos, cx.lineStart + line.pos + size);\n line.moveBaseColumn(newBase);\n return null;\n },\n ATXHeading(cx, line) {\n let size = isAtxHeading(line);\n if (size < 0)\n return false;\n let off = line.pos, from = cx.lineStart + off;\n let endOfSpace = skipSpaceBack(line.text, line.text.length, off), after = endOfSpace;\n while (after > off && line.text.charCodeAt(after - 1) == line.next)\n after--;\n if (after == endOfSpace || after == off || !space(line.text.charCodeAt(after - 1)))\n after = line.text.length;\n let buf = cx.buffer\n .write(Type.HeaderMark, 0, size)\n .writeElements(cx.parser.parseInline(line.text.slice(off + size + 1, after), from + size + 1), -from);\n if (after < line.text.length)\n buf.write(Type.HeaderMark, after - off, endOfSpace - off);\n let node = buf.finish(Type.ATXHeading1 - 1 + size, line.text.length - off);\n cx.nextLine();\n cx.addNode(node, from);\n return true;\n },\n HTMLBlock(cx, line) {\n let type = isHTMLBlock(line, cx, false);\n if (type < 0)\n return false;\n let from = cx.lineStart + line.pos, end = HTMLBlockStyle[type][1];\n let marks = [], trailing = end != EmptyLine;\n while (!end.test(line.text) && cx.nextLine()) {\n if (line.depth < cx.stack.length) {\n trailing = false;\n break;\n }\n for (let m of line.markers)\n marks.push(m);\n }\n if (trailing)\n cx.nextLine();\n let nodeType = end == CommentEnd ? Type.CommentBlock : end == ProcessingEnd ? Type.ProcessingInstructionBlock : Type.HTMLBlock;\n let to = cx.prevLineEnd();\n cx.addNode(cx.buffer.writeElements(marks, -from).finish(nodeType, to - from), from);\n return true;\n },\n SetextHeading: undefined // Specifies relative precedence for block-continue function\n};\n// This implements a state machine that incrementally parses link references. At each\n// next line, it looks ahead to see if the line continues the reference or not. If it\n// doesn't and a valid link is available ending before that line, it finishes that.\n// Similarly, on `finish` (when the leaf is terminated by external circumstances), it\n// creates a link reference if there's a valid reference up to the current point.\nclass LinkReferenceParser {\n constructor(leaf) {\n this.stage = 0 /* RefStage.Start */;\n this.elts = [];\n this.pos = 0;\n this.start = leaf.start;\n this.advance(leaf.content);\n }\n nextLine(cx, line, leaf) {\n if (this.stage == -1 /* RefStage.Failed */)\n return false;\n let content = leaf.content + \"\\n\" + line.scrub();\n let finish = this.advance(content);\n if (finish > -1 && finish < content.length)\n return this.complete(cx, leaf, finish);\n return false;\n }\n finish(cx, leaf) {\n if ((this.stage == 2 /* RefStage.Link */ || this.stage == 3 /* RefStage.Title */) && skipSpace(leaf.content, this.pos) == leaf.content.length)\n return this.complete(cx, leaf, leaf.content.length);\n return false;\n }\n complete(cx, leaf, len) {\n cx.addLeafElement(leaf, elt(Type.LinkReference, this.start, this.start + len, this.elts));\n return true;\n }\n nextStage(elt) {\n if (elt) {\n this.pos = elt.to - this.start;\n this.elts.push(elt);\n this.stage++;\n return true;\n }\n if (elt === false)\n this.stage = -1 /* RefStage.Failed */;\n return false;\n }\n advance(content) {\n for (;;) {\n if (this.stage == -1 /* RefStage.Failed */) {\n return -1;\n }\n else if (this.stage == 0 /* RefStage.Start */) {\n if (!this.nextStage(parseLinkLabel(content, this.pos, this.start, true)))\n return -1;\n if (content.charCodeAt(this.pos) != 58 /* ':' */)\n return this.stage = -1 /* RefStage.Failed */;\n this.elts.push(elt(Type.LinkMark, this.pos + this.start, this.pos + this.start + 1));\n this.pos++;\n }\n else if (this.stage == 1 /* RefStage.Label */) {\n if (!this.nextStage(parseURL(content, skipSpace(content, this.pos), this.start)))\n return -1;\n }\n else if (this.stage == 2 /* RefStage.Link */) {\n let skip = skipSpace(content, this.pos), end = 0;\n if (skip > this.pos) {\n let title = parseLinkTitle(content, skip, this.start);\n if (title) {\n let titleEnd = lineEnd(content, title.to - this.start);\n if (titleEnd > 0) {\n this.nextStage(title);\n end = titleEnd;\n }\n }\n }\n if (!end)\n end = lineEnd(content, this.pos);\n return end > 0 && end < content.length ? end : -1;\n }\n else { // RefStage.Title\n return lineEnd(content, this.pos);\n }\n }\n }\n}\nfunction lineEnd(text, pos) {\n for (; pos < text.length; pos++) {\n let next = text.charCodeAt(pos);\n if (next == 10)\n break;\n if (!space(next))\n return -1;\n }\n return pos;\n}\nclass SetextHeadingParser {\n nextLine(cx, line, leaf) {\n let underline = line.depth < cx.stack.length ? -1 : isSetextUnderline(line);\n let next = line.next;\n if (underline < 0)\n return false;\n let underlineMark = elt(Type.HeaderMark, cx.lineStart + line.pos, cx.lineStart + underline);\n cx.nextLine();\n cx.addLeafElement(leaf, elt(next == 61 ? Type.SetextHeading1 : Type.SetextHeading2, leaf.start, cx.prevLineEnd(), [\n ...cx.parser.parseInline(leaf.content, leaf.start),\n underlineMark\n ]));\n return true;\n }\n finish() {\n return false;\n }\n}\nconst DefaultLeafBlocks = {\n LinkReference(_, leaf) { return leaf.content.charCodeAt(0) == 91 /* '[' */ ? new LinkReferenceParser(leaf) : null; },\n SetextHeading() { return new SetextHeadingParser; }\n};\nconst DefaultEndLeaf = [\n (_, line) => isAtxHeading(line) >= 0,\n (_, line) => isFencedCode(line) >= 0,\n (_, line) => isBlockquote(line) >= 0,\n (p, line) => isBulletList(line, p, true) >= 0,\n (p, line) => isOrderedList(line, p, true) >= 0,\n (p, line) => isHorizontalRule(line, p, true) >= 0,\n (p, line) => isHTMLBlock(line, p, true) >= 0\n];\nconst scanLineResult = { text: \"\", end: 0 };\n/**\nBlock-level parsing functions get access to this context object.\n*/\nclass BlockContext {\n /**\n @internal\n */\n constructor(\n /**\n The parser configuration used.\n */\n parser, \n /**\n @internal\n */\n input, fragments, \n /**\n @internal\n */\n ranges) {\n this.parser = parser;\n this.input = input;\n this.ranges = ranges;\n this.line = new Line();\n this.atEnd = false;\n /**\n For reused nodes on gaps, we can't directly put the original\n node into the tree, since that may be bigger than its parent.\n When this happens, we create a dummy tree that is replaced by\n the proper node in `injectGaps` @internal\n */\n this.reusePlaceholders = new Map;\n this.stoppedAt = null;\n /**\n The range index that absoluteLineStart points into @internal\n */\n this.rangeI = 0;\n this.to = ranges[ranges.length - 1].to;\n this.lineStart = this.absoluteLineStart = this.absoluteLineEnd = ranges[0].from;\n this.block = CompositeBlock.create(Type.Document, 0, this.lineStart, 0, 0);\n this.stack = [this.block];\n this.fragments = fragments.length ? new FragmentCursor(fragments, input) : null;\n this.readLine();\n }\n get parsedPos() {\n return this.absoluteLineStart;\n }\n advance() {\n if (this.stoppedAt != null && this.absoluteLineStart > this.stoppedAt)\n return this.finish();\n let { line } = this;\n for (;;) {\n for (let markI = 0;;) {\n let next = line.depth < this.stack.length ? this.stack[this.stack.length - 1] : null;\n while (markI < line.markers.length && (!next || line.markers[markI].from < next.end)) {\n let mark = line.markers[markI++];\n this.addNode(mark.type, mark.from, mark.to);\n }\n if (!next)\n break;\n this.finishContext();\n }\n if (line.pos < line.text.length)\n break;\n // Empty line\n if (!this.nextLine())\n return this.finish();\n }\n if (this.fragments && this.reuseFragment(line.basePos))\n return null;\n start: for (;;) {\n for (let type of this.parser.blockParsers)\n if (type) {\n let result = type(this, line);\n if (result != false) {\n if (result == true)\n return null;\n line.forward();\n continue start;\n }\n }\n break;\n }\n if (line.pos == line.text.length)\n return this.nextLine() ? null : this.finish();\n let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));\n for (let parse of this.parser.leafBlockParsers)\n if (parse) {\n let parser = parse(this, leaf);\n if (parser)\n leaf.parsers.push(parser);\n }\n lines: while (this.nextLine()) {\n if (line.pos == line.text.length)\n break;\n if (line.indent < line.baseIndent + 4) {\n for (let stop of this.parser.endLeafBlock)\n if (stop(this, line, leaf))\n break lines;\n }\n for (let parser of leaf.parsers)\n if (parser.nextLine(this, line, leaf))\n return null;\n leaf.content += \"\\n\" + line.scrub();\n for (let m of line.markers)\n leaf.marks.push(m);\n }\n this.finishLeaf(leaf);\n return null;\n }\n stopAt(pos) {\n if (this.stoppedAt != null && this.stoppedAt < pos)\n throw new RangeError(\"Can't move stoppedAt forward\");\n this.stoppedAt = pos;\n }\n reuseFragment(start) {\n if (!this.fragments.moveTo(this.absoluteLineStart + start, this.absoluteLineStart) ||\n !this.fragments.matches(this.block.hash))\n return false;\n let taken = this.fragments.takeNodes(this);\n if (!taken)\n return false;\n this.absoluteLineStart += taken;\n this.lineStart = toRelative(this.absoluteLineStart, this.ranges);\n this.moveRangeI();\n if (this.absoluteLineStart < this.to) {\n this.lineStart++;\n this.absoluteLineStart++;\n this.readLine();\n }\n else {\n this.atEnd = true;\n this.readLine();\n }\n return true;\n }\n /**\n The number of parent blocks surrounding the current block.\n */\n get depth() {\n return this.stack.length;\n }\n /**\n Get the type of the parent block at the given depth. When no\n depth is passed, return the type of the innermost parent.\n */\n parentType(depth = this.depth - 1) {\n return this.parser.nodeSet.types[this.stack[depth].type];\n }\n /**\n Move to the next input line. This should only be called by\n (non-composite) [block parsers](#BlockParser.parse) that consume\n the line directly, or leaf block parser\n [`nextLine`](#LeafBlockParser.nextLine) methods when they\n consume the current line (and return true).\n */\n nextLine() {\n this.lineStart += this.line.text.length;\n if (this.absoluteLineEnd >= this.to) {\n this.absoluteLineStart = this.absoluteLineEnd;\n this.atEnd = true;\n this.readLine();\n return false;\n }\n else {\n this.lineStart++;\n this.absoluteLineStart = this.absoluteLineEnd + 1;\n this.moveRangeI();\n this.readLine();\n return true;\n }\n }\n /**\n Retrieve the text of the line after the current one, without\n actually moving the context's current line forward.\n */\n peekLine() {\n return this.scanLine(this.absoluteLineEnd + 1).text;\n }\n moveRangeI() {\n while (this.rangeI < this.ranges.length - 1 && this.absoluteLineStart >= this.ranges[this.rangeI].to) {\n this.rangeI++;\n this.absoluteLineStart = Math.max(this.absoluteLineStart, this.ranges[this.rangeI].from);\n }\n }\n /**\n @internal\n Collect the text for the next line.\n */\n scanLine(start) {\n let r = scanLineResult;\n r.end = start;\n if (start >= this.to) {\n r.text = \"\";\n }\n else {\n r.text = this.lineChunkAt(start);\n r.end += r.text.length;\n if (this.ranges.length > 1) {\n let textOffset = this.absoluteLineStart, rangeI = this.rangeI;\n while (this.ranges[rangeI].to < r.end) {\n rangeI++;\n let nextFrom = this.ranges[rangeI].from;\n let after = this.lineChunkAt(nextFrom);\n r.end = nextFrom + after.length;\n r.text = r.text.slice(0, this.ranges[rangeI - 1].to - textOffset) + after;\n textOffset = r.end - r.text.length;\n }\n }\n }\n return r;\n }\n /**\n @internal\n Populate this.line with the content of the next line. Skip\n leading characters covered by composite blocks.\n */\n readLine() {\n let { line } = this, { text, end } = this.scanLine(this.absoluteLineStart);\n this.absoluteLineEnd = end;\n line.reset(text);\n for (; line.depth < this.stack.length; line.depth++) {\n let cx = this.stack[line.depth], handler = this.parser.skipContextMarkup[cx.type];\n if (!handler)\n throw new Error(\"Unhandled block context \" + Type[cx.type]);\n let marks = this.line.markers.length;\n if (!handler(cx, this, line)) {\n if (this.line.markers.length > marks)\n cx.end = this.line.markers[this.line.markers.length - 1].to;\n line.forward();\n break;\n }\n line.forward();\n }\n }\n lineChunkAt(pos) {\n let next = this.input.chunk(pos), text;\n if (!this.input.lineChunks) {\n let eol = next.indexOf(\"\\n\");\n text = eol < 0 ? next : next.slice(0, eol);\n }\n else {\n text = next == \"\\n\" ? \"\" : next;\n }\n return pos + text.length > this.to ? text.slice(0, this.to - pos) : text;\n }\n /**\n The end position of the previous line.\n */\n prevLineEnd() { return this.atEnd ? this.lineStart : this.lineStart - 1; }\n /**\n @internal\n */\n startContext(type, start, value = 0) {\n this.block = CompositeBlock.create(type, value, this.lineStart + start, this.block.hash, this.lineStart + this.line.text.length);\n this.stack.push(this.block);\n }\n /**\n Start a composite block. Should only be called from [block\n parser functions](#BlockParser.parse) that return null.\n */\n startComposite(type, start, value = 0) {\n this.startContext(this.parser.getNodeType(type), start, value);\n }\n /**\n @internal\n */\n addNode(block, from, to) {\n if (typeof block == \"number\")\n block = new Tree(this.parser.nodeSet.types[block], none, none, (to !== null && to !== void 0 ? to : this.prevLineEnd()) - from);\n this.block.addChild(block, from - this.block.from);\n }\n /**\n Add a block element. Can be called by [block\n parsers](#BlockParser.parse).\n */\n addElement(elt) {\n this.block.addChild(elt.toTree(this.parser.nodeSet), elt.from - this.block.from);\n }\n /**\n Add a block element from a [leaf parser](#LeafBlockParser). This\n makes sure any extra composite block markup (such as blockquote\n markers) inside the block are also added to the syntax tree.\n */\n addLeafElement(leaf, elt) {\n this.addNode(this.buffer\n .writeElements(injectMarks(elt.children, leaf.marks), -elt.from)\n .finish(elt.type, elt.to - elt.from), elt.from);\n }\n /**\n @internal\n */\n finishContext() {\n let cx = this.stack.pop();\n let top = this.stack[this.stack.length - 1];\n top.addChild(cx.toTree(this.parser.nodeSet), cx.from - top.from);\n this.block = top;\n }\n finish() {\n while (this.stack.length > 1)\n this.finishContext();\n return this.addGaps(this.block.toTree(this.parser.nodeSet, this.lineStart));\n }\n addGaps(tree) {\n return this.ranges.length > 1 ?\n injectGaps(this.ranges, 0, tree.topNode, this.ranges[0].from, this.reusePlaceholders) : tree;\n }\n /**\n @internal\n */\n finishLeaf(leaf) {\n for (let parser of leaf.parsers)\n if (parser.finish(this, leaf))\n return;\n let inline = injectMarks(this.parser.parseInline(leaf.content, leaf.start), leaf.marks);\n this.addNode(this.buffer\n .writeElements(inline, -leaf.start)\n .finish(Type.Paragraph, leaf.content.length), leaf.start);\n }\n elt(type, from, to, children) {\n if (typeof type == \"string\")\n return elt(this.parser.getNodeType(type), from, to, children);\n return new TreeElement(type, from);\n }\n /**\n @internal\n */\n get buffer() { return new Buffer(this.parser.nodeSet); }\n}\nfunction injectGaps(ranges, rangeI, tree, offset, dummies) {\n let rangeEnd = ranges[rangeI].to;\n let children = [], positions = [], start = tree.from + offset;\n function movePastNext(upto, inclusive) {\n while (inclusive ? upto >= rangeEnd : upto > rangeEnd) {\n let size = ranges[rangeI + 1].from - rangeEnd;\n offset += size;\n upto += size;\n rangeI++;\n rangeEnd = ranges[rangeI].to;\n }\n }\n for (let ch = tree.firstChild; ch; ch = ch.nextSibling) {\n movePastNext(ch.from + offset, true);\n let from = ch.from + offset, node, reuse = dummies.get(ch.tree);\n if (reuse) {\n node = reuse;\n }\n else if (ch.to + offset > rangeEnd) {\n node = injectGaps(ranges, rangeI, ch, offset, dummies);\n movePastNext(ch.to + offset, false);\n }\n else {\n node = ch.toTree();\n }\n children.push(node);\n positions.push(from - start);\n }\n movePastNext(tree.to + offset, false);\n return new Tree(tree.type, children, positions, tree.to + offset - start, tree.tree ? tree.tree.propValues : undefined);\n}\n/**\nA Markdown parser configuration.\n*/\nclass MarkdownParser extends Parser {\n /**\n @internal\n */\n constructor(\n /**\n The parser's syntax [node\n types](https://lezer.codemirror.net/docs/ref/#common.NodeSet).\n */\n nodeSet, \n /**\n @internal\n */\n blockParsers, \n /**\n @internal\n */\n leafBlockParsers, \n /**\n @internal\n */\n blockNames, \n /**\n @internal\n */\n endLeafBlock, \n /**\n @internal\n */\n skipContextMarkup, \n /**\n @internal\n */\n inlineParsers, \n /**\n @internal\n */\n inlineNames, \n /**\n @internal\n */\n wrappers) {\n super();\n this.nodeSet = nodeSet;\n this.blockParsers = blockParsers;\n this.leafBlockParsers = leafBlockParsers;\n this.blockNames = blockNames;\n this.endLeafBlock = endLeafBlock;\n this.skipContextMarkup = skipContextMarkup;\n this.inlineParsers = inlineParsers;\n this.inlineNames = inlineNames;\n this.wrappers = wrappers;\n /**\n @internal\n */\n this.nodeTypes = Object.create(null);\n for (let t of nodeSet.types)\n this.nodeTypes[t.name] = t.id;\n }\n createParse(input, fragments, ranges) {\n let parse = new BlockContext(this, input, fragments, ranges);\n for (let w of this.wrappers)\n parse = w(parse, input, fragments, ranges);\n return parse;\n }\n /**\n Reconfigure the parser.\n */\n configure(spec) {\n let config = resolveConfig(spec);\n if (!config)\n return this;\n let { nodeSet, skipContextMarkup } = this;\n let blockParsers = this.blockParsers.slice(), leafBlockParsers = this.leafBlockParsers.slice(), blockNames = this.blockNames.slice(), inlineParsers = this.inlineParsers.slice(), inlineNames = this.inlineNames.slice(), endLeafBlock = this.endLeafBlock.slice(), wrappers = this.wrappers;\n if (nonEmpty(config.defineNodes)) {\n skipContextMarkup = Object.assign({}, skipContextMarkup);\n let nodeTypes = nodeSet.types.slice(), styles;\n for (let s of config.defineNodes) {\n let { name, block, composite, style } = typeof s == \"string\" ? { name: s } : s;\n if (nodeTypes.some(t => t.name == name))\n continue;\n if (composite)\n skipContextMarkup[nodeTypes.length] =\n (bl, cx, line) => composite(cx, line, bl.value);\n let id = nodeTypes.length;\n let group = composite ? [\"Block\", \"BlockContext\"] : !block ? undefined\n : id >= Type.ATXHeading1 && id <= Type.SetextHeading2 ? [\"Block\", \"LeafBlock\", \"Heading\"] : [\"Block\", \"LeafBlock\"];\n nodeTypes.push(NodeType.define({\n id,\n name,\n props: group && [[NodeProp.group, group]]\n }));\n if (style) {\n if (!styles)\n styles = {};\n if (Array.isArray(style) || style instanceof Tag)\n styles[name] = style;\n else\n Object.assign(styles, style);\n }\n }\n nodeSet = new NodeSet(nodeTypes);\n if (styles)\n nodeSet = nodeSet.extend(styleTags(styles));\n }\n if (nonEmpty(config.props))\n nodeSet = nodeSet.extend(...config.props);\n if (nonEmpty(config.remove)) {\n for (let rm of config.remove) {\n let block = this.blockNames.indexOf(rm), inline = this.inlineNames.indexOf(rm);\n if (block > -1)\n blockParsers[block] = leafBlockParsers[block] = undefined;\n if (inline > -1)\n inlineParsers[inline] = undefined;\n }\n }\n if (nonEmpty(config.parseBlock)) {\n for (let spec of config.parseBlock) {\n let found = blockNames.indexOf(spec.name);\n if (found > -1) {\n blockParsers[found] = spec.parse;\n leafBlockParsers[found] = spec.leaf;\n }\n else {\n let pos = spec.before ? findName(blockNames, spec.before)\n : spec.after ? findName(blockNames, spec.after) + 1 : blockNames.length - 1;\n blockParsers.splice(pos, 0, spec.parse);\n leafBlockParsers.splice(pos, 0, spec.leaf);\n blockNames.splice(pos, 0, spec.name);\n }\n if (spec.endLeaf)\n endLeafBlock.push(spec.endLeaf);\n }\n }\n if (nonEmpty(config.parseInline)) {\n for (let spec of config.parseInline) {\n let found = inlineNames.indexOf(spec.name);\n if (found > -1) {\n inlineParsers[found] = spec.parse;\n }\n else {\n let pos = spec.before ? findName(inlineNames, spec.before)\n : spec.after ? findName(inlineNames, spec.after) + 1 : inlineNames.length - 1;\n inlineParsers.splice(pos, 0, spec.parse);\n inlineNames.splice(pos, 0, spec.name);\n }\n }\n }\n if (config.wrap)\n wrappers = wrappers.concat(config.wrap);\n return new MarkdownParser(nodeSet, blockParsers, leafBlockParsers, blockNames, endLeafBlock, skipContextMarkup, inlineParsers, inlineNames, wrappers);\n }\n /**\n @internal\n */\n getNodeType(name) {\n let found = this.nodeTypes[name];\n if (found == null)\n throw new RangeError(`Unknown node type '${name}'`);\n return found;\n }\n /**\n Parse the given piece of inline text at the given offset,\n returning an array of [`Element`](#Element) objects representing\n the inline content.\n */\n parseInline(text, offset) {\n let cx = new InlineContext(this, text, offset);\n outer: for (let pos = offset; pos < cx.end;) {\n let next = cx.char(pos);\n for (let token of this.inlineParsers)\n if (token) {\n let result = token(cx, next, pos);\n if (result >= 0) {\n pos = result;\n continue outer;\n }\n }\n pos++;\n }\n return cx.resolveMarkers(0);\n }\n}\nfunction nonEmpty(a) {\n return a != null && a.length > 0;\n}\nfunction resolveConfig(spec) {\n if (!Array.isArray(spec))\n return spec;\n if (spec.length == 0)\n return null;\n let conf = resolveConfig(spec[0]);\n if (spec.length == 1)\n return conf;\n let rest = resolveConfig(spec.slice(1));\n if (!rest || !conf)\n return conf || rest;\n let conc = (a, b) => (a || none).concat(b || none);\n let wrapA = conf.wrap, wrapB = rest.wrap;\n return {\n props: conc(conf.props, rest.props),\n defineNodes: conc(conf.defineNodes, rest.defineNodes),\n parseBlock: conc(conf.parseBlock, rest.parseBlock),\n parseInline: conc(conf.parseInline, rest.parseInline),\n remove: conc(conf.remove, rest.remove),\n wrap: !wrapA ? wrapB : !wrapB ? wrapA :\n (inner, input, fragments, ranges) => wrapA(wrapB(inner, input, fragments, ranges), input, fragments, ranges)\n };\n}\nfunction findName(names, name) {\n let found = names.indexOf(name);\n if (found < 0)\n throw new RangeError(`Position specified relative to unknown parser ${name}`);\n return found;\n}\nlet nodeTypes = [NodeType.none];\nfor (let i = 1, name; name = Type[i]; i++) {\n nodeTypes[i] = NodeType.define({\n id: i,\n name,\n props: i >= Type.Escape ? [] : [[NodeProp.group, i in DefaultSkipMarkup ? [\"Block\", \"BlockContext\"] : [\"Block\", \"LeafBlock\"]]],\n top: name == \"Document\"\n });\n}\nconst none = [];\nclass Buffer {\n constructor(nodeSet) {\n this.nodeSet = nodeSet;\n this.content = [];\n this.nodes = [];\n }\n write(type, from, to, children = 0) {\n this.content.push(type, from, to, 4 + children * 4);\n return this;\n }\n writeElements(elts, offset = 0) {\n for (let e of elts)\n e.writeTo(this, offset);\n return this;\n }\n finish(type, length) {\n return Tree.build({\n buffer: this.content,\n nodeSet: this.nodeSet,\n reused: this.nodes,\n topID: type,\n length\n });\n }\n}\n/**\nElements are used to compose syntax nodes during parsing.\n*/\nclass Element {\n /**\n @internal\n */\n constructor(\n /**\n The node's\n [id](https://lezer.codemirror.net/docs/ref/#common.NodeType.id).\n */\n type, \n /**\n The start of the node, as an offset from the start of the document.\n */\n from, \n /**\n The end of the node.\n */\n to, \n /**\n The node's child nodes @internal\n */\n children = none) {\n this.type = type;\n this.from = from;\n this.to = to;\n this.children = children;\n }\n /**\n @internal\n */\n writeTo(buf, offset) {\n let startOff = buf.content.length;\n buf.writeElements(this.children, offset);\n buf.content.push(this.type, this.from + offset, this.to + offset, buf.content.length + 4 - startOff);\n }\n /**\n @internal\n */\n toTree(nodeSet) {\n return new Buffer(nodeSet).writeElements(this.children, -this.from).finish(this.type, this.to - this.from);\n }\n}\nclass TreeElement {\n constructor(tree, from) {\n this.tree = tree;\n this.from = from;\n }\n get to() { return this.from + this.tree.length; }\n get type() { return this.tree.type.id; }\n get children() { return none; }\n writeTo(buf, offset) {\n buf.nodes.push(this.tree);\n buf.content.push(buf.nodes.length - 1, this.from + offset, this.to + offset, -1);\n }\n toTree() { return this.tree; }\n}\nfunction elt(type, from, to, children) {\n return new Element(type, from, to, children);\n}\nconst EmphasisUnderscore = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst EmphasisAsterisk = { resolve: \"Emphasis\", mark: \"EmphasisMark\" };\nconst LinkStart = {}, ImageStart = {};\nclass InlineDelimiter {\n constructor(type, from, to, side) {\n this.type = type;\n this.from = from;\n this.to = to;\n this.side = side;\n }\n}\nconst Escapable = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\";\nlet Punctuation = /[!\"#$%&'()*+,\\-.\\/:;<=>?@\\[\\\\\\]^_`{|}~\\xA1\\u2010-\\u2027]/;\ntry {\n Punctuation = new RegExp(\"[\\\\p{S}|\\\\p{P}]\", \"u\");\n}\ncatch (_) { }\nconst DefaultInline = {\n Escape(cx, next, start) {\n if (next != 92 /* '\\\\' */ || start == cx.end - 1)\n return -1;\n let escaped = cx.char(start + 1);\n for (let i = 0; i < Escapable.length; i++)\n if (Escapable.charCodeAt(i) == escaped)\n return cx.append(elt(Type.Escape, start, start + 2));\n return -1;\n },\n Entity(cx, next, start) {\n if (next != 38 /* '&' */)\n return -1;\n let m = /^(?:#\\d+|#x[a-f\\d]+|\\w+);/i.exec(cx.slice(start + 1, start + 31));\n return m ? cx.append(elt(Type.Entity, start, start + 1 + m[0].length)) : -1;\n },\n InlineCode(cx, next, start) {\n if (next != 96 /* '`' */ || start && cx.char(start - 1) == 96)\n return -1;\n let pos = start + 1;\n while (pos < cx.end && cx.char(pos) == 96)\n pos++;\n let size = pos - start, curSize = 0;\n for (; pos < cx.end; pos++) {\n if (cx.char(pos) == 96) {\n curSize++;\n if (curSize == size && cx.char(pos + 1) != 96)\n return cx.append(elt(Type.InlineCode, start, pos + 1, [\n elt(Type.CodeMark, start, start + size),\n elt(Type.CodeMark, pos + 1 - size, pos + 1)\n ]));\n }\n else {\n curSize = 0;\n }\n }\n return -1;\n },\n HTMLTag(cx, next, start) {\n if (next != 60 /* '<' */ || start == cx.end - 1)\n return -1;\n let after = cx.slice(start + 1, cx.end);\n let url = /^(?:[a-z][-\\w+.]+:[^\\s>]+|[a-z\\d.!#$%&'*+/=?^_`{|}~-]+@[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?(?:\\.[a-z\\d](?:[a-z\\d-]{0,61}[a-z\\d])?)*)>/i.exec(after);\n if (url) {\n return cx.append(elt(Type.Autolink, start, start + 1 + url[0].length, [\n elt(Type.LinkMark, start, start + 1),\n // url[0] includes the closing bracket, so exclude it from this slice\n elt(Type.URL, start + 1, start + url[0].length),\n elt(Type.LinkMark, start + url[0].length, start + 1 + url[0].length)\n ]));\n }\n let comment = /^!--[^>](?:-[^-]|[^-])*?-->/i.exec(after);\n if (comment)\n return cx.append(elt(Type.Comment, start, start + 1 + comment[0].length));\n let procInst = /^\\?[^]*?\\?>/.exec(after);\n if (procInst)\n return cx.append(elt(Type.ProcessingInstruction, start, start + 1 + procInst[0].length));\n let m = /^(?:![A-Z][^]*?>|!\\[CDATA\\[[^]*?\\]\\]>|\\/\\s*[a-zA-Z][\\w-]*\\s*>|\\s*[a-zA-Z][\\w-]*(\\s+[a-zA-Z:_][\\w-.:]*(?:\\s*=\\s*(?:[^\\s\"'=<>`]+|'[^']*'|\"[^\"]*\"))?)*\\s*(\\/\\s*)?>)/.exec(after);\n if (!m)\n return -1;\n return cx.append(elt(Type.HTMLTag, start, start + 1 + m[0].length));\n },\n Emphasis(cx, next, start) {\n if (next != 95 && next != 42)\n return -1;\n let pos = start + 1;\n while (cx.char(pos) == next)\n pos++;\n let before = cx.slice(start - 1, start), after = cx.slice(pos, pos + 1);\n let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n let leftFlanking = !sAfter && (!pAfter || sBefore || pBefore);\n let rightFlanking = !sBefore && (!pBefore || sAfter || pAfter);\n let canOpen = leftFlanking && (next == 42 || !rightFlanking || pBefore);\n let canClose = rightFlanking && (next == 42 || !leftFlanking || pAfter);\n return cx.append(new InlineDelimiter(next == 95 ? EmphasisUnderscore : EmphasisAsterisk, start, pos, (canOpen ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (canClose ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n },\n HardBreak(cx, next, start) {\n if (next == 92 /* '\\\\' */ && cx.char(start + 1) == 10 /* '\\n' */)\n return cx.append(elt(Type.HardBreak, start, start + 2));\n if (next == 32) {\n let pos = start + 1;\n while (cx.char(pos) == 32)\n pos++;\n if (cx.char(pos) == 10 && pos >= start + 2)\n return cx.append(elt(Type.HardBreak, start, pos + 1));\n }\n return -1;\n },\n Link(cx, next, start) {\n return next == 91 /* '[' */ ? cx.append(new InlineDelimiter(LinkStart, start, start + 1, 1 /* Mark.Open */)) : -1;\n },\n Image(cx, next, start) {\n return next == 33 /* '!' */ && cx.char(start + 1) == 91 /* '[' */\n ? cx.append(new InlineDelimiter(ImageStart, start, start + 2, 1 /* Mark.Open */)) : -1;\n },\n LinkEnd(cx, next, start) {\n if (next != 93 /* ']' */)\n return -1;\n // Scanning back to the next link/image start marker\n for (let i = cx.parts.length - 1; i >= 0; i--) {\n let part = cx.parts[i];\n if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart)) {\n // If this one has been set invalid (because it would produce\n // a nested link) or there's no valid link here ignore both.\n if (!part.side || cx.skipSpace(part.to) == start && !/[(\\[]/.test(cx.slice(start + 1, start + 2))) {\n cx.parts[i] = null;\n return -1;\n }\n // Finish the content and replace the entire range in\n // this.parts with the link/image node.\n let content = cx.takeContent(i);\n let link = cx.parts[i] = finishLink(cx, content, part.type == LinkStart ? Type.Link : Type.Image, part.from, start + 1);\n // Set any open-link markers before this link to invalid.\n if (part.type == LinkStart)\n for (let j = 0; j < i; j++) {\n let p = cx.parts[j];\n if (p instanceof InlineDelimiter && p.type == LinkStart)\n p.side = 0 /* Mark.None */;\n }\n return link.to;\n }\n }\n return -1;\n }\n};\nfunction finishLink(cx, content, type, start, startPos) {\n let { text } = cx, next = cx.char(startPos), endPos = startPos;\n content.unshift(elt(Type.LinkMark, start, start + (type == Type.Image ? 2 : 1)));\n content.push(elt(Type.LinkMark, startPos - 1, startPos));\n if (next == 40 /* '(' */) {\n let pos = cx.skipSpace(startPos + 1);\n let dest = parseURL(text, pos - cx.offset, cx.offset), title;\n if (dest) {\n pos = cx.skipSpace(dest.to);\n // The destination and title must be separated by whitespace\n if (pos != dest.to) {\n title = parseLinkTitle(text, pos - cx.offset, cx.offset);\n if (title)\n pos = cx.skipSpace(title.to);\n }\n }\n if (cx.char(pos) == 41 /* ')' */) {\n content.push(elt(Type.LinkMark, startPos, startPos + 1));\n endPos = pos + 1;\n if (dest)\n content.push(dest);\n if (title)\n content.push(title);\n content.push(elt(Type.LinkMark, pos, endPos));\n }\n }\n else if (next == 91 /* '[' */) {\n let label = parseLinkLabel(text, startPos - cx.offset, cx.offset, false);\n if (label) {\n content.push(label);\n endPos = label.to;\n }\n }\n return elt(type, start, endPos, content);\n}\n// These return `null` when falling off the end of the input, `false`\n// when parsing fails otherwise (for use in the incremental link\n// reference parser).\nfunction parseURL(text, start, offset) {\n let next = text.charCodeAt(start);\n if (next == 60 /* '<' */) {\n for (let pos = start + 1; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (ch == 62 /* '>' */)\n return elt(Type.URL, start + offset, pos + 1 + offset);\n if (ch == 60 || ch == 10 /* '<\\n' */)\n return false;\n }\n return null;\n }\n else {\n let depth = 0, pos = start;\n for (let escaped = false; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (space(ch)) {\n break;\n }\n else if (escaped) {\n escaped = false;\n }\n else if (ch == 40 /* '(' */) {\n depth++;\n }\n else if (ch == 41 /* ')' */) {\n if (!depth)\n break;\n depth--;\n }\n else if (ch == 92 /* '\\\\' */) {\n escaped = true;\n }\n }\n return pos > start ? elt(Type.URL, start + offset, pos + offset) : pos == text.length ? null : false;\n }\n}\nfunction parseLinkTitle(text, start, offset) {\n let next = text.charCodeAt(start);\n if (next != 39 && next != 34 && next != 40 /* '\"\\'(' */)\n return false;\n let end = next == 40 ? 41 : next;\n for (let pos = start + 1, escaped = false; pos < text.length; pos++) {\n let ch = text.charCodeAt(pos);\n if (escaped)\n escaped = false;\n else if (ch == end)\n return elt(Type.LinkTitle, start + offset, pos + 1 + offset);\n else if (ch == 92 /* '\\\\' */)\n escaped = true;\n }\n return null;\n}\nfunction parseLinkLabel(text, start, offset, requireNonWS) {\n for (let escaped = false, pos = start + 1, end = Math.min(text.length, pos + 999); pos < end; pos++) {\n let ch = text.charCodeAt(pos);\n if (escaped)\n escaped = false;\n else if (ch == 93 /* ']' */)\n return requireNonWS ? false : elt(Type.LinkLabel, start + offset, pos + 1 + offset);\n else {\n if (requireNonWS && !space(ch))\n requireNonWS = false;\n if (ch == 91 /* '[' */)\n return false;\n else if (ch == 92 /* '\\\\' */)\n escaped = true;\n }\n }\n return null;\n}\n/**\nInline parsing functions get access to this context, and use it to\nread the content and emit syntax nodes.\n*/\nclass InlineContext {\n /**\n @internal\n */\n constructor(\n /**\n The parser that is being used.\n */\n parser, \n /**\n The text of this inline section.\n */\n text, \n /**\n The starting offset of the section in the document.\n */\n offset) {\n this.parser = parser;\n this.text = text;\n this.offset = offset;\n /**\n @internal\n */\n this.parts = [];\n }\n /**\n Get the character code at the given (document-relative)\n position.\n */\n char(pos) { return pos >= this.end ? -1 : this.text.charCodeAt(pos - this.offset); }\n /**\n The position of the end of this inline section.\n */\n get end() { return this.offset + this.text.length; }\n /**\n Get a substring of this inline section. Again uses\n document-relative positions.\n */\n slice(from, to) { return this.text.slice(from - this.offset, to - this.offset); }\n /**\n @internal\n */\n append(elt) {\n this.parts.push(elt);\n return elt.to;\n }\n /**\n Add a [delimiter](#DelimiterType) at this given position. `open`\n and `close` indicate whether this delimiter is opening, closing,\n or both. Returns the end of the delimiter, for convenient\n returning from [parse functions](#InlineParser.parse).\n */\n addDelimiter(type, from, to, open, close) {\n return this.append(new InlineDelimiter(type, from, to, (open ? 1 /* Mark.Open */ : 0 /* Mark.None */) | (close ? 2 /* Mark.Close */ : 0 /* Mark.None */)));\n }\n /**\n Returns true when there is an unmatched link or image opening\n token before the current position.\n */\n get hasOpenLink() {\n for (let i = this.parts.length - 1; i >= 0; i--) {\n let part = this.parts[i];\n if (part instanceof InlineDelimiter && (part.type == LinkStart || part.type == ImageStart))\n return true;\n }\n return false;\n }\n /**\n Add an inline element. Returns the end of the element.\n */\n addElement(elt) {\n return this.append(elt);\n }\n /**\n Resolve markers between this.parts.length and from, wrapping matched markers in the\n appropriate node and updating the content of this.parts. @internal\n */\n resolveMarkers(from) {\n // Scan forward, looking for closing tokens\n for (let i = from; i < this.parts.length; i++) {\n let close = this.parts[i];\n if (!(close instanceof InlineDelimiter && close.type.resolve && (close.side & 2 /* Mark.Close */)))\n continue;\n let emp = close.type == EmphasisUnderscore || close.type == EmphasisAsterisk;\n let closeSize = close.to - close.from;\n let open, j = i - 1;\n // Continue scanning for a matching opening token\n for (; j >= from; j--) {\n let part = this.parts[j];\n if (part instanceof InlineDelimiter && (part.side & 1 /* Mark.Open */) && part.type == close.type &&\n // Ignore emphasis delimiters where the character count doesn't match\n !(emp && ((close.side & 1 /* Mark.Open */) || (part.side & 2 /* Mark.Close */)) &&\n (part.to - part.from + closeSize) % 3 == 0 && ((part.to - part.from) % 3 || closeSize % 3))) {\n open = part;\n break;\n }\n }\n if (!open)\n continue;\n let type = close.type.resolve, content = [];\n let start = open.from, end = close.to;\n // Emphasis marker effect depends on the character count. Size consumed is minimum of the two\n // markers.\n if (emp) {\n let size = Math.min(2, open.to - open.from, closeSize);\n start = open.to - size;\n end = close.from + size;\n type = size == 1 ? \"Emphasis\" : \"StrongEmphasis\";\n }\n // Move the covered region into content, optionally adding marker nodes\n if (open.type.mark)\n content.push(this.elt(open.type.mark, start, open.to));\n for (let k = j + 1; k < i; k++) {\n if (this.parts[k] instanceof Element)\n content.push(this.parts[k]);\n this.parts[k] = null;\n }\n if (close.type.mark)\n content.push(this.elt(close.type.mark, close.from, end));\n let element = this.elt(type, start, end, content);\n // If there are leftover emphasis marker characters, shrink the close/open markers. Otherwise, clear them.\n this.parts[j] = emp && open.from != start ? new InlineDelimiter(open.type, open.from, start, open.side) : null;\n let keep = this.parts[i] = emp && close.to != end ? new InlineDelimiter(close.type, end, close.to, close.side) : null;\n // Insert the new element in this.parts\n if (keep)\n this.parts.splice(i, 0, element);\n else\n this.parts[i] = element;\n }\n // Collect the elements remaining in this.parts into an array.\n let result = [];\n for (let i = from; i < this.parts.length; i++) {\n let part = this.parts[i];\n if (part instanceof Element)\n result.push(part);\n }\n return result;\n }\n /**\n Find an opening delimiter of the given type. Returns `null` if\n no delimiter is found, or an index that can be passed to\n [`takeContent`](#InlineContext.takeContent) otherwise.\n */\n findOpeningDelimiter(type) {\n for (let i = this.parts.length - 1; i >= 0; i--) {\n let part = this.parts[i];\n if (part instanceof InlineDelimiter && part.type == type && (part.side & 1 /* Mark.Open */))\n return i;\n }\n return null;\n }\n /**\n Remove all inline elements and delimiters starting from the\n given index (which you should get from\n [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter),\n resolve delimiters inside of them, and return them as an array\n of elements.\n */\n takeContent(startIndex) {\n let content = this.resolveMarkers(startIndex);\n this.parts.length = startIndex;\n return content;\n }\n /**\n Return the delimiter at the given index. Mostly useful to get\n additional info out of a delimiter index returned by\n [`findOpeningDelimiter`](#InlineContext.findOpeningDelimiter).\n Returns null if there is no delimiter at this index.\n */\n getDelimiterAt(index) {\n let part = this.parts[index];\n return part instanceof InlineDelimiter ? part : null;\n }\n /**\n Skip space after the given (document) position, returning either\n the position of the next non-space character or the end of the\n section.\n */\n skipSpace(from) { return skipSpace(this.text, from - this.offset) + this.offset; }\n elt(type, from, to, children) {\n if (typeof type == \"string\")\n return elt(this.parser.getNodeType(type), from, to, children);\n return new TreeElement(type, from);\n }\n}\n/**\nThe opening delimiter type used by the standard link parser.\n*/\nInlineContext.linkStart = LinkStart;\n/**\nOpening delimiter type used for standard images.\n*/\nInlineContext.imageStart = ImageStart;\nfunction injectMarks(elements, marks) {\n if (!marks.length)\n return elements;\n if (!elements.length)\n return marks;\n let elts = elements.slice(), eI = 0;\n for (let mark of marks) {\n while (eI < elts.length && elts[eI].to < mark.to)\n eI++;\n if (eI < elts.length && elts[eI].from < mark.from) {\n let e = elts[eI];\n if (e instanceof Element)\n elts[eI] = new Element(e.type, e.from, e.to, injectMarks(e.children, [mark]));\n }\n else {\n elts.splice(eI++, 0, mark);\n }\n }\n return elts;\n}\n// These are blocks that can span blank lines, and should thus only be\n// reused if their next sibling is also being reused.\nconst NotLast = [Type.CodeBlock, Type.ListItem, Type.OrderedList, Type.BulletList];\nclass FragmentCursor {\n constructor(fragments, input) {\n this.fragments = fragments;\n this.input = input;\n // Index into fragment array\n this.i = 0;\n // Active fragment\n this.fragment = null;\n this.fragmentEnd = -1;\n // Cursor into the current fragment, if any. When `moveTo` returns\n // true, this points at the first block after `pos`.\n this.cursor = null;\n if (fragments.length)\n this.fragment = fragments[this.i++];\n }\n nextFragment() {\n this.fragment = this.i < this.fragments.length ? this.fragments[this.i++] : null;\n this.cursor = null;\n this.fragmentEnd = -1;\n }\n moveTo(pos, lineStart) {\n while (this.fragment && this.fragment.to <= pos)\n this.nextFragment();\n if (!this.fragment || this.fragment.from > (pos ? pos - 1 : 0))\n return false;\n if (this.fragmentEnd < 0) {\n let end = this.fragment.to;\n while (end > 0 && this.input.read(end - 1, end) != \"\\n\")\n end--;\n this.fragmentEnd = end ? end - 1 : 0;\n }\n let c = this.cursor;\n if (!c) {\n c = this.cursor = this.fragment.tree.cursor();\n c.firstChild();\n }\n let rPos = pos + this.fragment.offset;\n while (c.to <= rPos)\n if (!c.parent())\n return false;\n for (;;) {\n if (c.from >= rPos)\n return this.fragment.from <= lineStart;\n if (!c.childAfter(rPos))\n return false;\n }\n }\n matches(hash) {\n let tree = this.cursor.tree;\n return tree && tree.prop(NodeProp.contextHash) == hash;\n }\n takeNodes(cx) {\n let cur = this.cursor, off = this.fragment.offset, fragEnd = this.fragmentEnd - (this.fragment.openEnd ? 1 : 0);\n let start = cx.absoluteLineStart, end = start, blockI = cx.block.children.length;\n let prevEnd = end, prevI = blockI;\n for (;;) {\n if (cur.to - off > fragEnd) {\n if (cur.type.isAnonymous && cur.firstChild())\n continue;\n break;\n }\n let pos = toRelative(cur.from - off, cx.ranges);\n if (cur.to - off <= cx.ranges[cx.rangeI].to) { // Fits in current range\n cx.addNode(cur.tree, pos);\n }\n else {\n let dummy = new Tree(cx.parser.nodeSet.types[Type.Paragraph], [], [], 0, cx.block.hashProp);\n cx.reusePlaceholders.set(dummy, cur.tree);\n cx.addNode(dummy, pos);\n }\n // Taken content must always end in a block, because incremental\n // parsing happens on block boundaries. Never stop directly\n // after an indented code block, since those can continue after\n // any number of blank lines.\n if (cur.type.is(\"Block\")) {\n if (NotLast.indexOf(cur.type.id) < 0) {\n end = cur.to - off;\n blockI = cx.block.children.length;\n }\n else {\n end = prevEnd;\n blockI = prevI;\n }\n prevEnd = cur.to - off;\n prevI = cx.block.children.length;\n }\n if (!cur.nextSibling())\n break;\n }\n while (cx.block.children.length > blockI) {\n cx.block.children.pop();\n cx.block.positions.pop();\n }\n return end - start;\n }\n}\n// Convert an input-stream-relative position to a\n// Markdown-doc-relative position by subtracting the size of all input\n// gaps before `abs`.\nfunction toRelative(abs, ranges) {\n let pos = abs;\n for (let i = 1; i < ranges.length; i++) {\n let gapFrom = ranges[i - 1].to, gapTo = ranges[i].from;\n if (gapFrom < abs)\n pos -= gapTo - gapFrom;\n }\n return pos;\n}\nconst markdownHighlighting = styleTags({\n \"Blockquote/...\": tags.quote,\n HorizontalRule: tags.contentSeparator,\n \"ATXHeading1/... SetextHeading1/...\": tags.heading1,\n \"ATXHeading2/... SetextHeading2/...\": tags.heading2,\n \"ATXHeading3/...\": tags.heading3,\n \"ATXHeading4/...\": tags.heading4,\n \"ATXHeading5/...\": tags.heading5,\n \"ATXHeading6/...\": tags.heading6,\n \"Comment CommentBlock\": tags.comment,\n Escape: tags.escape,\n Entity: tags.character,\n \"Emphasis/...\": tags.emphasis,\n \"StrongEmphasis/...\": tags.strong,\n \"Link/... Image/...\": tags.link,\n \"OrderedList/... BulletList/...\": tags.list,\n \"BlockQuote/...\": tags.quote,\n \"InlineCode CodeText\": tags.monospace,\n \"URL Autolink\": tags.url,\n \"HeaderMark HardBreak QuoteMark ListMark LinkMark EmphasisMark CodeMark\": tags.processingInstruction,\n \"CodeInfo LinkLabel\": tags.labelName,\n LinkTitle: tags.string,\n Paragraph: tags.content\n});\n/**\nThe default CommonMark parser.\n*/\nconst parser = new MarkdownParser(new NodeSet(nodeTypes).extend(markdownHighlighting), Object.keys(DefaultBlockParsers).map(n => DefaultBlockParsers[n]), Object.keys(DefaultBlockParsers).map(n => DefaultLeafBlocks[n]), Object.keys(DefaultBlockParsers), DefaultEndLeaf, DefaultSkipMarkup, Object.keys(DefaultInline).map(n => DefaultInline[n]), Object.keys(DefaultInline), []);\n\nfunction leftOverSpace(node, from, to) {\n let ranges = [];\n for (let n = node.firstChild, pos = from;; n = n.nextSibling) {\n let nextPos = n ? n.from : to;\n if (nextPos > pos)\n ranges.push({ from: pos, to: nextPos });\n if (!n)\n break;\n pos = n.to;\n }\n return ranges;\n}\n/**\nCreate a Markdown extension to enable nested parsing on code\nblocks and/or embedded HTML.\n*/\nfunction parseCode(config) {\n let { codeParser, htmlParser } = config;\n let wrap = parseMixed((node, input) => {\n let id = node.type.id;\n if (codeParser && (id == Type.CodeBlock || id == Type.FencedCode)) {\n let info = \"\";\n if (id == Type.FencedCode) {\n let infoNode = node.node.getChild(Type.CodeInfo);\n if (infoNode)\n info = input.read(infoNode.from, infoNode.to);\n }\n let parser = codeParser(info);\n if (parser)\n return { parser, overlay: node => node.type.id == Type.CodeText, bracketed: id == Type.FencedCode };\n }\n else if (htmlParser && (id == Type.HTMLBlock || id == Type.HTMLTag || id == Type.CommentBlock)) {\n return { parser: htmlParser, overlay: leftOverSpace(node.node, node.from, node.to) };\n }\n return null;\n });\n return { wrap };\n}\n\nconst StrikethroughDelim = { resolve: \"Strikethrough\", mark: \"StrikethroughMark\" };\n/**\nAn extension that implements\n[GFM-style](https://github.github.com/gfm/#strikethrough-extension-)\nStrikethrough syntax using `~~` delimiters.\n*/\nconst Strikethrough = {\n defineNodes: [{\n name: \"Strikethrough\",\n style: { \"Strikethrough/...\": tags.strikethrough }\n }, {\n name: \"StrikethroughMark\",\n style: tags.processingInstruction\n }],\n parseInline: [{\n name: \"Strikethrough\",\n parse(cx, next, pos) {\n if (next != 126 /* '~' */ || cx.char(pos + 1) != 126 || cx.char(pos + 2) == 126)\n return -1;\n let before = cx.slice(pos - 1, pos), after = cx.slice(pos + 2, pos + 3);\n let sBefore = /\\s|^$/.test(before), sAfter = /\\s|^$/.test(after);\n let pBefore = Punctuation.test(before), pAfter = Punctuation.test(after);\n return cx.addDelimiter(StrikethroughDelim, pos, pos + 2, !sAfter && (!pAfter || sBefore || pBefore), !sBefore && (!pBefore || sAfter || pAfter));\n },\n after: \"Emphasis\"\n }]\n};\n// Parse a line as a table row and return the row count. When `elts`\n// is given, push syntax elements for the content onto it.\nfunction parseRow(cx, line, startI = 0, elts, offset = 0) {\n let count = 0, first = true, cellStart = -1, cellEnd = -1, esc = false;\n let parseCell = () => {\n elts.push(cx.elt(\"TableCell\", offset + cellStart, offset + cellEnd, cx.parser.parseInline(line.slice(cellStart, cellEnd), offset + cellStart)));\n };\n for (let i = startI; i < line.length; i++) {\n let next = line.charCodeAt(i);\n if (next == 124 /* '|' */ && !esc) {\n if (!first || cellStart > -1)\n count++;\n first = false;\n if (elts) {\n if (cellStart > -1)\n parseCell();\n elts.push(cx.elt(\"TableDelimiter\", i + offset, i + offset + 1));\n }\n cellStart = cellEnd = -1;\n }\n else if (esc || next != 32 && next != 9) {\n if (cellStart < 0)\n cellStart = i;\n cellEnd = i + 1;\n }\n esc = !esc && next == 92;\n }\n if (cellStart > -1) {\n count++;\n if (elts)\n parseCell();\n }\n return count;\n}\nfunction hasPipe(str, start) {\n for (let i = start; i < str.length; i++) {\n let next = str.charCodeAt(i);\n if (next == 124 /* '|' */)\n return true;\n if (next == 92 /* '\\\\' */)\n i++;\n }\n return false;\n}\nconst delimiterLine = /^[>\\s]*\\|?(\\s*:?-+:?\\s*\\|)+(\\s*:?-+:?\\s*)?$/;\nclass TableParser {\n constructor() {\n // Null means we haven't seen the second line yet, false means this\n // isn't a table, and an array means this is a table and we've\n // parsed the given rows so far.\n this.rows = null;\n }\n nextLine(cx, line, leaf) {\n if (this.rows == null) { // Second line\n this.rows = false;\n let lineText;\n if ((line.next == 45 || line.next == 58 || line.next == 124 /* '-:|' */) &&\n delimiterLine.test(lineText = line.text.slice(line.pos))) {\n let firstRow = [], firstCount = parseRow(cx, leaf.content, 0, firstRow, leaf.start);\n if (firstCount == parseRow(cx, lineText, 0))\n this.rows = [cx.elt(\"TableHeader\", leaf.start, leaf.start + leaf.content.length, firstRow),\n cx.elt(\"TableDelimiter\", cx.lineStart + line.pos, cx.lineStart + line.text.length)];\n }\n }\n else if (this.rows) { // Line after the second\n let content = [];\n parseRow(cx, line.text, line.pos, content, cx.lineStart);\n this.rows.push(cx.elt(\"TableRow\", cx.lineStart + line.pos, cx.lineStart + line.text.length, content));\n }\n return false;\n }\n finish(cx, leaf) {\n if (!this.rows)\n return false;\n cx.addLeafElement(leaf, cx.elt(\"Table\", leaf.start, leaf.start + leaf.content.length, this.rows));\n return true;\n }\n}\n/**\nThis extension provides\n[GFM-style](https://github.github.com/gfm/#tables-extension-)\ntables, using syntax like this:\n\n```\n| head 1 | head 2 |\n| --- | --- |\n| cell 1 | cell 2 |\n```\n*/\nconst Table = {\n defineNodes: [\n { name: \"Table\", block: true },\n { name: \"TableHeader\", style: { \"TableHeader/...\": tags.heading } },\n \"TableRow\",\n { name: \"TableCell\", style: tags.content },\n { name: \"TableDelimiter\", style: tags.processingInstruction },\n ],\n parseBlock: [{\n name: \"Table\",\n leaf(_, leaf) { return hasPipe(leaf.content, 0) ? new TableParser : null; },\n endLeaf(cx, line, leaf) {\n if (leaf.parsers.some(p => p instanceof TableParser) || !hasPipe(line.text, line.basePos))\n return false;\n let next = cx.peekLine();\n return delimiterLine.test(next) && parseRow(cx, line.text, line.basePos) == parseRow(cx, next, line.basePos);\n },\n before: \"SetextHeading\"\n }]\n};\nclass TaskParser {\n nextLine() { return false; }\n finish(cx, leaf) {\n cx.addLeafElement(leaf, cx.elt(\"Task\", leaf.start, leaf.start + leaf.content.length, [\n cx.elt(\"TaskMarker\", leaf.start, leaf.start + 3),\n ...cx.parser.parseInline(leaf.content.slice(3), leaf.start + 3)\n ]));\n return true;\n }\n}\n/**\nExtension providing\n[GFM-style](https://github.github.com/gfm/#task-list-items-extension-)\ntask list items, where list items can be prefixed with `[ ]` or\n`[x]` to add a checkbox.\n*/\nconst TaskList = {\n defineNodes: [\n { name: \"Task\", block: true, style: tags.list },\n { name: \"TaskMarker\", style: tags.atom }\n ],\n parseBlock: [{\n name: \"TaskList\",\n leaf(cx, leaf) {\n return /^\\[[ xX]\\][ \\t]/.test(leaf.content) && cx.parentType().name == \"ListItem\" ? new TaskParser : null;\n },\n after: \"SetextHeading\"\n }]\n};\nconst autolinkRE = /(www\\.)|(https?:\\/\\/)|([\\w.+-]{1,100}@)|(mailto:|xmpp:)/gy;\nconst urlRE = /[\\w-]+(\\.[\\w-]+)+(:\\d+)?(\\/[^\\s<]*)?/gy;\nconst lastTwoDomainWords = /[\\w-]+\\.[\\w-]+($|[/:])/;\nconst emailRE = /[\\w.+-]+@[\\w-]+(\\.[\\w.-]+)+/gy;\nconst xmppResourceRE = /\\/[a-zA-Z\\d@.]+/gy;\nfunction count(str, from, to, ch) {\n let result = 0;\n for (let i = from; i < to; i++)\n if (str[i] == ch)\n result++;\n return result;\n}\nfunction autolinkURLEnd(text, from) {\n urlRE.lastIndex = from;\n let m = urlRE.exec(text);\n if (!m || lastTwoDomainWords.exec(m[0])[0].indexOf(\"_\") > -1)\n return -1;\n let end = from + m[0].length;\n for (;;) {\n let last = text[end - 1], m;\n if (/[?!.,:*_~]/.test(last) ||\n last == \")\" && count(text, from, end, \")\") > count(text, from, end, \"(\"))\n end--;\n else if (last == \";\" && (m = /&(?:#\\d+|#x[a-f\\d]+|\\w+);$/.exec(text.slice(from, end))))\n end = from + m.index;\n else\n break;\n }\n return end;\n}\nfunction autolinkEmailEnd(text, from) {\n emailRE.lastIndex = from;\n let m = emailRE.exec(text);\n if (!m)\n return -1;\n let last = m[0][m[0].length - 1];\n return last == \"_\" || last == \"-\" ? -1 : from + m[0].length - (last == \".\" ? 1 : 0);\n}\n/**\nExtension that implements autolinking for\n`www.`/`http://`/`https://`/`mailto:`/`xmpp:` URLs and email\naddresses.\n*/\nconst Autolink = {\n parseInline: [{\n name: \"Autolink\",\n parse(cx, next, absPos) {\n let pos = absPos - cx.offset;\n if (pos && /\\w/.test(cx.text[pos - 1]))\n return -1;\n autolinkRE.lastIndex = pos;\n let m = autolinkRE.exec(cx.text), end = -1;\n if (!m)\n return -1;\n if (m[1] || m[2]) { // www., http://\n end = autolinkURLEnd(cx.text, pos + m[0].length);\n if (end > -1 && cx.hasOpenLink) {\n let noBracket = /([^\\[\\]]|\\[[^\\]]*\\])*/.exec(cx.text.slice(pos, end));\n end = pos + noBracket[0].length;\n }\n }\n else if (m[3]) { // email address\n end = autolinkEmailEnd(cx.text, pos);\n }\n else { // mailto:/xmpp:\n end = autolinkEmailEnd(cx.text, pos + m[0].length);\n if (end > -1 && m[0] == \"xmpp:\") {\n xmppResourceRE.lastIndex = end;\n m = xmppResourceRE.exec(cx.text);\n if (m)\n end = m.index + m[0].length;\n }\n }\n if (end < 0)\n return -1;\n cx.addElement(cx.elt(\"URL\", absPos, end + cx.offset));\n return end + cx.offset;\n }\n }]\n};\n/**\nExtension bundle containing [`Table`](#Table),\n[`TaskList`](#TaskList), [`Strikethrough`](#Strikethrough), and\n[`Autolink`](#Autolink).\n*/\nconst GFM = [Table, TaskList, Strikethrough, Autolink];\nfunction parseSubSuper(ch, node, mark) {\n return (cx, next, pos) => {\n if (next != ch || cx.char(pos + 1) == ch)\n return -1;\n let elts = [cx.elt(mark, pos, pos + 1)];\n for (let i = pos + 1; i < cx.end; i++) {\n let next = cx.char(i);\n if (next == ch)\n return cx.addElement(cx.elt(node, pos, i + 1, elts.concat(cx.elt(mark, i, i + 1))));\n if (next == 92 /* '\\\\' */)\n elts.push(cx.elt(\"Escape\", i, i++ + 2));\n if (space(next))\n break;\n }\n return -1;\n };\n}\n/**\nExtension providing\n[Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\nsuperscript using `^` markers.\n*/\nconst Superscript = {\n defineNodes: [\n { name: \"Superscript\", style: tags.special(tags.content) },\n { name: \"SuperscriptMark\", style: tags.processingInstruction }\n ],\n parseInline: [{\n name: \"Superscript\",\n parse: parseSubSuper(94 /* '^' */, \"Superscript\", \"SuperscriptMark\")\n }]\n};\n/**\nExtension providing\n[Pandoc-style](https://pandoc.org/MANUAL.html#superscripts-and-subscripts)\nsubscript using `~` markers.\n*/\nconst Subscript = {\n defineNodes: [\n { name: \"Subscript\", style: tags.special(tags.content) },\n { name: \"SubscriptMark\", style: tags.processingInstruction }\n ],\n parseInline: [{\n name: \"Subscript\",\n parse: parseSubSuper(126 /* '~' */, \"Subscript\", \"SubscriptMark\")\n }]\n};\n/**\nExtension that parses two colons with only letters, underscores,\nand numbers between them as `Emoji` nodes.\n*/\nconst Emoji = {\n defineNodes: [{ name: \"Emoji\", style: tags.character }],\n parseInline: [{\n name: \"Emoji\",\n parse(cx, next, pos) {\n let match;\n if (next != 58 /* ':' */ || !(match = /^[a-zA-Z_0-9]+:/.exec(cx.slice(pos + 1, cx.end))))\n return -1;\n return cx.addElement(cx.elt(\"Emoji\", pos, pos + 1 + match[0].length));\n }\n }]\n};\n\nexport { Autolink, BlockContext, Element, Emoji, GFM, InlineContext, LeafBlock, Line, MarkdownParser, Strikethrough, Subscript, Superscript, Table, TaskList, parseCode, parser };\n","import { ContextTracker, ExternalTokenizer, LRParser } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { parseMixed } from '@lezer/common';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst scriptText = 55,\n StartCloseScriptTag = 1,\n styleText = 56,\n StartCloseStyleTag = 2,\n textareaText = 57,\n StartCloseTextareaTag = 3,\n EndTag = 4,\n SelfClosingEndTag = 5,\n StartTag = 6,\n StartScriptTag = 7,\n StartStyleTag = 8,\n StartTextareaTag = 9,\n StartSelfClosingTag = 10,\n StartCloseTag = 11,\n NoMatchStartCloseTag = 12,\n MismatchedStartCloseTag = 13,\n missingCloseTag = 58,\n IncompleteTag = 14,\n IncompleteCloseTag = 15,\n commentContent$1 = 59,\n Element = 21,\n TagName = 23,\n Attribute = 24,\n AttributeName = 25,\n AttributeValue = 27,\n UnquotedAttributeValue = 28,\n ScriptText = 29,\n StyleText = 32,\n TextareaText = 35,\n OpenTag = 37,\n CloseTag = 38,\n Dialect_noMatch = 0,\n Dialect_selfClosing = 1;\n\n/* Hand-written tokenizers for HTML. */\n\nconst selfClosers = {\n area: true, base: true, br: true, col: true, command: true,\n embed: true, frame: true, hr: true, img: true, input: true,\n keygen: true, link: true, meta: true, param: true, source: true,\n track: true, wbr: true, menuitem: true\n};\n\nconst implicitlyClosed = {\n dd: true, li: true, optgroup: true, option: true, p: true,\n rp: true, rt: true, tbody: true, td: true, tfoot: true,\n th: true, tr: true\n};\n\nconst closeOnOpen = {\n dd: {dd: true, dt: true},\n dt: {dd: true, dt: true},\n li: {li: true},\n option: {option: true, optgroup: true},\n optgroup: {optgroup: true},\n p: {\n address: true, article: true, aside: true, blockquote: true, dir: true,\n div: true, dl: true, fieldset: true, footer: true, form: true,\n h1: true, h2: true, h3: true, h4: true, h5: true, h6: true,\n header: true, hgroup: true, hr: true, menu: true, nav: true, ol: true,\n p: true, pre: true, section: true, table: true, ul: true\n },\n rp: {rp: true, rt: true},\n rt: {rp: true, rt: true},\n tbody: {tbody: true, tfoot: true},\n td: {td: true, th: true},\n tfoot: {tbody: true},\n th: {td: true, th: true},\n thead: {tbody: true, tfoot: true},\n tr: {tr: true}\n};\n\nfunction nameChar(ch) {\n return ch == 45 || ch == 46 || ch == 58 || ch >= 65 && ch <= 90 || ch == 95 || ch >= 97 && ch <= 122 || ch >= 161\n}\n\nlet cachedName = null, cachedInput = null, cachedPos = 0;\nfunction tagNameAfter(input, offset) {\n let pos = input.pos + offset;\n if (cachedPos == pos && cachedInput == input) return cachedName\n let next = input.peek(offset), name = \"\";\n for (;;) {\n if (!nameChar(next)) break\n name += String.fromCharCode(next);\n next = input.peek(++offset);\n }\n // Undefined to signal there's a <? or <!, null for just missing\n cachedInput = input; cachedPos = pos;\n return cachedName = name ? name.toLowerCase() : next == question || next == bang ? undefined : null\n}\n\nconst lessThan = 60, greaterThan = 62, slash = 47, question = 63, bang = 33, dash = 45;\n\nfunction ElementContext(name, parent) {\n this.name = name;\n this.parent = parent;\n}\n\nconst startTagTerms = [StartTag, StartSelfClosingTag, StartScriptTag, StartStyleTag, StartTextareaTag];\n\nconst elementContext = new ContextTracker({\n start: null,\n shift(context, term, stack, input) {\n return startTagTerms.indexOf(term) > -1 ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n },\n reduce(context, term) {\n return term == Element && context ? context.parent : context\n },\n reuse(context, node, stack, input) {\n let type = node.type.id;\n return type == StartTag || type == OpenTag\n ? new ElementContext(tagNameAfter(input, 1) || \"\", context) : context\n },\n strict: false\n});\n\nconst tagStart = new ExternalTokenizer((input, stack) => {\n if (input.next != lessThan) {\n // End of file, close any open tags\n if (input.next < 0 && stack.context) input.acceptToken(missingCloseTag);\n return\n }\n input.advance();\n let close = input.next == slash;\n if (close) input.advance();\n let name = tagNameAfter(input, 0);\n if (name === undefined) return\n if (!name) return input.acceptToken(close ? IncompleteCloseTag : IncompleteTag)\n\n let parent = stack.context ? stack.context.name : null;\n if (close) {\n if (name == parent) return input.acceptToken(StartCloseTag)\n if (parent && implicitlyClosed[parent]) return input.acceptToken(missingCloseTag, -2)\n if (stack.dialectEnabled(Dialect_noMatch)) return input.acceptToken(NoMatchStartCloseTag)\n for (let cx = stack.context; cx; cx = cx.parent) if (cx.name == name) return\n input.acceptToken(MismatchedStartCloseTag);\n } else {\n if (name == \"script\") return input.acceptToken(StartScriptTag)\n if (name == \"style\") return input.acceptToken(StartStyleTag)\n if (name == \"textarea\") return input.acceptToken(StartTextareaTag)\n if (selfClosers.hasOwnProperty(name)) return input.acceptToken(StartSelfClosingTag)\n if (parent && closeOnOpen[parent] && closeOnOpen[parent][name]) input.acceptToken(missingCloseTag, -1);\n else input.acceptToken(StartTag);\n }\n}, {contextual: true});\n\nconst commentContent = new ExternalTokenizer(input => {\n for (let dashes = 0, i = 0;; i++) {\n if (input.next < 0) {\n if (i) input.acceptToken(commentContent$1);\n break\n }\n if (input.next == dash) {\n dashes++;\n } else if (input.next == greaterThan && dashes >= 2) {\n if (i >= 3) input.acceptToken(commentContent$1, -2);\n break\n } else {\n dashes = 0;\n }\n input.advance();\n }\n});\n\nfunction inForeignElement(context) {\n for (; context; context = context.parent)\n if (context.name == \"svg\" || context.name == \"math\") return true\n return false\n}\n\nconst endTag = new ExternalTokenizer((input, stack) => {\n if (input.next == slash && input.peek(1) == greaterThan) {\n let selfClosing = stack.dialectEnabled(Dialect_selfClosing) || inForeignElement(stack.context);\n input.acceptToken(selfClosing ? SelfClosingEndTag : EndTag, 2);\n } else if (input.next == greaterThan) {\n input.acceptToken(EndTag, 1);\n }\n});\n\nfunction contentTokenizer(tag, textToken, endToken) {\n let lastState = 2 + tag.length;\n return new ExternalTokenizer(input => {\n // state means:\n // - 0 nothing matched\n // - 1 '<' matched\n // - 2 '</'\n // - 3-(1+tag.length) part of the tag matched\n // - lastState whole tag + possibly whitespace matched\n for (let state = 0, matchedLen = 0, i = 0;; i++) {\n if (input.next < 0) {\n if (i) input.acceptToken(textToken);\n break\n }\n if (state == 0 && input.next == lessThan ||\n state == 1 && input.next == slash ||\n state >= 2 && state < lastState && input.next == tag.charCodeAt(state - 2)) {\n state++;\n matchedLen++;\n } else if (state == lastState && input.next == greaterThan) {\n if (i > matchedLen)\n input.acceptToken(textToken, -matchedLen);\n else\n input.acceptToken(endToken, -(matchedLen - 2));\n break\n } else if ((input.next == 10 /* '\\n' */ || input.next == 13 /* '\\r' */) && i) {\n input.acceptToken(textToken, 1);\n break\n } else {\n state = matchedLen = 0;\n }\n input.advance();\n }\n })\n}\n\nconst scriptTokens = contentTokenizer(\"script\", scriptText, StartCloseScriptTag);\n\nconst styleTokens = contentTokenizer(\"style\", styleText, StartCloseStyleTag);\n\nconst textareaTokens = contentTokenizer(\"textarea\", textareaText, StartCloseTextareaTag);\n\nconst htmlHighlighting = styleTags({\n \"Text RawText IncompleteTag IncompleteCloseTag\": tags.content,\n \"StartTag StartCloseTag SelfClosingEndTag EndTag\": tags.angleBracket,\n TagName: tags.tagName,\n \"MismatchedCloseTag/TagName\": [tags.tagName, tags.invalid],\n AttributeName: tags.attributeName,\n \"AttributeValue UnquotedAttributeValue\": tags.attributeValue,\n Is: tags.definitionOperator,\n \"EntityReference CharacterReference\": tags.character,\n Comment: tags.blockComment,\n ProcessingInst: tags.processingInstruction,\n DoctypeDecl: tags.documentMeta\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst parser = LRParser.deserialize({\n version: 14,\n states: \",xOVO!rOOO!ZQ#tO'#CrO!`Q#tO'#C{O!eQ#tO'#DOO!jQ#tO'#DRO!oQ#tO'#DTO!tOaO'#CqO#PObO'#CqO#[OdO'#CqO$kO!rO'#CqOOO`'#Cq'#CqO$rO$fO'#DUO$zQ#tO'#DWO%PQ#tO'#DXOOO`'#Dl'#DlOOO`'#DZ'#DZQVO!rOOO%UQ&rO,59^O%aQ&rO,59gO%lQ&rO,59jO%wQ&rO,59mO&SQ&rO,59oOOOa'#D_'#D_O&_OaO'#CyO&jOaO,59]OOOb'#D`'#D`O&rObO'#C|O&}ObO,59]OOOd'#Da'#DaO'VOdO'#DPO'bOdO,59]OOO`'#Db'#DbO'jO!rO,59]O'qQ#tO'#DSOOO`,59],59]OOOp'#Dc'#DcO'vO$fO,59pOOO`,59p,59pO(OQ#|O,59rO(TQ#|O,59sOOO`-E7X-E7XO(YQ&rO'#CtOOQW'#D['#D[O(hQ&rO1G.xOOOa1G.x1G.xOOO`1G/Z1G/ZO(sQ&rO1G/ROOOb1G/R1G/RO)OQ&rO1G/UOOOd1G/U1G/UO)ZQ&rO1G/XOOO`1G/X1G/XO)fQ&rO1G/ZOOOa-E7]-E7]O)qQ#tO'#CzOOO`1G.w1G.wOOOb-E7^-E7^O)vQ#tO'#C}OOOd-E7_-E7_O){Q#tO'#DQOOO`-E7`-E7`O*QQ#|O,59nOOOp-E7a-E7aOOO`1G/[1G/[OOO`1G/^1G/^OOO`1G/_1G/_O*VQ,UO,59`OOQW-E7Y-E7YOOOa7+$d7+$dOOO`7+$u7+$uOOOb7+$m7+$mOOOd7+$p7+$pOOO`7+$s7+$sO*bQ#|O,59fO*gQ#|O,59iO*lQ#|O,59lOOO`1G/Y1G/YO*qO7[O'#CwO+SOMhO'#CwOOQW1G.z1G.zOOO`1G/Q1G/QOOO`1G/T1G/TOOO`1G/W1G/WOOOO'#D]'#D]O+eO7[O,59cOOQW,59c,59cOOOO'#D^'#D^O+vOMhO,59cOOOO-E7Z-E7ZOOQW1G.}1G.}OOOO-E7[-E7[\",\n stateData: \",c~O!_OS~OUSOVPOWQOXROYTO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O|_O!eZO~OgaO~OgbO~OgcO~OgdO~OgeO~O!XfOPmP![mP~O!YiOQpP![pP~O!ZlORsP![sP~OUSOVPOWQOXROYTOZqO[]O][O^^O_^Oa^Ob^Oc^Od^Oy^O!eZO~O![rO~P#gO!]sO!fuO~OgvO~OgwO~OS|OT}OiyO~OS!POT}OiyO~OS!ROT}OiyO~OS!TOT}OiyO~OS}OT}OiyO~O!XfOPmX![mX~OP!WO![!XO~O!YiOQpX![pX~OQ!ZO![!XO~O!ZlORsX![sX~OR!]O![!XO~O![!XO~P#gOg!_O~O!]sO!f!aO~OS!bO~OS!cO~Oj!dOShXThXihX~OS!fOT!gOiyO~OS!hOT!gOiyO~OS!iOT!gOiyO~OS!jOT!gOiyO~OS!gOT!gOiyO~Og!kO~Og!lO~Og!mO~OS!nO~Ol!qO!a!oO!c!pO~OS!rO~OS!sO~OS!tO~Ob!uOc!uOd!uO!a!wO!b!uO~Ob!xOc!xOd!xO!c!wO!d!xO~Ob!uOc!uOd!uO!a!{O!b!uO~Ob!xOc!xOd!xO!c!{O!d!xO~OT~cbd!ey|!e~\",\n goto: \"%q!aPPPPPPPPPPPPPPPPPPPPP!b!hP!nPP!zP!}#Q#T#Z#^#a#g#j#m#s#y!bP!b!bP$P$V$m$s$y%P%V%]%cPPPPPPPP%iX^OX`pXUOX`pezabcde{!O!Q!S!UR!q!dRhUR!XhXVOX`pRkVR!XkXWOX`pRnWR!XnXXOX`pQrXR!XpXYOX`pQ`ORx`Q{aQ!ObQ!QcQ!SdQ!UeZ!e{!O!Q!S!UQ!v!oR!z!vQ!y!pR!|!yQgUR!VgQjVR!YjQmWR![mQpXR!^pQtZR!`tS_O`ToXp\",\n nodeNames: \"⚠ StartCloseTag StartCloseTag StartCloseTag EndTag SelfClosingEndTag StartTag StartTag StartTag StartTag StartTag StartCloseTag StartCloseTag StartCloseTag IncompleteTag IncompleteCloseTag Document Text EntityReference CharacterReference InvalidEntity Element OpenTag TagName Attribute AttributeName Is AttributeValue UnquotedAttributeValue ScriptText CloseTag OpenTag StyleText CloseTag OpenTag TextareaText CloseTag OpenTag CloseTag SelfClosingTag Comment ProcessingInst MismatchedCloseTag CloseTag DoctypeDecl\",\n maxTerm: 68,\n context: elementContext,\n nodeProps: [\n [\"closedBy\", -10,1,2,3,7,8,9,10,11,12,13,\"EndTag\",6,\"EndTag SelfClosingEndTag\",-4,22,31,34,37,\"CloseTag\"],\n [\"openedBy\", 4,\"StartTag StartCloseTag\",5,\"StartTag\",-4,30,33,36,38,\"OpenTag\"],\n [\"group\", -10,14,15,18,19,20,21,40,41,42,43,\"Entity\",17,\"Entity TextContent\",-3,29,32,35,\"TextContent Entity\"],\n [\"isolate\", -11,22,30,31,33,34,36,37,38,39,42,43,\"ltr\",-3,27,28,40,\"\"]\n ],\n propSources: [htmlHighlighting],\n skippedNodes: [0],\n repeatNodeCount: 9,\n tokenData: \"!<p!aR!YOX$qXY,QYZ,QZ[$q[]&X]^,Q^p$qpq,Qqr-_rs3_sv-_vw3}wxHYx}-_}!OH{!O!P-_!P!Q$q!Q![-_![!]Mz!]!^-_!^!_!$S!_!`!;x!`!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4U-_4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!Z$|caPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr$qrs&}sv$qvw+Pwx(tx!^$q!^!_*V!_!a&X!a#S$q#S#T&X#T;'S$q;'S;=`+z<%lO$q!R&bXaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&Xq'UVaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}P'pTaPOv'kw!^'k!_;'S'k;'S;=`(P<%lO'kP(SP;=`<%l'kp([S!dpOv(Vx;'S(V;'S;=`(h<%lO(Vp(kP;=`<%l(Vq(qP;=`<%l&}a({WaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t`)jT!b`Or)esv)ew;'S)e;'S;=`)y<%lO)e`)|P;=`<%l)ea*SP;=`<%l(t!Q*^V!b`!dpOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!Q*vP;=`<%l*V!R*|P;=`<%l&XW+UYlWOX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+PW+wP;=`<%l+P!Z+}P;=`<%l$q!a,]`aP!b`!dp!_^OX&XXY,QYZ,QZ]&X]^,Q^p&Xpq,Qqr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!_-ljiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q[/ebiSlWOX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+PS0rXiSqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0mS1bP;=`<%l0m[1hP;=`<%l/^!V1vciSaP!b`!dpOq&Xqr1krs&}sv1kvw0mwx(tx!P1k!P!Q&X!Q!^1k!^!_*V!_!a&X!a#s1k#s$f&X$f;'S1k;'S;=`3R<%l?Ah1k?Ah?BY&X?BY?Mn1k?MnO&X!V3UP;=`<%l1k!_3[P;=`<%l-_!Z3hV!ahaP!dpOv&}wx'kx!^&}!^!_(V!_;'S&};'S;=`(n<%lO&}!_4WiiSlWd!ROX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst>]tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^/^!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!Z5zblWOX5uXZ7SZ[5u[^7S^p5uqr5urs7Sst+Ptw5uwx7Sx!]5u!]!^7w!^!a7S!a#S5u#S#T7S#T;'S5u;'S;=`8n<%lO5u!R7VVOp7Sqs7St!]7S!]!^7l!^;'S7S;'S;=`7q<%lO7S!R7qOb!R!R7tP;=`<%l7S!Z8OYlWb!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!Z8qP;=`<%l5u!_8{iiSlWOX5uXZ7SZ[5u[^7S^p5uqr8trs7Sst/^tw8twx7Sx!P8t!P!Q5u!Q!]8t!]!^:j!^!a7S!a#S8t#S#T;{#T#s8t#s$f5u$f;'S8t;'S;=`>V<%l?Ah8t?Ah?BY5u?BY?Mn8t?MnO5u!_:sbiSlWb!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!V<QciSOp7Sqr;{rs7Sst0mtw;{wx7Sx!P;{!P!Q7S!Q!];{!]!^=]!^!a7S!a#s;{#s$f7S$f;'S;{;'S;=`>P<%l?Ah;{?Ah?BY7S?BY?Mn;{?MnO7S!V=dXiSb!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!V>SP;=`<%l;{!_>YP;=`<%l8t!_>dhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^/^!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!Z@TalWOX@OXZAYZ[@O[^AY^p@Oqr@OrsAYsw@OwxAYx!]@O!]!^Az!^!aAY!a#S@O#S#TAY#T;'S@O;'S;=`Bq<%lO@O!RA]UOpAYq!]AY!]!^Ao!^;'SAY;'S;=`At<%lOAY!RAtOc!R!RAwP;=`<%lAY!ZBRYlWc!ROX+PZ[+P^p+Pqr+Psw+Px!^+P!a#S+P#T;'S+P;'S;=`+t<%lO+P!ZBtP;=`<%l@O!_COhiSlWOX@OXZAYZ[@O[^AY^p@OqrBwrsAYswBwwxAYx!PBw!P!Q@O!Q!]Bw!]!^Dj!^!aAY!a#SBw#S#TE{#T#sBw#s$f@O$f;'SBw;'S;=`HS<%l?AhBw?Ah?BY@O?BY?MnBw?MnO@O!_DsbiSlWc!ROX+PZ[+P^p+Pqr/^sw/^x!P/^!P!Q+P!Q!^/^!a#S/^#S#T0m#T#s/^#s$f+P$f;'S/^;'S;=`1e<%l?Ah/^?Ah?BY+P?BY?Mn/^?MnO+P!VFQbiSOpAYqrE{rsAYswE{wxAYx!PE{!P!QAY!Q!]E{!]!^GY!^!aAY!a#sE{#s$fAY$f;'SE{;'S;=`G|<%l?AhE{?Ah?BYAY?BY?MnE{?MnOAY!VGaXiSc!Rqr0msw0mx!P0m!Q!^0m!a#s0m$f;'S0m;'S;=`1_<%l?Ah0m?BY?Mn0m!VHPP;=`<%lE{!_HVP;=`<%lBw!ZHcW!cxaP!b`Or(trs'ksv(tw!^(t!^!_)e!_;'S(t;'S;=`*P<%lO(t!aIYliSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OKQ!O!P-_!P!Q$q!Q!^-_!^!_*V!_!a&X!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!aK_kiSaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx!P-_!P!Q$q!Q!^-_!^!_*V!_!`&X!`!aMS!a#S-_#S#T1k#T#s-_#s$f$q$f;'S-_;'S;=`3X<%l?Ah-_?Ah?BY$q?BY?Mn-_?MnO$q!TM_XaP!b`!dp!fQOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X!aNZ!ZiSgQaPlW!b`!dpOX$qXZ&XZ[$q[^&X^p$qpq&Xqr-_rs&}sv-_vw/^wx(tx}-_}!OMz!O!PMz!P!Q$q!Q![Mz![!]Mz!]!^-_!^!_*V!_!a&X!a!c-_!c!}Mz!}#R-_#R#SMz#S#T1k#T#oMz#o#s-_#s$f$q$f$}-_$}%OMz%O%W-_%W%oMz%o%p-_%p&aMz&a&b-_&b1pMz1p4UMz4U4dMz4d4e-_4e$ISMz$IS$I`-_$I`$IbMz$Ib$Je-_$Je$JgMz$Jg$Kh-_$Kh%#tMz%#t&/x-_&/x&EtMz&Et&FV-_&FV;'SMz;'S;:j!#|;:j;=`3X<%l?&r-_?&r?AhMz?Ah?BY$q?BY?MnMz?MnO$q!a!$PP;=`<%lMz!R!$ZY!b`!dpOq*Vqr!$yrs(Vsv*Vwx)ex!a*V!a!b!4t!b;'S*V;'S;=`*s<%lO*V!R!%Q]!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!%y!O!f*V!f!g!']!g#W*V#W#X!0`#X;'S*V;'S;=`*s<%lO*V!R!&QX!b`!dpOr*Vrs(Vsv*Vwx)ex}*V}!O!&m!O;'S*V;'S;=`*s<%lO*V!R!&vV!b`!dp!ePOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!'dX!b`!dpOr*Vrs(Vsv*Vwx)ex!q*V!q!r!(P!r;'S*V;'S;=`*s<%lO*V!R!(WX!b`!dpOr*Vrs(Vsv*Vwx)ex!e*V!e!f!(s!f;'S*V;'S;=`*s<%lO*V!R!(zX!b`!dpOr*Vrs(Vsv*Vwx)ex!v*V!v!w!)g!w;'S*V;'S;=`*s<%lO*V!R!)nX!b`!dpOr*Vrs(Vsv*Vwx)ex!{*V!{!|!*Z!|;'S*V;'S;=`*s<%lO*V!R!*bX!b`!dpOr*Vrs(Vsv*Vwx)ex!r*V!r!s!*}!s;'S*V;'S;=`*s<%lO*V!R!+UX!b`!dpOr*Vrs(Vsv*Vwx)ex!g*V!g!h!+q!h;'S*V;'S;=`*s<%lO*V!R!+xY!b`!dpOr!+qrs!,hsv!+qvw!-Swx!.[x!`!+q!`!a!/j!a;'S!+q;'S;=`!0Y<%lO!+qq!,mV!dpOv!,hvx!-Sx!`!,h!`!a!-q!a;'S!,h;'S;=`!.U<%lO!,hP!-VTO!`!-S!`!a!-f!a;'S!-S;'S;=`!-k<%lO!-SP!-kO|PP!-nP;=`<%l!-Sq!-xS!dp|POv(Vx;'S(V;'S;=`(h<%lO(Vq!.XP;=`<%l!,ha!.aX!b`Or!.[rs!-Ssv!.[vw!-Sw!`!.[!`!a!.|!a;'S!.[;'S;=`!/d<%lO!.[a!/TT!b`|POr)esv)ew;'S)e;'S;=`)y<%lO)ea!/gP;=`<%l!.[!R!/sV!b`!dp|POr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!0]P;=`<%l!+q!R!0gX!b`!dpOr*Vrs(Vsv*Vwx)ex#c*V#c#d!1S#d;'S*V;'S;=`*s<%lO*V!R!1ZX!b`!dpOr*Vrs(Vsv*Vwx)ex#V*V#V#W!1v#W;'S*V;'S;=`*s<%lO*V!R!1}X!b`!dpOr*Vrs(Vsv*Vwx)ex#h*V#h#i!2j#i;'S*V;'S;=`*s<%lO*V!R!2qX!b`!dpOr*Vrs(Vsv*Vwx)ex#m*V#m#n!3^#n;'S*V;'S;=`*s<%lO*V!R!3eX!b`!dpOr*Vrs(Vsv*Vwx)ex#d*V#d#e!4Q#e;'S*V;'S;=`*s<%lO*V!R!4XX!b`!dpOr*Vrs(Vsv*Vwx)ex#X*V#X#Y!+q#Y;'S*V;'S;=`*s<%lO*V!R!4{Y!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!a!4t!a!b!:]!b;'S!4t;'S;=`!;r<%lO!4tq!5pV!dpOv!5kvx!6Vx!a!5k!a!b!7W!b;'S!5k;'S;=`!8V<%lO!5kP!6YTO!a!6V!a!b!6i!b;'S!6V;'S;=`!7Q<%lO!6VP!6lTO!`!6V!`!a!6{!a;'S!6V;'S;=`!7Q<%lO!6VP!7QOyPP!7TP;=`<%l!6Vq!7]V!dpOv!5kvx!6Vx!`!5k!`!a!7r!a;'S!5k;'S;=`!8V<%lO!5kq!7yS!dpyPOv(Vx;'S(V;'S;=`(h<%lO(Vq!8YP;=`<%l!5ka!8bX!b`Or!8]rs!6Vsv!8]vw!6Vw!a!8]!a!b!8}!b;'S!8];'S;=`!:V<%lO!8]a!9SX!b`Or!8]rs!6Vsv!8]vw!6Vw!`!8]!`!a!9o!a;'S!8];'S;=`!:V<%lO!8]a!9vT!b`yPOr)esv)ew;'S)e;'S;=`)y<%lO)ea!:YP;=`<%l!8]!R!:dY!b`!dpOr!4trs!5ksv!4tvw!6Vwx!8]x!`!4t!`!a!;S!a;'S!4t;'S;=`!;r<%lO!4t!R!;]V!b`!dpyPOr*Vrs(Vsv*Vwx)ex;'S*V;'S;=`*s<%lO*V!R!;uP;=`<%l!4t!V!<TXjSaP!b`!dpOr&Xrs&}sv&Xwx(tx!^&X!^!_*V!_;'S&X;'S;=`*y<%lO&X\",\n tokenizers: [scriptTokens, styleTokens, textareaTokens, endTag, tagStart, commentContent, 0, 1, 2, 3, 4, 5],\n topRules: {\"Document\":[0,16]},\n dialects: {noMatch: 0, selfClosing: 515},\n tokenPrec: 517\n});\n\nfunction getAttrs(openTag, input) {\n let attrs = Object.create(null);\n for (let att of openTag.getChildren(Attribute)) {\n let name = att.getChild(AttributeName), value = att.getChild(AttributeValue) || att.getChild(UnquotedAttributeValue);\n if (name) attrs[input.read(name.from, name.to)] =\n !value ? \"\" : value.type.id == AttributeValue ? input.read(value.from + 1, value.to - 1) : input.read(value.from, value.to);\n }\n return attrs\n}\n\nfunction findTagName(openTag, input) {\n let tagNameNode = openTag.getChild(TagName);\n return tagNameNode ? input.read(tagNameNode.from, tagNameNode.to) : \" \"\n}\n\nfunction maybeNest(node, input, tags) {\n let attrs;\n for (let tag of tags) {\n if (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(node.node.parent.firstChild, input))))\n return {parser: tag.parser, bracketed: true}\n }\n return null\n}\n\n// tags?: {\n// tag: string,\n// attrs?: ({[attr: string]: string}) => boolean,\n// parser: Parser\n// }[]\n// attributes?: {\n// name: string,\n// tagName?: string,\n// parser: Parser\n// }[]\n \nfunction configureNesting(tags = [], attributes = []) {\n let script = [], style = [], textarea = [], other = [];\n for (let tag of tags) {\n let array = tag.tag == \"script\" ? script : tag.tag == \"style\" ? style : tag.tag == \"textarea\" ? textarea : other;\n array.push(tag);\n }\n let attrs = attributes.length ? Object.create(null) : null;\n for (let attr of attributes) (attrs[attr.name] || (attrs[attr.name] = [])).push(attr);\n\n return parseMixed((node, input) => {\n let id = node.type.id;\n if (id == ScriptText) return maybeNest(node, input, script)\n if (id == StyleText) return maybeNest(node, input, style)\n if (id == TextareaText) return maybeNest(node, input, textarea)\n\n if (id == Element && other.length) {\n let n = node.node, open = n.firstChild, tagName = open && findTagName(open, input), attrs;\n if (tagName) for (let tag of other) {\n if (tag.tag == tagName && (!tag.attrs || tag.attrs(attrs || (attrs = getAttrs(open, input))))) {\n let close = n.lastChild;\n let to = close.type.id == CloseTag ? close.from : n.to;\n if (to > open.to)\n return {parser: tag.parser, overlay: [{from: open.to, to}]}\n }\n }\n }\n\n if (attrs && id == Attribute) {\n let n = node.node, nameNode;\n if (nameNode = n.firstChild) {\n let matches = attrs[input.read(nameNode.from, nameNode.to)];\n if (matches) for (let attr of matches) {\n if (attr.tagName && attr.tagName != findTagName(n.parent, input)) continue\n let value = n.lastChild;\n if (value.type.id == AttributeValue) {\n let from = value.from + 1;\n let last = value.lastChild, to = value.to - (last && last.isError ? 0 : 1);\n if (to > from) return {parser: attr.parser, overlay: [{from, to}], bracketed: true}\n } else if (value.type.id == UnquotedAttributeValue) {\n return {parser: attr.parser, overlay: [{from: value.from, to: value.to}]}\n }\n }\n }\n }\n return null\n })\n}\n\nexport { configureNesting, parser };\n","import { ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst descendantOp = 148,\n Unit = 1,\n identifier = 149,\n callee = 150,\n VariableName = 2,\n queryIdentifier = 151,\n queryVariableName = 3,\n QueryCallee = 4;\n\n/* Hand-written tokenizers for CSS tokens that can't be\n expressed by Lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197,\n 8198, 8199, 8200, 8201, 8202, 8232, 8233, 8239, 8287, 12288];\nconst colon = 58, parenL = 40, underscore = 95, bracketL = 91, dash = 45, period = 46,\n hash = 35, percent = 37, ampersand = 38, backslash = 92, newline = 10, asterisk = 42;\n\nfunction isAlpha(ch) { return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch >= 161 }\n\nfunction isDigit(ch) { return ch >= 48 && ch <= 57 }\n\nfunction isHex(ch) { return isDigit(ch) || ch >= 97 && ch <= 102 || ch >= 65 && ch <= 70 }\n\nconst identifierTokens = (id, varName, callee) => (input, stack) => {\n for (let inside = false, dashes = 0, i = 0;; i++) {\n let {next} = input;\n if (isAlpha(next) || next == dash || next == underscore || (inside && isDigit(next))) {\n if (!inside && (next != dash || i > 0)) inside = true;\n if (dashes === i && next == dash) dashes++;\n input.advance();\n } else if (next == backslash && input.peek(1) != newline) {\n input.advance();\n if (isHex(input.next)) {\n do { input.advance(); } while (isHex(input.next))\n if (input.next == 32) input.advance();\n } else if (input.next > -1) {\n input.advance();\n }\n inside = true;\n } else {\n if (inside) input.acceptToken(\n dashes == 2 && stack.canShift(VariableName) ? varName : next == parenL ? callee : id\n );\n break\n }\n }\n};\n\nconst identifiers = new ExternalTokenizer(\n identifierTokens(identifier, VariableName, callee),\n {contextual: true}\n);\nconst queryIdentifiers = new ExternalTokenizer(\n identifierTokens(queryIdentifier, queryVariableName, QueryCallee),\n {contextual: true}\n);\n\nconst descendant = new ExternalTokenizer(input => {\n if (space.includes(input.peek(-1))) {\n let {next} = input;\n if (isAlpha(next) || next == underscore || next == hash || next == period ||\n next == asterisk || next == bracketL || next == colon && isAlpha(input.peek(1)) ||\n next == dash || next == ampersand)\n input.acceptToken(descendantOp);\n }\n});\n\nconst unitToken = new ExternalTokenizer(input => {\n if (!space.includes(input.peek(-1))) {\n let {next} = input;\n if (next == percent) { input.advance(); input.acceptToken(Unit); }\n if (isAlpha(next)) {\n do { input.advance(); } while (isAlpha(input.next) || isDigit(input.next))\n input.acceptToken(Unit);\n }\n }\n});\n\nconst cssHighlighting = styleTags({\n \"AtKeyword import charset namespace keyframes media supports font-feature-values\": tags.definitionKeyword,\n \"from to selector scope MatchFlag\": tags.keyword,\n NamespaceName: tags.namespace,\n KeyframeName: tags.labelName,\n KeyframeRangeName: tags.operatorKeyword,\n TagName: tags.tagName,\n ClassName: tags.className,\n PseudoClassName: tags.constant(tags.className),\n IdName: tags.labelName,\n \"FeatureName PropertyName\": tags.propertyName,\n AttributeName: tags.attributeName,\n NumberLiteral: tags.number,\n KeywordQuery: tags.keyword,\n UnaryQueryOp: tags.operatorKeyword,\n \"CallTag ValueName FontName\": tags.atom,\n VariableName: tags.variableName,\n Callee: tags.operatorKeyword,\n Unit: tags.unit,\n \"UniversalSelector NestingSelector\": tags.definitionOperator,\n \"MatchOp CompareOp\": tags.compareOperator,\n \"ChildOp SiblingOp, LogicOp\": tags.logicOperator,\n BinOp: tags.arithmeticOperator,\n Important: tags.modifier,\n Comment: tags.blockComment,\n ColorLiteral: tags.color,\n \"ParenthesizedContent StringLiteral\": tags.string,\n \":\": tags.punctuation,\n \"PseudoOp #\": tags.derefOperator,\n \"; , |\": tags.separator,\n \"( )\": tags.paren,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_callee = {__proto__:null,lang:44, \"nth-child\":44, \"nth-last-child\":44, \"nth-of-type\":44, \"nth-last-of-type\":44, dir:44, \"host-context\":44, if:90, url:158, \"url-prefix\":158, domain:158, regexp:158};\nconst spec_queryIdentifier = {__proto__:null,or:104, and:104, not:112, only:112, layer:212};\nconst spec_QueryCallee = {__proto__:null,selector:118, style:124, layer:208};\nconst spec_AtKeyword = {__proto__:null,\"@import\":204, \"@media\":216, \"@charset\":220, \"@namespace\":224, \"@keyframes\":230, \"@supports\":242, \"@scope\":246, \"@font-feature-values\":252};\nconst spec_identifier = {__proto__:null,to:249};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"MrQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FqO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#ERO'dQdO'#ETO'oQdO'#E[O'oQdO'#E_OOQP'#Fq'#FqO)RQhO'#FQOOQS'#Fp'#FpOOQS'#FT'#FTQYQdOOO)YQdO'#EeO*iQhO'#EkO)YQdO'#EmO*pQdO'#EoO*{QdO'#ErO)}QhO'#ExO+TQdO'#EzO+`QdO'#E}O+eQaO'#CfO+lQ`O'#EbO+qQ`O'#F}O+|QdO'#F}QOQ`OOP,WO&jO'#CaPOOO)CA`)CA`OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:mO'dQdO,5:oO'oQdO,5:vO'oQdO,5:xO'oQdO,5:yO'oQdO'#F[O,nQ`O,58}O,vQdO'#EaOOQS,58},58}OOQP'#Cq'#CqOOQO'#EP'#EPOOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#ES'#ESOOQP,5:m,5:mO-XQpO'#EUO-dQdO'#EVO-iQ`O'#EVO-nQpO,5:oO.XQaO,5:vO.oQaO,5:yOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;lO)}QhO'#DeO0`Q`O'#DnO0eQhO'#D{OOQW'#Fw'#FwOOQS,5;l,5;lO0jQ`O'#DhO0oQ`O'#DkOOQS-E9R-E9ROOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5;POOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FtO6|Q`O'#DYO7RQ`O'#D|OOQ['#Ft'#FtO7WQhO'#GQO7fQ`O,5;VO7kQ!bO,5;XOOQS'#Eq'#EqO7sQ`O,5;ZO7xQdO,5;ZOOQO'#Et'#EtO8QQ`O,5;^O8VQhO,5;dO'oQdO'#DjOOQS,5;f,5;fO0jQ`O,5;fO8_QdO,5;fOOQS'#Fc'#FcO8gQdO'#FPO7fQ`O,5;iO8oQdO,5:|O9PQdO'#F^O9^Q`O,5<iO9^Q`O,5<iPOOO'#FS'#FSP9iO&jO,58{POOO,58{,58{OOQP1G.m1G.mOOQP1G.q1G.qOOQP1G.t1G.tO,}Q`O1G.tO-SQ`O1G.tOOQP1G0X1G0XO9tQpO1G0ZO9|QaO1G0bO:dQaO1G0dO:zQaO1G0eO;bQaO,5;vOOQO-E9Y-E9YOOQS1G.i1G.iO;lQ`O,5:{O;qQdO'#EQO;xQdO'#CuOOQO'#EX'#EXOOQO,5:q,5:qO-dQdO,5:qOOQP1G0Z1G0ZO)YQdO1G0ZO<PQ!jO'#D^O<_Q!bO,59yO<gQhO,5:ROOQO'#Fx'#FxO<bQ!bO,59}O<oQhO'#FdO)}QhO,59{O)}QhO'#FdO=gQhO1G1WOOQS1G1W1G1WO=qQhO,5:PO>lQhO'#DoOOQW,5:Y,5:YOOQW,5:g,5:gOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FuOOQS'#Fu'#FuOOQS'#FV'#FVO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EgOOQW'#Eg'#EgOBuQ`O1G0kO4oQhO1G0kOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:hOCVQhO'#F`OCdQ`O,5<lOOQS1G0q1G0qOOQS1G0s1G0sOOQS1G0u1G0uOCoQ`O1G0uOCtQdO'#EuOOQS1G0x1G0xOOQS1G1O1G1OODPQaO,5:UO7fQ`O1G1QOOQS1G1Q1G1QO0jQ`O1G1QOOQS-E9a-E9aOOQS1G1T1G1TODWQ!fO1G0hODnQ`O'#EdOOQO1G0h1G0hOOQO,5;x,5;xODsQdO,5;xOOQO-E9[-E9[OEQQ`O1G2TPOOO-E9Q-E9QPOOO1G.g1G.gOOQP7+$`7+$`OOQP7+%u7+%uO)YQdO7+%uOOQS1G0g1G0gOE]QaO'#F|OEgQ`O,5:lOElQ!fO'#FUOFjQdO'#FsOFtQ`O,59aOOQO1G0]1G0]OFyQ!bO7+%uO)YQdO1G/eOGUQhO1G/iOOQW1G/m1G/mOOQW1G/g1G/gOGgQhO,5<OOOQW-E9b-E9bOOQS7+&r7+&rOH_QhO'#D^OHmQhO'#F{OHxQ`O'#F{OH}Q`O,5:ZOISQ!bO'#D`O>vQhO'#DmOI_QhO'#DsOIgQhO'#DuOIlQ!jO'#FzOOQO'#Fz'#FzOIwQ`O'#DxOJPQ!bO'#DzOOQO'#Fy'#FyOJUQ`O1G/qOOQS-E9T-E9TOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJZQdO,5;ROOQS7+&V7+&VOJ`Q`O7+&VOJeQhO'#D]OJmQ`O,59vO)}QhO,59vOOQ[1G0S1G0SOJuQ`O1G0SOJzQhO,5;zOOQO-E9^-E9^OOQS7+&a7+&aOKYQbO'#DSOOQO'#Ew'#EwOKhQ`O'#EvOOQO'#Ev'#EvOKsQ`O'#FaOK{QdO,5;aOOQS,5;a,5;aOOQ[1G/p1G/pOOQS7+&l7+&lO7fQ`O7+&lOLWQ!fO'#F]O)YQdO'#F]OM_QdO7+&SOOQO7+&S7+&SOOQO,5;O,5;OOOQO1G1d1G1dOMrQ!bO<<IaOM}QdO'#FZONXQ`O,5<hOOQP1G0W1G0WOOQS-E9S-E9SONaQdO'#FYONkQ`O,5<_OOQ]1G.{1G.{OOQP<<Ia<<IaONsQ`O<<IaONxQdO7+%POOQO'#D`'#D`O! PQ!bO7+%TO! XQhO'#FXO! fQ`O,5<gO)YQdO,5<gOOQW1G/u1G/uO! nQ`O,5:XO>vQhO'#DtOOQO,5:_,5:_O! sQhO,5:aO! {QhO,5:fO)YQdO,5:dOOQW7+%]7+%]OOQO'#Ei'#EiO!!SQ`O1G0mOOQS<<Iq<<IqO)YQdO,59wO!!vQhO1G/bOOQ[1G/b1G/bO!!}Q`O1G/bOOQW-E9U-E9UOOQ[7+%n7+%nOOQO,5;b,5;bOCwQdO'#FbOKsQ`O,5;{OOQS,5;{,5;{OOQS-E9_-E9_OOQS1G0{1G0{OOQS<<JW<<JWO!#VQ!fO,5;wOOQS-E9Z-E9ZOOQO<<In<<InOOQPAN>{AN>{O!$^Q`OAN>{O!$cQaO,5;uOOQO-E9X-E9XO!$mQdO,5;tOOQO-E9W-E9WOOQW<<Hk<<HkOOQW<<Ho<<HoO!$wQhO<<HoO!%YQhO'#D^O!%hQhO,5;sO!%sQ`O,5;sOOQO-E9V-E9VO!%xQdO1G2RO!&SQhO1G/sO!&[Q`O,5:`O>vQhO'#DwOOQO1G/{1G/{O!&aQ!bO1G0QO!&iQdO1G0OOJZQdO'#F_O!&pQ`O7+&XOOQW7+&X7+&XO!&xQ!bO1G/cOOQ[7+$|7+$|O!'TQhO7+$|P!'[Q`O'#FWOOQO,5;|,5;|OOQO-E9`-E9`OOQS1G1g1G1gOOQPG24gG24gO!'aQ`OAN>ZO)YQdO1G1_O!'fQ`O7+'mOOQO1G/z1G/zO!'nQ`O,5:cO!'sQhO7+%lOOQO,5;y,5;yOOQO-E9]-E9]OOQW<<Is<<IsOOQ[<<Hh<<HhPOQW,5;r,5;rOOQWG23uG23uO!'zQdO7+&yOOQO1G/}1G/}OOQO<<IW<<IW\",\n stateData: \"!(_~O$_OS$`QQ~OWVO^_O`WOcYOdYOl`OmZOp[O#P]O#S^O#YdO#`eO#bfO#dgO#ghO#miO#ojO#rkO$ZRO$fTO~OQmOWVO^_O`WOcYOdYOl`OmZOp[O#P]O#S^O#YdO#`eO#bfO#dgO#ghO#miO#ojO#rkO$ZlO$fTO~O$X$qP~P!jO$`qO~O`YXcYXdYXmYXpYXsYX!eYX#PYX#SYX$YYX$f[X~OgYX~P$ZO$ZsO~O$fuO~O$fuO`$eXc$eXd$eXm$eXp$eXs$eX!e$eX#P$eX#S$eX$Y$eXg$eX~O$ZvO~O`xOcyOdyOmzOp{O#P|O#S!OO$Y}O~Os!RO!e!PO~P&^Of!XO$Z!TO$[!UO~O$Z!YO~OW!^O$Z![O$f!]O~OWVO^_O`WOcYOdYOmZOp[O#P]O#S^O$ZRO$fTO~OS!fOc!gOd!gOh!cOs!RO!Y!eO!]!jO!`!kO$]!bO~On!iO~P(dOQ!uOh!nOp!oOs!pOu!xOw!xO}!vO!q!wO$Z!mO$[!sO$j!qO~OS!fOc!gOd!gOh!cO!Y!eO!]!jO!`!kO$]!bO~Os$tP~P)}Ow!}O!q!wO$Z!|O~Ow#PO$Z#PO~Oh#SOs!RO#p#UO~O$Z#WO~Oc#VX~P$ZOc#ZO~On#[O$X$qXr$qX~O$X$qXr$qX~P!jO$a#_O$b#_O$c#aO~Of#fO$Z!TO$[!UO~Os!RO!e!PO~Or$qP~P!jOh#pO~Oh#qO~Oo!xX!|!xX$f!zX~O$Z#rO~O$f#tO~Oo#uO!|#vO~O`xOcyOdyOmzOp{O~Os#Oa!e#Oa#P#Oa#S#Oa$Y#Oag#Oa~P-vOs#Ra!e#Ra#P#Ra#S#Ra$Y#Rag#Ra~P-vOS!fOc!gOd!gOh!cO!Y!eO!]!jO!`!kO~OR#zOu#zOw#zO$]#wO$j!qO~P/VOn$QO!U#}O!e$OO~P(dOh$SO~O$]$UO~Oh#SO~Oh$WO~O`$YOc$YOg$]Ol$YOm$YOn$YO~P)YO`$YOc$YOl$YOm$YOn$YOo$_O~P)YO`$YOc$YOl$YOm$YOn$YOr$aO~P)YOP$bOSvXcvXdvXhvXnvXyvX!YvX!]vX!`vX#[vX#^vX$]vX!WvXQvX`vXgvXlvXmvXpvXsvXuvXwvX}vX!qvX$ZvX$[vX$jvXovXrvX!evX$XvX$svX!}vX~Oy$cO#[$dO#^$eOn$tP~P)}Oh#qOS$hXc$hXd$hXn$hXy$hX!Y$hX!]$hX!`$hX#[$hX#^$hX$]$hXQ$hX`$hXg$hXl$hXm$hXp$hXs$hXu$hXw$hX}$hX!q$hX$Z$hX$[$hX$j$hXo$hXr$hX!e$hX$X$hX$s$hX!}$hX~Oh$iO~Oh$kO~O!U#}O!e$lOs$tXn$tX~Os!RO~On$oOy$cO~On$pO~Ow$qO!q!wO~Os$rO~Os!RO!U#}O~Os!RO#p$xO~O$Z#WOs#sX~O$s$|On#Ua$X#Uar#Ua~P)YOn$QX$X$QXr$QX~P!jOn#[O$X$qar$qa~O$a#_O$b#_O$c%TO~Oo%VO!|%WO~Os#Oi!e#Oi#P#Oi#S#Oi$Y#Oig#Oi~P-vOs#Qi!e#Qi#P#Qi#S#Qi$Y#Qig#Qi~P-vOs#Ri!e#Ri#P#Ri#S#Ri$Y#Rig#Ri~P-vOs$Oa!e$Oa~P&^Or%XO~Og$pP~P'oOg$gP~P)YOc!SXg!QX!U!QX!W!SX~Oc%aO!W%bO~Og%cO!U#}O~O!U#}OS$WXc$WXd$WXh$WXn$WXs$WX!Y$WX!]$WX!`$WX!e$WX$]$WX~On%gO!e$OO~P(dO!U#}OS!Xac!Xad!Xah!Xan!Xas!Xa!Y!Xa!]!Xa!`!Xa!e!Xa$]!Xag!Xa~O$]%hOg$oP~P/VOR#zOS!fOh%mOu#zOw#zO!Y%nO$]%lO$j!qO~Oy$cOQ$iX`$iXc$iXg$iXh$iXl$iXm$iXn$iXp$iXs$iXu$iXw$iX}$iX!q$iX$Z$iX$[$iX$j$iXo$iXr$iX~O`$YOc$YOg%wOl$YOm$YOn$YO~P)YO`$YOc$YOl$YOm$YOn$YOo%xO~P)YO`$YOc$YOl$YOm$YOn$YOr%yO~P)YOh%{OS#ZXc#ZXd#ZXn#ZX!Y#ZX!]#ZX!`#ZX$]#ZX~On%|O~Og&ROw&SO!r&SO~Os$SX!e$SXn$SX~P)}O!e$lOs$tan$ta~On&VO~Or&^O$Z&XO$j&WO~Og&_O~P&^Oy$cO!e&cO$s$|On#Ui$X#Uir#Ui~P)YO$r&fO~On$Qa$X$Qar$Qa~P!jOn#[O$X$qir$qi~O!e&iOg$pX~P&^Og&kO~Oy$cOQ#xXg#xXh#xXp#xXs#xXu#xXw#xX}#xX!e#xX!q#xX$Z#xX$[#xX$j#xX~O!e&mOg$gX~P)YOg&oO~Oo&pOy$cO!}&qO~OR#zOu#zOw#zO$]&sO$j!qO~O!U#}OS$Wac$Wad$Wah$Wan$Was$Wa!Y$Wa!]$Wa!`$Wa!e$Wa$]$Wa~Oc!dXg!QX!U!QX!e!QX~O!U#}O!e&uOg$oX~Oc&wO~Og&xO~Oc!mXg!mX!W!SX~OS!fOh&zO~O!U&|O~O!U&|O!W&}Og$nX~Oc'OOg!lX~O!W&}O~Og'PO~O$Z'QO~On'SO~Oc'TO!U#}O~Og'VOn'UO~Og'YO~O!U#}Os$Sa!e$San$Sa~OP$bOsvX!evXgvX~O$j&WOs#jX!e#jX~Os!RO!e'[O~Or'`O$Z&XO$j&WO~Oy$cOQ$PXh$PXn$PXp$PXs$PXu$PXw$PX}$PX!e$PX!q$PX$X$PX$Z$PX$[$PX$j$PX$s$PXr$PX~O!e&cO$s$|On#Uq$X#Uqr#Uq~P)YOo'eOy$cO!}'fO~Og#}X!e#}X~P'oO!e&iOg$pa~Og#|X!e#|X~P)YO!e&mOg$ga~Oo'eO~Og'kO~P)YOg'lO!W'mO~O$]'nOg#{X!e#{X~P/VO!e&uOg$oa~Og'sO~OS!fOh'uO~OS!fO~PGUO`'yOg'{O~OS#zac#zad#zah#za!Y#za!]#za!`#za$]#za~Og'}O~P!![Og'}On(OO~Oy$cOQ$Pah$Pan$Pap$Pas$Pau$Paw$Pa}$Pa!e$Pa!q$Pa$X$Pa$Z$Pa$[$Pa$j$Pa$s$Par$Pa~Oo(TO~Og#}a!e#}a~P&^Og#|a!e#|a~P)YOR#zOu#zOw#zO$]&sO$j&WO~Oc!fXg!QX!U!QX!e!QX~O!U#}Og#{a!e#{a~Oc(VO~O!e&uOg$oi~P)YOg!ai!U!ji~Og(XO~O!W(ZOg!ni~Og!li~P)YO`'yOg(^O~Oy$cOg!Pin!Pi~Og(_O~P!![On(`O~Og(aO~O!e&uOg$oq~Og(cO~OS!fO~P!$wOg#{q!e#{q~P)YO$_!r$`$j`$jy#S~\",\n goto: \"7g$uPPPPP$vP$yP%S%f%S%x&[P%SP&b%SPP&hPPP&n&x&xPPPPP&xPP&xP'hP&xP&x(k&xP)Z)^)d)d)v)dP)dP)dP)d)dP*])dP*i*o+e+hP+k*i+n*i+q+w+z,Q+z)d,WPP,|-S%S-Y%S-`-`-f-jPP%SP%S%SP-p.l.y/Q$yP/ZP/^P$yP$yP$yP/d$yP/g/j/m/t$yP$yPP$yP/y$yP/|0S0c0}1]1c1m1s1y2P2V2a2g2m2s2y3PPPPPPPPPPPP3V3`P4U4X5]P5e6_6t+z7Q7T7WPP7^RrQ_aOPco!R#[%Pq_OP]^co|}!O!P!R#S#[#p%P&iqSOP]^co|}!O!P!R#S#[#p%P&iqUOP]^co|}!O!P!R#S#[#p%P&iQtTR#buQwWR#cxQ!VYR#dyQ#d!XS$h!t!uR%U#f!Z!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w'O'T'i'r'x(V(b!Y!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w'O'T'i'r'x(V(bb#z!c$W%b%m&z&}'m'u(ZU&Z$r&]'[R'Z&Y!Z!tdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w'O'T'i'r'x(V(bR$j!vQ&P$iR'W&Qq!h`ei!c!d!e!r#}$O$P$S$g$i$l&Q&uQ#x!cW%s$W%m&z'uQ&t%bQ'w&}Q(U'mR(d(ZQ#VjQ$V!jQ$v#UR&a$xX%q$W%m&z'up!h`ei!c!d!e!r#}$O$P$S$g$i$l&Q&uW%p$W%m&z'uQ&{%nQ'v&|Q'w&}R(d(ZR$T!fR%j$SR'p&uR&{%nX%o$W%m&z'uR'v&|X%t$W%m&z'uX%r$W%m&z'u!Y!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w'O'T'i'r'x(V(bQ!}gR$q#OQ!WYR#eyQ#d!WR%U#eQ!ZZR#gzQ!_[R#h{T!^[{Q#s!]R%_#tQ!SXQ!i`Q#TjQ#n!QQ$Q!dQ$n!zQ$t#RQ$w#VQ$z#YQ%g$PQ&`$vQ'^&[Q'a&aR(S']SnP!RQ#^oQ%O#[R&g%PZmPo!R#[%PQ$}#ZQ&e${R'd&dR$g!rQ'R%{R(['yR#OgR#QhR$s#QS&[$r&]R(Q'[V&Y$r&]'[R#YkQ#`qR%S#`QcOSoP!RU!lco%PR%P#[Q%]#q[&l%]&r'i'r'x(bQ&r%aQ'i&mQ'r&wQ'x'OR(b(VQ$[!nQ$^!oQ$`!pV%v$[$^$`Q&Q$iR'X&QQ&v%iS'q&v(WR(W'rQ&n%]R'j&nQ&j%YR'h&jQ!QXR#m!QQ&d${R'c&dQ#]nS%Q#]%RR%R#^Q'z'RR(]'zQ$m!yR&U$mQ&]$rR'_&]Q']&[R(R']Q#XkR$y#XQ$P!dR%f$P_bOPco!R#[%P^XOPco!R#[%PQ!`]Q!a^Q#i|Q#j}Q#k!OQ#l!PQ$u#SQ%Y#pR'g&iR%^#qQ!rdQ!{f[$X!n!o!p$[$^$`Q${#Zh%[#q%]%a&m&r&w'O'i'r'x(V(bQ%`#vQ%z$cS&b${&dQ&h%WQ'b&cR'|'T]$Z!n!o!p$[$^$`Q!d`U!ye!r$gQ#RiQ#y!cS#|!d$PQ$R!eQ%d#}Q%e$OQ%i$SS&O$i&QQ&T$lR'o&uQ#{!cW%s$W%m&z'uQ&t%bQ'w&}Q(U'mR(d(ZQ%u$WQ&y%mQ't&zR(Y'uR%k$SR%Z#pQpPR#o!RQ!zeQ$f!rR%}$g\",\n nodeNames: \"⚠ Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NamespacedTagSelector NamespaceName TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector StyleQuery style ParenthesedQuery CallQuery ArgList PropertyName , PropertyName UnaryQuery ParenthesedQuery BinaryQuery ParenthesedQuery ParenthesedQuery StyleFeature PropertyName StyleRange PseudoQuery CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName NamespacedAttribute NamespaceName AttributeName MatchOp MatchFlag ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to FontFeatureStatement font-feature-values FontName AtRule Styles\",\n maxTerm: 174,\n nodeProps: [\n [\"isolate\", -2,5,39,\"\"],\n [\"openedBy\", 23,\"(\",31,\"[\",34,\"{\"],\n [\"closedBy\", 24,\")\",32,\"]\",35,\"}\"]\n ],\n propSources: [cssHighlighting],\n skippedNodes: [0,5,130],\n repeatNodeCount: 17,\n tokenData: \"K`~R!bOX%ZX^&R^p%Zpq&Rqr)ers)vst+jtu2Xuv%Zvw3Rwx3dxy5Ryz5dz{5i{|6S|}:u}!O;W!O!P;u!P!Q<^!Q![=V![!]>Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!r`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$_~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$_~!r`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$sYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!r`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!r`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!r`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!r`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!r`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!r`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!r`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!r`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!|S!r`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#SQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!r`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!r`$jYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!r`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!r`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!r`$jYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!r`$jYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!eYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~<cTyWOy%jz{<r{;'S%j;'S;=`%{<%lO%j~<yS!r`$`~Oy%jz;'S%j;'S;=`%{<%lO%jj=[[$jYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj>VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!r`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!r`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!|SOy%jz;'S%j;'S;=`%{<%lO%jj@uV#PQ!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS#PQ!r`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!r`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!r`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!}WOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!}WOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!r`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!r`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!r`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!r`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!r`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!r`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!r`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$rQ!r`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$fUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#SQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z\",\n tokenizers: [descendant, unitToken, identifiers, queryIdentifiers, 1, 2, 3, 4, new LocalTokenGroup(\"m~RRYZ[z{a~~g~aO$b~~dP!P!Qg~lO$c~~\", 28, 155)],\n topRules: {\"StyleSheet\":[0,6],\"Styles\":[1,129]},\n dynamicPrecedences: {\"97\":1},\n specialized: [{term: 150, get: (value) => spec_callee[value] || -1},{term: 151, get: (value) => spec_queryIdentifier[value] || -1},{term: 4, get: (value) => spec_QueryCallee[value] || -1},{term: 28, get: (value) => spec_AtKeyword[value] || -1},{term: 149, get: (value) => spec_identifier[value] || -1}],\n tokenPrec: 2444\n});\n\nexport { parser };\n","import { parser } from '@lezer/css';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, foldNodeProp, foldInside, LanguageSupport } from '@codemirror/language';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\nlet _properties = null;\nfunction properties() {\n if (!_properties && typeof document == \"object\" && document.body) {\n let { style } = document.body, names = [], seen = new Set;\n for (let prop in style)\n if (prop != \"cssText\" && prop != \"cssFloat\") {\n if (typeof style[prop] == \"string\") {\n if (/[A-Z]/.test(prop))\n prop = prop.replace(/[A-Z]/g, ch => \"-\" + ch.toLowerCase());\n if (!seen.has(prop)) {\n names.push(prop);\n seen.add(prop);\n }\n }\n }\n _properties = names.sort().map(name => ({ type: \"property\", label: name, apply: name + \": \" }));\n }\n return _properties || [];\n}\nconst pseudoClasses = /*@__PURE__*/[\n \"active\", \"after\", \"any-link\", \"autofill\", \"backdrop\", \"before\",\n \"checked\", \"cue\", \"default\", \"defined\", \"disabled\", \"empty\",\n \"enabled\", \"file-selector-button\", \"first\", \"first-child\",\n \"first-letter\", \"first-line\", \"first-of-type\", \"focus\",\n \"focus-visible\", \"focus-within\", \"fullscreen\", \"has\", \"host\",\n \"host-context\", \"hover\", \"in-range\", \"indeterminate\", \"invalid\",\n \"is\", \"lang\", \"last-child\", \"last-of-type\", \"left\", \"link\", \"marker\",\n \"modal\", \"not\", \"nth-child\", \"nth-last-child\", \"nth-last-of-type\",\n \"nth-of-type\", \"only-child\", \"only-of-type\", \"optional\", \"out-of-range\",\n \"part\", \"placeholder\", \"placeholder-shown\", \"read-only\", \"read-write\",\n \"required\", \"right\", \"root\", \"scope\", \"selection\", \"slotted\", \"target\",\n \"target-text\", \"valid\", \"visited\", \"where\"\n].map(name => ({ type: \"class\", label: name }));\nconst values = /*@__PURE__*/[\n \"above\", \"absolute\", \"activeborder\", \"additive\", \"activecaption\", \"after-white-space\",\n \"ahead\", \"alias\", \"all\", \"all-scroll\", \"alphabetic\", \"alternate\", \"always\",\n \"antialiased\", \"appworkspace\", \"asterisks\", \"attr\", \"auto\", \"auto-flow\", \"avoid\", \"avoid-column\",\n \"avoid-page\", \"avoid-region\", \"axis-pan\", \"background\", \"backwards\", \"baseline\", \"below\",\n \"bidi-override\", \"blink\", \"block\", \"block-axis\", \"bold\", \"bolder\", \"border\", \"border-box\",\n \"both\", \"bottom\", \"break\", \"break-all\", \"break-word\", \"bullets\", \"button\", \"button-bevel\",\n \"buttonface\", \"buttonhighlight\", \"buttonshadow\", \"buttontext\", \"calc\", \"capitalize\",\n \"caps-lock-indicator\", \"caption\", \"captiontext\", \"caret\", \"cell\", \"center\", \"checkbox\", \"circle\",\n \"cjk-decimal\", \"clear\", \"clip\", \"close-quote\", \"col-resize\", \"collapse\", \"color\", \"color-burn\",\n \"color-dodge\", \"column\", \"column-reverse\", \"compact\", \"condensed\", \"contain\", \"content\",\n \"contents\", \"content-box\", \"context-menu\", \"continuous\", \"copy\", \"counter\", \"counters\", \"cover\",\n \"crop\", \"cross\", \"crosshair\", \"currentcolor\", \"cursive\", \"cyclic\", \"darken\", \"dashed\", \"decimal\",\n \"decimal-leading-zero\", \"default\", \"default-button\", \"dense\", \"destination-atop\", \"destination-in\",\n \"destination-out\", \"destination-over\", \"difference\", \"disc\", \"discard\", \"disclosure-closed\",\n \"disclosure-open\", \"document\", \"dot-dash\", \"dot-dot-dash\", \"dotted\", \"double\", \"down\", \"e-resize\",\n \"ease\", \"ease-in\", \"ease-in-out\", \"ease-out\", \"element\", \"ellipse\", \"ellipsis\", \"embed\", \"end\",\n \"ethiopic-abegede-gez\", \"ethiopic-halehame-aa-er\", \"ethiopic-halehame-gez\", \"ew-resize\", \"exclusion\",\n \"expanded\", \"extends\", \"extra-condensed\", \"extra-expanded\", \"fantasy\", \"fast\", \"fill\", \"fill-box\",\n \"fixed\", \"flat\", \"flex\", \"flex-end\", \"flex-start\", \"footnotes\", \"forwards\", \"from\",\n \"geometricPrecision\", \"graytext\", \"grid\", \"groove\", \"hand\", \"hard-light\", \"help\", \"hidden\", \"hide\",\n \"higher\", \"highlight\", \"highlighttext\", \"horizontal\", \"hsl\", \"hsla\", \"hue\", \"icon\", \"ignore\",\n \"inactiveborder\", \"inactivecaption\", \"inactivecaptiontext\", \"infinite\", \"infobackground\", \"infotext\",\n \"inherit\", \"initial\", \"inline\", \"inline-axis\", \"inline-block\", \"inline-flex\", \"inline-grid\",\n \"inline-table\", \"inset\", \"inside\", \"intrinsic\", \"invert\", \"italic\", \"justify\", \"keep-all\",\n \"landscape\", \"large\", \"larger\", \"left\", \"level\", \"lighter\", \"lighten\", \"line-through\", \"linear\",\n \"linear-gradient\", \"lines\", \"list-item\", \"listbox\", \"listitem\", \"local\", \"logical\", \"loud\", \"lower\",\n \"lower-hexadecimal\", \"lower-latin\", \"lower-norwegian\", \"lowercase\", \"ltr\", \"luminosity\", \"manipulation\",\n \"match\", \"matrix\", \"matrix3d\", \"medium\", \"menu\", \"menutext\", \"message-box\", \"middle\", \"min-intrinsic\",\n \"mix\", \"monospace\", \"move\", \"multiple\", \"multiple_mask_images\", \"multiply\", \"n-resize\", \"narrower\",\n \"ne-resize\", \"nesw-resize\", \"no-close-quote\", \"no-drop\", \"no-open-quote\", \"no-repeat\", \"none\",\n \"normal\", \"not-allowed\", \"nowrap\", \"ns-resize\", \"numbers\", \"numeric\", \"nw-resize\", \"nwse-resize\",\n \"oblique\", \"opacity\", \"open-quote\", \"optimizeLegibility\", \"optimizeSpeed\", \"outset\", \"outside\",\n \"outside-shape\", \"overlay\", \"overline\", \"padding\", \"padding-box\", \"painted\", \"page\", \"paused\",\n \"perspective\", \"pinch-zoom\", \"plus-darker\", \"plus-lighter\", \"pointer\", \"polygon\", \"portrait\",\n \"pre\", \"pre-line\", \"pre-wrap\", \"preserve-3d\", \"progress\", \"push-button\", \"radial-gradient\", \"radio\",\n \"read-only\", \"read-write\", \"read-write-plaintext-only\", \"rectangle\", \"region\", \"relative\", \"repeat\",\n \"repeating-linear-gradient\", \"repeating-radial-gradient\", \"repeat-x\", \"repeat-y\", \"reset\", \"reverse\",\n \"rgb\", \"rgba\", \"ridge\", \"right\", \"rotate\", \"rotate3d\", \"rotateX\", \"rotateY\", \"rotateZ\", \"round\",\n \"row\", \"row-resize\", \"row-reverse\", \"rtl\", \"run-in\", \"running\", \"s-resize\", \"sans-serif\", \"saturation\",\n \"scale\", \"scale3d\", \"scaleX\", \"scaleY\", \"scaleZ\", \"screen\", \"scroll\", \"scrollbar\", \"scroll-position\",\n \"se-resize\", \"self-start\", \"self-end\", \"semi-condensed\", \"semi-expanded\", \"separate\", \"serif\", \"show\",\n \"single\", \"skew\", \"skewX\", \"skewY\", \"skip-white-space\", \"slide\", \"slider-horizontal\",\n \"slider-vertical\", \"sliderthumb-horizontal\", \"sliderthumb-vertical\", \"slow\", \"small\", \"small-caps\",\n \"small-caption\", \"smaller\", \"soft-light\", \"solid\", \"source-atop\", \"source-in\", \"source-out\",\n \"source-over\", \"space\", \"space-around\", \"space-between\", \"space-evenly\", \"spell-out\", \"square\", \"start\",\n \"static\", \"status-bar\", \"stretch\", \"stroke\", \"stroke-box\", \"sub\", \"subpixel-antialiased\", \"svg_masks\",\n \"super\", \"sw-resize\", \"symbolic\", \"symbols\", \"system-ui\", \"table\", \"table-caption\", \"table-cell\",\n \"table-column\", \"table-column-group\", \"table-footer-group\", \"table-header-group\", \"table-row\",\n \"table-row-group\", \"text\", \"text-bottom\", \"text-top\", \"textarea\", \"textfield\", \"thick\", \"thin\",\n \"threeddarkshadow\", \"threedface\", \"threedhighlight\", \"threedlightshadow\", \"threedshadow\", \"to\", \"top\",\n \"transform\", \"translate\", \"translate3d\", \"translateX\", \"translateY\", \"translateZ\", \"transparent\",\n \"ultra-condensed\", \"ultra-expanded\", \"underline\", \"unidirectional-pan\", \"unset\", \"up\", \"upper-latin\",\n \"uppercase\", \"url\", \"var\", \"vertical\", \"vertical-text\", \"view-box\", \"visible\", \"visibleFill\",\n \"visiblePainted\", \"visibleStroke\", \"visual\", \"w-resize\", \"wait\", \"wave\", \"wider\", \"window\", \"windowframe\",\n \"windowtext\", \"words\", \"wrap\", \"wrap-reverse\", \"x-large\", \"x-small\", \"xor\", \"xx-large\", \"xx-small\"\n].map(name => ({ type: \"keyword\", label: name })).concat(/*@__PURE__*/[\n \"aliceblue\", \"antiquewhite\", \"aqua\", \"aquamarine\", \"azure\", \"beige\",\n \"bisque\", \"black\", \"blanchedalmond\", \"blue\", \"blueviolet\", \"brown\",\n \"burlywood\", \"cadetblue\", \"chartreuse\", \"chocolate\", \"coral\", \"cornflowerblue\",\n \"cornsilk\", \"crimson\", \"cyan\", \"darkblue\", \"darkcyan\", \"darkgoldenrod\",\n \"darkgray\", \"darkgreen\", \"darkkhaki\", \"darkmagenta\", \"darkolivegreen\",\n \"darkorange\", \"darkorchid\", \"darkred\", \"darksalmon\", \"darkseagreen\",\n \"darkslateblue\", \"darkslategray\", \"darkturquoise\", \"darkviolet\",\n \"deeppink\", \"deepskyblue\", \"dimgray\", \"dodgerblue\", \"firebrick\",\n \"floralwhite\", \"forestgreen\", \"fuchsia\", \"gainsboro\", \"ghostwhite\",\n \"gold\", \"goldenrod\", \"gray\", \"grey\", \"green\", \"greenyellow\", \"honeydew\",\n \"hotpink\", \"indianred\", \"indigo\", \"ivory\", \"khaki\", \"lavender\",\n \"lavenderblush\", \"lawngreen\", \"lemonchiffon\", \"lightblue\", \"lightcoral\",\n \"lightcyan\", \"lightgoldenrodyellow\", \"lightgray\", \"lightgreen\", \"lightpink\",\n \"lightsalmon\", \"lightseagreen\", \"lightskyblue\", \"lightslategray\",\n \"lightsteelblue\", \"lightyellow\", \"lime\", \"limegreen\", \"linen\", \"magenta\",\n \"maroon\", \"mediumaquamarine\", \"mediumblue\", \"mediumorchid\", \"mediumpurple\",\n \"mediumseagreen\", \"mediumslateblue\", \"mediumspringgreen\", \"mediumturquoise\",\n \"mediumvioletred\", \"midnightblue\", \"mintcream\", \"mistyrose\", \"moccasin\",\n \"navajowhite\", \"navy\", \"oldlace\", \"olive\", \"olivedrab\", \"orange\", \"orangered\",\n \"orchid\", \"palegoldenrod\", \"palegreen\", \"paleturquoise\", \"palevioletred\",\n \"papayawhip\", \"peachpuff\", \"peru\", \"pink\", \"plum\", \"powderblue\",\n \"purple\", \"rebeccapurple\", \"red\", \"rosybrown\", \"royalblue\", \"saddlebrown\",\n \"salmon\", \"sandybrown\", \"seagreen\", \"seashell\", \"sienna\", \"silver\", \"skyblue\",\n \"slateblue\", \"slategray\", \"snow\", \"springgreen\", \"steelblue\", \"tan\",\n \"teal\", \"thistle\", \"tomato\", \"turquoise\", \"violet\", \"wheat\", \"white\",\n \"whitesmoke\", \"yellow\", \"yellowgreen\"\n].map(name => ({ type: \"constant\", label: name })));\nconst tags = /*@__PURE__*/[\n \"a\", \"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"blockquote\", \"body\",\n \"br\", \"button\", \"canvas\", \"caption\", \"cite\", \"code\", \"col\", \"colgroup\", \"dd\", \"del\",\n \"details\", \"dfn\", \"dialog\", \"div\", \"dl\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\",\n \"form\", \"header\", \"hgroup\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\", \"hr\", \"html\", \"i\", \"iframe\",\n \"img\", \"input\", \"ins\", \"kbd\", \"label\", \"legend\", \"li\", \"main\", \"meter\", \"nav\", \"ol\", \"output\",\n \"p\", \"pre\", \"ruby\", \"section\", \"select\", \"small\", \"source\", \"span\", \"strong\", \"sub\", \"summary\",\n \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"tr\", \"u\", \"ul\"\n].map(name => ({ type: \"type\", label: name }));\nconst atRules = /*@__PURE__*/[\n \"@charset\", \"@color-profile\", \"@container\", \"@counter-style\", \"@font-face\", \"@font-feature-values\",\n \"@font-palette-values\", \"@import\", \"@keyframes\", \"@layer\", \"@media\", \"@namespace\", \"@page\",\n \"@position-try\", \"@property\", \"@scope\", \"@starting-style\", \"@supports\", \"@view-transition\"\n].map(label => ({ type: \"keyword\", label }));\nconst identifier = /^(\\w[\\w-]*|-\\w[\\w-]*|)$/, variable = /^-(-[\\w-]*)?$/;\nfunction isVarArg(node, doc) {\n var _a;\n if (node.name == \"(\" || node.type.isError)\n node = node.parent || node;\n if (node.name != \"ArgList\")\n return false;\n let callee = (_a = node.parent) === null || _a === void 0 ? void 0 : _a.firstChild;\n if ((callee === null || callee === void 0 ? void 0 : callee.name) != \"Callee\")\n return false;\n return doc.sliceString(callee.from, callee.to) == \"var\";\n}\nconst VariablesByNode = /*@__PURE__*/new NodeWeakMap();\nconst declSelector = [\"Declaration\"];\nfunction astTop(node) {\n for (let cur = node;;) {\n if (cur.type.isTop)\n return cur;\n if (!(cur = cur.parent))\n return node;\n }\n}\nfunction variableNames(doc, node, isVariable) {\n if (node.to - node.from > 4096) {\n let known = VariablesByNode.get(node);\n if (known)\n return known;\n let result = [], seen = new Set, cursor = node.cursor(IterMode.IncludeAnonymous);\n if (cursor.firstChild())\n do {\n for (let option of variableNames(doc, cursor.node, isVariable))\n if (!seen.has(option.label)) {\n seen.add(option.label);\n result.push(option);\n }\n } while (cursor.nextSibling());\n VariablesByNode.set(node, result);\n return result;\n }\n else {\n let result = [], seen = new Set;\n node.cursor().iterate(node => {\n var _a;\n if (isVariable(node) && node.matchContext(declSelector) && ((_a = node.node.nextSibling) === null || _a === void 0 ? void 0 : _a.name) == \":\") {\n let name = doc.sliceString(node.from, node.to);\n if (!seen.has(name)) {\n seen.add(name);\n result.push({ label: name, type: \"variable\" });\n }\n }\n });\n return result;\n }\n}\n/**\nCreate a completion source for a CSS dialect, providing a\npredicate for determining what kind of syntax node can act as a\ncompletable variable. This is used by language modes like Sass and\nLess to reuse this package's completion logic.\n*/\nconst defineCSSCompletionSource = (isVariable) => context => {\n let { state, pos } = context, node = syntaxTree(state).resolveInner(pos, -1);\n let isDash = node.type.isError && node.from == node.to - 1 && state.doc.sliceString(node.from, node.to) == \"-\";\n if (node.name == \"PropertyName\" ||\n (isDash || node.name == \"TagName\") && /^(Block|Styles)$/.test(node.resolve(node.to).name))\n return { from: node.from, options: properties(), validFor: identifier };\n if (node.name == \"ValueName\")\n return { from: node.from, options: values, validFor: identifier };\n if (node.name == \"PseudoClassName\")\n return { from: node.from, options: pseudoClasses, validFor: identifier };\n if (isVariable(node) || (context.explicit || isDash) && isVarArg(node, state.doc))\n return { from: isVariable(node) || isDash ? node.from : pos,\n options: variableNames(state.doc, astTop(node), isVariable),\n validFor: variable };\n if (node.name == \"TagName\") {\n for (let { parent } = node; parent; parent = parent.parent)\n if (parent.name == \"Block\")\n return { from: node.from, options: properties(), validFor: identifier };\n return { from: node.from, options: tags, validFor: identifier };\n }\n if (node.name == \"AtKeyword\")\n return { from: node.from, options: atRules, validFor: identifier };\n if (!context.explicit)\n return null;\n let above = node.resolve(pos), before = above.childBefore(pos);\n if (before && before.name == \":\" && above.name == \"PseudoClassSelector\")\n return { from: pos, options: pseudoClasses, validFor: identifier };\n if (before && before.name == \":\" && above.name == \"Declaration\" || above.name == \"ArgList\")\n return { from: pos, options: values, validFor: identifier };\n if (above.name == \"Block\" || above.name == \"Styles\")\n return { from: pos, options: properties(), validFor: identifier };\n return null;\n};\n/**\nCSS property, variable, and value keyword completion source.\n*/\nconst cssCompletionSource = /*@__PURE__*/defineCSSCompletionSource(n => n.name == \"VariableName\");\n\n/**\nA language provider based on the [Lezer CSS\nparser](https://github.com/lezer-parser/css), extended with\nhighlighting and indentation information.\n*/\nconst cssLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"css\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Declaration: /*@__PURE__*/continuedIndent()\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block KeyframeList\": foldInside\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*\\}$/,\n wordChars: \"-\"\n }\n});\n/**\nLanguage support for CSS.\n*/\nfunction css() {\n return new LanguageSupport(cssLanguage, cssLanguage.data.of({ autocomplete: cssCompletionSource }));\n}\n\nexport { css, cssCompletionSource, cssLanguage, defineCSSCompletionSource };\n","import { ContextTracker, ExternalTokenizer, LRParser, LocalTokenGroup } from '@lezer/lr';\nimport { styleTags, tags } from '@lezer/highlight';\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst noSemi = 316,\n noSemiType = 317,\n incdec = 1,\n incdecPrefix = 2,\n questionDot = 3,\n JSXStartTag = 4,\n insertSemi = 318,\n spaces = 320,\n newline = 321,\n LineComment = 5,\n BlockComment = 6,\n Dialect_jsx = 0;\n\n/* Hand-written tokenizers for JavaScript tokens that can't be\n expressed by lezer's built-in tokenizer. */\n\nconst space = [9, 10, 11, 12, 13, 32, 133, 160, 5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200,\n 8201, 8202, 8232, 8233, 8239, 8287, 12288];\n\nconst braceR = 125, semicolon = 59, slash = 47, star = 42, plus = 43, minus = 45, lt = 60, comma = 44,\n question = 63, dot = 46, bracketL = 91;\n\nconst trackNewline = new ContextTracker({\n start: false,\n shift(context, term) {\n return term == LineComment || term == BlockComment || term == spaces ? context : term == newline\n },\n strict: false\n});\n\nconst insertSemicolon = new ExternalTokenizer((input, stack) => {\n let {next} = input;\n if (next == braceR || next == -1 || stack.context)\n input.acceptToken(insertSemi);\n}, {contextual: true, fallback: true});\n\nconst noSemicolon = new ExternalTokenizer((input, stack) => {\n let {next} = input, after;\n if (space.indexOf(next) > -1) return\n if (next == slash && ((after = input.peek(1)) == slash || after == star)) return\n if (next != braceR && next != semicolon && next != -1 && !stack.context)\n input.acceptToken(noSemi);\n}, {contextual: true});\n\nconst noSemicolonType = new ExternalTokenizer((input, stack) => {\n if (input.next == bracketL && !stack.context) input.acceptToken(noSemiType);\n}, {contextual: true});\n\nconst operatorToken = new ExternalTokenizer((input, stack) => {\n let {next} = input;\n if (next == plus || next == minus) {\n input.advance();\n if (next == input.next) {\n input.advance();\n let mayPostfix = !stack.context && stack.canShift(incdec);\n input.acceptToken(mayPostfix ? incdec : incdecPrefix);\n }\n } else if (next == question && input.peek(1) == dot) {\n input.advance(); input.advance();\n if (input.next < 48 || input.next > 57) // No digit after\n input.acceptToken(questionDot);\n }\n}, {contextual: true});\n\nfunction identifierChar(ch, start) {\n return ch >= 65 && ch <= 90 || ch >= 97 && ch <= 122 || ch == 95 || ch >= 192 ||\n !start && ch >= 48 && ch <= 57\n}\n\nconst jsx = new ExternalTokenizer((input, stack) => {\n if (input.next != lt || !stack.dialectEnabled(Dialect_jsx)) return\n input.advance();\n if (input.next == slash) return\n // Scan for an identifier followed by a comma or 'extends', don't\n // treat this as a start tag if present.\n let back = 0;\n while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n if (identifierChar(input.next, true)) {\n input.advance();\n back++;\n while (identifierChar(input.next, false)) { input.advance(); back++; }\n while (space.indexOf(input.next) > -1) { input.advance(); back++; }\n if (input.next == comma) return\n for (let i = 0;; i++) {\n if (i == 7) {\n if (!identifierChar(input.next, true)) return\n break\n }\n if (input.next != \"extends\".charCodeAt(i)) break\n input.advance();\n back++;\n }\n }\n input.acceptToken(JSXStartTag, -back);\n});\n\nconst jsHighlight = styleTags({\n \"get set async static\": tags.modifier,\n \"for while do if else switch try catch finally return throw break continue default case defer\": tags.controlKeyword,\n \"in of await yield void typeof delete instanceof as satisfies\": tags.operatorKeyword,\n \"let var const using function class extends\": tags.definitionKeyword,\n \"import export from\": tags.moduleKeyword,\n \"with debugger new\": tags.keyword,\n TemplateString: tags.special(tags.string),\n super: tags.atom,\n BooleanLiteral: tags.bool,\n this: tags.self,\n null: tags.null,\n Star: tags.modifier,\n VariableName: tags.variableName,\n \"CallExpression/VariableName TaggedTemplateExpression/VariableName\": tags.function(tags.variableName),\n VariableDefinition: tags.definition(tags.variableName),\n Label: tags.labelName,\n PropertyName: tags.propertyName,\n PrivatePropertyName: tags.special(tags.propertyName),\n \"CallExpression/MemberExpression/PropertyName\": tags.function(tags.propertyName),\n \"FunctionDeclaration/VariableDefinition\": tags.function(tags.definition(tags.variableName)),\n \"ClassDeclaration/VariableDefinition\": tags.definition(tags.className),\n \"NewExpression/VariableName\": tags.className,\n PropertyDefinition: tags.definition(tags.propertyName),\n PrivatePropertyDefinition: tags.definition(tags.special(tags.propertyName)),\n UpdateOp: tags.updateOperator,\n \"LineComment Hashbang\": tags.lineComment,\n BlockComment: tags.blockComment,\n Number: tags.number,\n String: tags.string,\n Escape: tags.escape,\n ArithOp: tags.arithmeticOperator,\n LogicOp: tags.logicOperator,\n BitOp: tags.bitwiseOperator,\n CompareOp: tags.compareOperator,\n RegExp: tags.regexp,\n Equals: tags.definitionOperator,\n Arrow: tags.function(tags.punctuation),\n \": Spread\": tags.punctuation,\n \"( )\": tags.paren,\n \"[ ]\": tags.squareBracket,\n \"{ }\": tags.brace,\n \"InterpolationStart InterpolationEnd\": tags.special(tags.brace),\n \".\": tags.derefOperator,\n \", ;\": tags.separator,\n \"@\": tags.meta,\n\n TypeName: tags.typeName,\n TypeDefinition: tags.definition(tags.typeName),\n \"type enum interface implements namespace module declare\": tags.definitionKeyword,\n \"abstract global Privacy readonly override\": tags.modifier,\n \"is keyof unique infer asserts\": tags.operatorKeyword,\n\n JSXAttributeValue: tags.attributeValue,\n JSXText: tags.content,\n \"JSXStartTag JSXStartCloseTag JSXSelfCloseEndTag JSXEndTag\": tags.angleBracket,\n \"JSXIdentifier JSXNameSpacedName\": tags.tagName,\n \"JSXAttribute/JSXIdentifier JSXAttribute/JSXNameSpacedName\": tags.attributeName,\n \"JSXBuiltin/JSXIdentifier\": tags.standard(tags.tagName)\n});\n\n// This file was generated by lezer-generator. You probably shouldn't edit it.\nconst spec_identifier = {__proto__:null,export:20, as:25, from:33, default:36, async:41, function:42, in:52, out:55, const:56, extends:60, this:64, true:72, false:72, null:84, void:88, typeof:92, super:108, new:142, delete:154, yield:163, await:167, class:172, public:235, private:235, protected:235, readonly:237, instanceof:256, satisfies:259, import:292, keyof:349, unique:353, infer:359, asserts:395, is:397, abstract:417, implements:419, type:421, let:424, var:426, using:429, interface:435, enum:439, namespace:445, module:447, declare:451, global:455, defer:471, for:476, of:485, while:488, with:492, do:496, if:500, else:502, switch:506, case:512, try:518, catch:522, finally:526, return:530, throw:534, break:538, continue:542, debugger:546};\nconst spec_word = {__proto__:null,async:129, get:131, set:133, declare:195, public:197, private:197, protected:197, static:199, abstract:201, override:203, readonly:209, accessor:211, new:401};\nconst spec_LessThan = {__proto__:null,\"<\":193};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"$F|Q%TQlOOO%[QlOOO'_QpOOP(lO`OOO*zQ!0MxO'#CiO+RO#tO'#CjO+aO&jO'#CjO+oO#@ItO'#DaO.QQlO'#DgO.bQlO'#DrO%[QlO'#DzO0fQlO'#ESOOQ!0Lf'#E['#E[O1PQ`O'#EXOOQO'#Ep'#EpOOQO'#Il'#IlO1XQ`O'#GsO1dQ`O'#EoO1iQ`O'#EoO3hQ!0MxO'#JrO6[Q!0MxO'#JsO6uQ`O'#F]O6zQ,UO'#FtOOQ!0Lf'#Ff'#FfO7VO7dO'#FfO9XQMhO'#F|O9`Q`O'#F{OOQ!0Lf'#Js'#JsOOQ!0Lb'#Jr'#JrO9eQ`O'#GwOOQ['#K_'#K_O9pQ`O'#IYO9uQ!0LrO'#IZOOQ['#J`'#J`OOQ['#I_'#I_Q`QlOOQ`QlOOO9}Q!L^O'#DvO:UQlO'#EOO:]QlO'#EQO9kQ`O'#GsO:dQMhO'#CoO:rQ`O'#EnO:}Q`O'#EyO;hQMhO'#FeO;xQ`O'#GsOOQO'#K`'#K`O;}Q`O'#K`O<]Q`O'#G{O<]Q`O'#G|O<]Q`O'#HOO9kQ`O'#HRO=SQ`O'#HUO>kQ`O'#CeO>{Q`O'#HcO?TQ`O'#HiO?TQ`O'#HkO`QlO'#HmO?TQ`O'#HoO?TQ`O'#HrO?YQ`O'#HxO?_Q!0LsO'#IOO%[QlO'#IQO?jQ!0LsO'#ISO?uQ!0LsO'#IUO9uQ!0LrO'#IWO@QQ!0MxO'#CiOASQpO'#DlQOQ`OOO%[QlO'#EQOAjQ`O'#ETO:dQMhO'#EnOAuQ`O'#EnOBQQ!bO'#FeOOQ['#Cg'#CgOOQ!0Lb'#Dq'#DqOOQ!0Lb'#Jv'#JvO%[QlO'#JvOOQO'#Jy'#JyOOQO'#Ih'#IhOCQQpO'#EgOOQ!0Lb'#Ef'#EfOOQ!0Lb'#J}'#J}OC|Q!0MSO'#EgODWQpO'#EWOOQO'#Jx'#JxODlQpO'#JyOEyQpO'#EWODWQpO'#EgPFWO&2DjO'#CbPOOO)CD})CD}OOOO'#I`'#I`OFcO#tO,59UOOQ!0Lh,59U,59UOOOO'#Ia'#IaOFqO&jO,59UOGPQ!L^O'#DcOOOO'#Ic'#IcOGWO#@ItO,59{OOQ!0Lf,59{,59{OGfQlO'#IdOGyQ`O'#JtOIxQ!fO'#JtO+}QlO'#JtOJPQ`O,5:ROJgQ`O'#EpOJtQ`O'#KTOKPQ`O'#KSOKPQ`O'#KSOKXQ`O,5;^OK^Q`O'#KROOQ!0Ln,5:^,5:^OKeQlO,5:^OMcQ!0MxO,5:fONSQ`O,5:nONmQ!0LrO'#KQONtQ`O'#KPO9eQ`O'#KPO! YQ`O'#KPO! bQ`O,5;]O! gQ`O'#KPO!#lQ!fO'#JsOOQ!0Lh'#Ci'#CiO%[QlO'#ESO!$[Q!fO,5:sOOQS'#Jz'#JzOOQO-E<j-E<jO9kQ`O,5=_O!$rQ`O,5=_O!$wQlO,5;ZO!&zQMhO'#EkO!(eQ`O,5;ZO!(jQlO'#DyO!(tQpO,5;dO!(|QpO,5;dO%[QlO,5;dOOQ['#FT'#FTOOQ['#FV'#FVO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eO%[QlO,5;eOOQ['#FZ'#FZO!)[QlO,5;tOOQ!0Lf,5;y,5;yOOQ!0Lf,5;z,5;zOOQ!0Lf,5;|,5;|O%[QlO'#IpO!+_Q!0LrO,5<iO%[QlO,5;eO!&zQMhO,5;eO!+|QMhO,5;eO!-nQMhO'#E^O%[QlO,5;wOOQ!0Lf,5;{,5;{O!-uQ,UO'#FjO!.rQ,UO'#KXO!.^Q,UO'#KXO!.yQ,UO'#KXOOQO'#KX'#KXO!/_Q,UO,5<SOOOW,5<`,5<`O!/pQlO'#FvOOOW'#Io'#IoO7VO7dO,5<QO!/wQ,UO'#FxOOQ!0Lf,5<Q,5<QO!0hQ$IUO'#CyOOQ!0Lh'#C}'#C}O!0{O#@ItO'#DRO!1iQMjO,5<eO!1pQ`O,5<hO!3YQ(CWO'#GXO!3jQ`O'#GYO!3oQ`O'#GYO!5_Q(CWO'#G^O!6dQpO'#GbOOQO'#Gn'#GnO!,TQMhO'#GmOOQO'#Gp'#GpO!,TQMhO'#GoO!7VQ$IUO'#JlOOQ!0Lh'#Jl'#JlO!7aQ`O'#JkO!7oQ`O'#JjO!7wQ`O'#CuOOQ!0Lh'#C{'#C{O!8YQ`O'#C}OOQ!0Lh'#DV'#DVOOQ!0Lh'#DX'#DXO!8_Q`O,5<eO1SQ`O'#DZO!,TQMhO'#GPO!,TQMhO'#GRO!8gQ`O'#GTO!8lQ`O'#GUO!3oQ`O'#G[O!,TQMhO'#GaO<]Q`O'#JkO!8qQ`O'#EqO!9`Q`O,5<gOOQ!0Lb'#Cr'#CrO!9hQ`O'#ErO!:bQpO'#EsOOQ!0Lb'#KR'#KRO!:iQ!0LrO'#KaO9uQ!0LrO,5=cO`QlO,5>tOOQ['#Jh'#JhOOQ[,5>u,5>uOOQ[-E<]-E<]O!<hQ!0MxO,5:bO!:]QpO,5:`O!?RQ!0MxO,5:jO%[QlO,5:jO!AiQ!0MxO,5:lOOQO,5@z,5@zO!BYQMhO,5=_O!BhQ!0LrO'#JiO9`Q`O'#JiO!ByQ!0LrO,59ZO!CUQpO,59ZO!C^QMhO,59ZO:dQMhO,59ZO!CiQ`O,5;ZO!CqQ`O'#HbO!DVQ`O'#KdO%[QlO,5;}O!:]QpO,5<PO!D_Q`O,5=zO!DdQ`O,5=zO!DiQ`O,5=zO!DwQ`O,5=zO9uQ!0LrO,5=zO<]Q`O,5=jOOQO'#Cy'#CyO!EOQpO,5=gO!EWQMhO,5=hO!EcQ`O,5=jO!EhQ!bO,5=mO!EpQ`O'#K`O?YQ`O'#HWO9kQ`O'#HYO!EuQ`O'#HYO:dQMhO'#H[O!EzQ`O'#H[OOQ[,5=p,5=pO!FPQ`O'#H]O!FbQ`O'#CoO!FgQ`O,59PO!FqQ`O,59PO!HvQlO,59POOQ[,59P,59PO!IWQ!0LrO,59PO%[QlO,59PO!KcQlO'#HeOOQ['#Hf'#HfOOQ['#Hg'#HgO`QlO,5=}O!KyQ`O,5=}O`QlO,5>TO`QlO,5>VO!LOQ`O,5>XO`QlO,5>ZO!LTQ`O,5>^O!LYQlO,5>dOOQ[,5>j,5>jO%[QlO,5>jO9uQ!0LrO,5>lOOQ[,5>n,5>nO#!dQ`O,5>nOOQ[,5>p,5>pO#!dQ`O,5>pOOQ[,5>r,5>rO##QQpO'#D_O%[QlO'#JvO##sQpO'#JvO##}QpO'#DmO#$`QpO'#DmO#&qQlO'#DmO#&xQ`O'#JuO#'QQ`O,5:WO#'VQ`O'#EtO#'eQ`O'#KUO#'mQ`O,5;_O#'rQpO'#DmO#(PQpO'#EVOOQ!0Lf,5:o,5:oO%[QlO,5:oO#(WQ`O,5:oO?YQ`O,5;YO!CUQpO,5;YO!C^QMhO,5;YO:dQMhO,5;YO#(`Q`O,5@bO#(eQ07dO,5:sOOQO-E<f-E<fO#)kQ!0MSO,5;RODWQpO,5:rO#)uQpO,5:rODWQpO,5;RO!ByQ!0LrO,5:rOOQ!0Lb'#Ej'#EjOOQO,5;R,5;RO%[QlO,5;RO#*SQ!0LrO,5;RO#*_Q!0LrO,5;RO!CUQpO,5:rOOQO,5;X,5;XO#*mQ!0LrO,5;RPOOO'#I^'#I^P#+RO&2DjO,58|POOO,58|,58|OOOO-E<^-E<^OOQ!0Lh1G.p1G.pOOOO-E<_-E<_OOOO,59},59}O#+^Q!bO,59}OOOO-E<a-E<aOOQ!0Lf1G/g1G/gO#+cQ!fO,5?OO+}QlO,5?OOOQO,5?U,5?UO#+mQlO'#IdOOQO-E<b-E<bO#+zQ`O,5@`O#,SQ!fO,5@`O#,ZQ`O,5@nOOQ!0Lf1G/m1G/mO%[QlO,5@oO#,cQ`O'#IjOOQO-E<h-E<hO#,ZQ`O,5@nOOQ!0Lb1G0x1G0xOOQ!0Ln1G/x1G/xOOQ!0Ln1G0Y1G0YO%[QlO,5@lO#,wQ!0LrO,5@lO#-YQ!0LrO,5@lO#-aQ`O,5@kO9eQ`O,5@kO#-iQ`O,5@kO#-wQ`O'#ImO#-aQ`O,5@kOOQ!0Lb1G0w1G0wO!(tQpO,5:uO!)PQpO,5:uOOQS,5:w,5:wO#.iQdO,5:wO#.qQMhO1G2yO9kQ`O1G2yOOQ!0Lf1G0u1G0uO#/PQ!0MxO1G0uO#0UQ!0MvO,5;VOOQ!0Lh'#GW'#GWO#0rQ!0MzO'#JlO!$wQlO1G0uO#2}Q!fO'#JwO%[QlO'#JwO#3XQ`O,5:eOOQ!0Lh'#D_'#D_OOQ!0Lf1G1O1G1OO%[QlO1G1OOOQ!0Lf1G1f1G1fO#3^Q`O1G1OO#5rQ!0MxO1G1PO#5yQ!0MxO1G1PO#8aQ!0MxO1G1PO#8hQ!0MxO1G1PO#;OQ!0MxO1G1PO#=fQ!0MxO1G1PO#=mQ!0MxO1G1PO#=tQ!0MxO1G1PO#@[Q!0MxO1G1PO#@cQ!0MxO1G1PO#BpQ?MtO'#CiO#DkQ?MtO1G1`O#DrQ?MtO'#JsO#EVQ!0MxO,5?[OOQ!0Lb-E<n-E<nO#GdQ!0MxO1G1PO#HaQ!0MzO1G1POOQ!0Lf1G1P1G1PO#IdQMjO'#J|O#InQ`O,5:xO#IsQ!0MxO1G1cO#JgQ,UO,5<WO#JoQ,UO,5<XO#JwQ,UO'#FoO#K`Q`O'#FnOOQO'#KY'#KYOOQO'#In'#InO#KeQ,UO1G1nOOQ!0Lf1G1n1G1nOOOW1G1y1G1yO#KvQ?MtO'#JrO#LQQ`O,5<bO!)[QlO,5<bOOOW-E<m-E<mOOQ!0Lf1G1l1G1lO#LVQpO'#KXOOQ!0Lf,5<d,5<dO#L_QpO,5<dO#LdQMhO'#DTOOOO'#Ib'#IbO#LkO#@ItO,59mOOQ!0Lh,59m,59mO%[QlO1G2PO!8lQ`O'#IrO#LvQ`O,5<zOOQ!0Lh,5<w,5<wO!,TQMhO'#IuO#MdQMjO,5=XO!,TQMhO'#IwO#NVQMjO,5=ZO!&zQMhO,5=]OOQO1G2S1G2SO#NaQ!dO'#CrO#NtQ(CWO'#ErO$ |QpO'#GbO$!dQ!dO,5<sO$!kQ`O'#K[O9eQ`O'#K[O$!yQ`O,5<uO$#aQ!dO'#C{O!,TQMhO,5<tO$#kQ`O'#GZO$$PQ`O,5<tO$$UQ!dO'#GWO$$cQ!dO'#K]O$$mQ`O'#K]O!&zQMhO'#K]O$$rQ`O,5<xO$$wQlO'#JvO$%RQpO'#GcO#$`QpO'#GcO$%dQ`O'#GgO!3oQ`O'#GkO$%iQ!0LrO'#ItO$%tQpO,5<|OOQ!0Lp,5<|,5<|O$%{QpO'#GcO$&YQpO'#GdO$&kQpO'#GdO$&pQMjO,5=XO$'QQMjO,5=ZOOQ!0Lh,5=^,5=^O!,TQMhO,5@VO!,TQMhO,5@VO$'bQ`O'#IyO$'vQ`O,5@UO$(OQ`O,59aOOQ!0Lh,59i,59iO$(TQ`O,5@VO$)TQ$IYO,59uOOQ!0Lh'#Jp'#JpO$)vQMjO,5<kO$*iQMjO,5<mO@zQ`O,5<oOOQ!0Lh,5<p,5<pO$*sQ`O,5<vO$*xQMjO,5<{O$+YQ`O'#KPO!$wQlO1G2RO$+_Q`O1G2RO9eQ`O'#KSO9eQ`O'#EtO%[QlO'#EtO9eQ`O'#I{O$+dQ!0LrO,5@{OOQ[1G2}1G2}OOQ[1G4`1G4`OOQ!0Lf1G/|1G/|OOQ!0Lf1G/z1G/zO$-fQ!0MxO1G0UOOQ[1G2y1G2yO!&zQMhO1G2yO%[QlO1G2yO#.tQ`O1G2yO$/jQMhO'#EkOOQ!0Lb,5@T,5@TO$/wQ!0LrO,5@TOOQ[1G.u1G.uO!ByQ!0LrO1G.uO!CUQpO1G.uO!C^QMhO1G.uO$0YQ`O1G0uO$0_Q`O'#CiO$0jQ`O'#KeO$0rQ`O,5=|O$0wQ`O'#KeO$0|Q`O'#KeO$1[Q`O'#JRO$1jQ`O,5AOO$1rQ!fO1G1iOOQ!0Lf1G1k1G1kO9kQ`O1G3fO@zQ`O1G3fO$1yQ`O1G3fO$2OQ`O1G3fO!DiQ`O1G3fO9uQ!0LrO1G3fOOQ[1G3f1G3fO!EcQ`O1G3UO!&zQMhO1G3RO$2TQ`O1G3ROOQ[1G3S1G3SO!&zQMhO1G3SO$2YQ`O1G3SO$2bQpO'#HQOOQ[1G3U1G3UO!6_QpO'#I}O!EhQ!bO1G3XOOQ[1G3X1G3XOOQ[,5=r,5=rO$2jQMhO,5=tO9kQ`O,5=tO$%dQ`O,5=vO9`Q`O,5=vO!CUQpO,5=vO!C^QMhO,5=vO:dQMhO,5=vO$2xQ`O'#KcO$3TQ`O,5=wOOQ[1G.k1G.kO$3YQ!0LrO1G.kO@zQ`O1G.kO$3eQ`O1G.kO9uQ!0LrO1G.kO$5mQ!fO,5AQO$5zQ`O,5AQO9eQ`O,5AQO$6VQlO,5>PO$6^Q`O,5>POOQ[1G3i1G3iO`QlO1G3iOOQ[1G3o1G3oOOQ[1G3q1G3qO?TQ`O1G3sO$6cQlO1G3uO$:gQlO'#HtOOQ[1G3x1G3xO$:tQ`O'#HzO?YQ`O'#H|OOQ[1G4O1G4OO$:|QlO1G4OO9uQ!0LrO1G4UOOQ[1G4W1G4WOOQ!0Lb'#G_'#G_O9uQ!0LrO1G4YO9uQ!0LrO1G4[O$?TQ`O,5@bO!)[QlO,5;`O9eQ`O,5;`O?YQ`O,5:XO!)[QlO,5:XO!CUQpO,5:XO$?YQ?MtO,5:XOOQO,5;`,5;`O$?dQpO'#IeO$?zQ`O,5@aOOQ!0Lf1G/r1G/rO$@SQpO'#IkO$@^Q`O,5@pOOQ!0Lb1G0y1G0yO#$`QpO,5:XOOQO'#Ig'#IgO$@fQpO,5:qOOQ!0Ln,5:q,5:qO#(ZQ`O1G0ZOOQ!0Lf1G0Z1G0ZO%[QlO1G0ZOOQ!0Lf1G0t1G0tO?YQ`O1G0tO!CUQpO1G0tO!C^QMhO1G0tOOQ!0Lb1G5|1G5|O!ByQ!0LrO1G0^OOQO1G0m1G0mO%[QlO1G0mO$@mQ!0LrO1G0mO$@xQ!0LrO1G0mO!CUQpO1G0^ODWQpO1G0^O$AWQ!0LrO1G0mOOQO1G0^1G0^O$AlQ!0MxO1G0mPOOO-E<[-E<[POOO1G.h1G.hOOOO1G/i1G/iO$AvQ!bO,5<iO$BOQ!fO1G4jOOQO1G4p1G4pO%[QlO,5?OO$BYQ`O1G5zO$BbQ`O1G6YO$BjQ!fO1G6ZO9eQ`O,5?UO$BtQ!0MxO1G6WO%[QlO1G6WO$CUQ!0LrO1G6WO$CgQ`O1G6VO$CgQ`O1G6VO9eQ`O1G6VO$CoQ`O,5?XO9eQ`O,5?XOOQO,5?X,5?XO$DTQ`O,5?XO$+YQ`O,5?XOOQO-E<k-E<kOOQS1G0a1G0aOOQS1G0c1G0cO#.lQ`O1G0cOOQ[7+(e7+(eO!&zQMhO7+(eO%[QlO7+(eO$DcQ`O7+(eO$DnQMhO7+(eO$D|Q!0MzO,5=XO$GXQ!0MzO,5=ZO$IdQ!0MzO,5=XO$KuQ!0MzO,5=ZO$NWQ!0MzO,59uO%!]Q!0MzO,5<kO%$hQ!0MzO,5<mO%&sQ!0MzO,5<{OOQ!0Lf7+&a7+&aO%)UQ!0MxO7+&aO%)xQlO'#IfO%*VQ`O,5@cO%*_Q!fO,5@cOOQ!0Lf1G0P1G0PO%*iQ`O7+&jOOQ!0Lf7+&j7+&jO%*nQ?MtO,5:fO%[QlO7+&zO%*xQ?MtO,5:bO%+VQ?MtO,5:jO%+aQ?MtO,5:lO%+kQMhO'#IiO%+uQ`O,5@hOOQ!0Lh1G0d1G0dOOQO1G1r1G1rOOQO1G1s1G1sO%+}Q!jO,5<ZO!)[QlO,5<YOOQO-E<l-E<lOOQ!0Lf7+'Y7+'YOOOW7+'e7+'eOOOW1G1|1G1|O%,YQ`O1G1|OOQ!0Lf1G2O1G2OOOOO,59o,59oO%,_Q!dO,59oOOOO-E<`-E<`OOQ!0Lh1G/X1G/XO%,fQ!0MxO7+'kOOQ!0Lh,5?^,5?^O%-YQMhO1G2fP%-aQ`O'#IrPOQ!0Lh-E<p-E<pO%-}QMjO,5?aOOQ!0Lh-E<s-E<sO%.pQMjO,5?cOOQ!0Lh-E<u-E<uO%.zQ!dO1G2wO%/RQ!dO'#CrO%/iQMhO'#KSO$$wQlO'#JvOOQ!0Lh1G2_1G2_O%/sQ`O'#IqO%0[Q`O,5@vO%0[Q`O,5@vO%0dQ`O,5@vO%0oQ`O,5@vOOQO1G2a1G2aO%0}QMjO1G2`O$+YQ`O'#K[O!,TQMhO1G2`O%1_Q(CWO'#IsO%1lQ`O,5@wO!&zQMhO,5@wO%1tQ!dO,5@wOOQ!0Lh1G2d1G2dO%4UQ!fO'#CiO%4`Q`O,5=POOQ!0Lb,5<},5<}O%4hQpO,5<}OOQ!0Lb,5=O,5=OOCwQ`O,5<}O%4sQpO,5<}OOQ!0Lb,5=R,5=RO$+YQ`O,5=VOOQO,5?`,5?`OOQO-E<r-E<rOOQ!0Lp1G2h1G2hO#$`QpO,5<}O$$wQlO,5=PO%5RQ`O,5=OO%5^QpO,5=OO!,TQMhO'#IuO%6WQMjO1G2sO!,TQMhO'#IwO%6yQMjO1G2uO%7TQMjO1G5qO%7_QMjO1G5qOOQO,5?e,5?eOOQO-E<w-E<wOOQO1G.{1G.{O!,TQMhO1G5qO!,TQMhO1G5qO!:]QpO,59wO%[QlO,59wOOQ!0Lh,5<j,5<jO%7lQ`O1G2ZO!,TQMhO1G2bO%7qQ!0MxO7+'mOOQ!0Lf7+'m7+'mO!$wQlO7+'mO%8eQ`O,5;`OOQ!0Lb,5?g,5?gOOQ!0Lb-E<y-E<yO%8jQ!dO'#K^O#(ZQ`O7+(eO4UQ!fO7+(eO$DfQ`O7+(eO%8tQ!0MvO'#CiO%9XQ!0MvO,5=SO%9lQ`O,5=SO%9tQ`O,5=SOOQ!0Lb1G5o1G5oOOQ[7+$a7+$aO!ByQ!0LrO7+$aO!CUQpO7+$aO!$wQlO7+&aO%9yQ`O'#JQO%:bQ`O,5APOOQO1G3h1G3hO9kQ`O,5APO%:bQ`O,5APO%:jQ`O,5APOOQO,5?m,5?mOOQO-E=P-E=POOQ!0Lf7+'T7+'TO%:oQ`O7+)QO9uQ!0LrO7+)QO9kQ`O7+)QO@zQ`O7+)QO%:tQ`O7+)QOOQ[7+)Q7+)QOOQ[7+(p7+(pO%:yQ!0MvO7+(mO!&zQMhO7+(mO!E^Q`O7+(nOOQ[7+(n7+(nO!&zQMhO7+(nO%;TQ`O'#KbO%;`Q`O,5=lOOQO,5?i,5?iOOQO-E<{-E<{OOQ[7+(s7+(sO%<rQpO'#HZOOQ[1G3`1G3`O!&zQMhO1G3`O%[QlO1G3`O%<yQ`O1G3`O%=UQMhO1G3`O9uQ!0LrO1G3bO$%dQ`O1G3bO9`Q`O1G3bO!CUQpO1G3bO!C^QMhO1G3bO%=dQ`O'#JPO%=xQ`O,5@}O%>QQpO,5@}OOQ!0Lb1G3c1G3cOOQ[7+$V7+$VO@zQ`O7+$VO9uQ!0LrO7+$VO%>]Q`O7+$VO%[QlO1G6lO%[QlO1G6mO%>bQ!0LrO1G6lO%>lQlO1G3kO%>sQ`O1G3kO%>xQlO1G3kOOQ[7+)T7+)TO9uQ!0LrO7+)_O`QlO7+)aOOQ['#Kh'#KhOOQ['#JS'#JSO%?PQlO,5>`OOQ[,5>`,5>`O%[QlO'#HuO%?^Q`O'#HwOOQ[,5>f,5>fO9eQ`O,5>fOOQ[,5>h,5>hOOQ[7+)j7+)jOOQ[7+)p7+)pOOQ[7+)t7+)tOOQ[7+)v7+)vO%?cQpO1G5|O%?}Q?MtO1G0zO%@XQ`O1G0zOOQO1G/s1G/sO%@dQ?MtO1G/sO?YQ`O1G/sO!)[QlO'#DmOOQO,5?P,5?POOQO-E<c-E<cOOQO,5?V,5?VOOQO-E<i-E<iO!CUQpO1G/sOOQO-E<e-E<eOOQ!0Ln1G0]1G0]OOQ!0Lf7+%u7+%uO#(ZQ`O7+%uOOQ!0Lf7+&`7+&`O?YQ`O7+&`O!CUQpO7+&`OOQO7+%x7+%xO$AlQ!0MxO7+&XOOQO7+&X7+&XO%[QlO7+&XO%@nQ!0LrO7+&XO!ByQ!0LrO7+%xO!CUQpO7+%xO%@yQ!0LrO7+&XO%AXQ!0MxO7++rO%[QlO7++rO%AiQ`O7++qO%AiQ`O7++qOOQO1G4s1G4sO9eQ`O1G4sO%AqQ`O1G4sOOQS7+%}7+%}O#(ZQ`O<<LPO4UQ!fO<<LPO%BPQ`O<<LPOOQ[<<LP<<LPO!&zQMhO<<LPO%[QlO<<LPO%BXQ`O<<LPO%BdQ!0MzO,5?aO%DoQ!0MzO,5?cO%FzQ!0MzO1G2`O%I]Q!0MzO1G2sO%KhQ!0MzO1G2uO%MsQ!fO,5?QO%[QlO,5?QOOQO-E<d-E<dO%M}Q`O1G5}OOQ!0Lf<<JU<<JUO%NVQ?MtO1G0uO&!^Q?MtO1G1PO&!eQ?MtO1G1PO&$fQ?MtO1G1PO&$mQ?MtO1G1PO&&nQ?MtO1G1PO&(oQ?MtO1G1PO&(vQ?MtO1G1PO&(}Q?MtO1G1PO&+OQ?MtO1G1PO&+VQ?MtO1G1PO&+^Q!0MxO<<JfO&-UQ?MtO1G1PO&.RQ?MvO1G1PO&/UQ?MvO'#JlO&1[Q?MtO1G1cO&1iQ?MtO1G0UO&1sQMjO,5?TOOQO-E<g-E<gO!)[QlO'#FqOOQO'#KZ'#KZOOQO1G1u1G1uO&1}Q`O1G1tO&2SQ?MtO,5?[OOOW7+'h7+'hOOOO1G/Z1G/ZO&2^Q!dO1G4xOOQ!0Lh7+(Q7+(QP!&zQMhO,5?^O!,TQMhO7+(cO&2eQ`O,5?]O9eQ`O,5?]O$+YQ`O,5?]OOQO-E<o-E<oO&2sQ`O1G6bO&2sQ`O1G6bO&2{Q`O1G6bO&3WQMjO7+'zO&3hQ!dO,5?_O&3rQ`O,5?_O!&zQMhO,5?_OOQO-E<q-E<qO&3wQ!dO1G6cO&4RQ`O1G6cO&4ZQ`O1G2kO!&zQMhO1G2kOOQ!0Lb1G2i1G2iOOQ!0Lb1G2j1G2jO%4hQpO1G2iO!CUQpO1G2iOCwQ`O1G2iOOQ!0Lb1G2q1G2qO&4`QpO1G2iO&4nQ`O1G2kO$+YQ`O1G2jOCwQ`O1G2jO$$wQlO1G2kO&4vQ`O1G2jO&5jQMjO,5?aOOQ!0Lh-E<t-E<tO&6]QMjO,5?cOOQ!0Lh-E<v-E<vO!,TQMhO7++]O&6gQMjO7++]O&6qQMjO7++]OOQ!0Lh1G/c1G/cO&7OQ`O1G/cOOQ!0Lh7+'u7+'uO&7TQMjO7+'|O&7eQ!0MxO<<KXOOQ!0Lf<<KX<<KXO&8XQ`O1G0zO!&zQMhO'#IzO&8^Q`O,5@xO&:`Q!fO<<LPO!&zQMhO1G2nO&:gQ!0LrO1G2nOOQ[<<G{<<G{O!ByQ!0LrO<<G{O&:xQ!0MxO<<I{OOQ!0Lf<<I{<<I{OOQO,5?l,5?lO&;lQ`O,5?lO&;qQ`O,5?lOOQO-E=O-E=OO&<PQ`O1G6kO&<PQ`O1G6kO9kQ`O1G6kO@zQ`O<<LlOOQ[<<Ll<<LlO&<XQ`O<<LlO9uQ!0LrO<<LlO9kQ`O<<LlOOQ[<<LX<<LXO%:yQ!0MvO<<LXOOQ[<<LY<<LYO!E^Q`O<<LYO&<^QpO'#I|O&<iQ`O,5@|O!)[QlO,5@|OOQ[1G3W1G3WOOQO'#JO'#JOO9uQ!0LrO'#JOO&<qQpO,5=uOOQ[,5=u,5=uO&<xQpO'#EgO&=PQpO'#GeO&=UQ`O7+(zO&=ZQ`O7+(zOOQ[7+(z7+(zO!&zQMhO7+(zO%[QlO7+(zO&=cQ`O7+(zOOQ[7+(|7+(|O9uQ!0LrO7+(|O$%dQ`O7+(|O9`Q`O7+(|O!CUQpO7+(|O&=nQ`O,5?kOOQO-E<}-E<}OOQO'#H^'#H^O&=yQ`O1G6iO9uQ!0LrO<<GqOOQ[<<Gq<<GqO@zQ`O<<GqO&>RQ`O7+,WO&>WQ`O7+,XO%[QlO7+,WO%[QlO7+,XOOQ[7+)V7+)VO&>]Q`O7+)VO&>bQlO7+)VO&>iQ`O7+)VOOQ[<<Ly<<LyOOQ[<<L{<<L{OOQ[-E=Q-E=QOOQ[1G3z1G3zO&>nQ`O,5>aOOQ[,5>c,5>cO&>sQ`O1G4QO9eQ`O7+&fO!)[QlO7+&fOOQO7+%_7+%_O&>xQ?MtO1G6ZO?YQ`O7+%_OOQ!0Lf<<Ia<<IaOOQ!0Lf<<Iz<<IzO?YQ`O<<IzOOQO<<Is<<IsO$AlQ!0MxO<<IsO%[QlO<<IsOOQO<<Id<<IdO!ByQ!0LrO<<IdO&?SQ!0LrO<<IsO&?_Q!0MxO<= ^O&?oQ`O<= ]OOQO7+*_7+*_O9eQ`O7+*_OOQ[ANAkANAkO&?wQ!fOANAkO!&zQMhOANAkO#(ZQ`OANAkO4UQ!fOANAkO&@OQ`OANAkO%[QlOANAkO&@WQ!0MzO7+'zO&BiQ!0MzO,5?aO&DtQ!0MzO,5?cO&GPQ!0MzO7+'|O&IbQ!fO1G4lO&IlQ?MtO7+&aO&KpQ?MvO,5=XO&MwQ?MvO,5=ZO&NXQ?MvO,5=XO&NiQ?MvO,5=ZO&NyQ?MvO,59uO'#PQ?MvO,5<kO'%SQ?MvO,5<mO''hQ?MvO,5<{O')^Q?MtO7+'kO')kQ?MtO7+'mO')xQ`O,5<]OOQO7+'`7+'`OOQ!0Lh7+*d7+*dO')}QMjO<<K}OOQO1G4w1G4wO'*UQ`O1G4wO'*aQ`O1G4wO'*oQ`O7++|O'*oQ`O7++|O!&zQMhO1G4yO'*wQ!dO1G4yO'+RQ`O7++}O'+ZQ`O7+(VO'+fQ!dO7+(VOOQ!0Lb7+(T7+(TOOQ!0Lb7+(U7+(UO!CUQpO7+(TOCwQ`O7+(TO'+pQ`O7+(VO!&zQMhO7+(VO$+YQ`O7+(UO'+uQ`O7+(VOCwQ`O7+(UO'+}QMjO<<NwO!,TQMhO<<NwOOQ!0Lh7+$}7+$}O',XQ!dO,5?fOOQO-E<x-E<xO',cQ!0MvO7+(YO!&zQMhO7+(YOOQ[AN=gAN=gO9kQ`O1G5WOOQO1G5W1G5WO',sQ`O1G5WO',xQ`O7+,VO',xQ`O7+,VO9uQ!0LrOANBWO@zQ`OANBWOOQ[ANBWANBWO'-QQ`OANBWOOQ[ANAsANAsOOQ[ANAtANAtO'-VQ`O,5?hOOQO-E<z-E<zO'-bQ?MtO1G6hOOQO,5?j,5?jOOQO-E<|-E<|OOQ[1G3a1G3aO'-lQ`O,5=POOQ[<<Lf<<LfO!&zQMhO<<LfO&=UQ`O<<LfO'-qQ`O<<LfO%[QlO<<LfOOQ[<<Lh<<LhO9uQ!0LrO<<LhO$%dQ`O<<LhO9`Q`O<<LhO'-yQpO1G5VO'.UQ`O7+,TOOQ[AN=]AN=]O9uQ!0LrOAN=]OOQ[<= r<= rOOQ[<= s<= sO'.^Q`O<= rO'.cQ`O<= sOOQ[<<Lq<<LqO'.hQ`O<<LqO'.mQlO<<LqOOQ[1G3{1G3{O?YQ`O7+)lO'.tQ`O<<JQO'/PQ?MtO<<JQOOQO<<Hy<<HyOOQ!0LfAN?fAN?fOOQOAN?_AN?_O$AlQ!0MxOAN?_OOQOAN?OAN?OO%[QlOAN?_OOQO<<My<<MyOOQ[G27VG27VO!&zQMhOG27VO#(ZQ`OG27VO'/ZQ!fOG27VO4UQ!fOG27VO'/bQ`OG27VO'/jQ?MtO<<JfO'/wQ?MvO1G2`O'1mQ?MvO,5?aO'3pQ?MvO,5?cO'5sQ?MvO1G2sO'7vQ?MvO1G2uO'9yQ?MtO<<KXO':WQ?MtO<<I{OOQO1G1w1G1wO!,TQMhOANAiOOQO7+*c7+*cO':eQ`O7+*cO':pQ`O<= hO':xQ!dO7+*eOOQ!0Lb<<Kq<<KqO$+YQ`O<<KqOCwQ`O<<KqO';SQ`O<<KqO!&zQMhO<<KqOOQ!0Lb<<Ko<<KoO!CUQpO<<KoO';_Q!dO<<KqOOQ!0Lb<<Kp<<KpO';iQ`O<<KqO!&zQMhO<<KqO$+YQ`O<<KpO';nQMjOANDcO';xQ!0MvO<<KtOOQO7+*r7+*rO9kQ`O7+*rO'<YQ`O<= qOOQ[G27rG27rO9uQ!0LrOG27rO@zQ`OG27rO!)[QlO1G5SO'<bQ`O7+,SO'<jQ`O1G2kO&=UQ`OANBQOOQ[ANBQANBQO!&zQMhOANBQO'<oQ`OANBQOOQ[ANBSANBSO9uQ!0LrOANBSO$%dQ`OANBSOOQO'#H_'#H_OOQO7+*q7+*qOOQ[G22wG22wOOQ[ANE^ANE^OOQ[ANE_ANE_OOQ[ANB]ANB]O'<wQ`OANB]OOQ[<<MW<<MWO!)[QlOAN?lOOQOG24yG24yO$AlQ!0MxOG24yO#(ZQ`OLD,qOOQ[LD,qLD,qO!&zQMhOLD,qO'<|Q!fOLD,qO'=TQ?MvO7+'zO'>yQ?MvO,5?aO'@|Q?MvO,5?cO'CPQ?MvO7+'|O'DuQMjOG27TOOQO<<M}<<M}OOQ!0LbANA]ANA]O$+YQ`OANA]OCwQ`OANA]O'EVQ!dOANA]OOQ!0LbANAZANAZO'E^Q`OANA]O!&zQMhOANA]O'EiQ!dOANA]OOQ!0LbANA[ANA[OOQO<<N^<<N^OOQ[LD-^LD-^O9uQ!0LrOLD-^O'EsQ?MtO7+*nOOQO'#Gf'#GfOOQ[G27lG27lO&=UQ`OG27lO!&zQMhOG27lOOQ[G27nG27nO9uQ!0LrOG27nOOQ[G27wG27wO'E}Q?MtOG25WOOQOLD*eLD*eOOQ[!$(!]!$(!]O#(ZQ`O!$(!]O!&zQMhO!$(!]O'FXQ!0MzOG27TOOQ!0LbG26wG26wO$+YQ`OG26wO'HjQ`OG26wOCwQ`OG26wO'HuQ!dOG26wO!&zQMhOG26wOOQ[!$(!x!$(!xOOQ[LD-WLD-WO&=UQ`OLD-WOOQ[LD-YLD-YOOQ[!)9Ew!)9EwO#(ZQ`O!)9EwOOQ!0LbLD,cLD,cO$+YQ`OLD,cOCwQ`OLD,cO'H|Q`OLD,cO'IXQ!dOLD,cOOQ[!$(!r!$(!rOOQ[!.K;c!.K;cO'I`Q?MvOG27TOOQ!0Lb!$( }!$( }O$+YQ`O!$( }OCwQ`O!$( }O'KUQ`O!$( }OOQ!0Lb!)9Ei!)9EiO$+YQ`O!)9EiOCwQ`O!)9EiOOQ!0Lb!.K;T!.K;TO$+YQ`O!.K;TOOQ!0Lb!4/0o!4/0oO!)[QlO'#DzO1PQ`O'#EXO'KaQ!fO'#JrO'KhQ!L^O'#DvO'KoQlO'#EOO'KvQ!fO'#CiO'N^Q!fO'#CiO!)[QlO'#EQO'NnQlO,5;ZO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO,5;eO!)[QlO'#IpO(!qQ`O,5<iO!)[QlO,5;eO(!yQMhO,5;eO($dQMhO,5;eO!)[QlO,5;wO!&zQMhO'#GmO(!yQMhO'#GmO!&zQMhO'#GoO(!yQMhO'#GoO1SQ`O'#DZO1SQ`O'#DZO!&zQMhO'#GPO(!yQMhO'#GPO!&zQMhO'#GRO(!yQMhO'#GRO!&zQMhO'#GaO(!yQMhO'#GaO!)[QlO,5:jO($kQpO'#D_O($uQpO'#JvO!)[QlO,5@oO'NnQlO1G0uO(%PQ?MtO'#CiO!)[QlO1G2PO!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO(%ZQ!dO'#CrO!&zQMhO,5<tO(!yQMhO,5<tO'NnQlO1G2RO!)[QlO7+&zO!&zQMhO1G2`O(!yQMhO1G2`O!&zQMhO'#IuO(!yQMhO'#IuO!&zQMhO'#IwO(!yQMhO'#IwO!&zQMhO1G2bO(!yQMhO1G2bO'NnQlO7+'mO'NnQlO7+&aO!&zQMhOANAiO(!yQMhOANAiO(%nQ`O'#EoO(%sQ`O'#EoO(%{Q`O'#F]O(&QQ`O'#EyO(&VQ`O'#KTO(&bQ`O'#KRO(&mQ`O,5;ZO(&rQMjO,5<eO(&yQ`O'#GYO('OQ`O'#GYO('TQ`O,5<eO(']Q`O,5<gO('eQ`O,5;ZO('mQ?MtO1G1`O('tQ`O,5<tO('yQ`O,5<tO((OQ`O,5<vO((TQ`O,5<vO((YQ`O1G2RO((_Q`O1G0uO((dQMjO<<K}O((kQMjO<<K}O((rQMhO'#F|O9`Q`O'#F{OAuQ`O'#EnO!)[QlO,5;tO!3oQ`O'#GYO!3oQ`O'#GYO!3oQ`O'#G[O!3oQ`O'#G[O!,TQMhO7+(cO!,TQMhO7+(cO%.zQ!dO1G2wO%.zQ!dO1G2wO!&zQMhO,5=]O!&zQMhO,5=]\",\n stateData: \"()x~O'|OS'}OSTOS(ORQ~OPYOQYOSfOY!VOaqOdzOeyOl!POpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!uwO!xxO!|]O$W|O$niO%h}O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO&W!WO&^!XO&`!YO&b!ZO&d![O&g!]O&m!^O&s!_O&u!`O&w!aO&y!bO&{!cO(TSO(VTO(YUO(aVO(o[O~OWtO~P`OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa!wOs!nO!S!oO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!xO#W!pO#X!pO#[!zO#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O(O!{O~OP]XR]X[]Xa]Xj]Xr]X!Q]X!S]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X'z]X(a]X(r]X(y]X(z]X~O!g%RX~P(qO_!}O(V#PO(W!}O(X#PO~O_#QO(X#PO(Y#PO(Z#QO~Ox#SO!U#TO(b#TO(c#VO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T<ZO(VTO(YUO(aVO(o[O~O![#ZO!]#WO!Y(hP!Y(vP~P+}O!^#cO~P`OPYOQYOSfOd!jOe!iOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(VTO(YUO(aVO(o[O~Op#mO![#iO!|]O#i#lO#j#iO(T<[O!k(sP~P.iO!l#oO(T#nO~O!x#sO!|]O%h#tO~O#k#uO~O!g#vO#k#uO~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!]$_O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa(fX'z(fX'w(fX!k(fX!Y(fX!_(fX%i(fX!g(fX~P1qO#S$dO#`$eO$Q$eOP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX!_(gX%i(gX~Oa(gX'z(gX'w(gX!Y(gX!k(gXv(gX!g(gX~P4UO#`$eO~O$]$hO$_$gO$f$mO~OSfO!_$nO$i$oO$k$qO~Oh%VOj%dOk%dOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T$sO(VTO(YUO(a$uO(y$}O(z%POg(^P~Ol%[O~P7eO!l%eO~O!S%hO!_%iO(T%gO~O!g%mO~Oa%nO'z%nO~O!Q%rO~P%[O(U!lO~P%[O%n%vO~P%[Oh%VO!l%eO(T%gO(U!lO~Oe%}O!l%eO(T%gO~Oj$RO~O!_&PO(T%gO(U!lO(VTO(YUO`)WP~O!Q&SO!l&RO%j&VO&T&WO~P;SO!x#sO~O%s&YO!S)SX!_)SX(T)SX~O(T&ZO~Ol!PO!u&`O%j!QO%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO~Od&eOe&dO!x&bO%h&cO%{&aO~P<bOd&hOeyOl!PO!_&gO!u&`O!xxO!|]O%h}O%l!OO%m!OO%n!OO%q!RO%s!SO%v!TO%w!TO%y!UO~Ob&kO#`&nO%j&iO(U!lO~P=gO!l&oO!u&sO~O!l#oO~O!_XO~Oa%nO'x&{O'z%nO~Oa%nO'x'OO'z%nO~Oa%nO'x'QO'z%nO~O'w]X!Y]Xv]X!k]X&[]X!_]X%i]X!g]X~P(qO!b'_O!c'WO!d'WO(U!lO(VTO(YUO~Os'UO!S'TO!['XO(e'SO!^(iP!^(xP~P@nOn'bO!_'`O(T%gO~Oe'gO!l%eO(T%gO~O!Q&SO!l&RO~Os!nO!S!oO!|<VO#T!pO#U!pO#W!pO#X!pO(U!lO(VTO(YUO(e!mO(o!sO~O!b'mO!c'lO!d'lO#V!pO#['nO#]'nO~PBYOa%nOh%VO!g#vO!l%eO'z%nO(r'pO~O!p'tO#`'rO~PChOs!nO!S!oO(VTO(YUO(e!mO(o!sO~O!_XOs(mX!S(mX!b(mX!c(mX!d(mX!|(mX#T(mX#U(mX#V(mX#W(mX#X(mX#[(mX#](mX(U(mX(V(mX(Y(mX(e(mX(o(mX~O!c'lO!d'lO(U!lO~PDWO(P'xO(Q'xO(R'zO~O_!}O(V'|O(W!}O(X'|O~O_#QO(X'|O(Y'|O(Z#QO~Ov(OO~P%[Ox#SO!U#TO(b#TO(c(RO~O![(TO!Y'WX!Y'^X!]'WX!]'^X~P+}O!](VO!Y(hX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!](VO!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~O!Y(hX~PHRO!Y([O~O!Y(uX!](uX!g(uX!k(uX(r(uX~O#`(uX#k#dX!^(uX~PJUO#`(]O!Y(wX!](wX~O!](^O!Y(vX~O!Y(aO~O#`$eO~PJUO!^(bO~P`OR#zO!Q#yO!S#{O!l#xO(aVOP!na[!naj!nar!na!]!na!p!na#R!na#n!na#o!na#p!na#q!na#r!na#s!na#t!na#u!na#v!na#x!na#z!na#{!na(r!na(y!na(z!na~Oa!na'z!na'w!na!Y!na!k!nav!na!_!na%i!na!g!na~PKlO!k(cO~O!g#vO#`(dO(r'pO!](tXa(tX'z(tX~O!k(tX~PNXO!S%hO!_%iO!|]O#i(iO#j(hO(T%gO~O!](jO!k(sX~O!k(lO~O!S%hO!_%iO#j(hO(T%gO~OP(gXR(gX[(gXj(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~O!g#vO!k(gX~P! uOR(nO!Q(mO!l#xO#S$dO!|!{a!S!{a~O!x!{a%h!{a!_!{a#i!{a#j!{a(T!{a~P!#vO!x(rO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_XO!iuO!lZO!oYO!pYO!qYO!svO!u!gO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~O#k(xO~O![(zO!k(kP~P%[O(e(|O(o[O~O!S)OO!l#xO(e(|O(o[O~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]$_Oa$qa'z$qa'w$qa!k$qa!Y$qa!_$qa%i$qa!g$qa~Ol)dO~P!&zOh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O%]O!S${O!_$|O!i%bO!l$xO#j%cO$W%`O$t%^O$v%_O$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Og(pP~P!,TO!Q)iO!g)hO!_$^X$Z$^X$]$^X$_$^X$f$^X~O!g)hO!_({X$Z({X$]({X$_({X$f({X~O!Q)iO~P!.^O!Q)iO!_({X$Z({X$]({X$_({X$f({X~O!_)kO$Z)oO$])jO$_)jO$f)pO~O![)sO~P!)[O$]$hO$_$gO$f)wO~On$zX!Q$zX#S$zX'y$zX(y$zX(z$zX~OgmXg$zXnmX!]mX#`mX~P!0SOx)yO(b)zO(c)|O~On*VO!Q*OO'y*PO(y$}O(z%PO~Og)}O~P!1WOg*WO~Oh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S*YO!_*ZO!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op*`O}O(T&ZO~O!l+SO~O(T(vO~Op+WO!S%hO![#iO!_%iO!|]O#i#lO#j#iO(T%gO!k(sP~O!g#vO#k+XO~O!S%hOTX'z)TX~OP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO#z$WO#{$XO(aVO(r$YO(y#|O(z#}O~Oa!ja!]!ja'z!ja'w!ja!Y!ja!k!jav!ja!_!ja%i!ja!g!ja~P!:tOR#zO!Q#yO!S#{O!l#xO(aVOP!ra[!raj!rar!ra!]!ra!p!ra#R!ra#n!ra#o!ra#p!ra#q!ra#r!ra#s!ra#t!ra#u!ra#v!ra#x!ra#z!ra#{!ra(r!ra(y!ra(z!ra~Oa!ra'z!ra'w!ra!Y!ra!k!rav!ra!_!ra%i!ra!g!ra~P!=[OR#zO!Q#yO!S#{O!l#xO(aVOP!ta[!taj!tar!ta!]!ta!p!ta#R!ta#n!ta#o!ta#p!ta#q!ta#r!ta#s!ta#t!ta#u!ta#v!ta#x!ta#z!ta#{!ta(r!ta(y!ta(z!ta~Oa!ta'z!ta'w!ta!Y!ta!k!tav!ta!_!ta%i!ta!g!ta~P!?rOh%VOn+gO!_'`O%i+fO~O!g+iOa(]X!_(]X'z(]X!](]X~Oa%nO!_XO'z%nO~Oh%VO!l%eO~Oh%VO!l%eO(T%gO~O!g#vO#k(xO~Ob+tO%j+uO(T+qO(VTO(YUO!^)XP~O!]+vO`)WX~O[+zO~O`+{O~O!_&PO(T%gO(U!lO`)WP~O%j,OO~P;SOh%VO#`,SO~Oh%VOn,VO!_$|O~O!_,XO~O!Q,ZO!_XO~O%n%vO~O!x,`O~Oe,eO~Ob,fO(T#nO(VTO(YUO!^)VP~Oe%}O~O%j!QO(T&ZO~P=gO[,kO`,jO~OPYOQYOSfOdzOeyOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!iuO!lZO!oYO!pYO!qYO!svO!xxO!|]O$niO%h}O(VTO(YUO(aVO(o[O~O!_!eO!u!gO$W!kO(T!dO~P!FyO`,jOa%nO'z%nO~OPYOQYOSfOd!jOe!iOpkOrYOskOtkOzkO|YO!OYO!SWO!WkO!XkO!_!eO!iuO!lZO!oYO!pYO!qYO!svO!x!hO$W!kO$niO(T!dO(VTO(YUO(aVO(o[O~Oa,pOl!OO!uwO%l!OO%m!OO%n!OO~P!IcO!l&oO~O&^,vO~O!_,xO~O&o,zO&q,{OP&laQ&laS&laY&laa&lad&lae&lal&lap&lar&las&lat&laz&la|&la!O&la!S&la!W&la!X&la!_&la!i&la!l&la!o&la!p&la!q&la!s&la!u&la!x&la!|&la$W&la$n&la%h&la%j&la%l&la%m&la%n&la%q&la%s&la%v&la%w&la%y&la&W&la&^&la&`&la&b&la&d&la&g&la&m&la&s&la&u&la&w&la&y&la&{&la'w&la(T&la(V&la(Y&la(a&la(o&la!^&la&e&lab&la&j&la~O(T-QO~Oh!eX!]!RX!^!RX!g!RX!g!eX!l!eX#`!RX~O!]!eX!^!eX~P#!iO!g-VO#`-UOh(jX!]#hX!^#hX!g(jX!l(jX~O!](jX!^(jX~P##[Oh%VO!g-XO!l%eO!]!aX!^!aX~Os!nO!S!oO(VTO(YUO(e!mO~OP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_!eO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(VTO(YUO(aVO(o[O~O(T=QO~P#$qO!]-]O!^(iX~O!^-_O~O!g-VO#`-UO!]#hX!^#hX~O!]-`O!^(xX~O!^-bO~O!c-cO!d-cO(U!lO~P#$`O!^-fO~P'_On-iO!_'`O~O!Y-nO~Os!{a!b!{a!c!{a!d!{a#T!{a#U!{a#V!{a#W!{a#X!{a#[!{a#]!{a(U!{a(V!{a(Y!{a(e!{a(o!{a~P!#vO!p-sO#`-qO~PChO!c-uO!d-uO(U!lO~PDWOa%nO#`-qO'z%nO~Oa%nO!g#vO#`-qO'z%nO~Oa%nO!g#vO!p-sO#`-qO'z%nO(r'pO~O(P'xO(Q'xO(R-zO~Ov-{O~O!Y'Wa!]'Wa~P!:tO![.PO!Y'WX!]'WX~P%[O!](VO!Y(ha~O!Y(ha~PHRO!](^O!Y(va~O!S%hO![.TO!_%iO(T%gO!Y'^X!]'^X~O#`.VO!](ta!k(taa(ta'z(ta~O!g#vO~P#,wO!](jO!k(sa~O!S%hO!_%iO#j.ZO(T%gO~Op.`O!S%hO![.]O!_%iO!|]O#i._O#j.]O(T%gO!]'aX!k'aX~OR.dO!l#xO~Oh%VOn.gO!_'`O%i.fO~Oa#ci!]#ci'z#ci'w#ci!Y#ci!k#civ#ci!_#ci%i#ci!g#ci~P!:tOn>]O!Q*OO'y*PO(y$}O(z%PO~O#k#_aa#_a#`#_a'z#_a!]#_a!k#_a!_#_a!Y#_a~P#/sO#k(`XP(`XR(`X[(`Xa(`Xj(`Xr(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X'z(`X(a(`X(r(`X!k(`X!Y(`X'w(`Xv(`X!_(`X%i(`X!g(`X~P!6kO!].tO!k(kX~P!:tO!k.wO~O!Y.yO~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mia#mij#mir#mi!]#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#n#mi~P#3cO#n$OO~P#3cOP$[OR#zOr$aO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO[#mia#mij#mi!]#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#r#mi~P#6QO#r$QO~P#6QOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO(aVOa#mi!]#mi#x#mi#z#mi#{#mi'z#mi(r#mi(y#mi(z#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#v#mi~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO(aVO(z#}Oa#mi!]#mi#z#mi#{#mi'z#mi(r#mi(y#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#x$UO~P#;VO#x#mi~P#;VO#v$SO~P#8oOP$[OR#zO[$cOj$ROr$aO!Q#yO!S#{O!l#xO!p$[O#R$RO#n$OO#o$PO#p$PO#q$PO#r$QO#s$RO#t$RO#u$bO#v$SO#x$UO(aVO(y#|O(z#}Oa#mi!]#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~O#z#mi~P#={O#z$WO~P#={OP]XR]X[]Xj]Xr]X!Q]X!S]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X!]]X!^]X~O$O]X~P#@jOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO#z<gO#{<hO(aVO(r$YO(y#|O(z#}O~O$O.{O~P#BwO#S$dO#`<nO$Q<nO$O(gX!^(gX~P! uOa'da!]'da'z'da'w'da!k'da!Y'dav'da!_'da%i'da!g'da~P!:tO[#mia#mij#mir#mi!]#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi'z#mi(r#mi'w#mi!Y#mi!k#miv#mi!_#mi%i#mi!g#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n$OO#o$PO#p$PO#q$PO(aVO(y#mi(z#mi~P#EyOn>]O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P#EyO!]/POg(pX~P!1WOg/RO~Oa$Pi!]$Pi'z$Pi'w$Pi!Y$Pi!k$Piv$Pi!_$Pi%i$Pi!g$Pi~P!:tO$]/SO$_/SO~O$]/TO$_/TO~O!g)hO#`/UO!_$cX$Z$cX$]$cX$_$cX$f$cX~O![/VO~O!_)kO$Z/XO$])jO$_)jO$f/YO~O!]<iO!^(fX~P#BwO!^/ZO~O!g)hO$f({X~O$f/]O~Ov/^O~P!&zOx)yO(b)zO(c/aO~O!S/dO~O(y$}On%aa!Q%aa'y%aa(z%aa!]%aa#`%aa~Og%aa$O%aa~P#L{O(z%POn%ca!Q%ca'y%ca(y%ca!]%ca#`%ca~Og%ca$O%ca~P#MnO!]fX!gfX!kfX!k$zX(rfX~P!0SOp%WOPP~P!1uOr*sO!b*qO!c*kO!d*kO!l*bO#[*rO%`*mO(U!lO(VTO(YUO~Os<}O!S/nO![+[O!^*pO(e<|O!^(xP~P$ [O!k/oO~P#/sO!]/pO!g#vO(r'pO!k)OX~O!k/uO~OnoX!QoX'yoX(yoX(zoX~O!g#vO!koX~P$#OOp/wO!S%hO![*^O!_%iO(T%gO!k)OP~O#k/xO~O!Y$zX!]$zX!g%RX~P!0SO!]/yO!Y)PX~P#/sO!g/{O~O!Y/}O~OpkO(T0OO~P.iOh%VOr0TO!g#vO!l%eO(r'pO~O!g+iO~Oa%nO!]0XO'z%nO~O!^0ZO~P!5iO!c0[O!d0[O(U!lO~P#$`Os!nO!S0]O(VTO(YUO(e!mO~O#[0_O~Og%aa!]%aa#`%aa$O%aa~P!1WOg%ca!]%ca#`%ca$O%ca~P!1WOj%dOk%dOl%dO(T&ZOg'mX!]'mX~O!]*yOg(^a~Og0hO~On0jO#`0iOg(_a!](_a~OR0kO!Q0kO!S0lO#S$dOn}a'y}a(y}a(z}a!]}a#`}a~Og}a$O}a~P$(cO!Q*OO'y*POn$sa(y$sa(z$sa!]$sa#`$sa~Og$sa$O$sa~P$)_O!Q*OO'y*POn$ua(y$ua(z$ua!]$ua#`$ua~Og$ua$O$ua~P$*QO#k0oO~Og%Ta!]%Ta#`%Ta$O%Ta~P!1WO!g#vO~O#k0rO~O!]+^Oa)Ta'z)Ta~OR#zO!Q#yO!S#{O!l#xO(aVOP!ri[!rij!rir!ri!]!ri!p!ri#R!ri#n!ri#o!ri#p!ri#q!ri#r!ri#s!ri#t!ri#u!ri#v!ri#x!ri#z!ri#{!ri(r!ri(y!ri(z!ri~Oa!ri'z!ri'w!ri!Y!ri!k!riv!ri!_!ri%i!ri!g!ri~P$+oOh%VOr%XOs$tOt$tOz%YO|%ZO!O<sO!S${O!_$|O!i>VO!l$xO#j<yO$W%`O$t<uO$v<wO$y%aO(VTO(YUO(a$uO(y$}O(z%PO~Op0{O%]0|O(T0zO~P$.VO!g+iOa(]a!_(]a'z(]a!](]a~O#k1SO~O[]X!]fX!^fX~O!]1TO!^)XX~O!^1VO~O[1WO~Ob1YO(T+qO(VTO(YUO~O!_&PO(T%gO`'uX!]'uX~O!]+vO`)Wa~O!k1]O~P!:tO[1`O~O`1aO~O#`1fO~On1iO!_$|O~O(e(|O!^)UP~Oh%VOn1rO!_1oO%i1qO~O[1|O!]1zO!^)VX~O!^1}O~O`2POa%nO'z%nO~O(T#nO(VTO(YUO~O#S$dO#`$eO$Q$eOP(gXR(gX[(gXr(gX!Q(gX!S(gX!](gX!l(gX!p(gX#R(gX#n(gX#o(gX#p(gX#q(gX#r(gX#s(gX#t(gX#u(gX#v(gX#x(gX#z(gX#{(gX(a(gX(r(gX(y(gX(z(gX~Oj2SO&[2TOa(gX~P$3pOj2SO#`$eO&[2TO~Oa2VO~P%[Oa2XO~O&e2[OP&ciQ&ciS&ciY&cia&cid&cie&cil&cip&cir&cis&cit&ciz&ci|&ci!O&ci!S&ci!W&ci!X&ci!_&ci!i&ci!l&ci!o&ci!p&ci!q&ci!s&ci!u&ci!x&ci!|&ci$W&ci$n&ci%h&ci%j&ci%l&ci%m&ci%n&ci%q&ci%s&ci%v&ci%w&ci%y&ci&W&ci&^&ci&`&ci&b&ci&d&ci&g&ci&m&ci&s&ci&u&ci&w&ci&y&ci&{&ci'w&ci(T&ci(V&ci(Y&ci(a&ci(o&ci!^&cib&ci&j&ci~Ob2bO!^2`O&j2aO~P`O!_XO!l2dO~O&q,{OP&liQ&liS&liY&lia&lid&lie&lil&lip&lir&lis&lit&liz&li|&li!O&li!S&li!W&li!X&li!_&li!i&li!l&li!o&li!p&li!q&li!s&li!u&li!x&li!|&li$W&li$n&li%h&li%j&li%l&li%m&li%n&li%q&li%s&li%v&li%w&li%y&li&W&li&^&li&`&li&b&li&d&li&g&li&m&li&s&li&u&li&w&li&y&li&{&li'w&li(T&li(V&li(Y&li(a&li(o&li!^&li&e&lib&li&j&li~O!Y2jO~O!]!aa!^!aa~P#BwOs!nO!S!oO![2pO(e!mO!]'XX!^'XX~P@nO!]-]O!^(ia~O!]'_X!^'_X~P!9|O!]-`O!^(xa~O!^2wO~P'_Oa%nO#`3QO'z%nO~Oa%nO!g#vO#`3QO'z%nO~Oa%nO!g#vO!p3UO#`3QO'z%nO(r'pO~Oa%nO'z%nO~P!:tO!]$_Ov$qa~O!Y'Wi!]'Wi~P!:tO!](VO!Y(hi~O!](^O!Y(vi~O!Y(wi!](wi~P!:tO!](ti!k(tia(ti'z(ti~P!:tO#`3WO!](ti!k(tia(ti'z(ti~O!](jO!k(si~O!S%hO!_%iO!|]O#i3]O#j3[O(T%gO~O!S%hO!_%iO#j3[O(T%gO~On3dO!_'`O%i3cO~Oh%VOn3dO!_'`O%i3cO~O#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aav%aa!_%aa%i%aa!g%aa~P#L{O#k%caP%caR%ca[%caa%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%cav%ca!_%ca%i%ca!g%ca~P#MnO#k%aaP%aaR%aa[%aaa%aaj%aar%aa!S%aa!]%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa'z%aa(a%aa(r%aa!k%aa!Y%aa'w%aa#`%aav%aa!_%aa%i%aa!g%aa~P#/sO#k%caP%caR%ca[%caa%caj%car%ca!S%ca!]%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca'z%ca(a%ca(r%ca!k%ca!Y%ca'w%ca#`%cav%ca!_%ca%i%ca!g%ca~P#/sO#k}aP}a[}aa}aj}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a'z}a(a}a(r}a!k}a!Y}a'w}av}a!_}a%i}a!g}a~P$(cO#k$saP$saR$sa[$saa$saj$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa'z$sa(a$sa(r$sa!k$sa!Y$sa'w$sav$sa!_$sa%i$sa!g$sa~P$)_O#k$uaP$uaR$ua[$uaa$uaj$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua'z$ua(a$ua(r$ua!k$ua!Y$ua'w$uav$ua!_$ua%i$ua!g$ua~P$*QO#k%TaP%TaR%Ta[%Taa%Taj%Tar%Ta!S%Ta!]%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta'z%Ta(a%Ta(r%Ta!k%Ta!Y%Ta'w%Ta#`%Tav%Ta!_%Ta%i%Ta!g%Ta~P#/sOa#cq!]#cq'z#cq'w#cq!Y#cq!k#cqv#cq!_#cq%i#cq!g#cq~P!:tO![3lO!]'YX!k'YX~P%[O!].tO!k(ka~O!].tO!k(ka~P!:tO!Y3oO~O$O!na!^!na~PKlO$O!ja!]!ja!^!ja~P#BwO$O!ra!^!ra~P!=[O$O!ta!^!ta~P!?rOg']X!]']X~P!,TO!]/POg(pa~OSfO!_4TO$d4UO~O!^4YO~Ov4ZO~P#/sOa$mq!]$mq'z$mq'w$mq!Y$mq!k$mqv$mq!_$mq%i$mq!g$mq~P!:tO!Y4]O~P!&zO!S4^O~O!Q*OO'y*PO(z%POn'ia(y'ia!]'ia#`'ia~Og'ia$O'ia~P%-fO!Q*OO'y*POn'ka(y'ka(z'ka!]'ka#`'ka~Og'ka$O'ka~P%.XO(r$YO~P#/sO!YfX!Y$zX!]fX!]$zX!g%RX#`fX~P!0SOp%WO(T=WO~P!1uOp4bO!S%hO![4aO!_%iO(T%gO!]'eX!k'eX~O!]/pO!k)Oa~O!]/pO!g#vO!k)Oa~O!]/pO!g#vO(r'pO!k)Oa~Og$|i!]$|i#`$|i$O$|i~P!1WO![4jO!Y'gX!]'gX~P!3tO!]/yO!Y)Pa~O!]/yO!Y)Pa~P#/sOP]XR]X[]Xj]Xr]X!Q]X!S]X!Y]X!]]X!l]X!p]X#R]X#S]X#`]X#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~Oj%YX!g%YX~P%2OOj4oO!g#vO~Oh%VO!g#vO!l%eO~Oh%VOr4tO!l%eO(r'pO~Or4yO!g#vO(r'pO~Os!nO!S4zO(VTO(YUO(e!mO~O(y$}On%ai!Q%ai'y%ai(z%ai!]%ai#`%ai~Og%ai$O%ai~P%5oO(z%POn%ci!Q%ci'y%ci(y%ci!]%ci#`%ci~Og%ci$O%ci~P%6bOg(_i!](_i~P!1WO#`5QOg(_i!](_i~P!1WO!k5VO~Oa$oq!]$oq'z$oq'w$oq!Y$oq!k$oqv$oq!_$oq%i$oq!g$oq~P!:tO!Y5ZO~O!]5[O!_)QX~P#/sOa$zX!_$zX%^]X'z$zX!]$zX~P!0SO%^5_OaoX!_oX'zoX!]oX~P$#OOp5`O(T#nO~O%^5_O~Ob5fO%j5gO(T+qO(VTO(YUO!]'tX!^'tX~O!]1TO!^)Xa~O[5kO~O`5lO~O[5pO~Oa%nO'z%nO~P#/sO!]5uO#`5wO!^)UX~O!^5xO~Or6OOs!nO!S*iO!b!yO!c!vO!d!vO!|<VO#T!pO#U!pO#V!pO#W!pO#X!pO#[5}O#]!zO(U!lO(VTO(YUO(e!mO(o!sO~O!^5|O~P%;eOn6TO!_1oO%i6SO~Oh%VOn6TO!_1oO%i6SO~Ob6[O(T#nO(VTO(YUO!]'sX!^'sX~O!]1zO!^)Va~O(VTO(YUO(e6^O~O`6bO~Oj6eO&[6fO~PNXO!k6gO~P%[Oa6iO~Oa6iO~P%[Ob2bO!^6nO&j2aO~P`O!g6pO~O!g6rOh(ji!](ji!^(ji!g(ji!l(jir(ji(r(ji~O!]#hi!^#hi~P#BwO#`6sO!]#hi!^#hi~O!]!ai!^!ai~P#BwOa%nO#`6|O'z%nO~Oa%nO!g#vO#`6|O'z%nO~O!](tq!k(tqa(tq'z(tq~P!:tO!](jO!k(sq~O!S%hO!_%iO#j7TO(T%gO~O!_'`O%i7WO~On7[O!_'`O%i7WO~O#k'iaP'iaR'ia['iaa'iaj'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia'z'ia(a'ia(r'ia!k'ia!Y'ia'w'iav'ia!_'ia%i'ia!g'ia~P%-fO#k'kaP'kaR'ka['kaa'kaj'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka'z'ka(a'ka(r'ka!k'ka!Y'ka'w'kav'ka!_'ka%i'ka!g'ka~P%.XO#k$|iP$|iR$|i[$|ia$|ij$|ir$|i!S$|i!]$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i'z$|i(a$|i(r$|i!k$|i!Y$|i'w$|i#`$|iv$|i!_$|i%i$|i!g$|i~P#/sO#k%aiP%aiR%ai[%aia%aij%air%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai'z%ai(a%ai(r%ai!k%ai!Y%ai'w%aiv%ai!_%ai%i%ai!g%ai~P%5oO#k%ciP%ciR%ci[%cia%cij%cir%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci'z%ci(a%ci(r%ci!k%ci!Y%ci'w%civ%ci!_%ci%i%ci!g%ci~P%6bO!]'Ya!k'Ya~P!:tO!].tO!k(ki~O$O#ci!]#ci!^#ci~P#BwOP$[OR#zO!Q#yO!S#{O!l#xO!p$[O(aVO[#mij#mir#mi#R#mi#o#mi#p#mi#q#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#n#mi~P%NdO#n<_O~P%NdOP$[OR#zOr<kO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO[#mij#mi#R#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#r#mi~P&!lO#r<aO~P&!lOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO(aVO#x#mi#z#mi#{#mi$O#mi(r#mi(y#mi(z#mi!]#mi!^#mi~O#v#mi~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO(aVO(z#}O#z#mi#{#mi$O#mi(r#mi(y#mi!]#mi!^#mi~O#x<eO~P&&uO#x#mi~P&&uO#v<cO~P&$tOP$[OR#zO[<mOj<bOr<kO!Q#yO!S#{O!l#xO!p$[O#R<bO#n<_O#o<`O#p<`O#q<`O#r<aO#s<bO#t<bO#u<lO#v<cO#x<eO(aVO(y#|O(z#}O#{#mi$O#mi(r#mi!]#mi!^#mi~O#z#mi~P&)UO#z<gO~P&)UOa#|y!]#|y'z#|y'w#|y!Y#|y!k#|yv#|y!_#|y%i#|y!g#|y~P!:tO[#mij#mir#mi#R#mi#r#mi#s#mi#t#mi#u#mi#v#mi#x#mi#z#mi#{#mi$O#mi(r#mi!]#mi!^#mi~OP$[OR#zO!Q#yO!S#{O!l#xO!p$[O#n<_O#o<`O#p<`O#q<`O(aVO(y#mi(z#mi~P&,QOn>^O!Q*OO'y*PO(y$}O(z%POP#miR#mi!S#mi!l#mi!p#mi#n#mi#o#mi#p#mi#q#mi(a#mi~P&,QO#S$dOP(`XR(`X[(`Xj(`Xn(`Xr(`X!Q(`X!S(`X!l(`X!p(`X#R(`X#n(`X#o(`X#p(`X#q(`X#r(`X#s(`X#t(`X#u(`X#v(`X#x(`X#z(`X#{(`X$O(`X'y(`X(a(`X(r(`X(y(`X(z(`X!](`X!^(`X~O$O$Pi!]$Pi!^$Pi~P#BwO$O!ri!^!ri~P$+oOg']a!]']a~P!1WO!^7nO~O!]'da!^'da~P#BwO!Y7oO~P#/sO!g#vO(r'pO!]'ea!k'ea~O!]/pO!k)Oi~O!]/pO!g#vO!k)Oi~Og$|q!]$|q#`$|q$O$|q~P!1WO!Y'ga!]'ga~P#/sO!g7vO~O!]/yO!Y)Pi~P#/sO!]/yO!Y)Pi~O!Y7yO~Oh%VOr8OO!l%eO(r'pO~Oj8QO!g#vO~Or8TO!g#vO(r'pO~O!Q*OO'y*PO(z%POn'ja(y'ja!]'ja#`'ja~Og'ja$O'ja~P&5RO!Q*OO'y*POn'la(y'la(z'la!]'la#`'la~Og'la$O'la~P&5tOg(_q!](_q~P!1WO#`8VOg(_q!](_q~P!1WO!Y8WO~Og%Oq!]%Oq#`%Oq$O%Oq~P!1WOa$oy!]$oy'z$oy'w$oy!Y$oy!k$oyv$oy!_$oy%i$oy!g$oy~P!:tO!g6rO~O!]5[O!_)Qa~O!_'`OP$TaR$Ta[$Taj$Tar$Ta!Q$Ta!S$Ta!]$Ta!l$Ta!p$Ta#R$Ta#n$Ta#o$Ta#p$Ta#q$Ta#r$Ta#s$Ta#t$Ta#u$Ta#v$Ta#x$Ta#z$Ta#{$Ta(a$Ta(r$Ta(y$Ta(z$Ta~O%i7WO~P&8fO%^8[Oa%[i!_%[i'z%[i!]%[i~Oa#cy!]#cy'z#cy'w#cy!Y#cy!k#cyv#cy!_#cy%i#cy!g#cy~P!:tO[8^O~Ob8`O(T+qO(VTO(YUO~O!]1TO!^)Xi~O`8dO~O(e(|O!]'pX!^'pX~O!]5uO!^)Ua~O!^8nO~P%;eO(o!sO~P$&YO#[8oO~O!_1oO~O!_1oO%i8qO~On8tO!_1oO%i8qO~O[8yO!]'sa!^'sa~O!]1zO!^)Vi~O!k8}O~O!k9OO~O!k9RO~O!k9RO~P%[Oa9TO~O!g9UO~O!k9VO~O!](wi!^(wi~P#BwOa%nO#`9_O'z%nO~O!](ty!k(tya(ty'z(ty~P!:tO!](jO!k(sy~O%i9bO~P&8fO!_'`O%i9bO~O#k$|qP$|qR$|q[$|qa$|qj$|qr$|q!S$|q!]$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q'z$|q(a$|q(r$|q!k$|q!Y$|q'w$|q#`$|qv$|q!_$|q%i$|q!g$|q~P#/sO#k'jaP'jaR'ja['jaa'jaj'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja'z'ja(a'ja(r'ja!k'ja!Y'ja'w'jav'ja!_'ja%i'ja!g'ja~P&5RO#k'laP'laR'la['laa'laj'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la'z'la(a'la(r'la!k'la!Y'la'w'lav'la!_'la%i'la!g'la~P&5tO#k%OqP%OqR%Oq[%Oqa%Oqj%Oqr%Oq!S%Oq!]%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq'z%Oq(a%Oq(r%Oq!k%Oq!Y%Oq'w%Oq#`%Oqv%Oq!_%Oq%i%Oq!g%Oq~P#/sO!]'Yi!k'Yi~P!:tO$O#cq!]#cq!^#cq~P#BwO(y$}OP%aaR%aa[%aaj%aar%aa!S%aa!l%aa!p%aa#R%aa#n%aa#o%aa#p%aa#q%aa#r%aa#s%aa#t%aa#u%aa#v%aa#x%aa#z%aa#{%aa$O%aa(a%aa(r%aa!]%aa!^%aa~On%aa!Q%aa'y%aa(z%aa~P&IyO(z%POP%caR%ca[%caj%car%ca!S%ca!l%ca!p%ca#R%ca#n%ca#o%ca#p%ca#q%ca#r%ca#s%ca#t%ca#u%ca#v%ca#x%ca#z%ca#{%ca$O%ca(a%ca(r%ca!]%ca!^%ca~On%ca!Q%ca'y%ca(y%ca~P&LQOn>^O!Q*OO'y*PO(z%PO~P&IyOn>^O!Q*OO'y*PO(y$}O~P&LQOR0kO!Q0kO!S0lO#S$dOP}a[}aj}an}ar}a!l}a!p}a#R}a#n}a#o}a#p}a#q}a#r}a#s}a#t}a#u}a#v}a#x}a#z}a#{}a$O}a'y}a(a}a(r}a(y}a(z}a!]}a!^}a~O!Q*OO'y*POP$saR$sa[$saj$san$sar$sa!S$sa!l$sa!p$sa#R$sa#n$sa#o$sa#p$sa#q$sa#r$sa#s$sa#t$sa#u$sa#v$sa#x$sa#z$sa#{$sa$O$sa(a$sa(r$sa(y$sa(z$sa!]$sa!^$sa~O!Q*OO'y*POP$uaR$ua[$uaj$uan$uar$ua!S$ua!l$ua!p$ua#R$ua#n$ua#o$ua#p$ua#q$ua#r$ua#s$ua#t$ua#u$ua#v$ua#x$ua#z$ua#{$ua$O$ua(a$ua(r$ua(y$ua(z$ua!]$ua!^$ua~On>^O!Q*OO'y*PO(y$}O(z%PO~OP%TaR%Ta[%Taj%Tar%Ta!S%Ta!l%Ta!p%Ta#R%Ta#n%Ta#o%Ta#p%Ta#q%Ta#r%Ta#s%Ta#t%Ta#u%Ta#v%Ta#x%Ta#z%Ta#{%Ta$O%Ta(a%Ta(r%Ta!]%Ta!^%Ta~P''VO$O$mq!]$mq!^$mq~P#BwO$O$oq!]$oq!^$oq~P#BwO!^9oO~O$O9pO~P!1WO!g#vO!]'ei!k'ei~O!g#vO(r'pO!]'ei!k'ei~O!]/pO!k)Oq~O!Y'gi!]'gi~P#/sO!]/yO!Y)Pq~Or9wO!g#vO(r'pO~O[9yO!Y9xO~P#/sO!Y9xO~Oj:PO!g#vO~Og(_y!](_y~P!1WO!]'na!_'na~P#/sOa%[q!_%[q'z%[q!]%[q~P#/sO[:UO~O!]1TO!^)Xq~O`:YO~O#`:ZO!]'pa!^'pa~O!]5uO!^)Ui~P#BwO!S:]O~O!_1oO%i:`O~O(VTO(YUO(e:eO~O!]1zO!^)Vq~O!k:hO~O!k:iO~O!k:jO~O!k:jO~P%[O#`:mO!]#hy!^#hy~O!]#hy!^#hy~P#BwO%i:rO~P&8fO!_'`O%i:rO~O$O#|y!]#|y!^#|y~P#BwOP$|iR$|i[$|ij$|ir$|i!S$|i!l$|i!p$|i#R$|i#n$|i#o$|i#p$|i#q$|i#r$|i#s$|i#t$|i#u$|i#v$|i#x$|i#z$|i#{$|i$O$|i(a$|i(r$|i!]$|i!^$|i~P''VO!Q*OO'y*PO(z%POP'iaR'ia['iaj'ian'iar'ia!S'ia!l'ia!p'ia#R'ia#n'ia#o'ia#p'ia#q'ia#r'ia#s'ia#t'ia#u'ia#v'ia#x'ia#z'ia#{'ia$O'ia(a'ia(r'ia(y'ia!]'ia!^'ia~O!Q*OO'y*POP'kaR'ka['kaj'kan'kar'ka!S'ka!l'ka!p'ka#R'ka#n'ka#o'ka#p'ka#q'ka#r'ka#s'ka#t'ka#u'ka#v'ka#x'ka#z'ka#{'ka$O'ka(a'ka(r'ka(y'ka(z'ka!]'ka!^'ka~O(y$}OP%aiR%ai[%aij%ain%air%ai!Q%ai!S%ai!l%ai!p%ai#R%ai#n%ai#o%ai#p%ai#q%ai#r%ai#s%ai#t%ai#u%ai#v%ai#x%ai#z%ai#{%ai$O%ai'y%ai(a%ai(r%ai(z%ai!]%ai!^%ai~O(z%POP%ciR%ci[%cij%cin%cir%ci!Q%ci!S%ci!l%ci!p%ci#R%ci#n%ci#o%ci#p%ci#q%ci#r%ci#s%ci#t%ci#u%ci#v%ci#x%ci#z%ci#{%ci$O%ci'y%ci(a%ci(r%ci(y%ci!]%ci!^%ci~O$O$oy!]$oy!^$oy~P#BwO$O#cy!]#cy!^#cy~P#BwO!g#vO!]'eq!k'eq~O!]/pO!k)Oy~O!Y'gq!]'gq~P#/sOr:|O!g#vO(r'pO~O[;QO!Y;PO~P#/sO!Y;PO~Og(_!R!](_!R~P!1WOa%[y!_%[y'z%[y!]%[y~P#/sO!]1TO!^)Xy~O!]5uO!^)Uq~O(T;XO~O!_1oO%i;[O~O!k;_O~O%i;dO~P&8fOP$|qR$|q[$|qj$|qr$|q!S$|q!l$|q!p$|q#R$|q#n$|q#o$|q#p$|q#q$|q#r$|q#s$|q#t$|q#u$|q#v$|q#x$|q#z$|q#{$|q$O$|q(a$|q(r$|q!]$|q!^$|q~P''VO!Q*OO'y*PO(z%POP'jaR'ja['jaj'jan'jar'ja!S'ja!l'ja!p'ja#R'ja#n'ja#o'ja#p'ja#q'ja#r'ja#s'ja#t'ja#u'ja#v'ja#x'ja#z'ja#{'ja$O'ja(a'ja(r'ja(y'ja!]'ja!^'ja~O!Q*OO'y*POP'laR'la['laj'lan'lar'la!S'la!l'la!p'la#R'la#n'la#o'la#p'la#q'la#r'la#s'la#t'la#u'la#v'la#x'la#z'la#{'la$O'la(a'la(r'la(y'la(z'la!]'la!^'la~OP%OqR%Oq[%Oqj%Oqr%Oq!S%Oq!l%Oq!p%Oq#R%Oq#n%Oq#o%Oq#p%Oq#q%Oq#r%Oq#s%Oq#t%Oq#u%Oq#v%Oq#x%Oq#z%Oq#{%Oq$O%Oq(a%Oq(r%Oq!]%Oq!^%Oq~P''VOg%e!Z!]%e!Z#`%e!Z$O%e!Z~P!1WO!Y;hO~P#/sOr;iO!g#vO(r'pO~O[;kO!Y;hO~P#/sO!]'pq!^'pq~P#BwO!]#h!Z!^#h!Z~P#BwO#k%e!ZP%e!ZR%e!Z[%e!Za%e!Zj%e!Zr%e!Z!S%e!Z!]%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z'z%e!Z(a%e!Z(r%e!Z!k%e!Z!Y%e!Z'w%e!Z#`%e!Zv%e!Z!_%e!Z%i%e!Z!g%e!Z~P#/sOr;tO!g#vO(r'pO~O!Y;uO~P#/sOr;|O!g#vO(r'pO~O!Y;}O~P#/sOP%e!ZR%e!Z[%e!Zj%e!Zr%e!Z!S%e!Z!l%e!Z!p%e!Z#R%e!Z#n%e!Z#o%e!Z#p%e!Z#q%e!Z#r%e!Z#s%e!Z#t%e!Z#u%e!Z#v%e!Z#x%e!Z#z%e!Z#{%e!Z$O%e!Z(a%e!Z(r%e!Z!]%e!Z!^%e!Z~P''VOr<QO!g#vO(r'pO~Ov(fX~P1qO!Q%rO~P!)[O(U!lO~P!)[O!YfX!]fX#`fX~P%2OOP]XR]X[]Xj]Xr]X!Q]X!S]X!]]X!]fX!l]X!p]X#R]X#S]X#`]X#`fX#kfX#n]X#o]X#p]X#q]X#r]X#s]X#t]X#u]X#v]X#x]X#z]X#{]X$Q]X(a]X(r]X(y]X(z]X~O!gfX!k]X!kfX(rfX~P'LTOP<UOQ<UOSfOd>ROe!iOpkOr<UOskOtkOzkO|<UO!O<UO!SWO!WkO!XkO!_XO!i<XO!lZO!o<UO!p<UO!q<UO!s<YO!u<]O!x!hO$W!kO$n>PO(T)]O(VTO(YUO(aVO(o[O~O!]<iO!^$qa~Oh%VOp%WOr%XOs$tOt$tOz%YO|%ZO!O<tO!S${O!_$|O!i>WO!l$xO#j<zO$W%`O$t<vO$v<xO$y%aO(T(vO(VTO(YUO(a$uO(y$}O(z%PO~Ol)dO~P(!yOr!eX(r!eX~P#!iOr(jX(r(jX~P##[O!^]X!^fX~P'LTO!YfX!Y$zX!]fX!]$zX#`fX~P!0SO#k<^O~O!g#vO#k<^O~O#`<nO~Oj<bO~O#`=OO!](wX!^(wX~O#`<nO!](uX!^(uX~O#k=PO~Og=RO~P!1WO#k=XO~O#k=YO~Og=RO(T&ZO~O!g#vO#k=ZO~O!g#vO#k=PO~O$O=[O~P#BwO#k=]O~O#k=^O~O#k=cO~O#k=dO~O#k=eO~O#k=fO~O$O=gO~P!1WO$O=hO~P!1WOl=sO~P7eOk#S#T#U#W#X#[#i#j#u$n$t$v$y%]%^%h%i%j%q%s%v%w%y%{~(OT#o!X'|(U#ps#n#qr!Q'}$]'}(T$_(e~\",\n goto: \"$9Y)]PPPPPP)^PP)aP)rP+W/]PPPP6mPP7TPP=QPPP@tPA^PA^PPPA^PCfPA^PA^PA^PCjPCoPD^PIWPPPI[PPPPI[L_PPPLeMVPI[PI[PP! eI[PPPI[PI[P!#lI[P!'S!(X!(bP!)U!)Y!)U!,gPPPPPPP!-W!(XPP!-h!/YP!2iI[I[!2n!5z!:h!:h!>gPPP!>oI[PPPPPPPPP!BOP!C]PPI[!DnPI[PI[I[I[I[I[PI[!FQP!I[P!LbP!Lf!Lp!Lt!LtP!IXP!Lx!LxP#!OP#!SI[PI[#!Y#%_CjA^PA^PA^A^P#&lA^A^#)OA^#+vA^#.SA^A^#.r#1W#1W#1]#1f#1W#1qPP#1WPA^#2ZA^#6YA^A^6mPPP#:_PPP#:x#:xP#:xP#;`#:xPP#;fP#;]P#;]#;y#;]#<e#<k#<n)aP#<q)aP#<z#<z#<zP)aP)aP)aP)aPP)aP#=Q#=TP#=T)aP#=XP#=[P)aP)aP)aP)aP)aP)a)aPP#=b#=h#=s#=y#>P#>V#>]#>k#>q#>{#?R#?]#?c#?s#?y#@k#@}#AT#AZ#Ai#BO#Cs#DR#DY#Et#FS#Gt#HS#HY#H`#Hf#Hp#Hv#H|#IW#Ij#IpPPPPPPPPPPP#IvPPPPPPP#Jk#Mx$ b$ i$ qPPP$']P$'f$*_$0x$0{$1O$1}$2Q$2X$2aP$2g$2jP$3W$3[$4S$5b$5g$5}PP$6S$6Y$6^$6a$6e$6i$7e$7|$8e$8i$8l$8o$8y$8|$9Q$9UR!|RoqOXst!Z#d%m&r&t&u&w,s,x2[2_Y!vQ'`-e1o5{Q%tvQ%|yQ&T|Q&j!VS'W!e-]Q'f!iS'l!r!yU*k$|*Z*oQ+o%}S+|&V&WQ,d&dQ-c'_Q-m'gQ-u'mQ0[*qQ1b,OQ1y,eR<{<Y%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_S#q]<V!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU+P%]<s<tQ+t&PQ,f&gQ,m&oQ0x+gQ0}+iQ1Y+uQ2R,kQ3`.gQ5`0|Q5f1TQ6[1zQ7Y3dQ8`5gR9e7['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S!S!nQ!r!v!y!z$|'W'_'`'l'm'n*k*o*q*r-]-c-e-u0[0_1o5{5}%[$ti#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q&X|Q'U!eS'[%i-`Q+t&PQ,P&WQ,f&gQ0n+SQ1Y+uQ1_+{Q2Q,jQ2R,kQ5f1TQ5o1aQ6[1zQ6_1|Q6`2PQ8`5gQ8c5lQ8|6bQ:X8dQ:f8yQ;V:YR<}*ZrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R,h&k&z^OPXYstuvwz!Z!`!g!j!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'b'r(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>R>S[#]WZ#W#Z'X(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ%wxQ%{yW&Q|&V&W,OQ&_!TQ'c!hQ'e!iQ(q#sS+n%|%}Q+r&PQ,_&bQ,c&dS-l'f'gQ.i(rQ1R+oQ1X+uQ1Z+vQ1^+zQ1t,`S1x,d,eQ2|-mQ5e1TQ5i1WQ5n1`Q6Z1yQ8_5gQ8b5kQ8f5pQ:T8^R;T:U!U$zi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y!^%yy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{Q+h%wQ,T&[Q,W&]Q,b&dQ.h(qQ1s,_U1w,c,d,eQ3e.iQ6U1tS6Y1x1yQ8x6Z#f>T#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o>U<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hW%Ti%V*y>PS&[!Q&iQ&]!RQ&^!SU*}%[%d=sR,R&Y%]%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^T)z$u){V+P%]<s<tW'[!e%i*Z-`S(}#y#zQ+c%rQ+y&SS.b(m(nQ1j,XQ5T0kR8i5u'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S$i$^c#Y#e%q%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.|.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vT#TV#U'RkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ'Y!eR2q-]!W!nQ!e!r!v!y!z$|'W'_'`'l'm'n*Z*k*o*q*r-]-c-e-u0[0_1o5{5}R1l,ZnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&y!^Q'v!xS(s#u<^Q+l%zQ,]&_Q,^&aQ-j'dQ-w'oS.r(x=PS0q+X=ZQ1P+mQ1n,[Q2c,zQ2e,{Q2m-WQ2z-kQ2}-oS5Y0r=eQ5a1QS5d1S=fQ6t2oQ6x2{Q6}3SQ8]5bQ9Y6vQ9Z6yQ9^7OR:l9V$d$]c#Y#e%s%u(S(Y(t(y)R)S)T)U)V)W)X)Y)Z)[)^)`)b)g)q+d+x-Z-x-}.S.U.s.v.z.}/O/b0p2k2n3O3V3k3p3q3r3s3t3u3v3w3x3y3z3{3|4P4Q4X5X5c6u6{7Q7a7b7k7l8k9X9]9g9m9n:o;W;`<W=vS(o#p'iQ)P#zS+b%q.|S.c(n(pR3^.d'QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS#q]<VQ&t!XQ&u!YQ&w![Q&x!]R2Z,vQ'a!hQ+e%wQ-h'cS.e(q+hQ2x-gW3b.h.i0w0yQ6w2yW7U3_3a3e5^U9a7V7X7ZU:q9c9d9fS;b:p:sQ;p;cR;x;qU!wQ'`-eT5y1o5{!Q_OXZ`st!V!Z#d#h%e%m&i&k&r&t&u&w(j,s,x.[2[2_]!pQ!r'`-e1o5{T#q]<V%^{OPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S(}#y#zS.b(m(n!s=l$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SU$fd)_,mS(p#p'iU*v%R(w4OU0m+O.n7gQ5^0xQ7V3`Q9d7YR:s9em!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}Q't!uS(f#g2US-s'k'wQ/s*]Q0R*jQ3U-vQ4f/tQ4r0TQ4s0UQ4x0^Q7r4`S7}4t4vS8R4y4{Q9r7sQ9v7yQ9{8OQ:Q8TS:{9w9xS;g:|;PS;s;h;iS;{;t;uS<P;|;}R<S<QQ#wbQ's!uS(e#g2US(g#m+WQ+Y%fQ+j%xQ+p&OU-r'k't'wQ.W(fU/r*]*`/wQ0S*jQ0V*lQ1O+kQ1u,aS3R-s-vQ3Z.`S4e/s/tQ4n0PS4q0R0^Q4u0WQ6W1vQ7P3US7q4`4bQ7u4fU7|4r4x4{Q8P4wQ8v6XS9q7r7sQ9u7yQ9}8RQ:O8SQ:c8wQ:y9rS:z9v9xQ;S:QQ;^:dS;f:{;PS;r;g;hS;z;s;uS<O;{;}Q<R<PQ<T<SQ=o=jQ={=tR=|=uV!wQ'`-e%^aOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_S#wz!j!r=i$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=o>R%^bOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Q%fj!^%xy!i!u%{%|%}'V'e'f'g'k'u*j+n+o-Y-l-m-t0R0U1R2u2|3T4r4s4v7}9{S&Oz!jQ+k%yQ,a&dW1v,b,c,d,eU6X1w1x1yS8w6Y6ZQ:d8x!r=j$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ=t>QR=u>R%QeOPXYstuvw!Z!`!g!o#S#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_Y#bWZ#W#Z(T!b%jm#h#i#l$x%e%h(^(h(i(j*Y*^*b+Z+[+^,o-V.T.Z.[.]._/m/p2d3[3]4a6r7TQ,n&o!p=k$Z$n)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SR=n'XU']!e%i*ZR2s-`%SdOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+],p,s,x-i-q.P.V.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3l4z6T6e6f6i6|8t9T9_!r)_$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SQ,m&oQ0x+gQ3`.gQ7Y3dR9e7[!b$Tc#Y%q(S(Y(t(y)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!P<d)^)q-Z.|2k2n3p3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!f$Vc#Y%q(S(Y(t(y)W)X)Z)[)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<W!T<f)^)q-Z.|2k2n3p3v3w3y3z4P4X6u7b7k7l8k9X9g9m9n;W;`=v!^$Zc#Y%q(S(Y(t(y)`)g+x-x-}.S.U.s.v/b0p3O3V3k3{5X5c6{7Q7a9]:o<WQ4_/kz>S)^)q-Z.|2k2n3p4P4X6u7b7k7l8k9X9g9m9n;W;`=vQ>X>ZR>Y>['QkOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>SS$oh$pR4U/U'XgOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$kf$qQ$ifS)j$l)nR)v$qT$jf$qT)l$l)n'XhOPWXYZhstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$Z$_$a$e$n$p%m%t&R&k&n&o&r&t&u&w&{'T'X'b'r(T(V(](d(x(z)O)s)}*i+X+]+g,p,s,x-U-X-i-q.P.V.g.t.{/U/V/n0]0l0r1S1r2S2T2V2X2[2_2a2p3Q3W3d3l4T4z5w6T6e6f6i6s6|7[8t9T9_:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>ST$oh$pQ$rhR)u$p%^jOPWXYZstuvw!Z!`!g!o#S#W#Z#d#o#u#x#{$O$P$Q$R$S$T$U$V$W$X$_$a$e%m%t&R&k&n&o&r&t&u&w&{'T'b'r(T(V(](d(x(z)O)}*i+X+]+g,p,s,x-i-q.P.V.g.t.{/n0]0l0r1S1r2S2T2V2X2[2_2a3Q3W3d3l4z6T6e6f6i6|7[8t9T9_!s>Q$Z$n'X)s-U-X/V2p4T5w6s:Z:m<U<X<Y<]<^<_<`<a<b<c<d<e<f<g<h<i<k<n<{=O=P=R=Z=[=e=f>S#glOPXZst!Z!`!o#S#d#o#{$n%m&k&n&o&r&t&u&w&{'T'b)O)s*i+]+g,p,s,x-i.g/V/n0]0l1r2S2T2V2X2[2_2a3d4T4z6T6e6f6i7[8t9T!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^Q+T%aQ/c*Oo4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!U$yi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>YQ*c$zU*l$|*Z*oQ+U%bQ0W*m#f=q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n=r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hQ=w>TQ=x>UQ=y>VR=z>W!U%Ri$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y#f(w#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^o4O<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=hnoOXst!Z#d%m&r&t&u&w,s,x2[2_S*f${*YQ-R'OQ-S'QR4i/y%[%Si#v$b$c$d$x${%O%Q%^%_%c)y*R*T*V*Y*a*g*w*x+f+i,S,V.f/P/d/m/x/y/{0`0b0i0j0o1f1i1q3c4^4_4j4o5Q5[5_6S7W7v8Q8V8[8q9b9p9y:P:`:r;Q;[;d;k<l<m<o<p<q<r<u<v<w<x<y<z=S=T=U=V=X=Y=]=^=_=`=a=b=c=d=g=h>P>X>Y>]>^Q,U&]Q1h,WQ5s1gR8h5tV*n$|*Z*oU*n$|*Z*oT5z1o5{S0P*i/nQ4w0]T8S4z:]Q+j%xQ0V*lQ1O+kQ1u,aQ6W1vQ8v6XQ:c8wR;^:d!U%Oi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Yx*R$v)e*S*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>OS0`*t0a#f<o#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<p<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!d=S(u)c*[*e.j.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[`=T3}7c7f7j9h:t:w;yS=_.l3iT=`7e9k!U%Qi$d%O%Q%^%_%c*R*T*a*w*x/P/x0`0b0i0j0o4_5Q8V9p>P>X>Y|*T$v)e*U*t+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>OS0b*u0c#f<q#v$b$c$x${)y*V*Y*g+f+i,S,V.f/d/m/y/{1f1i1q3c4^4j4o5[5_6S7W7v8Q8[8q9b9y:P:`:r;Q;[;d;k<o<q<u<w<y=S=U=X=]=_=a=c=g>]>^n<r<l<m<p<r<v<x<z=T=V=Y=^=`=b=d=h!h=U(u)c*[*e.k.l.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[d=V3}7d7e7j9h9i:t:u:w;yS=a.m3jT=b7f9lrnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q&f!UR,p&ornOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_R&f!UQ,Y&^R1d,RsnOXst!V!Z#d%m&i&r&t&u&w,s,x2[2_Q1p,_S6R1s1tU8p6P6Q6US:_8r8sS;Y:^:aQ;m;ZR;w;nQ&m!VR,i&iR6_1|R:f8yW&Q|&V&W,OR1Z+vQ&r!WR,s&sR,y&xT2],x2_R,}&yQ,|&yR2f,}Q'y!{R-y'ySsOtQ#dXT%ps#dQ#OTR'{#OQ#RUR'}#RQ){$uR/`){Q#UVR(Q#UQ#XWU(W#X(X.QQ(X#YR.Q(YQ-^'YR2r-^Q.u(yS3m.u3nR3n.vQ-e'`R2v-eY!rQ'`-e1o5{R'j!rQ/Q)eR4S/QU#_W%h*YU(_#_(`.RQ(`#`R.R(ZQ-a']R2t-at`OXst!V!Z#d%m&i&k&r&t&u&w,s,x2[2_S#hZ%eU#r`#h.[R.[(jQ(k#jQ.X(gW.a(k.X3X7RQ3X.YR7R3YQ)n$lR/W)nQ$phR)t$pQ$`cU)a$`-|<jQ-|<WR<j)qQ/q*]W4c/q4d7t9sU4d/r/s/tS7t4e4fR9s7u$e*Q$v(u)c)e*[*e*t*u+Q+R+V.l.m.o.p.q/_/g/i/k/v/|0d0e0v1e3f3g3h3}4R4[4g4h4l4|5O5R5S5W5r7]7^7_7`7e7f7h7i7j7p7w7z8U8X8Z9h9i9j9t9|:R:S:t:u:v:w:x:};R;e;j;v;y=p=}>O>Z>[Q/z*eU4k/z4m7xQ4m/|R7x4lS*o$|*ZR0Y*ox*S$v)e*t*u+V/v0d0e4R4g5R5S5W7p8U:R:x=p=}>O!d.j(u)c*[*e.l.m.q/_/k/|0v1e3h4[4h4l5r7]7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/h*S.j7ca7c3}7e7f7j9h:t:w;yQ0a*tQ3i.lU4}0a3i9kR9k7e|*U$v)e*t*u+V/g/v0d0e4R4g4|5R5S5W7p8U:R:x=p=}>O!h.k(u)c*[*e.l.m.q/_/k/|0v1e3f3h4[4h4l5r7]7^7`7w7z8X8Z9t9|:S:};R;e;j;v>Z>[U/j*U.k7de7d3}7e7f7j9h9i:t:u:w;yQ0c*uQ3j.mU5P0c3j9lR9l7fQ*z%UR0g*zQ5]0vR8Y5]Q+_%kR0u+_Q5v1jS8j5v:[R:[8kQ,[&_R1m,[Q5{1oR8m5{Q1{,fS6]1{8zR8z6_Q1U+rW5h1U5j8a:VQ5j1XQ8a5iR:V8bQ+w&QR1[+wQ2_,xR6m2_YrOXst#dQ&v!ZQ+a%mQ,r&rQ,t&tQ,u&uQ,w&wQ2Y,sS2],x2_R6l2[Q%opQ&z!_Q&}!aQ'P!bQ'R!cQ'q!uQ+`%lQ+l%zQ,Q&XQ,h&mQ-P&|W-p'k's't'wQ-w'oQ0X*nQ1P+mQ1c,PS2O,i,lQ2g-OQ2h-RQ2i-SQ2}-oW3P-r-s-v-xQ5a1QQ5m1_Q5q1eQ6V1uQ6a2QQ6k2ZU6z3O3R3UQ6}3SQ8]5bQ8e5oQ8g5rQ8l5zQ8u6WQ8{6`S9[6{7PQ9^7OQ:W8cQ:b8vQ:g8|Q:n9]Q;U:XQ;]:cQ;a:oQ;l;VR;o;^Q%zyQ'd!iQ'o!uU+m%{%|%}Q-W'VU-k'e'f'gS-o'k'uQ0Q*jS1Q+n+oQ2o-YS2{-l-mQ3S-tS4p0R0UQ5b1RQ6v2uQ6y2|Q7O3TU7{4r4s4vQ9z7}R;O9{S$wi>PR*{%VU%Ui%V>PR0f*yQ$viS(u#v+iS)c$b$cQ)e$dQ*[$xS*e${*YQ*t%OQ*u%QQ+Q%^Q+R%_Q+V%cQ.l<oQ.m<qQ.o<uQ.p<wQ.q<yQ/_)yQ/g*RQ/i*TQ/k*VQ/v*aS/|*g/mQ0d*wQ0e*xl0v+f,V.f1i1q3c6S7W8q9b:`:r;[;dQ1e,SQ3f=SQ3g=UQ3h=XS3}<l<mQ4R/PS4[/d4^Q4g/xQ4h/yQ4l/{Q4|0`Q5O0bQ5R0iQ5S0jQ5W0oQ5r1fQ7]=]Q7^=_Q7_=aQ7`=cQ7e<pQ7f<rQ7h<vQ7i<xQ7j<zQ7p4_Q7w4jQ7z4oQ8U5QQ8X5[Q8Z5_Q9h=YQ9i=TQ9j=VQ9t7vQ9|8QQ:R8VQ:S8[Q:t=^Q:u=`Q:v=bQ:w=dQ:x9pQ:}9yQ;R:PQ;e=gQ;j;QQ;v;kQ;y=hQ=p>PQ=}>XQ>O>YQ>Z>]R>[>^Q+O%]Q.n<sR7g<tnpOXst!Z#d%m&r&t&u&w,s,x2[2_Q!fPS#fZ#oQ&|!`W'h!o*i0]4zQ(P#SQ)Q#{Q)r$nS,l&k&nQ,q&oQ-O&{S-T'T/nQ-g'bQ.x)OQ/[)sQ0s+]Q0y+gQ2W,pQ2y-iQ3a.gQ4W/VQ5U0lQ6Q1rQ6c2SQ6d2TQ6h2VQ6j2XQ6o2aQ7Z3dQ7m4TQ8s6TQ9P6eQ9Q6fQ9S6iQ9f7[Q:a8tR:k9T#[cOPXZst!Z!`!o#d#o#{%m&k&n&o&r&t&u&w&{'T'b)O*i+]+g,p,s,x-i.g/n0]0l1r2S2T2V2X2[2_2a3d4z6T6e6f6i7[8t9TQ#YWQ#eYQ%quQ%svS%uw!gS(S#W(VQ(Y#ZQ(t#uQ(y#xQ)R$OQ)S$PQ)T$QQ)U$RQ)V$SQ)W$TQ)X$UQ)Y$VQ)Z$WQ)[$XQ)^$ZQ)`$_Q)b$aQ)g$eW)q$n)s/V4TQ+d%tQ+x&RS-Z'X2pQ-x'rS-}(T.PQ.S(]Q.U(dQ.s(xQ.v(zQ.z<UQ.|<XQ.}<YQ/O<]Q/b)}Q0p+XQ2k-UQ2n-XQ3O-qQ3V.VQ3k.tQ3p<^Q3q<_Q3r<`Q3s<aQ3t<bQ3u<cQ3v<dQ3w<eQ3x<fQ3y<gQ3z<hQ3{.{Q3|<kQ4P<nQ4Q<{Q4X<iQ5X0rQ5c1SQ6u=OQ6{3QQ7Q3WQ7a3lQ7b=PQ7k=RQ7l=ZQ8k5wQ9X6sQ9]6|Q9g=[Q9m=eQ9n=fQ:o9_Q;W:ZQ;`:mQ<W#SR=v>SR#[WR'Z!el!tQ!r!v!y!z'`'l'm'n-e-u1o5{5}S'V!e-]U*j$|*Z*oS-Y'W'_S0U*k*qQ0^*rQ2u-cQ4v0[R4{0_R({#xQ!fQT-d'`-e]!qQ!r'`-e1o5{Q#p]R'i<VR)f$dY!uQ'`-e1o5{Q'k!rS'u!v!yS'w!z5}S-t'l'mQ-v'nR3T-uT#kZ%eS#jZ%eS%km,oU(g#h#i#lS.Y(h(iQ.^(jQ0t+^Q3Y.ZU3Z.[.]._S7S3[3]R9`7Td#^W#W#Z%h(T(^*Y+Z.T/mr#gZm#h#i#l%e(h(i(j+^.Z.[.]._3[3]7TS*]$x*bQ/t*^Q2U,oQ2l-VQ4`/pQ6q2dQ7s4aQ9W6rT=m'X+[V#aW%h*YU#`W%h*YS(U#W(^U(Z#Z+Z/mS-['X+[T.O(T.TV'^!e%i*ZQ$lfR)x$qT)m$l)nR4V/UT*_$x*bT*h${*YQ0w+fQ1g,VQ3_.fQ5t1iQ6P1qQ7X3cQ8r6SQ9c7WQ:^8qQ:p9bQ;Z:`Q;c:rQ;n;[R;q;dnqOXst!Z#d%m&r&t&u&w,s,x2[2_Q&l!VR,h&itmOXst!U!V!Z#d%m&i&r&t&u&w,s,x2[2_R,o&oT%lm,oR1k,XR,g&gQ&U|S+}&V&WR1^,OR+s&PT&p!W&sT&q!W&sT2^,x2_\",\n nodeNames: \"⚠ ArithOp ArithOp ?. JSXStartTag LineComment BlockComment Script Hashbang ExportDeclaration export Star as VariableName String Escape from ; default FunctionDeclaration async function VariableDefinition > < TypeParamList in out const TypeDefinition extends ThisType this LiteralType ArithOp Number BooleanLiteral TemplateType InterpolationEnd Interpolation InterpolationStart NullType null VoidType void TypeofType typeof MemberExpression . PropertyName [ TemplateString Escape Interpolation super RegExp ] ArrayExpression Spread , } { ObjectExpression Property async get set PropertyDefinition Block : NewTarget new NewExpression ) ( ArgList UnaryExpression delete LogicOp BitOp YieldExpression yield AwaitExpression await ParenthesizedExpression ClassExpression class ClassBody MethodDeclaration Decorator @ MemberExpression PrivatePropertyName CallExpression TypeArgList CompareOp < declare Privacy static abstract override PrivatePropertyDefinition PropertyDeclaration readonly accessor Optional TypeAnnotation Equals StaticBlock FunctionExpression ArrowFunction ParamList ParamList ArrayPattern ObjectPattern PatternProperty Privacy readonly Arrow MemberExpression BinaryExpression ArithOp ArithOp ArithOp ArithOp BitOp CompareOp instanceof satisfies CompareOp BitOp BitOp BitOp LogicOp LogicOp ConditionalExpression LogicOp LogicOp AssignmentExpression UpdateOp PostfixExpression CallExpression InstantiationExpression TaggedTemplateExpression DynamicImport import ImportMeta JSXElement JSXSelfCloseEndTag JSXSelfClosingTag JSXIdentifier JSXBuiltin JSXIdentifier JSXNamespacedName JSXMemberExpression JSXSpreadAttribute JSXAttribute JSXAttributeValue JSXEscape JSXEndTag JSXOpenTag JSXFragmentTag JSXText JSXEscape JSXStartCloseTag JSXCloseTag PrefixCast < ArrowFunction TypeParamList SequenceExpression InstantiationExpression KeyofType keyof UniqueType unique ImportType InferredType infer TypeName ParenthesizedType FunctionSignature ParamList NewSignature IndexedType TupleType Label ArrayType ReadonlyType ObjectType MethodType PropertyType IndexSignature PropertyDefinition CallSignature TypePredicate asserts is NewSignature new UnionType LogicOp IntersectionType LogicOp ConditionalType ParameterizedType ClassDeclaration abstract implements type VariableDeclaration let var using TypeAliasDeclaration InterfaceDeclaration interface EnumDeclaration enum EnumBody NamespaceDeclaration namespace module AmbientDeclaration declare GlobalDeclaration global ClassDeclaration ClassBody AmbientFunctionDeclaration ExportGroup VariableName VariableName ImportDeclaration defer ImportGroup ForStatement for ForSpec ForInSpec ForOfSpec of WhileStatement while WithStatement with DoStatement do IfStatement if else SwitchStatement switch SwitchBody CaseLabel case DefaultLabel TryStatement try CatchClause catch FinallyClause finally ReturnStatement return ThrowStatement throw BreakStatement break ContinueStatement continue DebuggerStatement debugger LabeledStatement ExpressionStatement SingleExpression SingleClassItem\",\n maxTerm: 380,\n context: trackNewline,\n nodeProps: [\n [\"isolate\", -8,5,6,14,37,39,51,53,55,\"\"],\n [\"group\", -26,9,17,19,68,207,211,215,216,218,221,224,234,237,243,245,247,249,252,258,264,266,268,270,272,274,275,\"Statement\",-34,13,14,32,35,36,42,51,54,55,57,62,70,72,76,80,82,84,85,110,111,120,121,136,139,141,142,143,144,145,147,148,167,169,171,\"Expression\",-23,31,33,37,41,43,45,173,175,177,178,180,181,182,184,185,186,188,189,190,201,203,205,206,\"Type\",-3,88,103,109,\"ClassItem\"],\n [\"openedBy\", 23,\"<\",38,\"InterpolationStart\",56,\"[\",60,\"{\",73,\"(\",160,\"JSXStartCloseTag\"],\n [\"closedBy\", -2,24,168,\">\",40,\"InterpolationEnd\",50,\"]\",61,\"}\",74,\")\",165,\"JSXEndTag\"]\n ],\n propSources: [jsHighlight],\n skippedNodes: [0,5,6,278],\n repeatNodeCount: 37,\n tokenData: \"$Fq07[R!bOX%ZXY+gYZ-yZ[+g[]%Z]^.c^p%Zpq+gqr/mrs3cst:_tuEruvJSvwLkwx! Yxy!'iyz!(sz{!)}{|!,q|}!.O}!O!,q!O!P!/Y!P!Q!9j!Q!R#:O!R![#<_![!]#I_!]!^#Jk!^!_#Ku!_!`$![!`!a$$v!a!b$*T!b!c$,r!c!}Er!}#O$-|#O#P$/W#P#Q$4o#Q#R$5y#R#SEr#S#T$7W#T#o$8b#o#p$<r#p#q$=h#q#r$>x#r#s$@U#s$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$I|Er$I|$I}$Dk$I}$JO$Dk$JO$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr(n%d_$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z&j&hT$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c&j&zP;=`<%l&c'|'U]$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!b(SU(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!b(iP;=`<%l'}'|(oP;=`<%l&}'[(y]$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(rp)wU(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)rp*^P;=`<%l)r'[*dP;=`<%l(r#S*nX(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g#S+^P;=`<%l*g(n+dP;=`<%l%Z07[+rq$i&j(Wp(Z!b'|0/lOX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p$f%Z$f$g+g$g#BY%Z#BY#BZ+g#BZ$IS%Z$IS$I_+g$I_$JT%Z$JT$JU+g$JU$KV%Z$KV$KW+g$KW&FU%Z&FU&FV+g&FV;'S%Z;'S;=`+a<%l?HT%Z?HT?HU+g?HUO%Z07[.ST(X#S$i&j'}0/lO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c07[.n_$i&j(Wp(Z!b'}0/lOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)3p/x`$i&j!p),Q(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW1V`#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`2X!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW2d_#v(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At3l_(V':f$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k(^4r_$i&j(Z!bOY4kYZ5qZr4krs7nsw4kwx5qx!^4k!^!_8p!_#O4k#O#P5q#P#o4k#o#p8p#p;'S4k;'S;=`:X<%lO4k&z5vX$i&jOr5qrs6cs!^5q!^!_6y!_#o5q#o#p6y#p;'S5q;'S;=`7h<%lO5q&z6jT$d`$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c`6|TOr6yrs7]s;'S6y;'S;=`7b<%lO6y`7bO$d``7eP;=`<%l6y&z7kP;=`<%l5q(^7w]$d`$i&j(Z!bOY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}!r8uZ(Z!bOY8pYZ6yZr8prs9hsw8pwx6yx#O8p#O#P6y#P;'S8p;'S;=`:R<%lO8p!r9oU$d`(Z!bOY'}Zw'}x#O'}#P;'S'};'S;=`(f<%lO'}!r:UP;=`<%l8p(^:[P;=`<%l4k%9[:hh$i&j(Wp(Z!bOY%ZYZ&cZq%Zqr<Srs&}st%ZtuCruw%Zwx(rx!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr(r<__WS$i&j(Wp(Z!bOY<SYZ&cZr<Srs=^sw<Swx@nx!^<S!^!_Bm!_#O<S#O#P>`#P#o<S#o#pBm#p;'S<S;'S;=`Cl<%lO<S(Q=g]WS$i&j(Z!bOY=^YZ&cZw=^wx>`x!^=^!^!_?q!_#O=^#O#P>`#P#o=^#o#p?q#p;'S=^;'S;=`@h<%lO=^&n>gXWS$i&jOY>`YZ&cZ!^>`!^!_?S!_#o>`#o#p?S#p;'S>`;'S;=`?k<%lO>`S?XSWSOY?SZ;'S?S;'S;=`?e<%lO?SS?hP;=`<%l?S&n?nP;=`<%l>`!f?xWWS(Z!bOY?qZw?qwx?Sx#O?q#O#P?S#P;'S?q;'S;=`@b<%lO?q!f@eP;=`<%l?q(Q@kP;=`<%l=^'`@w]WS$i&j(WpOY@nYZ&cZr@nrs>`s!^@n!^!_Ap!_#O@n#O#P>`#P#o@n#o#pAp#p;'S@n;'S;=`Bg<%lO@ntAwWWS(WpOYApZrAprs?Ss#OAp#O#P?S#P;'SAp;'S;=`Ba<%lOAptBdP;=`<%lAp'`BjP;=`<%l@n#WBvYWS(Wp(Z!bOYBmZrBmrs?qswBmwxApx#OBm#O#P?S#P;'SBm;'S;=`Cf<%lOBm#WCiP;=`<%lBm(rCoP;=`<%l<S%9[C}i$i&j(o%1l(Wp(Z!bOY%ZYZ&cZr%Zrs&}st%ZtuCruw%Zwx(rx!Q%Z!Q![Cr![!^%Z!^!_*g!_!c%Z!c!}Cr!}#O%Z#O#P&c#P#R%Z#R#SCr#S#T%Z#T#oCr#o#p*g#p$g%Z$g;'SCr;'S;=`El<%lOCr%9[EoP;=`<%lCr07[FRk$i&j(Wp(Z!b$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr+dHRk$i&j(Wp(Z!b$]#tOY%ZYZ&cZr%Zrs&}st%ZtuGvuw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Gv![!^%Z!^!_*g!_!c%Z!c!}Gv!}#O%Z#O#P&c#P#R%Z#R#SGv#S#T%Z#T#oGv#o#p*g#p$g%Z$g;'SGv;'S;=`Iv<%lOGv+dIyP;=`<%lGv07[JPP;=`<%lEr(KWJ_`$i&j(Wp(Z!b#p(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWKl_$i&j$Q(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,#xLva(z+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sv%ZvwM{wx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KWNW`$i&j#z(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'At! c_(Y';W$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b'l!!i_$i&j(WpOY!!bYZ!#hZr!!brs!#hsw!!bwx!$xx!^!!b!^!_!%z!_#O!!b#O#P!#h#P#o!!b#o#p!%z#p;'S!!b;'S;=`!'c<%lO!!b&z!#mX$i&jOw!#hwx6cx!^!#h!^!_!$Y!_#o!#h#o#p!$Y#p;'S!#h;'S;=`!$r<%lO!#h`!$]TOw!$Ywx7]x;'S!$Y;'S;=`!$l<%lO!$Y`!$oP;=`<%l!$Y&z!$uP;=`<%l!#h'l!%R]$d`$i&j(WpOY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r!Q!&PZ(WpOY!%zYZ!$YZr!%zrs!$Ysw!%zwx!&rx#O!%z#O#P!$Y#P;'S!%z;'S;=`!']<%lO!%z!Q!&yU$d`(WpOY)rZr)rs#O)r#P;'S)r;'S;=`*Z<%lO)r!Q!'`P;=`<%l!%z'l!'fP;=`<%l!!b/5|!'t_!l/.^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#&U!)O_!k!Lf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z-!n!*[b$i&j(Wp(Z!b(U%&f#q(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rxz%Zz{!+d{!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW!+o`$i&j(Wp(Z!b#n(ChOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;x!,|`$i&j(Wp(Z!br+4YOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z,$U!.Z_!]+Jf$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!/ec$i&j(Wp(Z!b!Q.2^OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!0p!P!Q%Z!Q![!3Y![!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!0ya$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!2O!P!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z#%|!2Z_![!L^$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!3eg$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!3Y![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S!3Y#S#X%Z#X#Y!4|#Y#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!5Vg$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx{%Z{|!6n|}%Z}!O!6n!O!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!6wc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad!8_c$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![!8S![!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S!8S#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[!9uf$i&j(Wp(Z!b#o(ChOY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcxz!;Zz{#-}{!P!;Z!P!Q#/d!Q!^!;Z!^!_#(i!_!`#7S!`!a#8i!a!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z?O!;fb$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z>^!<w`$i&j(Z!b!X7`OY!<nYZ&cZw!<nwx!=yx!P!<n!P!Q!Eq!Q!^!<n!^!_!Gr!_!}!<n!}#O!KS#O#P!Dy#P#o!<n#o#p!Gr#p;'S!<n;'S;=`!L]<%lO!<n<z!>Q^$i&j!X7`OY!=yYZ&cZ!P!=y!P!Q!>|!Q!^!=y!^!_!@c!_!}!=y!}#O!CW#O#P!Dy#P#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!?Td$i&j!X7`O!^&c!_#W&c#W#X!>|#X#Z&c#Z#[!>|#[#]&c#]#^!>|#^#a&c#a#b!>|#b#g&c#g#h!>|#h#i&c#i#j!>|#j#k!>|#k#m&c#m#n!>|#n#o&c#p;'S&c;'S;=`&w<%lO&c7`!@hX!X7`OY!@cZ!P!@c!P!Q!AT!Q!}!@c!}#O!Ar#O#P!Bq#P;'S!@c;'S;=`!CQ<%lO!@c7`!AYW!X7`#W#X!AT#Z#[!AT#]#^!AT#a#b!AT#g#h!AT#i#j!AT#j#k!AT#m#n!AT7`!AuVOY!ArZ#O!Ar#O#P!B[#P#Q!@c#Q;'S!Ar;'S;=`!Bk<%lO!Ar7`!B_SOY!ArZ;'S!Ar;'S;=`!Bk<%lO!Ar7`!BnP;=`<%l!Ar7`!BtSOY!@cZ;'S!@c;'S;=`!CQ<%lO!@c7`!CTP;=`<%l!@c<z!C][$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#O!CW#O#P!DR#P#Q!=y#Q#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DWX$i&jOY!CWYZ&cZ!^!CW!^!_!Ar!_#o!CW#o#p!Ar#p;'S!CW;'S;=`!Ds<%lO!CW<z!DvP;=`<%l!CW<z!EOX$i&jOY!=yYZ&cZ!^!=y!^!_!@c!_#o!=y#o#p!@c#p;'S!=y;'S;=`!Ek<%lO!=y<z!EnP;=`<%l!=y>^!Ezl$i&j(Z!b!X7`OY&}YZ&cZw&}wx&cx!^&}!^!_'}!_#O&}#O#P&c#P#W&}#W#X!Eq#X#Z&}#Z#[!Eq#[#]&}#]#^!Eq#^#a&}#a#b!Eq#b#g&}#g#h!Eq#h#i&}#i#j!Eq#j#k!Eq#k#m&}#m#n!Eq#n#o&}#o#p'}#p;'S&};'S;=`(l<%lO&}8r!GyZ(Z!b!X7`OY!GrZw!Grwx!@cx!P!Gr!P!Q!Hl!Q!}!Gr!}#O!JU#O#P!Bq#P;'S!Gr;'S;=`!J|<%lO!Gr8r!Hse(Z!b!X7`OY'}Zw'}x#O'}#P#W'}#W#X!Hl#X#Z'}#Z#[!Hl#[#]'}#]#^!Hl#^#a'}#a#b!Hl#b#g'}#g#h!Hl#h#i'}#i#j!Hl#j#k!Hl#k#m'}#m#n!Hl#n;'S'};'S;=`(f<%lO'}8r!JZX(Z!bOY!JUZw!JUwx!Arx#O!JU#O#P!B[#P#Q!Gr#Q;'S!JU;'S;=`!Jv<%lO!JU8r!JyP;=`<%l!JU8r!KPP;=`<%l!Gr>^!KZ^$i&j(Z!bOY!KSYZ&cZw!KSwx!CWx!^!KS!^!_!JU!_#O!KS#O#P!DR#P#Q!<n#Q#o!KS#o#p!JU#p;'S!KS;'S;=`!LV<%lO!KS>^!LYP;=`<%l!KS>^!L`P;=`<%l!<n=l!Ll`$i&j(Wp!X7`OY!LcYZ&cZr!Lcrs!=ys!P!Lc!P!Q!Mn!Q!^!Lc!^!_# o!_!}!Lc!}#O#%P#O#P!Dy#P#o!Lc#o#p# o#p;'S!Lc;'S;=`#&Y<%lO!Lc=l!Mwl$i&j(Wp!X7`OY(rYZ&cZr(rrs&cs!^(r!^!_)r!_#O(r#O#P&c#P#W(r#W#X!Mn#X#Z(r#Z#[!Mn#[#](r#]#^!Mn#^#a(r#a#b!Mn#b#g(r#g#h!Mn#h#i(r#i#j!Mn#j#k!Mn#k#m(r#m#n!Mn#n#o(r#o#p)r#p;'S(r;'S;=`*a<%lO(r8Q# vZ(Wp!X7`OY# oZr# ors!@cs!P# o!P!Q#!i!Q!}# o!}#O#$R#O#P!Bq#P;'S# o;'S;=`#$y<%lO# o8Q#!pe(Wp!X7`OY)rZr)rs#O)r#P#W)r#W#X#!i#X#Z)r#Z#[#!i#[#])r#]#^#!i#^#a)r#a#b#!i#b#g)r#g#h#!i#h#i)r#i#j#!i#j#k#!i#k#m)r#m#n#!i#n;'S)r;'S;=`*Z<%lO)r8Q#$WX(WpOY#$RZr#$Rrs!Ars#O#$R#O#P!B[#P#Q# o#Q;'S#$R;'S;=`#$s<%lO#$R8Q#$vP;=`<%l#$R8Q#$|P;=`<%l# o=l#%W^$i&j(WpOY#%PYZ&cZr#%Prs!CWs!^#%P!^!_#$R!_#O#%P#O#P!DR#P#Q!Lc#Q#o#%P#o#p#$R#p;'S#%P;'S;=`#&S<%lO#%P=l#&VP;=`<%l#%P=l#&]P;=`<%l!Lc?O#&kn$i&j(Wp(Z!b!X7`OY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#W%Z#W#X#&`#X#Z%Z#Z#[#&`#[#]%Z#]#^#&`#^#a%Z#a#b#&`#b#g%Z#g#h#&`#h#i%Z#i#j#&`#j#k#&`#k#m%Z#m#n#&`#n#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z9d#(r](Wp(Z!b!X7`OY#(iZr#(irs!Grsw#(iwx# ox!P#(i!P!Q#)k!Q!}#(i!}#O#+`#O#P!Bq#P;'S#(i;'S;=`#,`<%lO#(i9d#)th(Wp(Z!b!X7`OY*gZr*grs'}sw*gwx)rx#O*g#P#W*g#W#X#)k#X#Z*g#Z#[#)k#[#]*g#]#^#)k#^#a*g#a#b#)k#b#g*g#g#h#)k#h#i*g#i#j#)k#j#k#)k#k#m*g#m#n#)k#n;'S*g;'S;=`+Z<%lO*g9d#+gZ(Wp(Z!bOY#+`Zr#+`rs!JUsw#+`wx#$Rx#O#+`#O#P!B[#P#Q#(i#Q;'S#+`;'S;=`#,Y<%lO#+`9d#,]P;=`<%l#+`9d#,cP;=`<%l#(i?O#,o`$i&j(Wp(Z!bOY#,fYZ&cZr#,frs!KSsw#,fwx#%Px!^#,f!^!_#+`!_#O#,f#O#P!DR#P#Q!;Z#Q#o#,f#o#p#+`#p;'S#,f;'S;=`#-q<%lO#,f?O#-tP;=`<%l#,f?O#-zP;=`<%l!;Z07[#.[b$i&j(Wp(Z!b(O0/l!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z07[#/o_$i&j(Wp(Z!bT0/lOY#/dYZ&cZr#/drs#0nsw#/dwx#4Ox!^#/d!^!_#5}!_#O#/d#O#P#1p#P#o#/d#o#p#5}#p;'S#/d;'S;=`#6|<%lO#/d06j#0w]$i&j(Z!bT0/lOY#0nYZ&cZw#0nwx#1px!^#0n!^!_#3R!_#O#0n#O#P#1p#P#o#0n#o#p#3R#p;'S#0n;'S;=`#3x<%lO#0n05W#1wX$i&jT0/lOY#1pYZ&cZ!^#1p!^!_#2d!_#o#1p#o#p#2d#p;'S#1p;'S;=`#2{<%lO#1p0/l#2iST0/lOY#2dZ;'S#2d;'S;=`#2u<%lO#2d0/l#2xP;=`<%l#2d05W#3OP;=`<%l#1p01O#3YW(Z!bT0/lOY#3RZw#3Rwx#2dx#O#3R#O#P#2d#P;'S#3R;'S;=`#3r<%lO#3R01O#3uP;=`<%l#3R06j#3{P;=`<%l#0n05x#4X]$i&j(WpT0/lOY#4OYZ&cZr#4Ors#1ps!^#4O!^!_#5Q!_#O#4O#O#P#1p#P#o#4O#o#p#5Q#p;'S#4O;'S;=`#5w<%lO#4O00^#5XW(WpT0/lOY#5QZr#5Qrs#2ds#O#5Q#O#P#2d#P;'S#5Q;'S;=`#5q<%lO#5Q00^#5tP;=`<%l#5Q05x#5zP;=`<%l#4O01p#6WY(Wp(Z!bT0/lOY#5}Zr#5}rs#3Rsw#5}wx#5Qx#O#5}#O#P#2d#P;'S#5};'S;=`#6v<%lO#5}01p#6yP;=`<%l#5}07[#7PP;=`<%l#/d)3h#7ab$i&j$Q(Ch(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;ZAt#8vb$Z#t$i&j(Wp(Z!b!X7`OY!;ZYZ&cZr!;Zrs!<nsw!;Zwx!Lcx!P!;Z!P!Q#&`!Q!^!;Z!^!_#(i!_!}!;Z!}#O#,f#O#P!Dy#P#o!;Z#o#p#(i#p;'S!;Z;'S;=`#-w<%lO!;Z'Ad#:Zp$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#U%Z#U#V#?i#V#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#d#Bq#d#l%Z#l#m#Es#m#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#<jk$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!O%Z!O!P!3Y!P!Q%Z!Q![#<_![!^%Z!^!_*g!_!g%Z!g!h!4|!h#O%Z#O#P&c#P#R%Z#R#S#<_#S#X%Z#X#Y!4|#Y#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#>j_$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#?rd$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#A]f$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!R#AQ!R!S#AQ!S!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#AQ#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Bzc$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Dbe$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q!Y#DV!Y!^%Z!^!_*g!_#O%Z#O#P&c#P#R%Z#R#S#DV#S#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#E|g$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z'Ad#Gpi$i&j(Wp(Z!bs'9tOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!Q%Z!Q![#Ge![!^%Z!^!_*g!_!c%Z!c!i#Ge!i#O%Z#O#P&c#P#R%Z#R#S#Ge#S#T%Z#T#Z#Ge#Z#b%Z#b#c#>_#c#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x#Il_!g$b$i&j$O)Lv(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z)[#Jv_al$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f#LS^h#)`#R-<U(Wp(Z!b$n7`OY*gZr*grs'}sw*gwx)rx!P*g!P!Q#MO!Q!^*g!^!_#Mt!_!`$ f!`#O*g#P;'S*g;'S;=`+Z<%lO*g(n#MXX$k&j(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El#M}Z#r(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx!_*g!_!`#Np!`#O*g#P;'S*g;'S;=`+Z<%lO*g(El#NyX$Q(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g(El$ oX#s(Ch(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g*)x$!ga#`*!Y$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`0z!`!a$#l!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(K[$#w_#k(Cl$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z*)x$%Vag!*r#s(Ch$f#|$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`$&[!`!a$'f!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$&g_#s(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$'qa#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`!a$(v!a#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$)R`#r(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(Kd$*`a(r(Ct$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!a%Z!a!b$+e!b#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$+p`$i&j#{(Ch(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z%#`$,}_!|$Ip$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z04f$.X_!S0,v$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(n$/]Z$i&jO!^$0O!^!_$0f!_#i$0O#i#j$0k#j#l$0O#l#m$2^#m#o$0O#o#p$0f#p;'S$0O;'S;=`$4i<%lO$0O(n$0VT_#S$i&jO!^&c!_#o&c#p;'S&c;'S;=`&w<%lO&c#S$0kO_#S(n$0p[$i&jO!Q&c!Q![$1f![!^&c!_!c&c!c!i$1f!i#T&c#T#Z$1f#Z#o&c#o#p$3|#p;'S&c;'S;=`&w<%lO&c(n$1kZ$i&jO!Q&c!Q![$2^![!^&c!_!c&c!c!i$2^!i#T&c#T#Z$2^#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$2cZ$i&jO!Q&c!Q![$3U![!^&c!_!c&c!c!i$3U!i#T&c#T#Z$3U#Z#o&c#p;'S&c;'S;=`&w<%lO&c(n$3ZZ$i&jO!Q&c!Q![$0O![!^&c!_!c&c!c!i$0O!i#T&c#T#Z$0O#Z#o&c#p;'S&c;'S;=`&w<%lO&c#S$4PR!Q![$4Y!c!i$4Y#T#Z$4Y#S$4]S!Q![$4Y!c!i$4Y#T#Z$4Y#q#r$0f(n$4lP;=`<%l$0O#1[$4z_!Y#)l$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z(KW$6U`#x(Ch$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z+;p$7c_$i&j(Wp(Z!b(a+4QOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$8qk$i&j(Wp(Z!b(T,2j$_#t(e$I[OY%ZYZ&cZr%Zrs&}st%Ztu$8buw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$8b![!^%Z!^!_*g!_!c%Z!c!}$8b!}#O%Z#O#P&c#P#R%Z#R#S$8b#S#T%Z#T#o$8b#o#p*g#p$g%Z$g;'S$8b;'S;=`$<l<%lO$8b+d$:qk$i&j(Wp(Z!b$_#tOY%ZYZ&cZr%Zrs&}st%Ztu$:fuw%Zwx(rx}%Z}!O$:f!O!Q%Z!Q![$:f![!^%Z!^!_*g!_!c%Z!c!}$:f!}#O%Z#O#P&c#P#R%Z#R#S$:f#S#T%Z#T#o$:f#o#p*g#p$g%Z$g;'S$:f;'S;=`$<f<%lO$:f+d$<iP;=`<%l$:f07[$<oP;=`<%l$8b#Jf$<{X!_#Hb(Wp(Z!bOY*gZr*grs'}sw*gwx)rx#O*g#P;'S*g;'S;=`+Z<%lO*g,#x$=sa(y+JY$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_!`Ka!`#O%Z#O#P&c#P#o%Z#o#p*g#p#q$+e#q;'S%Z;'S;=`+a<%lO%Z)>v$?V_!^(CdvBr$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z?O$@a_!q7`$i&j(Wp(Z!bOY%ZYZ&cZr%Zrs&}sw%Zwx(rx!^%Z!^!_*g!_#O%Z#O#P&c#P#o%Z#o#p*g#p;'S%Z;'S;=`+a<%lO%Z07[$Aq|$i&j(Wp(Z!b'|0/l$]#t(T,2j(e$I[OX%ZXY+gYZ&cZ[+g[p%Zpq+gqr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$f%Z$f$g+g$g#BYEr#BY#BZ$A`#BZ$ISEr$IS$I_$A`$I_$JTEr$JT$JU$A`$JU$KVEr$KV$KW$A`$KW&FUEr&FU&FV$A`&FV;'SEr;'S;=`I|<%l?HTEr?HT?HU$A`?HUOEr07[$D|k$i&j(Wp(Z!b'}0/l$]#t(T,2j(e$I[OY%ZYZ&cZr%Zrs&}st%ZtuEruw%Zwx(rx}%Z}!OGv!O!Q%Z!Q![Er![!^%Z!^!_*g!_!c%Z!c!}Er!}#O%Z#O#P&c#P#R%Z#R#SEr#S#T%Z#T#oEr#o#p*g#p$g%Z$g;'SEr;'S;=`I|<%lOEr\",\n tokenizers: [noSemicolon, noSemicolonType, operatorToken, jsx, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, insertSemicolon, new LocalTokenGroup(\"$S~RRtu[#O#Pg#S#T#|~_P#o#pb~gOx~~jVO#i!P#i#j!U#j#l!P#l#m!q#m;'S!P;'S;=`#v<%lO!P~!UO!U~~!XS!Q![!e!c!i!e#T#Z!e#o#p#Z~!hR!Q![!q!c!i!q#T#Z!q~!tR!Q![!}!c!i!}#T#Z!}~#QR!Q![!P!c!i!P#T#Z!P~#^R!Q![#g!c!i#g#T#Z#g~#jS!Q![#g!c!i#g#T#Z#g#q#r!P~#yP;=`<%l!P~$RO(c~~\", 141, 340), new LocalTokenGroup(\"j~RQYZXz{^~^O(Q~~aP!P!Qd~iO(R~~\", 25, 323)],\n topRules: {\"Script\":[0,7],\"SingleExpression\":[1,276],\"SingleClassItem\":[2,277]},\n dialects: {jsx: 0, ts: 15175},\n dynamicPrecedences: {\"80\":1,\"82\":1,\"94\":1,\"169\":1,\"199\":1},\n specialized: [{term: 327, get: (value) => spec_identifier[value] || -1},{term: 343, get: (value) => spec_word[value] || -1},{term: 95, get: (value) => spec_LessThan[value] || -1}],\n tokenPrec: 15201\n});\n\nexport { parser };\n","import { parser } from '@lezer/javascript';\nimport { syntaxTree, LRLanguage, indentNodeProp, continuedIndent, flatIndent, delimitedIndent, foldNodeProp, foldInside, defineLanguageFacet, sublanguageProp, LanguageSupport } from '@codemirror/language';\nimport { EditorSelection } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\nimport { snippetCompletion, ifNotIn, completeFromList } from '@codemirror/autocomplete';\nimport { NodeWeakMap, IterMode } from '@lezer/common';\n\n/**\nA collection of JavaScript-related\n[snippets](https://codemirror.net/6/docs/ref/#autocomplete.snippet).\n*/\nconst snippets = [\n /*@__PURE__*/snippetCompletion(\"function ${name}(${params}) {\\n\\t${}\\n}\", {\n label: \"function\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${index} = 0; ${index} < ${bound}; ${index}++) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"for (let ${name} of ${collection}) {\\n\\t${}\\n}\", {\n label: \"for\",\n detail: \"of loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"do {\\n\\t${}\\n} while (${})\", {\n label: \"do\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"while (${}) {\\n\\t${}\\n}\", {\n label: \"while\",\n detail: \"loop\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"try {\\n\\t${}\\n} catch (${error}) {\\n\\t${}\\n}\", {\n label: \"try\",\n detail: \"/ catch block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"if (${}) {\\n\\t${}\\n} else {\\n\\t${}\\n}\", {\n label: \"if\",\n detail: \"/ else block\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"class ${name} {\\n\\tconstructor(${params}) {\\n\\t\\t${}\\n\\t}\\n}\", {\n label: \"class\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import {${names}} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"named\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"import ${name} from \\\"${module}\\\"\\n${}\", {\n label: \"import\",\n detail: \"default\",\n type: \"keyword\"\n })\n];\n/**\nA collection of snippet completions for TypeScript. Includes the\nJavaScript [snippets](https://codemirror.net/6/docs/ref/#lang-javascript.snippets).\n*/\nconst typescriptSnippets = /*@__PURE__*/snippets.concat([\n /*@__PURE__*/snippetCompletion(\"interface ${name} {\\n\\t${}\\n}\", {\n label: \"interface\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"type ${name} = ${type}\", {\n label: \"type\",\n detail: \"definition\",\n type: \"keyword\"\n }),\n /*@__PURE__*/snippetCompletion(\"enum ${name} {\\n\\t${}\\n}\", {\n label: \"enum\",\n detail: \"definition\",\n type: \"keyword\"\n })\n]);\n\nconst cache = /*@__PURE__*/new NodeWeakMap();\nconst ScopeNodes = /*@__PURE__*/new Set([\n \"Script\", \"Block\",\n \"FunctionExpression\", \"FunctionDeclaration\", \"ArrowFunction\", \"MethodDeclaration\",\n \"ForStatement\"\n]);\nfunction defID(type) {\n return (node, def) => {\n let id = node.node.getChild(\"VariableDefinition\");\n if (id)\n def(id, type);\n return true;\n };\n}\nconst functionContext = [\"FunctionDeclaration\"];\nconst gatherCompletions = {\n FunctionDeclaration: /*@__PURE__*/defID(\"function\"),\n ClassDeclaration: /*@__PURE__*/defID(\"class\"),\n ClassExpression: () => true,\n EnumDeclaration: /*@__PURE__*/defID(\"constant\"),\n TypeAliasDeclaration: /*@__PURE__*/defID(\"type\"),\n NamespaceDeclaration: /*@__PURE__*/defID(\"namespace\"),\n VariableDefinition(node, def) { if (!node.matchContext(functionContext))\n def(node, \"variable\"); },\n TypeDefinition(node, def) { def(node, \"type\"); },\n __proto__: null\n};\nfunction getScope(doc, node) {\n let cached = cache.get(node);\n if (cached)\n return cached;\n let completions = [], top = true;\n function def(node, type) {\n let name = doc.sliceString(node.from, node.to);\n completions.push({ label: name, type });\n }\n node.cursor(IterMode.IncludeAnonymous).iterate(node => {\n if (top) {\n top = false;\n }\n else if (node.name) {\n let gather = gatherCompletions[node.name];\n if (gather && gather(node, def) || ScopeNodes.has(node.name))\n return false;\n }\n else if (node.to - node.from > 8192) {\n // Allow caching for bigger internal nodes\n for (let c of getScope(doc, node.node))\n completions.push(c);\n return false;\n }\n });\n cache.set(node, completions);\n return completions;\n}\nconst Identifier = /^[\\w$\\xa1-\\uffff][\\w$\\d\\xa1-\\uffff]*$/;\nconst dontComplete = [\n \"TemplateString\", \"String\", \"RegExp\",\n \"LineComment\", \"BlockComment\",\n \"VariableDefinition\", \"TypeDefinition\", \"Label\",\n \"PropertyDefinition\", \"PropertyName\",\n \"PrivatePropertyDefinition\", \"PrivatePropertyName\",\n \"JSXText\", \"JSXAttributeValue\", \"JSXOpenTag\", \"JSXCloseTag\", \"JSXSelfClosingTag\",\n \".\", \"?.\"\n];\n/**\nCompletion source that looks up locally defined names in\nJavaScript code.\n*/\nfunction localCompletionSource(context) {\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (dontComplete.indexOf(inner.name) > -1)\n return null;\n let isWord = inner.name == \"VariableName\" ||\n inner.to - inner.from < 20 && Identifier.test(context.state.sliceDoc(inner.from, inner.to));\n if (!isWord && !context.explicit)\n return null;\n let options = [];\n for (let pos = inner; pos; pos = pos.parent) {\n if (ScopeNodes.has(pos.name))\n options = options.concat(getScope(context.state.doc, pos));\n }\n return {\n options,\n from: isWord ? inner.from : context.pos,\n validFor: Identifier\n };\n}\nfunction pathFor(read, member, name) {\n var _a;\n let path = [];\n for (;;) {\n let obj = member.firstChild, prop;\n if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"VariableName\") {\n path.push(read(obj));\n return { path: path.reverse(), name };\n }\n else if ((obj === null || obj === void 0 ? void 0 : obj.name) == \"MemberExpression\" && ((_a = (prop = obj.lastChild)) === null || _a === void 0 ? void 0 : _a.name) == \"PropertyName\") {\n path.push(read(prop));\n member = obj;\n }\n else {\n return null;\n }\n }\n}\n/**\nHelper function for defining JavaScript completion sources. It\nreturns the completable name and object path for a completion\ncontext, or null if no name/property completion should happen at\nthat position. For example, when completing after `a.b.c` it will\nreturn `{path: [\"a\", \"b\"], name: \"c\"}`. When completing after `x`\nit will return `{path: [], name: \"x\"}`. When not in a property or\nname, it will return null if `context.explicit` is false, and\n`{path: [], name: \"\"}` otherwise.\n*/\nfunction completionPath(context) {\n let read = (node) => context.state.doc.sliceString(node.from, node.to);\n let inner = syntaxTree(context.state).resolveInner(context.pos, -1);\n if (inner.name == \"PropertyName\") {\n return pathFor(read, inner.parent, read(inner));\n }\n else if ((inner.name == \".\" || inner.name == \"?.\") && inner.parent.name == \"MemberExpression\") {\n return pathFor(read, inner.parent, \"\");\n }\n else if (dontComplete.indexOf(inner.name) > -1) {\n return null;\n }\n else if (inner.name == \"VariableName\" || inner.to - inner.from < 20 && Identifier.test(read(inner))) {\n return { path: [], name: read(inner) };\n }\n else if (inner.name == \"MemberExpression\") {\n return pathFor(read, inner, \"\");\n }\n else {\n return context.explicit ? { path: [], name: \"\" } : null;\n }\n}\nfunction enumeratePropertyCompletions(obj, top) {\n let originalObj = obj;\n let options = [], seen = new Set;\n for (let depth = 0;; depth++) {\n for (let name of (Object.getOwnPropertyNames || Object.keys)(obj)) {\n if (!/^[a-zA-Z_$\\xaa-\\uffdc][\\w$\\xaa-\\uffdc]*$/.test(name) || seen.has(name))\n continue;\n seen.add(name);\n let value;\n try {\n value = originalObj[name];\n }\n catch (_) {\n continue;\n }\n options.push({\n label: name,\n type: typeof value == \"function\" ? (/^[A-Z]/.test(name) ? \"class\" : top ? \"function\" : \"method\")\n : top ? \"variable\" : \"property\",\n boost: -depth\n });\n }\n let next = Object.getPrototypeOf(obj);\n if (!next)\n return options;\n obj = next;\n }\n}\n/**\nDefines a [completion source](https://codemirror.net/6/docs/ref/#autocomplete.CompletionSource) that\ncompletes from the given scope object (for example `globalThis`).\nWill enter properties of the object when completing properties on\na directly-named path.\n*/\nfunction scopeCompletionSource(scope) {\n let cache = new Map;\n return (context) => {\n let path = completionPath(context);\n if (!path)\n return null;\n let target = scope;\n for (let step of path.path) {\n target = target[step];\n if (!target)\n return null;\n }\n let options = cache.get(target);\n if (!options)\n cache.set(target, options = enumeratePropertyCompletions(target, !path.path.length));\n return {\n from: context.pos - path.name.length,\n options,\n validFor: Identifier\n };\n };\n}\n\n/**\nA language provider based on the [Lezer JavaScript\nparser](https://github.com/lezer-parser/javascript), extended with\nhighlighting and indentation information.\n*/\nconst javascriptLanguage = /*@__PURE__*/LRLanguage.define({\n name: \"javascript\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n IfStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|else\\b)/ }),\n TryStatement: /*@__PURE__*/continuedIndent({ except: /^\\s*({|catch\\b|finally\\b)/ }),\n LabeledStatement: flatIndent,\n SwitchBody: context => {\n let after = context.textAfter, closed = /^\\s*\\}/.test(after), isCase = /^\\s*(case|default)\\b/.test(after);\n return context.baseIndent + (closed ? 0 : isCase ? 1 : 2) * context.unit;\n },\n Block: /*@__PURE__*/delimitedIndent({ closing: \"}\" }),\n ArrowFunction: cx => cx.baseIndent + cx.unit,\n \"TemplateString BlockComment\": () => null,\n \"Statement Property\": /*@__PURE__*/continuedIndent({ except: /^\\s*{/ }),\n JSXElement(context) {\n let closed = /^\\s*<\\//.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n JSXEscape(context) {\n let closed = /\\s*\\}/.test(context.textAfter);\n return context.lineIndent(context.node.from) + (closed ? 0 : context.unit);\n },\n \"JSXOpenTag JSXSelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n \"Block ClassBody SwitchBody EnumBody ObjectExpression ArrayExpression ObjectType\": foldInside,\n BlockComment(tree) { return { from: tree.from + 2, to: tree.to - 2 }; },\n JSXElement(tree) {\n let open = tree.firstChild;\n if (!open || open.name == \"JSXSelfClosingTag\")\n return null;\n let close = tree.lastChild;\n return { from: open.to, to: close.type.isError ? tree.to : close.from };\n },\n \"JSXSelfClosingTag JSXOpenTag\"(tree) {\n var _a;\n let name = (_a = tree.firstChild) === null || _a === void 0 ? void 0 : _a.nextSibling, close = tree.lastChild;\n if (!name || name.type.isError)\n return null;\n return { from: name.to, to: close.type.isError ? tree.to : close.from };\n }\n })\n ]\n }),\n languageData: {\n closeBrackets: { brackets: [\"(\", \"[\", \"{\", \"'\", '\"', \"`\"] },\n commentTokens: { line: \"//\", block: { open: \"/*\", close: \"*/\" } },\n indentOnInput: /^\\s*(?:case |default:|\\{|\\}|<\\/)$/,\n wordChars: \"$\"\n }\n});\nconst jsxSublanguage = {\n test: node => /^JSX/.test(node.name),\n facet: /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"{/*\", close: \"*/}\" } } })\n};\n/**\nA language provider for TypeScript.\n*/\nconst typescriptLanguage = /*@__PURE__*/javascriptLanguage.configure({ dialect: \"ts\" }, \"typescript\");\n/**\nLanguage provider for JSX.\n*/\nconst jsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n});\n/**\nLanguage provider for JSX + TypeScript.\n*/\nconst tsxLanguage = /*@__PURE__*/javascriptLanguage.configure({\n dialect: \"jsx ts\",\n props: [/*@__PURE__*/sublanguageProp.add(n => n.isTop ? [jsxSublanguage] : undefined)]\n}, \"typescript\");\nlet kwCompletion = (name) => ({ label: name, type: \"keyword\" });\nconst keywords = /*@__PURE__*/\"break case const continue default delete export extends false finally in instanceof let new return static super switch this throw true typeof var yield\".split(\" \").map(kwCompletion);\nconst typescriptKeywords = /*@__PURE__*/keywords.concat(/*@__PURE__*/[\"declare\", \"implements\", \"private\", \"protected\", \"public\"].map(kwCompletion));\n/**\nJavaScript support. Includes [snippet](https://codemirror.net/6/docs/ref/#lang-javascript.snippets)\nand local variable completion.\n*/\nfunction javascript(config = {}) {\n let lang = config.jsx ? (config.typescript ? tsxLanguage : jsxLanguage)\n : config.typescript ? typescriptLanguage : javascriptLanguage;\n let completions = config.typescript ? typescriptSnippets.concat(typescriptKeywords) : snippets.concat(keywords);\n return new LanguageSupport(lang, [\n javascriptLanguage.data.of({\n autocomplete: ifNotIn(dontComplete, completeFromList(completions))\n }),\n javascriptLanguage.data.of({\n autocomplete: localCompletionSource\n }),\n config.jsx ? autoCloseTags : [],\n ]);\n}\nfunction findOpenTag(node) {\n for (;;) {\n if (node.name == \"JSXOpenTag\" || node.name == \"JSXSelfClosingTag\" || node.name == \"JSXFragmentTag\")\n return node;\n if (node.name == \"JSXEscape\" || !node.parent)\n return null;\n node = node.parent;\n }\n}\nfunction elementName(doc, tree, max = doc.length) {\n for (let ch = tree === null || tree === void 0 ? void 0 : tree.firstChild; ch; ch = ch.nextSibling) {\n if (ch.name == \"JSXIdentifier\" || ch.name == \"JSXBuiltin\" || ch.name == \"JSXNamespacedName\" ||\n ch.name == \"JSXMemberExpression\")\n return doc.sliceString(ch.from, Math.min(ch.to, max));\n }\n return \"\";\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\n/**\nExtension that will automatically insert JSX close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, defaultInsert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly ||\n from != to || (text != \">\" && text != \"/\") ||\n !javascriptLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = defaultInsert(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a;\n let { head } = range, around = syntaxTree(state).resolveInner(head - 1, -1), name;\n if (around.name == \"JSXStartTag\")\n around = around.parent;\n if (state.doc.sliceString(head - 1, head) != text || around.name == \"JSXAttributeValue\" && around.to > head) ;\n else if (text == \">\" && around.name == \"JSXFragmentTag\") {\n return { range, changes: { from: head, insert: `</>` } };\n }\n else if (text == \"/\" && around.name == \"JSXStartCloseTag\") {\n let empty = around.parent, base = empty.parent;\n if (base && empty.from == head - 2 &&\n ((name = elementName(state.doc, base.firstChild, head)) || ((_a = base.firstChild) === null || _a === void 0 ? void 0 : _a.name) == \"JSXFragmentTag\")) {\n let insert = `${name}>`;\n return { range: EditorSelection.cursor(head + insert.length, -1), changes: { from: head, insert } };\n }\n }\n else if (text == \">\") {\n let openTag = findOpenTag(around);\n if (openTag && openTag.name == \"JSXOpenTag\" &&\n !/^\\/?>|^<\\//.test(state.doc.sliceString(head, head + 2)) &&\n (name = elementName(state.doc, openTag, head)))\n return { range, changes: { from: head, insert: `</${name}>` } };\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, { userEvent: \"input.complete\", scrollIntoView: true })\n ]);\n return true;\n});\n\n/**\nConnects an [ESLint](https://eslint.org/) linter to CodeMirror's\n[lint](https://codemirror.net/6/docs/ref/#lint) integration. `eslint` should be an instance of the\n[`Linter`](https://eslint.org/docs/developer-guide/nodejs-api#linter)\nclass, and `config` an optional ESLint configuration. The return\nvalue of this function can be passed to [`linter`](https://codemirror.net/6/docs/ref/#lint.linter)\nto create a JavaScript linting extension.\n\nNote that ESLint targets node, and is tricky to run in the\nbrowser. The\n[eslint-linter-browserify](https://github.com/UziTech/eslint-linter-browserify)\npackage may help with that (see\n[example](https://github.com/UziTech/eslint-linter-browserify/blob/master/example/script.js)).\n*/\nfunction esLint(eslint, config) {\n if (!config) {\n config = {\n parserOptions: { ecmaVersion: 2019, sourceType: \"module\" },\n env: { browser: true, node: true, es6: true, es2015: true, es2017: true, es2020: true },\n rules: {}\n };\n eslint.getRules().forEach((desc, name) => {\n var _a;\n if ((_a = desc.meta.docs) === null || _a === void 0 ? void 0 : _a.recommended)\n config.rules[name] = 2;\n });\n }\n return (view) => {\n let { state } = view, found = [];\n for (let { from, to } of javascriptLanguage.findRegions(state)) {\n let fromLine = state.doc.lineAt(from), offset = { line: fromLine.number - 1, col: from - fromLine.from, pos: from };\n for (let d of eslint.verify(state.sliceDoc(from, to), config))\n found.push(translateDiagnostic(d, state.doc, offset));\n }\n return found;\n };\n}\nfunction mapPos(line, col, doc, offset) {\n return doc.line(line + offset.line).from + col + (line == 1 ? offset.col - 1 : -1);\n}\nfunction translateDiagnostic(input, doc, offset) {\n let start = mapPos(input.line, input.column, doc, offset);\n let result = {\n from: start,\n to: input.endLine != null && input.endColumn != 1 ? mapPos(input.endLine, input.endColumn, doc, offset) : start,\n message: input.message,\n source: input.ruleId ? \"eslint:\" + input.ruleId : \"eslint\",\n severity: input.severity == 1 ? \"warning\" : \"error\",\n };\n if (input.fix) {\n let { range, text } = input.fix, from = range[0] + offset.pos - start, to = range[1] + offset.pos - start;\n result.actions = [{\n name: \"fix\",\n apply(view, start) {\n view.dispatch({ changes: { from: start + from, to: start + to, insert: text }, scrollIntoView: true });\n }\n }];\n }\n return result;\n}\n\nexport { autoCloseTags, completionPath, esLint, javascript, javascriptLanguage, jsxLanguage, localCompletionSource, scopeCompletionSource, snippets, tsxLanguage, typescriptLanguage, typescriptSnippets };\n","import { parser, configureNesting } from '@lezer/html';\nimport { cssLanguage, css } from '@codemirror/lang-css';\nimport { javascriptLanguage, typescriptLanguage, jsxLanguage, tsxLanguage, javascript } from '@codemirror/lang-javascript';\nimport { EditorView } from '@codemirror/view';\nimport { EditorSelection } from '@codemirror/state';\nimport { syntaxTree, LRLanguage, indentNodeProp, foldNodeProp, bracketMatchingHandle, LanguageSupport } from '@codemirror/language';\n\nconst Targets = [\"_blank\", \"_self\", \"_top\", \"_parent\"];\nconst Charsets = [\"ascii\", \"utf-8\", \"utf-16\", \"latin1\", \"latin1\"];\nconst Methods = [\"get\", \"post\", \"put\", \"delete\"];\nconst Encs = [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"];\nconst Bool = [\"true\", \"false\"];\nconst S = {}; // Empty tag spec\nconst Tags = {\n a: {\n attrs: {\n href: null, ping: null, type: null,\n media: null,\n target: Targets,\n hreflang: null\n }\n },\n abbr: S,\n address: S,\n area: {\n attrs: {\n alt: null, coords: null, href: null, target: null, ping: null,\n media: null, hreflang: null, type: null,\n shape: [\"default\", \"rect\", \"circle\", \"poly\"]\n }\n },\n article: S,\n aside: S,\n audio: {\n attrs: {\n src: null, mediagroup: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"none\", \"metadata\", \"auto\"],\n autoplay: [\"autoplay\"],\n loop: [\"loop\"],\n controls: [\"controls\"]\n }\n },\n b: S,\n base: { attrs: { href: null, target: Targets } },\n bdi: S,\n bdo: S,\n blockquote: { attrs: { cite: null } },\n body: S,\n br: S,\n button: {\n attrs: {\n form: null, formaction: null, name: null, value: null,\n autofocus: [\"autofocus\"],\n disabled: [\"autofocus\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n type: [\"submit\", \"reset\", \"button\"]\n }\n },\n canvas: { attrs: { width: null, height: null } },\n caption: S,\n center: S,\n cite: S,\n code: S,\n col: { attrs: { span: null } },\n colgroup: { attrs: { span: null } },\n command: {\n attrs: {\n type: [\"command\", \"checkbox\", \"radio\"],\n label: null, icon: null, radiogroup: null, command: null, title: null,\n disabled: [\"disabled\"],\n checked: [\"checked\"]\n }\n },\n data: { attrs: { value: null } },\n datagrid: { attrs: { disabled: [\"disabled\"], multiple: [\"multiple\"] } },\n datalist: { attrs: { data: null } },\n dd: S,\n del: { attrs: { cite: null, datetime: null } },\n details: { attrs: { open: [\"open\"] } },\n dfn: S,\n div: S,\n dl: S,\n dt: S,\n em: S,\n embed: { attrs: { src: null, type: null, width: null, height: null } },\n eventsource: { attrs: { src: null } },\n fieldset: { attrs: { disabled: [\"disabled\"], form: null, name: null } },\n figcaption: S,\n figure: S,\n footer: S,\n form: {\n attrs: {\n action: null, name: null,\n \"accept-charset\": Charsets,\n autocomplete: [\"on\", \"off\"],\n enctype: Encs,\n method: Methods,\n novalidate: [\"novalidate\"],\n target: Targets\n }\n },\n h1: S, h2: S, h3: S, h4: S, h5: S, h6: S,\n head: {\n children: [\"title\", \"base\", \"link\", \"style\", \"meta\", \"script\", \"noscript\", \"command\"]\n },\n header: S,\n hgroup: S,\n hr: S,\n html: {\n attrs: { manifest: null }\n },\n i: S,\n iframe: {\n attrs: {\n src: null, srcdoc: null, name: null, width: null, height: null,\n sandbox: [\"allow-top-navigation\", \"allow-same-origin\", \"allow-forms\", \"allow-scripts\"],\n seamless: [\"seamless\"]\n }\n },\n img: {\n attrs: {\n alt: null, src: null, ismap: null, usemap: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"]\n }\n },\n input: {\n attrs: {\n alt: null, dirname: null, form: null, formaction: null,\n height: null, list: null, max: null, maxlength: null, min: null,\n name: null, pattern: null, placeholder: null, size: null, src: null,\n step: null, value: null, width: null,\n accept: [\"audio/*\", \"video/*\", \"image/*\"],\n autocomplete: [\"on\", \"off\"],\n autofocus: [\"autofocus\"],\n checked: [\"checked\"],\n disabled: [\"disabled\"],\n formenctype: Encs,\n formmethod: Methods,\n formnovalidate: [\"novalidate\"],\n formtarget: Targets,\n multiple: [\"multiple\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n type: [\"hidden\", \"text\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\",\n \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\",\n \"file\", \"submit\", \"image\", \"reset\", \"button\"]\n }\n },\n ins: { attrs: { cite: null, datetime: null } },\n kbd: S,\n keygen: {\n attrs: {\n challenge: null, form: null, name: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n keytype: [\"RSA\"]\n }\n },\n label: { attrs: { for: null, form: null } },\n legend: S,\n li: { attrs: { value: null } },\n link: {\n attrs: {\n href: null, type: null,\n hreflang: null,\n media: null,\n sizes: [\"all\", \"16x16\", \"16x16 32x32\", \"16x16 32x32 64x64\"]\n }\n },\n map: { attrs: { name: null } },\n mark: S,\n menu: { attrs: { label: null, type: [\"list\", \"context\", \"toolbar\"] } },\n meta: {\n attrs: {\n content: null,\n charset: Charsets,\n name: [\"viewport\", \"application-name\", \"author\", \"description\", \"generator\", \"keywords\"],\n \"http-equiv\": [\"content-language\", \"content-type\", \"default-style\", \"refresh\"]\n }\n },\n meter: { attrs: { value: null, min: null, low: null, high: null, max: null, optimum: null } },\n nav: S,\n noscript: S,\n object: {\n attrs: {\n data: null, type: null, name: null, usemap: null, form: null, width: null, height: null,\n typemustmatch: [\"typemustmatch\"]\n }\n },\n ol: { attrs: { reversed: [\"reversed\"], start: null, type: [\"1\", \"a\", \"A\", \"i\", \"I\"] },\n children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n optgroup: { attrs: { disabled: [\"disabled\"], label: null } },\n option: { attrs: { disabled: [\"disabled\"], label: null, selected: [\"selected\"], value: null } },\n output: { attrs: { for: null, form: null, name: null } },\n p: S,\n param: { attrs: { name: null, value: null } },\n pre: S,\n progress: { attrs: { value: null, max: null } },\n q: { attrs: { cite: null } },\n rp: S,\n rt: S,\n ruby: S,\n samp: S,\n script: {\n attrs: {\n type: [\"text/javascript\"],\n src: null,\n async: [\"async\"],\n defer: [\"defer\"],\n charset: Charsets\n }\n },\n section: S,\n select: {\n attrs: {\n form: null, name: null, size: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n multiple: [\"multiple\"]\n }\n },\n slot: { attrs: { name: null } },\n small: S,\n source: { attrs: { src: null, type: null, media: null } },\n span: S,\n strong: S,\n style: {\n attrs: {\n type: [\"text/css\"],\n media: null,\n scoped: null\n }\n },\n sub: S,\n summary: S,\n sup: S,\n table: S,\n tbody: S,\n td: { attrs: { colspan: null, rowspan: null, headers: null } },\n template: S,\n textarea: {\n attrs: {\n dirname: null, form: null, maxlength: null, name: null, placeholder: null,\n rows: null, cols: null,\n autofocus: [\"autofocus\"],\n disabled: [\"disabled\"],\n readonly: [\"readonly\"],\n required: [\"required\"],\n wrap: [\"soft\", \"hard\"]\n }\n },\n tfoot: S,\n th: { attrs: { colspan: null, rowspan: null, headers: null, scope: [\"row\", \"col\", \"rowgroup\", \"colgroup\"] } },\n thead: S,\n time: { attrs: { datetime: null } },\n title: S,\n tr: S,\n track: {\n attrs: {\n src: null, label: null, default: null,\n kind: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n srclang: null\n }\n },\n ul: { children: [\"li\", \"script\", \"template\", \"ul\", \"ol\"] },\n var: S,\n video: {\n attrs: {\n src: null, poster: null, width: null, height: null,\n crossorigin: [\"anonymous\", \"use-credentials\"],\n preload: [\"auto\", \"metadata\", \"none\"],\n autoplay: [\"autoplay\"],\n mediagroup: [\"movie\"],\n muted: [\"muted\"],\n controls: [\"controls\"]\n }\n },\n wbr: S\n};\nconst GlobalAttrs = {\n accesskey: null,\n class: null,\n contenteditable: Bool,\n contextmenu: null,\n dir: [\"ltr\", \"rtl\", \"auto\"],\n draggable: [\"true\", \"false\", \"auto\"],\n dropzone: [\"copy\", \"move\", \"link\", \"string:\", \"file:\"],\n hidden: [\"hidden\"],\n id: null,\n inert: [\"inert\"],\n itemid: null,\n itemprop: null,\n itemref: null,\n itemscope: [\"itemscope\"],\n itemtype: null,\n lang: [\"ar\", \"bn\", \"de\", \"en-GB\", \"en-US\", \"es\", \"fr\", \"hi\", \"id\", \"ja\", \"pa\", \"pt\", \"ru\", \"tr\", \"zh\"],\n spellcheck: Bool,\n autocorrect: Bool,\n autocapitalize: Bool,\n style: null,\n tabindex: null,\n title: null,\n translate: [\"yes\", \"no\"],\n rel: [\"stylesheet\", \"alternate\", \"author\", \"bookmark\", \"help\", \"license\", \"next\", \"nofollow\", \"noreferrer\", \"prefetch\", \"prev\", \"search\", \"tag\"],\n role: /*@__PURE__*/\"alert application article banner button cell checkbox complementary contentinfo dialog document feed figure form grid gridcell heading img list listbox listitem main navigation region row rowgroup search switch tab table tabpanel textbox timer\".split(\" \"),\n \"aria-activedescendant\": null,\n \"aria-atomic\": Bool,\n \"aria-autocomplete\": [\"inline\", \"list\", \"both\", \"none\"],\n \"aria-busy\": Bool,\n \"aria-checked\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-controls\": null,\n \"aria-describedby\": null,\n \"aria-disabled\": Bool,\n \"aria-dropeffect\": null,\n \"aria-expanded\": [\"true\", \"false\", \"undefined\"],\n \"aria-flowto\": null,\n \"aria-grabbed\": [\"true\", \"false\", \"undefined\"],\n \"aria-haspopup\": Bool,\n \"aria-hidden\": Bool,\n \"aria-invalid\": [\"true\", \"false\", \"grammar\", \"spelling\"],\n \"aria-label\": null,\n \"aria-labelledby\": null,\n \"aria-level\": null,\n \"aria-live\": [\"off\", \"polite\", \"assertive\"],\n \"aria-multiline\": Bool,\n \"aria-multiselectable\": Bool,\n \"aria-owns\": null,\n \"aria-posinset\": null,\n \"aria-pressed\": [\"true\", \"false\", \"mixed\", \"undefined\"],\n \"aria-readonly\": Bool,\n \"aria-relevant\": null,\n \"aria-required\": Bool,\n \"aria-selected\": [\"true\", \"false\", \"undefined\"],\n \"aria-setsize\": null,\n \"aria-sort\": [\"ascending\", \"descending\", \"none\", \"other\"],\n \"aria-valuemax\": null,\n \"aria-valuemin\": null,\n \"aria-valuenow\": null,\n \"aria-valuetext\": null\n};\nconst eventAttributes = /*@__PURE__*/(\"beforeunload copy cut dragstart dragover dragleave dragenter dragend \" +\n \"drag paste focus blur change click load mousedown mouseenter mouseleave \" +\n \"mouseup keydown keyup resize scroll unload\").split(\" \").map(n => \"on\" + n);\nfor (let a of eventAttributes)\n GlobalAttrs[a] = null;\nclass Schema {\n constructor(extraTags, extraAttrs) {\n this.tags = { ...Tags, ...extraTags };\n this.globalAttrs = { ...GlobalAttrs, ...extraAttrs };\n this.allTags = Object.keys(this.tags);\n this.globalAttrNames = Object.keys(this.globalAttrs);\n }\n}\nSchema.default = /*@__PURE__*/new Schema;\nfunction elementName(doc, tree, max = doc.length) {\n if (!tree)\n return \"\";\n let tag = tree.firstChild;\n let name = tag && tag.getChild(\"TagName\");\n return name ? doc.sliceString(name.from, Math.min(name.to, max)) : \"\";\n}\nfunction findParentElement(tree, skip = false) {\n for (; tree; tree = tree.parent)\n if (tree.name == \"Element\") {\n if (skip)\n skip = false;\n else\n return tree;\n }\n return null;\n}\nfunction allowedChildren(doc, tree, schema) {\n let parentInfo = schema.tags[elementName(doc, findParentElement(tree))];\n return (parentInfo === null || parentInfo === void 0 ? void 0 : parentInfo.children) || schema.allTags;\n}\nfunction openTags(doc, tree) {\n let open = [];\n for (let parent = findParentElement(tree); parent && !parent.type.isTop; parent = findParentElement(parent.parent)) {\n let tagName = elementName(doc, parent);\n if (tagName && parent.lastChild.name == \"CloseTag\")\n break;\n if (tagName && open.indexOf(tagName) < 0 && (tree.name == \"EndTag\" || tree.from >= parent.firstChild.to))\n open.push(tagName);\n }\n return open;\n}\nconst identifier = /^[:\\-\\.\\w\\u00b7-\\uffff]*$/;\nfunction completeTag(state, schema, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n let parent = findParentElement(tree, tree.name == \"StartTag\" || tree.name == \"TagName\");\n return { from, to,\n options: allowedChildren(state.doc, parent, schema).map(tagName => ({ label: tagName, type: \"type\" })).concat(openTags(state.doc, tree).map((tag, i) => ({ label: \"/\" + tag, apply: \"/\" + tag + end,\n type: \"type\", boost: 99 - i }))),\n validFor: /^\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeCloseTag(state, tree, from, to) {\n let end = /\\s*>/.test(state.sliceDoc(to, to + 5)) ? \"\" : \">\";\n return { from, to,\n options: openTags(state.doc, tree).map((tag, i) => ({ label: tag, apply: tag + end, type: \"type\", boost: 99 - i })),\n validFor: identifier };\n}\nfunction completeStartTag(state, schema, tree, pos) {\n let options = [], level = 0;\n for (let tagName of allowedChildren(state.doc, tree, schema))\n options.push({ label: \"<\" + tagName, type: \"type\" });\n for (let open of openTags(state.doc, tree))\n options.push({ label: \"</\" + open + \">\", type: \"type\", boost: 99 - level++ });\n return { from: pos, to: pos, options, validFor: /^<\\/?[:\\-\\.\\w\\u00b7-\\uffff]*$/ };\n}\nfunction completeAttrName(state, schema, tree, from, to) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n let localAttrs = info && info.attrs ? Object.keys(info.attrs) : [];\n let names = info && info.globalAttrs === false ? localAttrs\n : localAttrs.length ? localAttrs.concat(schema.globalAttrNames) : schema.globalAttrNames;\n return { from, to,\n options: names.map(attrName => ({ label: attrName, type: \"property\" })),\n validFor: identifier };\n}\nfunction completeAttrValue(state, schema, tree, from, to) {\n var _a;\n let nameNode = (_a = tree.parent) === null || _a === void 0 ? void 0 : _a.getChild(\"AttributeName\");\n let options = [], token = undefined;\n if (nameNode) {\n let attrName = state.sliceDoc(nameNode.from, nameNode.to);\n let attrs = schema.globalAttrs[attrName];\n if (!attrs) {\n let elt = findParentElement(tree), info = elt ? schema.tags[elementName(state.doc, elt)] : null;\n attrs = (info === null || info === void 0 ? void 0 : info.attrs) && info.attrs[attrName];\n }\n if (attrs) {\n let base = state.sliceDoc(from, to).toLowerCase(), quoteStart = '\"', quoteEnd = '\"';\n if (/^['\"]/.test(base)) {\n token = base[0] == '\"' ? /^[^\"]*$/ : /^[^']*$/;\n quoteStart = \"\";\n quoteEnd = state.sliceDoc(to, to + 1) == base[0] ? \"\" : base[0];\n base = base.slice(1);\n from++;\n }\n else {\n token = /^[^\\s<>='\"]*$/;\n }\n for (let value of attrs)\n options.push({ label: value, apply: quoteStart + value + quoteEnd, type: \"constant\" });\n }\n }\n return { from, to, options, validFor: token };\n}\nfunction htmlCompletionFor(schema, context) {\n let { state, pos } = context, tree = syntaxTree(state).resolveInner(pos, -1), around = tree.resolve(pos);\n for (let scan = pos, before; around == tree && (before = tree.childBefore(scan));) {\n let last = before.lastChild;\n if (!last || !last.type.isError || last.from < last.to)\n break;\n around = tree = before;\n scan = last.from;\n }\n if (tree.name == \"TagName\") {\n return tree.parent && /CloseTag$/.test(tree.parent.name) ? completeCloseTag(state, tree, tree.from, pos)\n : completeTag(state, schema, tree, tree.from, pos);\n }\n else if (tree.name == \"StartTag\" || tree.name == \"IncompleteTag\") {\n return completeTag(state, schema, tree, pos, pos);\n }\n else if (tree.name == \"StartCloseTag\" || tree.name == \"IncompleteCloseTag\") {\n return completeCloseTag(state, tree, pos, pos);\n }\n else if (tree.name == \"OpenTag\" || tree.name == \"SelfClosingTag\" || tree.name == \"AttributeName\") {\n return completeAttrName(state, schema, tree, tree.name == \"AttributeName\" ? tree.from : pos, pos);\n }\n else if (tree.name == \"Is\" || tree.name == \"AttributeValue\" || tree.name == \"UnquotedAttributeValue\") {\n return completeAttrValue(state, schema, tree, tree.name == \"Is\" ? pos : tree.from, pos);\n }\n else if (context.explicit && (around.name == \"Element\" || around.name == \"Text\" || around.name == \"Document\")) {\n return completeStartTag(state, schema, tree, pos);\n }\n else {\n return null;\n }\n}\n/**\nHTML tag completion. Opens and closes tags and attributes in a\ncontext-aware way.\n*/\nfunction htmlCompletionSource(context) {\n return htmlCompletionFor(Schema.default, context);\n}\n/**\nCreate a completion source for HTML extended with additional tags\nor attributes.\n*/\nfunction htmlCompletionSourceWith(config) {\n let { extraTags, extraGlobalAttributes: extraAttrs } = config;\n let schema = extraAttrs || extraTags ? new Schema(extraTags, extraAttrs) : Schema.default;\n return (context) => htmlCompletionFor(schema, context);\n}\n\nconst jsonParser = /*@__PURE__*/javascriptLanguage.parser.configure({ top: \"SingleExpression\" });\nconst defaultNesting = [\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript\" || attrs.lang == \"ts\",\n parser: typescriptLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/babel\" || attrs.type == \"text/jsx\",\n parser: jsxLanguage.parser },\n { tag: \"script\",\n attrs: attrs => attrs.type == \"text/typescript-jsx\",\n parser: tsxLanguage.parser },\n { tag: \"script\",\n attrs(attrs) {\n return /^(importmap|speculationrules|application\\/(.+\\+)?json)$/i.test(attrs.type);\n },\n parser: jsonParser },\n { tag: \"script\",\n attrs(attrs) {\n return !attrs.type || /^(?:text|application)\\/(?:x-)?(?:java|ecma)script$|^module$|^$/i.test(attrs.type);\n },\n parser: javascriptLanguage.parser },\n { tag: \"style\",\n attrs(attrs) {\n return (!attrs.lang || attrs.lang == \"css\") && (!attrs.type || /^(text\\/)?(x-)?(stylesheet|css)$/i.test(attrs.type));\n },\n parser: cssLanguage.parser }\n];\nconst defaultAttrs = /*@__PURE__*/[\n { name: \"style\",\n parser: /*@__PURE__*/cssLanguage.parser.configure({ top: \"Styles\" }) }\n].concat(/*@__PURE__*/eventAttributes.map(name => ({ name, parser: javascriptLanguage.parser })));\nconst htmlPlain = /*@__PURE__*/LRLanguage.define({\n name: \"html\",\n parser: /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/indentNodeProp.add({\n Element(context) {\n let after = /^(\\s*)(<\\/)?/.exec(context.textAfter);\n if (context.node.to <= context.pos + after[0].length)\n return context.continue();\n return context.lineIndent(context.node.from) + (after[2] ? 0 : context.unit);\n },\n \"OpenTag CloseTag SelfClosingTag\"(context) {\n return context.column(context.node.from) + context.unit;\n },\n Document(context) {\n if (context.pos + /\\s*/.exec(context.textAfter)[0].length < context.node.to)\n return context.continue();\n let endElt = null, close;\n for (let cur = context.node;;) {\n let last = cur.lastChild;\n if (!last || last.name != \"Element\" || last.to != cur.to)\n break;\n endElt = cur = last;\n }\n if (endElt && !((close = endElt.lastChild) && (close.name == \"CloseTag\" || close.name == \"SelfClosingTag\")))\n return context.lineIndent(endElt.from) + context.unit;\n return null;\n }\n }),\n /*@__PURE__*/foldNodeProp.add({\n Element(node) {\n let first = node.firstChild, last = node.lastChild;\n if (!first || first.name != \"OpenTag\")\n return null;\n return { from: first.to, to: last.name == \"CloseTag\" ? last.from : node.to };\n }\n }),\n /*@__PURE__*/bracketMatchingHandle.add({\n \"OpenTag CloseTag\": node => node.getChild(\"TagName\")\n })\n ]\n }),\n languageData: {\n commentTokens: { block: { open: \"<!--\", close: \"-->\" } },\n indentOnInput: /^\\s*<\\/\\w+\\W$/,\n wordChars: \"-_\"\n }\n});\n/**\nA language provider based on the [Lezer HTML\nparser](https://code.haverbeke.berlin/lezer/html), extended with the\nJavaScript and CSS parsers to parse the content of `<script>` and\n`<style>` tags.\n*/\nconst htmlLanguage = /*@__PURE__*/htmlPlain.configure({\n wrap: /*@__PURE__*/configureNesting(defaultNesting, defaultAttrs)\n});\n/**\nLanguage support for HTML, including\n[`htmlCompletion`](https://codemirror.net/6/docs/ref/#lang-html.htmlCompletion) and JavaScript and\nCSS support extensions.\n*/\nfunction html(config = {}) {\n let dialect = \"\", wrap;\n if (config.matchClosingTags === false)\n dialect = \"noMatch\";\n if (config.selfClosingTags === true)\n dialect = (dialect ? dialect + \" \" : \"\") + \"selfClosing\";\n if (config.nestedLanguages && config.nestedLanguages.length ||\n config.nestedAttributes && config.nestedAttributes.length)\n wrap = configureNesting((config.nestedLanguages || []).concat(defaultNesting), (config.nestedAttributes || []).concat(defaultAttrs));\n let lang = wrap ? htmlPlain.configure({ wrap, dialect }) : dialect ? htmlLanguage.configure({ dialect }) : htmlLanguage;\n return new LanguageSupport(lang, [\n htmlLanguage.data.of({ autocomplete: htmlCompletionSourceWith(config) }),\n config.autoCloseTags !== false ? autoCloseTags : [],\n javascript().support,\n css().support\n ]);\n}\nconst selfClosers = /*@__PURE__*/new Set(/*@__PURE__*/\"area base br col command embed frame hr img input keygen link meta param source track wbr menuitem\".split(\" \"));\nfunction isClosed(doc, elt, name) {\n var _a;\n for (;;) {\n if (((_a = elt.lastChild) === null || _a === void 0 ? void 0 : _a.name) != \"CloseTag\")\n return false;\n let next = elt.parent;\n if (!next || elementName(doc, next) != name)\n return true;\n elt = next;\n }\n}\n/**\nExtension that will automatically insert close tags when a `>` or\n`/` is typed.\n*/\nconst autoCloseTags = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, text, insertTransaction) => {\n if (view.composing || view.state.readOnly || from != to || (text != \">\" && text != \"/\") ||\n !htmlLanguage.isActiveAt(view.state, from, -1))\n return false;\n let base = insertTransaction(), { state } = base;\n let closeTags = state.changeByRange(range => {\n var _a;\n let didType = state.doc.sliceString(range.from - 1, range.to) == text;\n let { head } = range, after = syntaxTree(state).resolveInner(head, -1), name;\n if (didType && text == \">\" && after.name == \"EndTag\") {\n let tag = after.parent;\n if ((name = elementName(state.doc, tag.parent, head)) &&\n !selfClosers.has(name) && !isClosed(state.doc, tag.parent, name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `</${name}>`;\n return { range, changes: { from: head, to, insert } };\n }\n }\n else if (didType && text == \"/\" && after.name == \"IncompleteCloseTag\") {\n let tag = after.parent;\n if (after.from == head - 2 && ((_a = tag.lastChild) === null || _a === void 0 ? void 0 : _a.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag, head)) && !selfClosers.has(name)) {\n let to = head + (state.doc.sliceString(head, head + 1) === \">\" ? 1 : 0);\n let insert = `${name}>`;\n return {\n range: EditorSelection.cursor(head + insert.length, -1),\n changes: { from: head, to, insert }\n };\n }\n }\n return { range };\n });\n if (closeTags.changes.empty)\n return false;\n view.dispatch([\n base,\n state.update(closeTags, {\n userEvent: \"input.complete\",\n scrollIntoView: true\n })\n ]);\n return true;\n});\n\nexport { autoCloseTags, html, htmlCompletionSource, htmlCompletionSourceWith, htmlLanguage };\n","import { EditorSelection, countColumn, Prec, EditorState } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\nimport { defineLanguageFacet, foldNodeProp, indentNodeProp, languageDataProp, foldService, syntaxTree, Language, LanguageDescription, ParseContext, indentUnit, LanguageSupport } from '@codemirror/language';\nimport { CompletionContext } from '@codemirror/autocomplete';\nimport { parser, GFM, Subscript, Superscript, Emoji, MarkdownParser, parseCode } from '@lezer/markdown';\nimport { html, htmlCompletionSource } from '@codemirror/lang-html';\nimport { NodeProp } from '@lezer/common';\n\nconst data = /*@__PURE__*/defineLanguageFacet({ commentTokens: { block: { open: \"<!--\", close: \"-->\" } } });\nconst headingProp = /*@__PURE__*/new NodeProp();\nconst commonmark = /*@__PURE__*/parser.configure({\n props: [\n /*@__PURE__*/foldNodeProp.add(type => {\n return !type.is(\"Block\") || type.is(\"Document\") || isHeading(type) != null || isList(type) ? undefined\n : (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to });\n }),\n /*@__PURE__*/headingProp.add(isHeading),\n /*@__PURE__*/indentNodeProp.add({\n Document: () => null\n }),\n /*@__PURE__*/languageDataProp.add({\n Document: data\n })\n ]\n});\nfunction isHeading(type) {\n let match = /^(?:ATX|Setext)Heading(\\d)$/.exec(type.name);\n return match ? +match[1] : undefined;\n}\nfunction isList(type) {\n return type.name == \"OrderedList\" || type.name == \"BulletList\";\n}\nfunction findSectionEnd(headerNode, level) {\n let last = headerNode;\n for (;;) {\n let next = last.nextSibling, heading;\n if (!next || (heading = isHeading(next.type)) != null && heading <= level)\n break;\n last = next;\n }\n return last.to;\n}\nconst headerIndent = /*@__PURE__*/foldService.of((state, start, end) => {\n for (let node = syntaxTree(state).resolveInner(end, -1); node; node = node.parent) {\n if (node.from < start)\n break;\n let heading = node.type.prop(headingProp);\n if (heading == null)\n continue;\n let upto = findSectionEnd(node, heading);\n if (upto > end)\n return { from: end, to: upto };\n }\n return null;\n});\nfunction mkLang(parser) {\n return new Language(data, parser, [], \"markdown\");\n}\n/**\nLanguage support for strict CommonMark.\n*/\nconst commonmarkLanguage = /*@__PURE__*/mkLang(commonmark);\nconst extended = /*@__PURE__*/commonmark.configure([GFM, Subscript, Superscript, Emoji, {\n props: [\n /*@__PURE__*/foldNodeProp.add({\n Table: (tree, state) => ({ from: state.doc.lineAt(tree.from).to, to: tree.to })\n })\n ]\n }]);\n/**\nLanguage support for [GFM](https://github.github.com/gfm/) plus\nsubscript, superscript, and emoji syntax.\n*/\nconst markdownLanguage = /*@__PURE__*/mkLang(extended);\nfunction getCodeParser(languages, defaultLanguage) {\n return (info) => {\n if (info && languages) {\n let found = null;\n // Strip anything after whitespace\n info = /\\S*/.exec(info)[0];\n if (typeof languages == \"function\")\n found = languages(info);\n else\n found = LanguageDescription.matchLanguageName(languages, info, true);\n if (found instanceof LanguageDescription)\n return found.support ? found.support.language.parser : ParseContext.getSkippingParser(found.load());\n else if (found)\n return found.parser;\n }\n return defaultLanguage ? defaultLanguage.parser : null;\n };\n}\n\nclass Context {\n constructor(node, from, to, spaceBefore, spaceAfter, type, item) {\n this.node = node;\n this.from = from;\n this.to = to;\n this.spaceBefore = spaceBefore;\n this.spaceAfter = spaceAfter;\n this.type = type;\n this.item = item;\n }\n blank(maxWidth, trailing = true) {\n let result = this.spaceBefore + (this.node.name == \"Blockquote\" ? \">\" : \"\");\n if (maxWidth != null) {\n while (result.length < maxWidth)\n result += \" \";\n return result;\n }\n else {\n for (let i = this.to - this.from - result.length - this.spaceAfter.length; i > 0; i--)\n result += \" \";\n return result + (trailing ? this.spaceAfter : \"\");\n }\n }\n marker(doc, add) {\n let number = this.node.name == \"OrderedList\" ? String((+itemNumber(this.item, doc)[2] + add)) : \"\";\n return this.spaceBefore + number + this.type + this.spaceAfter;\n }\n}\nfunction getContext(node, doc) {\n let nodes = [], context = [];\n for (let cur = node; cur; cur = cur.parent) {\n if (cur.name == \"FencedCode\")\n return context;\n if (cur.name == \"ListItem\" || cur.name == \"Blockquote\")\n nodes.push(cur);\n }\n for (let i = nodes.length - 1; i >= 0; i--) {\n let node = nodes[i], match;\n let line = doc.lineAt(node.from), startPos = node.from - line.from;\n if (node.name == \"Blockquote\" && (match = /^ *>( ?)/.exec(line.text.slice(startPos)))) {\n context.push(new Context(node, startPos, startPos + match[0].length, \"\", match[1], \">\", null));\n }\n else if (node.name == \"ListItem\" && node.parent.name == \"OrderedList\" &&\n (match = /^( *)\\d+([.)])( *)/.exec(line.text.slice(startPos)))) {\n let after = match[3], len = match[0].length;\n if (after.length >= 4) {\n after = after.slice(0, after.length - 4);\n len -= 4;\n }\n context.push(new Context(node.parent, startPos, startPos + len, match[1], after, match[2], node));\n }\n else if (node.name == \"ListItem\" && node.parent.name == \"BulletList\" &&\n (match = /^( *)([-+*])( {1,4}\\[[ xX]\\])?( +)/.exec(line.text.slice(startPos)))) {\n let after = match[4], len = match[0].length;\n if (after.length > 4) {\n after = after.slice(0, after.length - 4);\n len -= 4;\n }\n let type = match[2];\n if (match[3])\n type += match[3].replace(/[xX]/, ' ');\n context.push(new Context(node.parent, startPos, startPos + len, match[1], after, type, node));\n }\n }\n return context;\n}\nfunction itemNumber(item, doc) {\n return /^(\\s*)(\\d+)(?=[.)])/.exec(doc.sliceString(item.from, item.from + 10));\n}\nfunction renumberList(after, doc, changes, offset = 0) {\n for (let prev = -1, node = after;;) {\n if (node.name == \"ListItem\") {\n let m = itemNumber(node, doc);\n let number = +m[2];\n if (prev >= 0) {\n if (number != prev + 1)\n return;\n changes.push({ from: node.from + m[1].length, to: node.from + m[0].length, insert: String(prev + 2 + offset) });\n }\n prev = number;\n }\n let next = node.nextSibling;\n if (!next)\n break;\n node = next;\n }\n}\nfunction normalizeIndent(content, state) {\n let blank = /^[ \\t]*/.exec(content)[0].length;\n if (!blank || state.facet(indentUnit) != \"\\t\")\n return content;\n let col = countColumn(content, 4, blank);\n let space = \"\";\n for (let i = col; i > 0;) {\n if (i >= 4) {\n space += \"\\t\";\n i -= 4;\n }\n else {\n space += \" \";\n i--;\n }\n }\n return space + content.slice(blank);\n}\n/**\nReturns a command like\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup),\nallowing further configuration.\n*/\nconst insertNewlineContinueMarkupCommand = (config = {}) => ({ state, dispatch }) => {\n let tree = syntaxTree(state), { doc } = state;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty || !markdownLanguage.isActiveAt(state, range.from, -1) && !markdownLanguage.isActiveAt(state, range.from, 1))\n return dont = { range };\n let pos = range.from, line = doc.lineAt(pos);\n let context = getContext(tree.resolveInner(pos, -1), doc);\n while (context.length && context[context.length - 1].from > pos - line.from)\n context.pop();\n if (!context.length)\n return dont = { range };\n let inner = context[context.length - 1];\n if (inner.to - inner.spaceAfter.length > pos - line.from)\n return dont = { range };\n let emptyLine = pos >= (inner.to - inner.spaceAfter.length) && !/\\S/.test(line.text.slice(inner.to));\n // Empty line in list\n if (inner.item && emptyLine) {\n if (inner.item.from < line.from && !/^[\\s>]*$/.test(line.text.slice(0, inner.to)))\n return dont = { range };\n let first = inner.node.firstChild, second = inner.node.getChild(\"ListItem\", \"ListItem\");\n // Not second item or blank line before: delete a level of markup\n if (first.to >= pos || second && second.to < pos ||\n line.from > 0 && !/[^\\s>]/.test(doc.lineAt(line.from - 1).text) ||\n config.nonTightLists === false) {\n let next = context.length > 1 ? context[context.length - 2] : null;\n let delTo, insert = \"\";\n if (next && next.item) { // Re-add marker for the list at the next level\n delTo = line.from + next.from;\n insert = next.marker(doc, 1);\n }\n else {\n delTo = line.from + (next ? next.to : 0);\n }\n let changes = [{ from: delTo, to: pos, insert }];\n if (inner.node.name == \"OrderedList\")\n renumberList(inner.item, doc, changes, -2);\n if (next && next.node.name == \"OrderedList\")\n renumberList(next.item, doc, changes);\n return { range: EditorSelection.cursor(delTo + insert.length), changes };\n }\n else { // Move second item down, making tight two-item list non-tight\n let insert = blankLine(context, state, line);\n return { range: EditorSelection.cursor(pos + insert.length + 1),\n changes: { from: line.from, insert: insert + state.lineBreak } };\n }\n }\n if (inner.node.name == \"Blockquote\" && emptyLine && line.from) {\n let prevLine = doc.lineAt(line.from - 1), quoted = />\\s*$/.exec(prevLine.text);\n // Two aligned empty quoted lines in a row\n if (quoted && quoted.index == inner.from) {\n let changes = state.changes([{ from: prevLine.from + quoted.index, to: prevLine.to },\n { from: line.from + inner.from, to: line.to }]);\n return { range: range.map(changes), changes };\n }\n }\n let changes = [];\n if (inner.node.name == \"OrderedList\")\n renumberList(inner.item, doc, changes);\n let continued = inner.item && inner.item.from < line.from;\n let insert = \"\";\n // If not dedented\n if (!continued || /^[\\s\\d.)\\-+*>]*/.exec(line.text)[0].length >= inner.to) {\n for (let i = 0, e = context.length - 1; i <= e; i++) {\n insert += i == e && !continued ? context[i].marker(doc, 1)\n : context[i].blank(i < e ? countColumn(line.text, 4, context[i + 1].from) - insert.length : null);\n }\n }\n let from = pos;\n while (from > line.from && /\\s/.test(line.text.charAt(from - line.from - 1)))\n from--;\n insert = normalizeIndent(insert, state);\n if (nonTightList(inner.node, state.doc))\n insert = blankLine(context, state, line) + state.lineBreak + insert;\n changes.push({ from, to: pos, insert: state.lineBreak + insert });\n return { range: EditorSelection.cursor(from + insert.length + 1), changes };\n });\n if (dont)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"input\" }));\n return true;\n};\n/**\nThis command, when invoked in Markdown context with cursor\nselection(s), will create a new line with the markup for\nblockquotes and lists that were active on the old line. If the\ncursor was directly after the end of the markup for the old line,\ntrailing whitespace and list markers are removed from that line.\n\nThe command does nothing in non-Markdown context, so it should\nnot be used as the only binding for Enter (even in a Markdown\ndocument, HTML and code regions might use a different language).\n*/\nconst insertNewlineContinueMarkup = /*@__PURE__*/insertNewlineContinueMarkupCommand();\nfunction isMark(node) {\n return node.name == \"QuoteMark\" || node.name == \"ListMark\";\n}\nfunction nonTightList(node, doc) {\n if (node.name != \"OrderedList\" && node.name != \"BulletList\")\n return false;\n let first = node.firstChild, second = node.getChild(\"ListItem\", \"ListItem\");\n if (!second)\n return false;\n let line1 = doc.lineAt(first.to), line2 = doc.lineAt(second.from);\n let empty = /^[\\s>]*$/.test(line1.text);\n return line1.number + (empty ? 0 : 1) < line2.number;\n}\nfunction blankLine(context, state, line) {\n let insert = \"\";\n for (let i = 0, e = context.length - 2; i <= e; i++) {\n insert += context[i].blank(i < e\n ? countColumn(line.text, 4, context[i + 1].from) - insert.length\n : null, i < e);\n }\n return normalizeIndent(insert, state);\n}\nfunction contextNodeForDelete(tree, pos) {\n let node = tree.resolveInner(pos, -1), scan = pos;\n if (isMark(node)) {\n scan = node.from;\n node = node.parent;\n }\n for (let prev; prev = node.childBefore(scan);) {\n if (isMark(prev)) {\n scan = prev.from;\n }\n else if (prev.name == \"OrderedList\" || prev.name == \"BulletList\") {\n node = prev.lastChild;\n scan = node.to;\n }\n else {\n break;\n }\n }\n return node;\n}\n/**\nThis command will, when invoked in a Markdown context with the\ncursor directly after list or blockquote markup, delete one level\nof markup. When the markup is for a list, it will be replaced by\nspaces on the first invocation (a further invocation will delete\nthe spaces), to make it easy to continue a list.\n\nWhen not after Markdown block markup, this command will return\nfalse, so it is intended to be bound alongside other deletion\ncommands, with a higher precedence than the more generic commands.\n*/\nconst deleteMarkupBackward = ({ state, dispatch }) => {\n let tree = syntaxTree(state);\n let dont = null, changes = state.changeByRange(range => {\n let pos = range.from, { doc } = state;\n if (range.empty && markdownLanguage.isActiveAt(state, range.from)) {\n let line = doc.lineAt(pos);\n let context = getContext(contextNodeForDelete(tree, pos), doc);\n if (context.length) {\n let inner = context[context.length - 1];\n let spaceEnd = inner.to - inner.spaceAfter.length + (inner.spaceAfter ? 1 : 0);\n // Delete extra trailing space after markup\n if (pos - line.from > spaceEnd && !/\\S/.test(line.text.slice(spaceEnd, pos - line.from)))\n return { range: EditorSelection.cursor(line.from + spaceEnd),\n changes: { from: line.from + spaceEnd, to: pos } };\n if (pos - line.from == spaceEnd &&\n // Only apply this if we're on the line that has the\n // construct's syntax, or there's only indentation in the\n // target range\n ((inner.item && line.from <= inner.item.from) || /^[\\s>]*$/.test(line.text.slice(0, inner.to)))) {\n let start = line.from + inner.from;\n // Replace a list item marker with blank space\n if (inner.item && inner.node.from < inner.item.from && /\\S/.test(line.text.slice(inner.from, inner.to))) {\n let insert = inner.blank(countColumn(line.text, 4, inner.to) - countColumn(line.text, 4, inner.from));\n if (start == line.from)\n insert = normalizeIndent(insert, state);\n return { range: EditorSelection.cursor(start + insert.length),\n changes: { from: start, to: line.from + inner.to, insert } };\n }\n // Delete one level of indentation\n if (start < pos)\n return { range: EditorSelection.cursor(start), changes: { from: start, to: pos } };\n }\n }\n }\n return dont = { range };\n });\n if (dont)\n return false;\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete\" }));\n return true;\n};\n\n/**\nA small keymap with Markdown-specific bindings. Binds Enter to\n[`insertNewlineContinueMarkup`](https://codemirror.net/6/docs/ref/#lang-markdown.insertNewlineContinueMarkup)\nand Backspace to\n[`deleteMarkupBackward`](https://codemirror.net/6/docs/ref/#lang-markdown.deleteMarkupBackward).\n*/\nconst markdownKeymap = [\n { key: \"Enter\", run: insertNewlineContinueMarkup },\n { key: \"Backspace\", run: deleteMarkupBackward }\n];\nconst htmlNoMatch = /*@__PURE__*/html({ matchClosingTags: false });\n/**\nMarkdown language support.\n*/\nfunction markdown(config = {}) {\n let { codeLanguages, defaultCodeLanguage, addKeymap = true, base: { parser } = commonmarkLanguage, completeHTMLTags = true, pasteURLAsLink: pasteURL = true, htmlTagLanguage = htmlNoMatch } = config;\n if (!(parser instanceof MarkdownParser))\n throw new RangeError(\"Base parser provided to `markdown` should be a Markdown parser\");\n let extensions = config.extensions ? [config.extensions] : [];\n let support = [htmlTagLanguage.support, headerIndent], defaultCode;\n if (pasteURL)\n support.push(pasteURLAsLink);\n if (defaultCodeLanguage instanceof LanguageSupport) {\n support.push(defaultCodeLanguage.support);\n defaultCode = defaultCodeLanguage.language;\n }\n else if (defaultCodeLanguage) {\n defaultCode = defaultCodeLanguage;\n }\n let codeParser = codeLanguages || defaultCode ? getCodeParser(codeLanguages, defaultCode) : undefined;\n extensions.push(parseCode({ codeParser, htmlParser: htmlTagLanguage.language.parser }));\n if (addKeymap)\n support.push(Prec.high(keymap.of(markdownKeymap)));\n let lang = mkLang(parser.configure(extensions));\n if (completeHTMLTags)\n support.push(lang.data.of({ autocomplete: htmlTagCompletion }));\n return new LanguageSupport(lang, support);\n}\nfunction htmlTagCompletion(context) {\n let { state, pos } = context, m = /<[:\\-\\.\\w\\u00b7-\\uffff]*$/.exec(state.sliceDoc(pos - 25, pos));\n if (!m)\n return null;\n let tree = syntaxTree(state).resolveInner(pos, -1);\n while (tree && !tree.type.isTop) {\n if (tree.name == \"CodeBlock\" || tree.name == \"FencedCode\" || tree.name == \"ProcessingInstructionBlock\" ||\n tree.name == \"CommentBlock\" || tree.name == \"Link\" || tree.name == \"Image\")\n return null;\n tree = tree.parent;\n }\n return {\n from: pos - m[0].length, to: pos,\n options: htmlTagCompletions(),\n validFor: /^<[:\\-\\.\\w\\u00b7-\\uffff]*$/\n };\n}\nlet _tagCompletions = null;\nfunction htmlTagCompletions() {\n if (_tagCompletions)\n return _tagCompletions;\n let result = htmlCompletionSource(new CompletionContext(EditorState.create({ extensions: htmlNoMatch }), 0, true));\n return _tagCompletions = result ? result.options : [];\n}\nconst nonPlainText = /code|horizontalrule|html|link|comment|processing|escape|entity|image|mark|url/i;\n/**\nAn extension that intercepts pastes when the pasted content looks\nlike a URL and the selection is non-empty and selects regular\ntext, making the selection a link with the pasted URL as target.\n*/\nconst pasteURLAsLink = /*@__PURE__*/EditorView.domEventHandlers({\n paste: (event, view) => {\n var _a;\n let { main } = view.state.selection;\n if (main.empty)\n return false;\n let link = (_a = event.clipboardData) === null || _a === void 0 ? void 0 : _a.getData(\"text/plain\");\n if (!link || !/^(https?:\\/\\/|mailto:|xmpp:|www\\.)/.test(link))\n return false;\n if (/^www\\./.test(link))\n link = \"https://\" + link;\n if (!markdownLanguage.isActiveAt(view.state, main.from, 1))\n return false;\n let tree = syntaxTree(view.state), crossesNode = false;\n // Verify that no nodes are started/ended between the selection\n // points, and we're not inside any non-plain-text construct.\n tree.iterate({\n from: main.from, to: main.to,\n enter: node => { if (node.from > main.from || nonPlainText.test(node.name))\n crossesNode = true; },\n leave: node => { if (node.to < main.to)\n crossesNode = true; }\n });\n if (crossesNode)\n return false;\n view.dispatch({\n changes: [{ from: main.from, insert: \"[\" }, { from: main.to, insert: `](${link})` }],\n userEvent: \"input.paste\",\n scrollIntoView: true\n });\n return true;\n }\n});\n\nexport { commonmarkLanguage, deleteMarkupBackward, insertNewlineContinueMarkup, insertNewlineContinueMarkupCommand, markdown, markdownKeymap, markdownLanguage, pasteURLAsLink };\n","import { EditorState } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport {\n EditorView,\n lineNumbers,\n highlightActiveLineGutter,\n highlightSpecialChars,\n drawSelection,\n dropCursor,\n highlightActiveLine,\n keymap,\n} from \"@codemirror/view\";\nimport { defaultKeymap, history, historyKeymap, indentWithTab } from \"@codemirror/commands\";\nimport { closeBrackets, closeBracketsKeymap } from \"@codemirror/autocomplete\";\nimport { markdown } from \"@codemirror/lang-markdown\";\nimport { whiteboardScriptLanguage, whiteboardScript } from '@bitcobblers/wod-wiki-lang';\nimport { wql, wqlLanguage } from '@bitcobblers/wod-wiki-wql';\nimport { editorTheme } from \"./theme\";\nimport { sectionField } from \"./section-state\";\nimport { previewDecorations } from \"./preview-decorations\";\nimport { wodLinter } from \"./whiteboard-linter\";\nimport { wodAutocompletion, wodEditorKeymap, wodAutoWrap } from \"./whiteboard-autocomplete\";\nimport { lineIdsExtension } from \"./line-ids\";\nimport { linkOpen } from \"./link-open\";\nimport { smartIncrement } from \"./smart-increment\";\nimport { markdownSyntaxHiding } from \"./markdown-syntax-hiding\";\nimport { markdownTablePreview } from \"./markdown-tables\";\nimport { queryBlockPreview } from \"./query-block-preview\";\nimport type { QueryExecutor } from \"../contracts/query\";\n\nexport function resolveCodeLanguage(info: string | null | undefined) {\n const base = info?.split(':', 1)[0]?.toLowerCase();\n if (base === 'time' || base === 'log' || base === 'wod' || base === 'whiteboard') {\n return whiteboardScriptLanguage;\n }\n if (base === 'wql' || base === 'query') {\n return wqlLanguage;\n }\n return null;\n}\n\nexport interface EditorPresetOptions {\n dialect?: 'wod' | 'whiteboard' | 'wql' | 'markdown' | string;\n isDark?: boolean;\n readOnly?: boolean;\n lineNumbers?: boolean;\n lineWrapping?: boolean;\n executor?: QueryExecutor;\n onResultSaved?: (callback: () => void) => (() => void) | void;\n extensions?: Extension[];\n}\n\nexport function editorPreset(optionsOrDialect: string | EditorPresetOptions = 'markdown'): Extension[] {\n const options: EditorPresetOptions = typeof optionsOrDialect === 'string'\n ? { dialect: optionsOrDialect }\n : optionsOrDialect;\n\n const {\n dialect = 'markdown',\n isDark = true,\n readOnly = false,\n lineNumbers: showLineNums = true,\n lineWrapping = true,\n executor,\n onResultSaved,\n extensions: extraExtensions = [],\n } = options;\n\n const extensions: Extension[] = [\n ...(showLineNums ? [lineNumbers(), highlightActiveLineGutter()] : []),\n highlightSpecialChars(),\n history(),\n drawSelection(),\n dropCursor(),\n ...(lineWrapping ? [EditorView.lineWrapping] : []),\n EditorState.allowMultipleSelections.of(true),\n closeBrackets(),\n highlightActiveLine(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...historyKeymap,\n indentWithTab,\n ]),\n editorTheme(isDark),\n lineIdsExtension,\n smartIncrement,\n ];\n\n if (readOnly) {\n extensions.push(EditorState.readOnly.of(true));\n }\n\n if (dialect === 'wql') {\n extensions.push(wql());\n } else if (dialect === 'wod' || dialect === 'whiteboard' || dialect === 'time') {\n extensions.push(\n whiteboardScript(),\n wodLinter,\n );\n } else {\n // Default: Markdown with live sectionField, previews, wod completions, and query blocks\n extensions.push(\n markdown({ codeLanguages: resolveCodeLanguage }),\n sectionField,\n previewDecorations,\n wodLinter,\n wodAutocompletion,\n wodEditorKeymap,\n wodAutoWrap,\n linkOpen,\n markdownSyntaxHiding(),\n markdownTablePreview,\n queryBlockPreview({ executor, onResultSaved }),\n );\n }\n\n if (extraExtensions.length > 0) {\n extensions.push(...extraExtensions);\n }\n\n return extensions;\n}\n"]}
|