@bitcobblers/wod-wiki-ui 0.35.2115 → 0.35.2117
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-GUN6PZNI.mjs → chunk-4WX7YECS.mjs} +190 -251
- package/dist/chunk-4WX7YECS.mjs.map +1 -0
- package/dist/extensions/index.cjs +192 -247
- package/dist/extensions/index.cjs.map +1 -1
- package/dist/extensions/index.d.cts +1 -1
- package/dist/extensions/index.d.ts +1 -1
- package/dist/extensions/index.mjs +1 -1
- package/dist/{index-DMTXLSJ0.d.cts → index-WiNbi7d3.d.cts} +29 -10
- package/dist/{index-DMTXLSJ0.d.ts → index-WiNbi7d3.d.ts} +29 -10
- package/dist/index.cjs +197 -252
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.mjs +8 -8
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/chunk-GUN6PZNI.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/@codemirror/theme-one-dark/dist/index.js","../src/extensions/theme.ts","../src/extensions/line-ids.ts","../src/extensions/link-open.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/link-preview.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/OutputStatementsTable.tsx","../src/widgets/RowsTable.tsx","../src/utils/cn.ts","../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/dialog/visualViewport.ts","../src/dialog/EditorDialog.tsx","../src/composer/ComposerRegistry.ts","../src/composer/queryClauses.ts","../src/composer/QueryPalette.tsx","../src/composer/InlineClauseEditor.tsx","../src/composer/clauseVocab.ts","../src/composer/suggestionSources.ts","../src/composer/useSuggestions.ts","../src/composer/clauseItems.ts","../src/composer/diagnostics.ts","../src/composer/WqlDiagnosticsStrip.tsx","../src/composer/useWqlStageCounts.ts","../src/composer/queryAst.ts","../src/composer/WqlTextEditor.tsx","../src/composer/WqlComposer.tsx","../src/composer/filterTypeahead.ts","../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/@lezer/markdown/dist/index.js","../../../node_modules/@lezer/html/dist/index.js","../../../node_modules/@lezer/css/dist/index.js","../../../node_modules/@codemirror/lang-css/dist/index.js","../../../node_modules/@lezer/javascript/dist/index.js","../../../node_modules/@codemirror/lang-javascript/dist/index.js","../../../node_modules/@codemirror/lang-html/dist/index.js","../../../node_modules/@codemirror/lang-markdown/dist/index.js","../src/extensions/editorPreset.ts"],"names":["EditorView","values","ViewPlugin","coreGenerateSectionId","coreMatchDialectFence","EditorState","syntaxTree","Decoration","RangeSetBuilder","StateField","WidgetType","Facet","option","nextBody","commit","tags","count","cursor","createExternalIcon","StateEffect","lineNumbers","keymap","buildDecorations","useMemo","jsx","jsxs","hash","useState","blockContentId","Fragment","data","ResponsiveContainer","CartesianGrid","XAxis","YAxis","Tooltip","BarChart","Legend","Bar","Cell","React","useEffect","clause","invalid","X","WQL_INTENSITY_TIERS","useSyncExternalStore","parseQuery","isFindQuery","useRef","isPipelineQuery","wql","window","parsed","filters","filter","index","placeholder","syntaxHighlighting","cmPlaceholder","autocompletion","linter","editor","useId","next","useCallback","isDashboardWidgetType","unknownWidgetTypeMessage","markdown","createRoot","Type","Line","elt","parser","nodeTypes","Tag","spec","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","wqlLanguage","history","historyKeymap"],"mappings":"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","file":"chunk-GUN6PZNI.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\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 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 {\n blockContentId,\n generateSectionId as coreGenerateSectionId,\n matchDialectFence as coreMatchDialectFence,\n} from \"@bitcobblers/wod-wiki-core\";\nimport { StateField, StateEffect, EditorState } from \"@codemirror/state\";\nimport { parseQueryWidgetSuffix } from '@bitcobblers/wod-wiki-wql';\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>();\nexport { blockContentId };\nfunction generateSectionId(type: string, cmStartLine: number, content: string): string {\n return coreGenerateSectionId(type, cmStartLine - 1, content);\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 = coreMatchDialectFence(trimmed);\n if (!match) return null;\n return { dialect: match.dialect as EditorDialect, sport: match.sport };\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](.*))?$/i);\n if (!match) return null;\n const rawSuffix = (match[1] ?? \"\").trim();\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 if (view.state.readOnly) return false;\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 (view.state.readOnly) return false;\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]);\nexport type CustomCompletionSource = (\n context: CompletionContext\n) => CompletionResult | Promise<CompletionResult | null> | null;\n\nconst customCompletionSources: CustomCompletionSource[] = [];\n\nexport function registerCustomCompletionSource(source: CustomCompletionSource): void {\n if (!customCompletionSources.includes(source)) {\n customCompletionSources.push(source);\n }\n}\n\nexport function unregisterCustomCompletionSource(source: CustomCompletionSource): void {\n const idx = customCompletionSources.indexOf(source);\n if (idx !== -1) {\n customCompletionSources.splice(idx, 1);\n }\n}\n\n\nexport const wodAutocompletion: Extension = autocompletion({\n interactionDelay: 0,\n activateOnCompletion: (completion) =>\n completion.type === \"property\" &&\n typeof completion.apply === \"string\" &&\n completion.apply.endsWith(\":\\n - \"),\n override: [\n fenceCompletion,\n async (context: CompletionContext) => {\n for (const source of customCompletionSources) {\n const res = await source(context);\n if (res) return res;\n }\n return null;\n },\n ],\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 /** Rendered height of the section's opening (fence) line — hosts the inline command bar. */\n firstLineHeight?: 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 let firstLineHeight: number | undefined;\n\n try {\n const topBlock = this.view.lineBlockAt(from);\n const bottomBlock = this.view.lineBlockAt(to);\n top = topBlock.top;\n firstLineHeight = topBlock.height;\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 firstLineHeight,\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 {\n Decoration,\n EditorView,\n WidgetType,\n} 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\nclass WorkoutFooterWidget extends WidgetType {\n eq(_other: WorkoutFooterWidget): boolean {\n return true;\n }\n\n toDOM(): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"cm-wod-block-footer\";\n return el;\n }\n\n get estimatedHeight(): number {\n return 28;\n }\n\n get block(): boolean {\n return true;\n }\n}\n\nclass WorkoutInsertSpacerWidget extends WidgetType {\n eq(_other: WorkoutInsertSpacerWidget): boolean {\n return true;\n }\n\n toDOM(): HTMLElement {\n const el = document.createElement(\"div\");\n el.className = \"cm-wod-insert-spacer\";\n return el;\n }\n\n get estimatedHeight(): number {\n return 28;\n }\n\n get block(): boolean {\n return true;\n }\n}\n\nconst footerWidget = new WorkoutFooterWidget();\nconst insertSpacerWidget = new WorkoutInsertSpacerWidget();\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});\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 const cursorHead = state.selection.main.head;\n const cursorLineNum = state.doc.lineAt(cursorHead).number;\n\n for (const section of sections) {\n if (section.type !== \"time\" && section.type !== \"log\") continue;\n\n const isCursorInside =\n cursorLineNum > section.startLine && cursorLineNum < section.endLine;\n\n const startLine = state.doc.line(section.startLine);\n const endLine = state.doc.line(section.endLine);\n\n if (section.endLine <= section.startLine) {\n builder.add(startLine.from, startLine.from, fenceOpenDeco);\n continue;\n }\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 if (isCursorInside && l === cursorLineNum) {\n builder.add(\n line.to,\n line.to,\n Decoration.widget({ widget: insertSpacerWidget, block: true, side: 1 })\n );\n }\n }\n\n if (!isCursorInside) {\n builder.add(\n endLine.from,\n endLine.from,\n Decoration.widget({ widget: footerWidget, block: true, side: -1 })\n );\n }\n\n builder.add(endLine.from, endLine.from, fenceCloseDeco);\n }\n\n return builder.finish();\n}\nconst scriptBlockDecoField = StateField.define<DecorationSet>({\n create(state) {\n return buildWorkoutDecorations(state);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\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 color: \"hsl(var(--metric-time))\",\n paddingLeft: \"8px\",\n paddingRight: \"8px\",\n backgroundColor: \"rgba(128, 128, 128, 0.05)\",\n borderLeft: \"1px solid hsl(var(--border) / 0.5)\",\n borderRight: \"1px solid hsl(var(--border) / 0.5)\",\n boxSizing: \"border-box\",\n },\n \".cm-wod-fence-open\": {\n borderTop: \"1px solid hsl(var(--border) / 0.5)\",\n borderRadius: \"6px 6px 0 0\",\n // The 44px inline command bar bottom-aligns with this line's bottom (= the\n // ``` text row, no bottom padding), popping up into this padding so it\n // can't cover the previous line or the block's first content line.\n // 44px button - 22px text row = 22px overflow, +4px breathing room.\n paddingTop: \"26px\",\n // Tint only the heading row (1px border + 26px padding above the 22px\n // cm-content line-height); the padding above shows the plain editor\n // background.\n backgroundColor: \"transparent\",\n backgroundImage:\n \"linear-gradient(to bottom, transparent 27px, rgba(128, 128, 128, 0.05) 27px)\",\n },\n \".cm-wod-fence-close\": {\n borderBottom: \"1px solid hsl(var(--border) / 0.5)\",\n borderRadius: \"0 0 6px 6px\",\n },\n \".cm-wod-inner\": {\n paddingLeft: \"8px\",\n paddingRight: \"8px\",\n backgroundColor: \"rgba(128, 128, 128, 0.05)\",\n borderLeft: \"1px solid hsl(var(--border) / 0.5)\",\n borderRight: \"1px solid hsl(var(--border) / 0.5)\",\n boxSizing: \"border-box\",\n },\n \".cm-wod-block-footer\": {\n height: \"28px\",\n backgroundColor: \"rgba(128, 128, 128, 0.05)\",\n borderLeft: \"1px solid hsl(var(--border) / 0.5)\",\n borderRight: \"1px solid hsl(var(--border) / 0.5)\",\n boxSizing: \"border-box\",\n pointerEvents: \"none\",\n },\n \".cm-wod-insert-spacer\": {\n height: \"28px\",\n backgroundColor: \"rgba(128, 128, 128, 0.05)\",\n borderLeft: \"1px solid hsl(var(--border) / 0.5)\",\n borderRight: \"1px solid hsl(var(--border) / 0.5)\",\n boxSizing: \"border-box\",\n pointerEvents: \"none\",\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, EditorView, WidgetType } from \"@codemirror/view\";\nimport type { DecorationSet } from \"@codemirror/view\";\nimport { StateField, EditorState, RangeSetBuilder, Facet } from \"@codemirror/state\";\nimport type { Extension } from \"@codemirror/state\";\nimport { parseFrontmatterBody, serializeFrontmatter } from \"@bitcobblers/wod-wiki-wql\";\nimport { sectionField } from \"./section-state\";\n\n// ponytail: flat scalar and string-list properties with inline commit; add schema types / drag-to-reorder when multi-type nested schemas are required.\nexport type FrontmatterSuggestionCatalog = {\n types: readonly string[];\n tags: readonly { label: string; type?: string }[];\n};\n\nexport const frontmatterSuggestions = Facet.define<\n () => Promise<FrontmatterSuggestionCatalog>,\n (() => Promise<FrontmatterSuggestionCatalog>) | null\n>({ combine: (providers) => providers[0] ?? null });\n\nexport const frontmatterVisibility = Facet.define<boolean, boolean>({\n combine: (values) => values[0] ?? true,\n});\n\nconst pendingFocus = new WeakMap<EditorView, { kind: \"key\" | \"tag\"; key: string }>();\nconst widgetCleanup = new WeakMap<HTMLElement, (() => void)[]>();\nlet suggestionId = 0;\n\nfunction isTagProperty(key: string): boolean {\n return [\"tag\", \"tags\", \"category\"].includes(key.trim().toLowerCase());\n}\n\nfunction attachSuggestions(\n input: HTMLInputElement,\n view: EditorView,\n root: HTMLElement,\n kind: \"key\" | \"value\",\n key: string,\n excluded: readonly string[],\n commit: () => void,\n): void {\n const provider = view.state.facet(frontmatterSuggestions);\n if (!provider || !input.parentElement) return;\n const parent = input.parentElement;\n parent.classList.add(\"relative\");\n const list = document.createElement(\"div\");\n list.id = `frontmatter-suggestions-${++suggestionId}`;\n list.setAttribute(\"role\", \"listbox\");\n list.className = \"absolute left-0 top-full z-50 max-h-48 overflow-auto rounded-md border border-border bg-background shadow-md min-w-full text-xs\";\n list.hidden = true;\n parent.appendChild(list);\n input.setAttribute(\"role\", \"combobox\");\n input.setAttribute(\"aria-autocomplete\", \"list\");\n input.setAttribute(\"aria-controls\", list.id);\n input.setAttribute(\"aria-expanded\", \"false\");\n let generation = 0;\n let choices: string[] = [];\n let active = -1;\n const close = () => {\n generation++;\n choices = [];\n active = -1;\n list.hidden = true;\n input.setAttribute(\"aria-expanded\", \"false\");\n input.removeAttribute(\"aria-activedescendant\");\n };\n const select = (label: string) => {\n input.value = label;\n close();\n commit();\n };\n const activate = (index: number) => {\n active = index;\n Array.from(list.children).forEach((option, i) => {\n option.setAttribute(\"aria-selected\", String(i === active));\n option.classList.toggle(\"bg-muted\", i === active);\n });\n const option = list.children[active];\n if (option) {\n input.setAttribute(\"aria-activedescendant\", option.id);\n if (option instanceof HTMLElement) option.scrollIntoView?.({ block: \"nearest\" });\n }\n };\n // Focus and Ctrl+Space open the full candidate list; typing filters it.\n const refresh = async (showAll = false) => {\n close();\n const request = ++generation;\n const query = showAll ? \"\" : input.value.trim().toLowerCase();\n try {\n const catalog = await provider();\n if (request !== generation || !input.isConnected || document.activeElement !== input) return;\n const candidates = kind === \"key\"\n ? catalog.types\n : catalog.tags.filter((tag) => isTagProperty(key) || tag.type?.toLowerCase() === key.trim().toLowerCase()).map((tag) => tag.label);\n const selected = new Set(excluded.map((label) => label.toLowerCase()));\n choices = [...new Set(candidates)].filter((label) => label.toLowerCase().includes(query) && !selected.has(label.toLowerCase()));\n active = -1;\n input.removeAttribute(\"aria-activedescendant\");\n list.replaceChildren();\n choices.forEach((label, index) => {\n const option = document.createElement(\"div\");\n option.id = `${list.id}-${index}`;\n option.setAttribute(\"role\", \"option\");\n option.setAttribute(\"aria-selected\", \"false\");\n option.className = \"cursor-pointer px-2 py-1.5 hover:bg-muted\";\n option.textContent = label;\n option.addEventListener(\"mousedown\", (event) => event.preventDefault());\n option.addEventListener(\"click\", () => select(label));\n list.appendChild(option);\n });\n list.hidden = choices.length === 0;\n input.setAttribute(\"aria-expanded\", String(choices.length > 0));\n } catch {\n if (request === generation) close();\n }\n };\n input.addEventListener(\"focus\", () => void refresh(true));\n input.addEventListener(\"input\", () => void refresh(false));\n input.addEventListener(\"blur\", close);\n input.addEventListener(\"keydown\", (event) => {\n if (event.ctrlKey && (event.code === \"Space\" || event.key === \" \")) {\n event.preventDefault();\n void refresh(true);\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n close();\n } else if ((event.key === \"ArrowDown\" || event.key === \"ArrowUp\") && choices.length) {\n event.preventDefault();\n const direction = event.key === \"ArrowDown\" ? 1 : -1;\n activate(active < 0 ? (direction === 1 ? 0 : choices.length - 1) : (active + direction + choices.length) % choices.length);\n } else if ((event.key === \"Enter\" || event.key === \"Tab\") && active >= 0) {\n event.preventDefault();\n select(choices[active]);\n }\n });\n widgetCleanup.get(root)?.push(close);\n}\n\nfunction parseTagList(val: unknown): string[] {\n if (Array.isArray(val)) {\n return val.map(String).map((s) => s.trim()).filter(Boolean);\n }\n if (typeof val === \"string\" && val.trim()) {\n const s = val.trim();\n if (s.startsWith(\"[\") && s.endsWith(\"]\")) {\n return s\n .slice(1, -1)\n .split(\",\")\n .map((t) => t.trim().replace(/^['\"]|['\"]$/g, \"\"))\n .filter(Boolean);\n }\n return [s.replace(/^['\"]|['\"]$/g, \"\")];\n }\n return [];\n}\n\nfunction updateFrontmatter(\n view: EditorView,\n sectionId: string,\n meta: Record<string, string | number | string[]>,\n): void {\n if (view.state.readOnly) return;\n const { sections } = view.state.field(sectionField);\n const section =\n sections.find((s) => s.id === sectionId && s.type === \"frontmatter\") ||\n sections.find((s) => s.type === \"frontmatter\");\n if (!section) {\n const nextBody = serializeFrontmatter(meta);\n view.dispatch({\n changes: {\n from: 0,\n to: 0,\n insert: `---\\n${nextBody}\\n---\\n\\n`,\n },\n });\n return;\n }\n\n const nextBody = serializeFrontmatter(meta);\n if (section.contentFrom !== undefined && section.contentTo !== undefined) {\n view.dispatch({\n changes: {\n from: section.contentFrom,\n to: section.contentTo,\n insert: nextBody,\n },\n });\n } else {\n view.dispatch({\n changes: {\n from: section.from,\n to: section.to,\n insert: `---\\n${nextBody}\\n---`,\n },\n });\n }\n}\n\n// Imperative, unpersisted tag-entry row for when no tags property exists yet.\n// Only a committed value dispatches to updateFrontmatter; blur/Escape without a value discards it.\nfunction createTagDraftRow(\n view: EditorView,\n root: HTMLElement,\n key: string,\n onCommit: (value: string) => void,\n): HTMLElement {\n const row = document.createElement(\"div\");\n row.className =\n \"flex items-center min-h-[34px] border-b border-dashed border-border/60 last:border-b-0 group hover:bg-muted/10 transition-colors max-[479px]:flex-col max-[479px]:items-stretch\";\n row.setAttribute(\"data-frontmatter-tag-draft\", \"true\");\n\n const keyCol = document.createElement(\"div\");\n keyCol.className =\n \"flex items-center gap-2 px-3 py-1.5 w-36 shrink-0 border-r border-dashed border-border/60 text-muted-foreground max-[479px]:w-auto max-[479px]:border-r-0 max-[479px]:border-b\";\n keyCol.appendChild(createTagIcon());\n const keyLabel = document.createElement(\"span\");\n keyLabel.className = \"truncate font-medium text-foreground/90\";\n keyLabel.textContent = key;\n keyCol.appendChild(keyLabel);\n row.appendChild(keyCol);\n\n const valCol = document.createElement(\"div\");\n valCol.className = \"flex items-center flex-wrap gap-1.5 px-3 py-1.5 flex-1 min-w-0\";\n const input = document.createElement(\"input\");\n input.className =\n \"flex-1 min-w-[70px] bg-transparent text-xs text-foreground outline-none px-1 py-0.5 placeholder:text-muted-foreground/40\";\n input.placeholder = \"Add tag…\";\n input.setAttribute(\"aria-label\", `Add tag to ${key}`);\n valCol.appendChild(input);\n row.appendChild(valCol);\n\n let settled = false;\n const settle = (commit: boolean) => {\n if (settled) return;\n settled = true;\n if (commit) {\n const val = input.value.trim().replace(/^,|,$/g, \"\");\n if (val) onCommit(val);\n }\n row.remove();\n view.requestMeasure();\n };\n const commit = () => settle(true);\n const discard = () => settle(false);\n\n attachSuggestions(input, view, root, \"value\", key, [], commit);\n input.addEventListener(\"keydown\", (e) => {\n // Escape discards the draft even when attachSuggestions already closed the\n // listbox and prevented default on the same event.\n if (e.key === \"Escape\") {\n e.preventDefault();\n discard();\n return;\n }\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commit();\n }\n });\n input.addEventListener(\"blur\", () => queueMicrotask(() => {\n if (!input.isConnected) return;\n if (input.value.trim()) commit();\n else discard();\n }));\n\n return row;\n}\n\nfunction createTagIcon(): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", \"shrink-0 h-3.5 w-3.5 text-muted-foreground/70\");\n\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", \"M12 2H2v10l9.29 9.29c.94.94 2.48.94 3.42 0l6.58-6.58c.94-.94.94-2.48 0-3.42L12 2Z\");\n svg.appendChild(path);\n\n const circle = document.createElementNS(\"http://www.w3.org/2000/svg\", \"circle\");\n circle.setAttribute(\"cx\", \"7\");\n circle.setAttribute(\"cy\", \"7\");\n circle.setAttribute(\"r\", \".5\");\n circle.setAttribute(\"fill\", \"currentColor\");\n svg.appendChild(circle);\n\n return svg;\n}\n\nfunction createListIcon(): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", \"shrink-0 h-3.5 w-3.5 text-muted-foreground/70\");\n\n for (const y of [\"6\", \"12\", \"18\"]) {\n const line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n line.setAttribute(\"x1\", \"4\");\n line.setAttribute(\"x2\", \"20\");\n line.setAttribute(\"y1\", y);\n line.setAttribute(\"y2\", y);\n svg.appendChild(line);\n }\n\n return svg;\n}\n\nfunction createPlusIcon(): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", \"shrink-0 h-3 w-3\");\n\n const l1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n l1.setAttribute(\"x1\", \"12\");\n l1.setAttribute(\"x2\", \"12\");\n l1.setAttribute(\"y1\", \"5\");\n l1.setAttribute(\"y2\", \"19\");\n svg.appendChild(l1);\n\n const l2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n l2.setAttribute(\"x1\", \"5\");\n l2.setAttribute(\"x2\", \"19\");\n l2.setAttribute(\"y1\", \"12\");\n l2.setAttribute(\"y2\", \"12\");\n svg.appendChild(l2);\n\n return svg;\n}\n\nfunction createExternalIcon(): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", \"h-3 w-3\");\n\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", \"M15 3h6v6\");\n svg.appendChild(path);\n\n const line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n line.setAttribute(\"x1\", \"10\");\n line.setAttribute(\"x2\", \"21\");\n line.setAttribute(\"y1\", \"14\");\n line.setAttribute(\"y2\", \"3\");\n svg.appendChild(line);\n\n const polyline = document.createElementNS(\"http://www.w3.org/2000/svg\", \"polyline\");\n polyline.setAttribute(\"points\", \"21 14 21 3 10 3\");\n svg.appendChild(polyline);\n\n return svg;\n}\n\nfunction createCloseIcon(size: \"sm\" | \"md\" = \"md\"): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", size === \"sm\" ? \"2.5\" : \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", size === \"sm\" ? \"h-2.5 w-2.5\" : \"h-3.5 w-3.5\");\n\n const l1 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n l1.setAttribute(\"x1\", \"18\");\n l1.setAttribute(\"x2\", \"6\");\n l1.setAttribute(\"y1\", \"6\");\n l1.setAttribute(\"y2\", \"18\");\n svg.appendChild(l1);\n\n const l2 = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n l2.setAttribute(\"x1\", \"6\");\n l2.setAttribute(\"x2\", \"18\");\n l2.setAttribute(\"y1\", \"6\");\n l2.setAttribute(\"y2\", \"18\");\n svg.appendChild(l2);\n\n return svg;\n}\n\nexport class DefaultFrontmatterWidget extends WidgetType {\n readonly sectionId: string;\n readonly rawContent: string;\n readonly readOnly: boolean;\n\n constructor(\n sectionIdOrProps: string | Record<string, string>,\n rawContent?: string,\n readOnly: boolean = false,\n ) {\n super();\n if (typeof sectionIdOrProps === \"string\") {\n this.sectionId = sectionIdOrProps;\n this.rawContent = rawContent ?? \"\";\n this.readOnly = readOnly;\n } else {\n this.sectionId = \"legacy\";\n this.rawContent = serializeFrontmatter(sectionIdOrProps);\n this.readOnly = readOnly;\n }\n }\n\n get props(): Record<string, string> {\n const body = this.rawContent.replace(/^---\\r?\\n?/, \"\").replace(/\\r?\\n?---\\r?$/, \"\");\n const meta = parseFrontmatterBody(body);\n const result: Record<string, string> = {};\n for (const [k, v] of Object.entries(meta)) {\n result[k] = Array.isArray(v) ? v.join(\", \") : String(v ?? \"\");\n }\n return result;\n }\n\n eq(other: DefaultFrontmatterWidget): boolean {\n return (\n this.sectionId === other.sectionId &&\n this.rawContent === other.rawContent &&\n this.readOnly === other.readOnly\n );\n }\n\n ignoreEvent(): boolean {\n return true;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const root = document.createElement(\"div\");\n widgetCleanup.set(root, []);\n root.className = \"cm-frontmatter-preview py-2 font-sans select-none\";\n\n const heading = document.createElement(\"div\");\n heading.className = \"text-xs font-medium text-muted-foreground mb-1.5 px-0.5\";\n heading.textContent = \"Properties\";\n root.appendChild(heading);\n\n const box = document.createElement(\"div\");\n box.className = \"rounded-lg border border-border/80 bg-background/50 text-xs shadow-xs\";\n root.appendChild(box);\n\n const body = this.rawContent.replace(/^---\\r?\\n?/, \"\").replace(/\\r?\\n?---\\r?$/, \"\");\n const meta = parseFrontmatterBody(body);\n const entries = Object.entries(meta);\n\n if (entries.length === 0) {\n const emptyRow = document.createElement(\"div\");\n emptyRow.className = \"px-3 py-2 text-xs text-muted-foreground/60 italic\";\n emptyRow.textContent = \"No properties\";\n box.appendChild(emptyRow);\n }\n\n for (const [key, value] of entries) {\n const isTags = isTagProperty(key);\n\n const row = document.createElement(\"div\");\n row.className =\n \"flex items-center min-h-[34px] border-b border-dashed border-border/60 last:border-b-0 group hover:bg-muted/10 transition-colors max-[479px]:flex-col max-[479px]:items-stretch\";\n box.appendChild(row);\n\n // Key column\n const keyCol = document.createElement(\"div\");\n keyCol.className =\n \"flex items-center gap-2 px-3 py-1.5 w-36 shrink-0 border-r border-dashed border-border/60 text-muted-foreground max-[479px]:w-auto max-[479px]:border-r-0 max-[479px]:border-b\";\n keyCol.appendChild(isTags ? createTagIcon() : createListIcon());\n\n if (this.readOnly) {\n const keyLabel = document.createElement(\"span\");\n keyLabel.className = \"truncate font-medium text-foreground/90\";\n keyLabel.textContent = key;\n keyCol.appendChild(keyLabel);\n } else {\n const keyInput = document.createElement(\"input\");\n keyInput.className =\n \"w-full bg-transparent text-xs text-foreground/90 font-medium outline-none truncate hover:bg-muted/30 focus:bg-background focus:ring-1 focus:ring-ring rounded px-1 -mx-1\";\n keyInput.value = key;\n keyInput.spellcheck = false;\n keyInput.setAttribute(\"aria-label\", `Property name ${key}`);\n\n let currentKey = key;\n const commitKey = () => {\n const nextKey = keyInput.value.trim();\n if (!nextKey || nextKey === currentKey) {\n keyInput.value = currentKey;\n return;\n }\n if (!/^[A-Za-z_][\\w.-]*$/.test(nextKey) || nextKey in meta) {\n keyInput.value = currentKey;\n return;\n }\n const newMeta: Record<string, string | number | string[]> = {};\n for (const [k, v] of Object.entries(meta)) {\n if (k === currentKey) newMeta[nextKey] = v;\n else newMeta[k] = v;\n }\n delete meta[currentKey];\n meta[nextKey] = newMeta[nextKey];\n currentKey = nextKey;\n updateFrontmatter(view, this.sectionId, newMeta);\n };\n\n // Native blur fires before removal; check connectivity after CodeMirror finishes updating.\n const commitKeyIfAttached = () => queueMicrotask(() => {\n if (keyInput.isConnected) commitKey();\n });\n keyInput.addEventListener(\"change\", commitKeyIfAttached);\n keyCol.appendChild(keyInput);\n attachSuggestions(keyInput, view, root, \"key\", key, entries.map(([name]) => name), commitKey);\n keyInput.addEventListener(\"blur\", commitKeyIfAttached);\n keyInput.addEventListener(\"keydown\", (e) => {\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n keyInput.blur();\n }\n });\n\n const focus = pendingFocus.get(view);\n if (focus?.kind === \"key\" && focus.key === key) {\n setTimeout(() => {\n if (!keyInput.isConnected) return;\n keyInput.focus();\n keyInput.select();\n }, 0);\n pendingFocus.delete(view);\n }\n }\n row.appendChild(keyCol);\n\n // Value column\n const valCol = document.createElement(\"div\");\n valCol.className = \"flex items-center flex-wrap gap-1.5 px-3 py-1.5 flex-1 min-w-0\";\n\n if (isTags) {\n const tags = parseTagList(value);\n for (let idx = 0; idx < tags.length; idx++) {\n const tag = tags[idx];\n const pill = document.createElement(\"span\");\n pill.className =\n \"inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-xs font-medium bg-amber-500/10 text-amber-800 dark:text-amber-300 border border-amber-500/20 dark:border-amber-500/30\";\n\n const tagText = document.createElement(\"span\");\n tagText.textContent = tag;\n pill.appendChild(tagText);\n\n if (!this.readOnly) {\n const rmBtn = document.createElement(\"button\");\n rmBtn.type = \"button\";\n rmBtn.setAttribute(\"aria-label\", `Remove tag ${tag}`);\n rmBtn.className =\n \"inline-flex items-center justify-center text-amber-700/60 hover:text-amber-950 dark:text-amber-400/60 dark:hover:text-amber-100 cursor-pointer\";\n rmBtn.appendChild(createCloseIcon(\"sm\"));\n rmBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const nextTags = tags.filter((_, i) => i !== idx);\n meta[key] = nextTags;\n updateFrontmatter(view, this.sectionId, meta);\n });\n pill.appendChild(rmBtn);\n }\n valCol.appendChild(pill);\n }\n\n if (!this.readOnly) {\n const tagInput = document.createElement(\"input\");\n tagInput.className =\n \"flex-1 min-w-[70px] bg-transparent text-xs text-foreground outline-none px-1 py-0.5 placeholder:text-muted-foreground/40\";\n tagInput.placeholder = tags.length === 0 ? \"Add tags…\" : \"Add tag…\";\n tagInput.setAttribute(\"aria-label\", `Add tag to ${key}`);\n\n const commitNewTag = () => {\n const val = tagInput.value.trim().replace(/^,|,$/g, \"\");\n if (val && !tags.some((tag) => tag.toLowerCase() === val.toLowerCase())) {\n meta[key] = [...tags, val];\n tagInput.value = \"\";\n pendingFocus.set(view, { kind: \"tag\", key });\n updateFrontmatter(view, this.sectionId, meta);\n }\n };\n valCol.appendChild(tagInput);\n attachSuggestions(tagInput, view, root, \"value\", key, tags, commitNewTag);\n\n tagInput.addEventListener(\"keydown\", (e) => {\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \",\") {\n e.preventDefault();\n commitNewTag();\n } else if (e.key === \"Backspace\" && !tagInput.value && tags.length > 0) {\n e.preventDefault();\n meta[key] = tags.slice(0, -1);\n pendingFocus.set(view, { kind: \"tag\", key });\n updateFrontmatter(view, this.sectionId, meta);\n }\n });\n tagInput.addEventListener(\"blur\", () => queueMicrotask(() => {\n if (tagInput.isConnected && tagInput.value.trim()) commitNewTag();\n }));\n\n const focus = pendingFocus.get(view);\n if (focus?.kind === \"tag\" && focus.key === key) {\n setTimeout(() => {\n if (tagInput.isConnected) tagInput.focus();\n }, 0);\n pendingFocus.delete(view);\n }\n }\n } else {\n const strVal = Array.isArray(value) ? value.join(\", \") : String(value ?? \"\");\n if (this.readOnly) {\n const valSpan = document.createElement(\"span\");\n valSpan.className = \"text-xs text-foreground py-0.5 truncate\";\n valSpan.textContent = strVal;\n valCol.appendChild(valSpan);\n } else {\n const valInput = document.createElement(\"input\");\n valInput.className =\n \"w-full bg-transparent text-xs text-foreground outline-none py-0.5 hover:bg-muted/20 focus:bg-background focus:ring-1 focus:ring-ring rounded px-1 -mx-1 transition-colors\";\n valInput.value = strVal;\n valInput.spellcheck = false;\n valInput.setAttribute(\"aria-label\", `Value for ${key}`);\n\n let committedVal = strVal;\n const commitVal = () => {\n const cur = valInput.value.trim();\n if (cur !== committedVal) {\n committedVal = cur;\n const num = Number(cur);\n meta[key] = cur !== \"\" && !isNaN(num) ? num : cur;\n updateFrontmatter(view, this.sectionId, meta);\n }\n };\n\n const commitValIfAttached = () => queueMicrotask(() => {\n if (valInput.isConnected) commitVal();\n });\n valInput.addEventListener(\"change\", commitValIfAttached);\n valCol.appendChild(valInput);\n attachSuggestions(valInput, view, root, \"value\", key, [strVal], commitVal);\n valInput.addEventListener(\"blur\", commitValIfAttached);\n valInput.addEventListener(\"keydown\", (e) => {\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\") {\n e.preventDefault();\n valInput.blur();\n }\n });\n }\n\n // Text-link values get a navigate-to (new tab) button.\n if (/^https?:\\/\\/\\S+$/i.test(strVal)) {\n const openLink = document.createElement(\"a\");\n openLink.href = strVal;\n openLink.target = \"_blank\";\n openLink.rel = \"noopener noreferrer\";\n openLink.title = strVal;\n openLink.setAttribute(\"aria-label\", `Open ${key} in new tab`);\n openLink.className =\n \"shrink-0 inline-flex items-center justify-center text-muted-foreground/60 hover:text-foreground transition-colors cursor-pointer\";\n openLink.appendChild(createExternalIcon());\n valCol.appendChild(openLink);\n }\n }\n row.appendChild(valCol);\n\n // Delete property button\n if (!this.readOnly) {\n const actionsCol = document.createElement(\"div\");\n actionsCol.className = \"flex items-center pr-2\";\n\n const delBtn = document.createElement(\"button\");\n delBtn.type = \"button\";\n delBtn.setAttribute(\"aria-label\", `Remove property ${key}`);\n delBtn.className =\n \"opacity-0 group-hover:opacity-100 text-muted-foreground/40 hover:text-destructive p-1 rounded transition-opacity cursor-pointer\";\n delBtn.appendChild(createCloseIcon(\"md\"));\n delBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const newMeta = { ...meta };\n delete newMeta[key];\n updateFrontmatter(view, this.sectionId, newMeta);\n });\n actionsCol.appendChild(delBtn);\n row.appendChild(actionsCol);\n }\n }\n\n if (!this.readOnly) {\n const existingTagKey = entries.find(([key]) => isTagProperty(key))?.[0];\n\n const actionsRow = document.createElement(\"div\");\n actionsRow.className = \"mt-2 flex items-center gap-3\";\n\n const addBtn = document.createElement(\"button\");\n addBtn.type = \"button\";\n addBtn.setAttribute(\"aria-label\", \"Add property\");\n addBtn.className =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground px-1 py-1 cursor-pointer transition-colors select-none\";\n addBtn.appendChild(createPlusIcon());\n const addLabel = document.createElement(\"span\");\n addLabel.textContent = \"Add property\";\n addBtn.appendChild(addLabel);\n\n addBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n let newKey = \"property\";\n let count = 1;\n while (newKey in meta) {\n count++;\n newKey = `property_${count}`;\n }\n pendingFocus.set(view, { kind: \"key\", key: newKey });\n const newMeta = { ...meta, [newKey]: \"\" };\n updateFrontmatter(view, this.sectionId, newMeta);\n });\n actionsRow.appendChild(addBtn);\n\n {\n const addTagBtn = document.createElement(\"button\");\n addTagBtn.type = \"button\";\n addTagBtn.setAttribute(\"aria-label\", \"Add tag\");\n addTagBtn.className =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground px-1 py-1 cursor-pointer transition-colors select-none\";\n addTagBtn.appendChild(createPlusIcon());\n const addTagLabel = document.createElement(\"span\");\n addTagLabel.textContent = \"Add tag\";\n addTagBtn.appendChild(addTagLabel);\n\n addTagBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n if (existingTagKey) {\n const input = Array.from(root.querySelectorAll(\"input\")).find((element) => element.getAttribute(\"aria-label\") === `Add tag to ${existingTagKey}`);\n input?.focus();\n return;\n }\n const existingDraft = root.querySelector<HTMLInputElement>(\"[data-frontmatter-tag-draft] input\");\n if (existingDraft) {\n existingDraft.focus();\n return;\n }\n const draftRow = createTagDraftRow(view, root, \"tags\", (val) => {\n pendingFocus.set(view, { kind: \"tag\", key: \"tags\" });\n updateFrontmatter(view, this.sectionId, { ...meta, tags: [val] });\n });\n box.appendChild(draftRow);\n draftRow.querySelector(\"input\")?.focus();\n view.requestMeasure();\n });\n actionsRow.appendChild(addTagBtn);\n }\n\n {\n const editYamlBtn = document.createElement(\"button\");\n editYamlBtn.type = \"button\";\n editYamlBtn.setAttribute(\"aria-label\", \"Edit YAML\");\n editYamlBtn.className =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground px-1 py-1 cursor-pointer transition-colors select-none\";\n const editYamlLabel = document.createElement(\"span\");\n editYamlLabel.textContent = \"Edit YAML\";\n editYamlBtn.appendChild(editYamlLabel);\n editYamlBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const { sections: currentSections } = view.state.field(sectionField);\n const section =\n currentSections.find((s) => s.id === this.sectionId && s.type === \"frontmatter\") ||\n currentSections.find((s) => s.type === \"frontmatter\");\n if (!section) return;\n view.dispatch({ selection: { anchor: section.contentFrom ?? section.from }, scrollIntoView: true });\n view.focus();\n });\n actionsRow.appendChild(editYamlBtn);\n }\n\n root.appendChild(actionsRow);\n }\n\n return root;\n }\n\n destroy(dom: HTMLElement): void {\n widgetCleanup.get(dom)?.forEach((close) => close());\n widgetCleanup.delete(dom);\n }\n}\n\nclass EmptyFrontmatterWidget extends WidgetType {\n eq(_other: EmptyFrontmatterWidget): boolean {\n return true;\n }\n\n ignoreEvent(): boolean {\n return true;\n }\n\n toDOM(view: EditorView): HTMLElement {\n const root = document.createElement(\"div\");\n root.className = \"cm-frontmatter-preview py-2 font-sans select-none\";\n\n const heading = document.createElement(\"div\");\n heading.className = \"text-xs font-medium text-muted-foreground mb-1.5 px-0.5\";\n heading.textContent = \"Properties\";\n root.appendChild(heading);\n\n const actionsRow = document.createElement(\"div\");\n actionsRow.className = \"flex items-center gap-3\";\n\n const addBtn = document.createElement(\"button\");\n addBtn.type = \"button\";\n addBtn.setAttribute(\"aria-label\", \"Add property\");\n addBtn.className =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground px-1 py-1 cursor-pointer transition-colors select-none\";\n addBtn.appendChild(createPlusIcon());\n const addLabel = document.createElement(\"span\");\n addLabel.textContent = \"Add property\";\n addBtn.appendChild(addLabel);\n\n addBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n pendingFocus.set(view, { kind: \"key\", key: \"property\" });\n updateFrontmatter(view, \"new\", { property: \"\" });\n });\n actionsRow.appendChild(addBtn);\n\n const addTagBtn = document.createElement(\"button\");\n addTagBtn.type = \"button\";\n addTagBtn.setAttribute(\"aria-label\", \"Add tag\");\n addTagBtn.className =\n \"inline-flex items-center gap-1.5 text-xs font-medium text-muted-foreground hover:text-foreground px-1 py-1 cursor-pointer transition-colors select-none\";\n addTagBtn.appendChild(createPlusIcon());\n const addTagLabel = document.createElement(\"span\");\n addTagLabel.textContent = \"Add tag\";\n addTagBtn.appendChild(addTagLabel);\n\n addTagBtn.addEventListener(\"click\", (e) => {\n e.preventDefault();\n e.stopPropagation();\n const existingDraft = root.querySelector<HTMLInputElement>(\"[data-frontmatter-tag-draft] input\");\n if (existingDraft) {\n existingDraft.focus();\n return;\n }\n const draftRow = createTagDraftRow(view, root, \"tags\", (val) => {\n pendingFocus.set(view, { kind: \"tag\", key: \"tags\" });\n updateFrontmatter(view, \"new\", { tags: [val] });\n });\n root.appendChild(draftRow);\n draftRow.querySelector(\"input\")?.focus();\n view.requestMeasure();\n });\n actionsRow.appendChild(addTagBtn);\n\n root.appendChild(actionsRow);\n return root;\n }\n}\n\nfunction buildFrontmatterDecos(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n\n const visible = state.facet(frontmatterVisibility);\n let hasFrontmatter = false;\n for (const section of sections) {\n if (section.type !== \"frontmatter\") continue;\n hasFrontmatter = true;\n\n if (!visible) {\n const to = section.to < state.doc.length ? section.to + 1 : section.to;\n builder.add(section.from, to, Decoration.replace({ block: true }));\n continue;\n }\n\n // While the selection intersects the section, reveal the raw YAML so the\n // source (and its completions) stay editable; the widget returns on exit.\n const selected = !state.readOnly && state.selection.ranges.some((range) => range.from < section.to && range.to > section.from);\n if (selected) continue;\n\n const rawContent = state.doc.sliceString(section.from, section.to);\n builder.add(\n section.from,\n section.to,\n Decoration.replace({\n widget: new DefaultFrontmatterWidget(section.id, rawContent, state.readOnly),\n block: true,\n }),\n );\n }\n\n if (visible && !hasFrontmatter && !state.readOnly) {\n builder.add(\n 0,\n 0,\n Decoration.widget({\n widget: new EmptyFrontmatterWidget(),\n side: -1,\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.reconfigured || tr.selection) {\n return buildFrontmatterDecos(tr.state);\n }\n return deco;\n },\n provide: (f) => [\n EditorView.decorations.from(f),\n EditorView.atomicRanges.of((view) =>\n view.state.facet(frontmatterVisibility) ? Decoration.none : view.state.field(f),\n ),\n ],\n});\n\nexport const frontmatterPreview: Extension = [frontmatterPreviewField];\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\n/** Locate the contiguous run of `|`-lines that forms a table (header +\n * separator on its first two lines). Returns the parsed grid plus the\n * 1-based line range it occupies, or null when the section has no table. */\nfunction parseSectionTable(\n state: EditorState,\n section: EditorSection,\n): { head: string[]; rows: string[][]; fromLine: number; toLine: number } | null {\n // Collect maximal runs of consecutive `|`-lines.\n const runs: { fromLine: number; toLine: number }[] = [];\n for (let l = section.startLine; l <= section.endLine; l++) {\n if (!state.doc.line(l).text.trim().startsWith(\"|\")) continue;\n const last = runs[runs.length - 1];\n if (last && last.toLine === l - 1) last.toLine = l;\n else runs.push({ fromLine: l, toLine: l });\n }\n\n for (const run of runs) {\n const lines: string[] = [];\n for (let l = run.fromLine; l <= run.toLine; l++) {\n lines.push(state.doc.line(l).text);\n }\n if (lines.length < 2 || !isTableSeparator(lines[1].trim())) continue;\n\n const head = parseTableCells(lines[0]);\n const rows = lines.slice(2).map(parseTableCells);\n return { head, rows, fromLine: run.fromLine, toLine: run.toLine };\n }\n\n return null;\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\") continue;\n\n const parsed = parseSectionTable(state, section);\n if (!parsed) continue;\n\n // Only the table's own lines are replaced; surrounding prose stays.\n // The raw source shows while the cursor is inside the table so it\n // stays editable (same convention as markdownSyntaxHiding).\n const from = state.doc.line(parsed.fromLine).from;\n const to = state.doc.line(parsed.toLine).to;\n if (cursor >= from && cursor <= to) continue;\n\n builder.add(\n from,\n 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","/**\n * Link Preview\n *\n * Replaces URLs in markdown note text with a visual link pill (outline +\n * external-open button):\n * - markdown links `[label](https://…)`\n * - bare URLs `https://…`\n *\n * Standalone `[label](url)` lines, bare-URL lines, and list items holding only\n * a link get the same pill treatment; a YouTube URL on such a line renders as\n * an inline player whenever the cursor is elsewhere, reverting to raw text\n * when the cursor moves onto the line.\n */\n\nimport { Decoration, EditorView, 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 } from \"./section-state\";\n\nconst MD_LINK_RE = /\\[([^\\]]*)\\]\\((https?:\\/\\/[^)\\s]+)\\)/g;\nconst BARE_URL_RE = /https?:\\/\\/\\S+/g;\nconst CODE_SPAN_RE = /`[^`\\n]*`/g;\n// Trailing punctuation is not part of the URL when a bare link ends a sentence.\nconst TRAILING_PUNCT_RE = /[.,;:!?)\\]}>'\"]$/;\n\n// ponytail: third local copy (playground lib + wql dashboard have others);\n// promote to @bitcobblers/wod-wiki-core when one more package needs it.\nfunction extractYouTubeVideoId(url: string): string | null {\n const standard = url.match(/[?&]v=([a-zA-Z0-9_-]{11})/);\n if (standard) return standard[1];\n const short = url.match(/youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n if (short) return short[1];\n const embed = url.match(/youtube\\.com\\/embed\\/([a-zA-Z0-9_-]{11})/);\n if (embed) return embed[1];\n return null;\n}\n\nfunction createExternalIcon(): SVGElement {\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"viewBox\", \"0 0 24 24\");\n svg.setAttribute(\"fill\", \"none\");\n svg.setAttribute(\"stroke\", \"currentColor\");\n svg.setAttribute(\"stroke-width\", \"2\");\n svg.setAttribute(\"stroke-linecap\", \"round\");\n svg.setAttribute(\"stroke-linejoin\", \"round\");\n svg.setAttribute(\"class\", \"h-3 w-3\");\n\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", \"M15 3h6v6\");\n svg.appendChild(path);\n\n const line = document.createElementNS(\"http://www.w3.org/2000/svg\", \"line\");\n line.setAttribute(\"x1\", \"10\");\n line.setAttribute(\"x2\", \"21\");\n line.setAttribute(\"y1\", \"14\");\n line.setAttribute(\"y2\", \"3\");\n svg.appendChild(line);\n\n const polyline = document.createElementNS(\"http://www.w3.org/2000/svg\", \"polyline\");\n polyline.setAttribute(\"points\", \"21 14 21 3 10 3\");\n svg.appendChild(polyline);\n\n return svg;\n}\n\n/** Inline pill: outlined link with an external-open (new tab) button. */\nclass LinkPillWidget extends WidgetType {\n constructor(\n readonly label: string,\n readonly url: string,\n ) {\n super();\n }\n\n eq(other: LinkPillWidget): boolean {\n return this.label === other.label && this.url === other.url;\n }\n\n toDOM(): HTMLElement {\n const pill = document.createElement(\"span\");\n pill.className = \"cm-link-pill\";\n\n const label = document.createElement(\"span\");\n label.className = \"cm-link-pill-label\";\n label.textContent = this.label || this.url;\n pill.appendChild(label);\n\n const open = document.createElement(\"a\");\n open.className = \"cm-link-pill-open\";\n open.href = this.url;\n open.target = \"_blank\";\n open.rel = \"noopener noreferrer\";\n open.title = this.url;\n open.setAttribute(\"aria-label\", `Open ${this.label || this.url} in new tab`);\n open.appendChild(createExternalIcon());\n pill.appendChild(open);\n\n return pill;\n }\n}\n\n/** Block-level YouTube player shown in read-only mode. */\nclass YouTubePlayerWidget extends WidgetType {\n constructor(\n readonly videoId: string,\n readonly title: string,\n ) {\n super();\n }\n\n eq(other: YouTubePlayerWidget): boolean {\n return this.videoId === other.videoId && this.title === other.title;\n }\n\n toDOM(): HTMLElement {\n const wrap = document.createElement(\"div\");\n wrap.className = \"cm-youtube-player\";\n\n const iframe = document.createElement(\"iframe\");\n iframe.className = \"cm-youtube-player-frame\";\n iframe.src = `https://www.youtube-nocookie.com/embed/${encodeURIComponent(this.videoId)}`;\n iframe.title = this.title || \"YouTube video\";\n iframe.setAttribute(\"allow\", \"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\");\n iframe.setAttribute(\"allowfullscreen\", \"\");\n iframe.setAttribute(\"loading\", \"lazy\");\n wrap.appendChild(iframe);\n\n return wrap;\n }\n\n get block(): boolean {\n return true;\n }\n}\n\ninterface LinkMatch {\n from: number;\n to: number;\n label: string;\n url: string;\n}\n\nfunction findLineLinks(line: { from: number; text: string }): LinkMatch[] {\n const links: LinkMatch[] = [];\n const codeSpans: [number, number][] = [];\n\n let match: RegExpExecArray | null;\n CODE_SPAN_RE.lastIndex = 0;\n while ((match = CODE_SPAN_RE.exec(line.text)) !== null) {\n codeSpans.push([match.index, match.index + match[0].length]);\n }\n const inCodeSpan = (index: number) => codeSpans.some(([a, b]) => index >= a && index < b);\n\n MD_LINK_RE.lastIndex = 0;\n while ((match = MD_LINK_RE.exec(line.text)) !== null) {\n if (inCodeSpan(match.index)) continue;\n links.push({\n from: line.from + match.index,\n to: line.from + match.index + match[0].length,\n label: match[1],\n url: match[2],\n });\n }\n\n BARE_URL_RE.lastIndex = 0;\n while ((match = BARE_URL_RE.exec(line.text)) !== null) {\n if (inCodeSpan(match.index)) continue;\n const found = match;\n // Skip URLs already consumed by a markdown-link match on the same line.\n if (links.some((l) => found.index >= l.from - line.from && found.index < l.to - line.from)) continue;\n let url = found[0];\n while (TRAILING_PUNCT_RE.test(url)) url = url.slice(0, -1);\n if (!url) continue;\n links.push({\n from: line.from + found.index,\n to: line.from + found.index + url.length,\n label: url,\n url,\n });\n }\n\n return links.sort((a, b) => a.from - b.from);\n}\n\nfunction buildLinkDecos(state: EditorState): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const { sections } = state.field(sectionField);\n const cursor = state.selection.main.head;\n const readOnly = state.readOnly;\n\n for (const section of sections) {\n if (section.type !== \"markdown\" && section.type !== \"embed\") continue;\n if (section.type === \"markdown\" && section.subtype === \"table\") continue;\n\n for (let l = section.startLine; l <= section.endLine; l++) {\n const line = state.doc.line(l);\n // Table lines are rendered by markdownTablePreview; pills would\n // overlap its whole-block replace decoration.\n if (line.text.trim().startsWith(\"|\")) continue;\n // While editing, keep the raw markdown on the cursor's own line so the\n // link text stays editable (same convention as markdownSyntaxHiding).\n if (!readOnly && cursor >= line.from && cursor <= line.to) continue;\n\n const links = findLineLinks(line);\n const trimmed = line.text.trimStart();\n const leading = line.text.length - trimmed.length;\n const trailing = line.text.length - line.text.trimEnd().length;\n // `- url` / `* url` / `+ url` items whose content is only the link count\n // as standalone; the player replaces the whole line incl. the marker.\n const bodyStart = leading + (trimmed.match(/^[-*+]\\s+/)?.[0].length ?? 0);\n\n for (const link of links) {\n // A standalone link line (bare URL, markdown link, or list item holding\n // only the link) becomes a YouTube player when the cursor is elsewhere;\n // the cursor's own line stays raw/editable (skip above).\n const wholeLine =\n links.length === 1 &&\n link.from === line.from + bodyStart &&\n link.to === line.to - trailing;\n const videoId = wholeLine ? extractYouTubeVideoId(link.url) : null;\n\n if (videoId) {\n builder.add(\n line.from,\n line.to,\n Decoration.replace({ widget: new YouTubePlayerWidget(videoId, link.label), block: true }),\n );\n } else {\n builder.add(\n link.from,\n link.to,\n Decoration.replace({ widget: new LinkPillWidget(link.label, link.url) }),\n );\n }\n }\n }\n }\n\n return builder.finish();\n}\n\nconst linkPreviewField = StateField.define<DecorationSet>({\n create(state) {\n return buildLinkDecos(state);\n },\n update(deco, tr) {\n if (tr.docChanged || tr.selection) {\n return buildLinkDecos(tr.state);\n }\n return deco;\n },\n provide: (f) => EditorView.decorations.from(f),\n});\n\nconst linkPreviewTheme = EditorView.baseTheme({\n \".cm-link-pill\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n padding: \"0 5px\",\n border: \"1px solid hsl(var(--border))\",\n borderRadius: \"6px\",\n backgroundColor: \"hsl(var(--muted) / 0.35)\",\n maxWidth: \"100%\",\n },\n \".cm-link-pill-label\": {\n color: \"hsl(var(--primary))\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n },\n \".cm-link-pill-open\": {\n display: \"inline-flex\",\n alignItems: \"center\",\n flexShrink: \"0\",\n color: \"hsl(var(--muted-foreground))\",\n textDecoration: \"none\",\n cursor: \"pointer\",\n },\n \".cm-link-pill-open:hover\": {\n color: \"hsl(var(--primary))\",\n },\n \".cm-youtube-player\": {\n width: \"100%\",\n aspectRatio: \"16 / 9\",\n margin: \"8px 0\",\n backgroundColor: \"#000\",\n borderRadius: \"6px\",\n overflow: \"hidden\",\n },\n \".cm-youtube-player-frame\": {\n display: \"block\",\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n },\n});\n\nexport const linkPreview: Extension = [linkPreviewField, linkPreviewTheme];\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 return `:session{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 { IMetric } from '@bitcobblers/wod-wiki-core';\nimport { metricPresentation, type MetricPresentationToken } from '@bitcobblers/wod-wiki-lang';\n\n// ── Time formatting ──────────────────────────────────────────────────────────\n\nexport function formatMMSS(ms: number): string {\n const totalSec = Math.floor(Math.max(0, ms) / 1000);\n const m = Math.floor(totalSec / 60);\n const s = totalSec % 60;\n return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;\n}\n\nexport function formatClockTime(d: Date): string {\n return d.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n });\n}\n\n// ── Metric badge presentation (runtime-badge surface) ────────────────────────\n\nexport const TONE_CLASS: Record<string, string> = {\n time: 'border-metric-time/40 bg-metric-time/10 text-metric-time',\n rep: 'border-metric-rep/40 bg-metric-rep/10 text-metric-rep',\n effort: 'border-metric-effort/40 bg-metric-effort/10 text-metric-effort',\n distance: 'border-metric-distance/40 bg-metric-distance/10 text-metric-distance',\n rounds: 'border-metric-rounds/40 bg-metric-rounds/10 text-metric-rounds',\n action: 'border-metric-action/40 bg-metric-action/10 text-metric-action',\n resistance: 'border-metric-resistance/40 bg-metric-resistance/10 text-metric-resistance',\n rest: 'border-metric-rest/40 bg-metric-rest/10 text-metric-rest italic',\n muted: 'border-border/70 bg-muted/50 text-muted-foreground',\n system: 'border-border/60 bg-muted/40 text-muted-foreground',\n unknown: 'border-border/60 bg-muted/40 text-muted-foreground',\n};\n\nexport function MetricBadge({ token }: { token: MetricPresentationToken }) {\n if (!token.visible || !token.label) return null;\n if (token.renderKind === 'comment') {\n return (\n <span className=\"text-[10px] italic text-muted-foreground\" title={token.tooltip}>\n {token.label}\n </span>\n );\n }\n return (\n <span\n className={`rounded-md border px-1.5 py-0.5 text-[10px] font-medium leading-tight select-none ${\n TONE_CLASS[token.tone] ?? TONE_CLASS.unknown\n }`}\n title={token.tooltip}\n >\n {token.label}\n </span>\n );\n}\n\n/** Metric badges for a statement/output metric group. */\nexport function presentBadges(metrics: Iterable<IMetric>): ReactNode {\n return (\n <>\n {metricPresentation\n .presentGroup(Array.from(metrics), 'runtime-badge')\n .map((token, i) => (\n <MetricBadge key={i} token={token} />\n ))}\n </>\n );\n}\n\nexport const OUTPUT_TYPE_CLASS: Record<string, string> = {\n segment: 'bg-type-segment/15 text-type-segment border-type-segment/30',\n milestone: 'bg-type-milestone/15 text-type-milestone border-type-milestone/30',\n completion: 'bg-type-completion/15 text-type-completion border-type-completion/30',\n metric: 'bg-type-metric/15 text-type-metric border-type-metric/30',\n system: 'bg-muted/70 text-muted-foreground border-border/50',\n event: 'bg-type-event/15 text-type-event border-type-event/30',\n group: 'bg-type-group/15 text-type-group border-type-group/30',\n load: 'bg-muted/70 text-muted-foreground border-border/50',\n compiler: 'bg-muted/70 text-muted-foreground border-border/50',\n analytics: 'bg-type-analytics/15 text-type-analytics border-type-analytics/30',\n};\n\nexport const OUTPUT_TYPE_DOT: Record<string, string> = {\n segment: 'bg-type-segment shadow-type-segment/50',\n milestone: 'bg-type-milestone shadow-type-milestone/50',\n completion: 'bg-type-completion shadow-type-completion/50',\n metric: 'bg-type-metric shadow-type-metric/50',\n system: 'bg-muted-foreground/40',\n event: 'bg-type-event shadow-type-event/50',\n group: 'bg-type-group shadow-type-group/50',\n load: 'bg-muted-foreground/40',\n compiler: 'bg-muted-foreground/40',\n analytics: 'bg-type-analytics shadow-type-analytics/50',\n};\n\n// ── Metric categorisation (fixed column vocabulary) ──────────────────────────\n\nexport interface CategorizedMetrics {\n efforts: IMetric[];\n reps: IMetric[];\n loads: IMetric[];\n rounds: IMetric[];\n durations: IMetric[];\n distances: IMetric[];\n hints: IMetric[];\n}\n\nexport function extractMetricsByCategory(metrics?: Iterable<IMetric>): CategorizedMetrics {\n if (!metrics) {\n return { efforts: [], reps: [], loads: [], rounds: [], durations: [], distances: [], hints: [] };\n }\n\n const list = Array.from(metrics) as IMetric[];\n return {\n efforts: list.filter((m) => {\n const t = String(m.type).toLowerCase();\n return t === 'effort' || t === 'text' || t === 'action' || t === 'label';\n }),\n reps: list.filter((m) => String(m.type).toLowerCase() === 'rep'),\n loads: list.filter((m) => {\n const t = String(m.type).toLowerCase();\n return t === 'resistance' || t === 'intensity' || t === 'load' || t === 'volume';\n }),\n rounds: list.filter((m) => {\n const t = String(m.type).toLowerCase();\n return t === 'rounds' || t === 'current-round' || t === 'increment';\n }),\n durations: list.filter((m) => {\n const t = String(m.type).toLowerCase();\n return t === 'duration' || t === 'time' || t === 'elapsed';\n }),\n distances: list.filter((m) => String(m.type).toLowerCase() === 'distance'),\n hints: list.filter((m) => {\n const t = String(m.type).toLowerCase();\n return t === 'hint' || t === 'custom' || t === 'system' || t === 'sound' || t === 'lap' || t === 'group';\n }),\n };\n}\n\n// ── Filter presets ───────────────────────────────────────────────────────────\n\nexport interface OutputFilterPreset {\n label: string;\n query: string;\n}\n\nexport type OutputFilterInput = string | OutputFilterPreset;\n\n/** Default row filter — segment statements only (the Workbench default). */\nexport const DEFAULT_PRIMARY_FILTER = 'type:segment';\n\nexport const DEFAULT_OUTPUT_FILTERS: OutputFilterPreset[] = [\n { label: 'All', query: '' },\n { label: 'Segments', query: 'type:segment' },\n { label: 'Events', query: 'type:event' },\n];\n\nexport function normalizeOutputFilter(filter: OutputFilterInput): OutputFilterPreset {\n if (typeof filter === 'object' && filter !== null && 'label' in filter && 'query' in filter) {\n return filter;\n }\n const str = String(filter).trim();\n const lower = str.toLowerCase();\n if (lower === 'all' || lower === '') {\n return { label: 'All', query: '' };\n }\n if (lower === 'segments' || lower === 'segment' || lower === 'type:segment') {\n return { label: 'Segments', query: 'type:segment' };\n }\n if (lower === 'events' || lower === 'event' || lower === 'type:event') {\n return { label: 'Events', query: 'type:event' };\n }\n if (lower === 'milestones' || lower === 'milestone' || lower === 'type:milestone') {\n return { label: 'Milestones', query: 'type:milestone' };\n }\n return { label: str, query: str };\n}\n\n// ── Row shape ────────────────────────────────────────────────────────────────\n\n/** Structural subset satisfied by live `IOutputStatement`s, stored statements,\n * and `EventRecord` event rows alike. */\nexport interface OutputStatementRow {\n readonly id?: number | string;\n readonly outputType?: string;\n readonly timeSpan?: { started: number; ended?: number };\n readonly metrics?: Iterable<IMetric>;\n readonly sourceBlockKey?: string;\n readonly completionReason?: string;\n}\n\n/** Client-side row filter: `type:<x>` targets the output type, otherwise free\n * text matches type/block key/completion reason/metric values. Aggregate\n * queries (`sum:`/`avg:`/`count:`) pass everything through. */\nfunction matchesOutputFilter(out: OutputStatementRow, filter: string): boolean {\n const lower = filter.toLowerCase().trim();\n if (!lower || lower === 'all') return true;\n if (lower.startsWith('sum:') || lower.startsWith('avg:') || lower.startsWith('count:')) {\n return true;\n }\n\n const outType = String(out.outputType || '').toLowerCase();\n if (lower.startsWith('type:')) {\n return outType.includes(lower.slice(5).trim());\n }\n\n const typeMatch = outType.includes(lower);\n const keyMatch = out.sourceBlockKey?.toLowerCase().includes(lower);\n const reasonMatch = out.completionReason?.toLowerCase().includes(lower);\n const metricMatch =\n out.metrics &&\n Array.from(out.metrics).some((m: IMetric) => {\n const valStr = typeof m.value === 'object' ? JSON.stringify(m.value) : String(m.value ?? '');\n return String(m.type).toLowerCase().includes(lower) || valStr.toLowerCase().includes(lower);\n });\n return Boolean(typeMatch || keyMatch || reasonMatch || metricMatch);\n}\n\n// ── Filter pills ─────────────────────────────────────────────────────────────\n\nexport function OutputFilterPills({\n presets,\n filter,\n onChange,\n}: {\n presets: OutputFilterPreset[];\n filter: string;\n onChange: (next: string) => void;\n}) {\n return (\n <div className=\"flex flex-wrap gap-1\">\n {presets.map((p) => (\n <button\n key={p.label}\n onClick={() => onChange(p.query)}\n data-testid={`output-filter-preset-${p.label.toLowerCase().replace(/\\s+/g, '-')}`}\n className={`rounded-lg border px-2.5 py-1 font-mono text-[11px] cursor-pointer transition-all ${\n filter === p.query || (p.query === '' && filter === '')\n ? 'border-primary bg-primary/10 text-primary font-bold shadow-xs'\n : 'border-border/70 bg-card text-foreground hover:bg-accent'\n }`}\n >\n {p.label}\n </button>\n ))}\n </div>\n );\n}\n\n// ── The table (≥ sm) and the Card List (< sm, wayfinder #992/#997) ───────────\n\nexport interface OutputStatementsTableProps {\n outputs: readonly OutputStatementRow[];\n /** Filter expression (`type:segment`, free text). Empty shows all. */\n filter?: string;\n /** Epoch ms the +offset column is relative to. Defaults to first statement start. */\n timeOrigin?: number;\n /** Clears the active filter — enables the Card List's Clear-filter\n * affordance on the filtered-empty state. Optional; hosts without a\n * clearable filter omit it. */\n onClearFilter?: () => void;\n}\n\n/** The Card List — phone presentation below `sm`. One stacked card per output\n * statement on a type-dot timeline rail: header (type chip + movement badges\n * | compact `+offset (elapsed)`), category-ordered metric badges, hints row.\n * Same rows, filter pipeline, and badge components as the table. */\nfunction StatementCards({\n rows,\n outputs,\n t0,\n onClearFilter,\n}: {\n rows: readonly OutputStatementRow[];\n outputs: readonly OutputStatementRow[];\n t0: number | undefined;\n onClearFilter?: () => void;\n}) {\n if (rows.length === 0) {\n const filtered = outputs.length > 0;\n return (\n <div\n className=\"rounded-xl border border-dashed border-border/70 bg-card/40 p-6 text-center\"\n data-testid=\"output-statements-empty\"\n >\n <p className=\"text-xs text-muted-foreground\">\n {filtered\n ? 'No output statements match the current filter.'\n : 'No output statements recorded for this run.'}\n </p>\n {filtered && onClearFilter && (\n <button\n type=\"button\"\n onClick={onClearFilter}\n className=\"mt-3 inline-flex cursor-pointer rounded-md border border-border bg-background px-3 py-1 text-[11px] font-semibold text-foreground shadow-xs transition-colors hover:bg-accent\"\n >\n Clear filter\n </button>\n )}\n </div>\n );\n }\n\n return (\n <ol className=\"flex flex-col\" data-testid=\"output-statements-cards\">\n {rows.map((out, idx) => {\n const cats = extractMetricsByCategory(out.metrics);\n const started = out.timeSpan?.started;\n const ended = out.timeSpan?.ended;\n const elapsedStr = ended !== undefined && started !== undefined ? formatMMSS(ended - started) : 'running';\n const offsetStr = started !== undefined && t0 !== undefined ? `+${formatMMSS(started - t0)}` : '+00:00';\n const typeKey = String(out.outputType);\n const hoverInfo = `#${out.id ?? idx + 1} · Block: ${out.sourceBlockKey || 'session'}${\n out.completionReason ? ` · Reason: ${out.completionReason}` : ''\n }`;\n // Category order per the locked Card List anatomy: reps → loads →\n // rounds → durations → distances; movement badges live in the header.\n const bodyMetrics = [...cats.reps, ...cats.loads, ...cats.rounds, ...cats.durations, ...cats.distances];\n const hasBody = bodyMetrics.length > 0;\n\n return (\n <li key={out.id ?? idx} className=\"relative pb-3 pl-6 last:pb-0\" title={hoverInfo}>\n {idx < rows.length - 1 && (\n <span aria-hidden className=\"absolute bottom-0 left-[5px] top-5 w-px bg-border/60\" />\n )}\n <span\n aria-hidden\n title={`Type: ${out.outputType} | ${hoverInfo}`}\n className={`absolute left-0 top-1.5 size-2.5 rounded-full shadow-md ring-2 ring-background ${\n OUTPUT_TYPE_DOT[typeKey] ?? OUTPUT_TYPE_DOT.system\n }`}\n />\n <article className=\"rounded-xl border border-border/60 bg-card px-3 py-2.5\">\n <header className=\"flex items-start justify-between gap-2 border-b border-border/40 pb-1.5\">\n <div className=\"flex min-w-0 flex-wrap items-center gap-1\">\n <span\n className={`inline-block shrink-0 rounded px-1.5 py-0.2 text-[9px] font-bold uppercase tracking-wider ${\n OUTPUT_TYPE_CLASS[typeKey] ?? OUTPUT_TYPE_CLASS.system\n }`}\n >\n {String(out.outputType ?? 'system').slice(0, 4)}\n </span>\n {presentBadges(cats.efforts)}\n </div>\n <div className=\"whitespace-nowrap text-right font-mono text-[11px] tabular-nums leading-tight\">\n <span className=\"font-bold text-primary\">{offsetStr}</span>{' '}\n <span className=\"text-[10px] text-muted-foreground/80\">({elapsedStr})</span>\n </div>\n </header>\n {hasBody && (\n <div className=\"flex flex-wrap gap-1 pt-1.5\">{presentBadges(bodyMetrics)}</div>\n )}\n {cats.hints.length > 0 && (\n <div className=\"mt-1.5 flex flex-wrap gap-1 border-t border-border/30 pt-1.5\">\n {presentBadges(cats.hints)}\n </div>\n )}\n {!hasBody && cats.hints.length === 0 && (\n <p className=\"pt-1.5 text-[11px] text-muted-foreground/60\">No metrics on this statement</p>\n )}\n </article>\n </li>\n );\n })}\n </ol>\n );\n}\n\n/** The Session Results surface — Card List below `sm`, the 9-column table at\n * `sm` and above. One component: same props, same filtering; hosts (analytics\n * explorer, editor query blocks, workbench) inherit the phone path. */\nexport function OutputStatementsTable({\n outputs,\n filter = '',\n timeOrigin,\n onClearFilter,\n}: OutputStatementsTableProps) {\n const t0 = timeOrigin ?? (outputs.length > 0 ? outputs[0].timeSpan?.started : undefined);\n\n const rows = useMemo(() => {\n if (!filter.trim()) return outputs;\n return outputs.filter((out) => matchesOutputFilter(out, filter));\n }, [outputs, filter]);\n\n return (\n <>\n {/* Phone: Card List below sm (wayfinder #992/#997) */}\n <div className=\"sm:hidden\">\n <StatementCards rows={rows} outputs={outputs} t0={t0} onClearFilter={onClearFilter} />\n </div>\n {/* sm and up: the 9-column table */}\n <div className=\"hidden overflow-x-auto rounded-md border border-border/50 bg-background/40 sm:block\">\n <table className=\"w-full text-left font-mono text-xs border-collapse\" data-testid=\"output-statements-table\">\n <thead>\n <tr className=\"border-b border-border/60 bg-muted/40 text-[10px] uppercase font-bold text-muted-foreground tracking-wider whitespace-nowrap\">\n <th className=\"p-2 w-12 text-center\">Type</th>\n <th className=\"p-2 min-w-[110px]\">Time</th>\n <th className=\"p-2 font-sans min-w-[140px]\">🏃 Movement</th>\n <th className=\"p-2 font-sans min-w-[60px]\">🔢 Reps</th>\n <th className=\"p-2 font-sans min-w-[70px]\">💪 Load</th>\n <th className=\"p-2 font-sans min-w-[80px]\">🔄 Rounds</th>\n <th className=\"p-2 font-sans min-w-[70px]\">⏱️ Target</th>\n <th className=\"p-2 font-sans min-w-[70px]\">📏 Distance</th>\n <th className=\"p-2 font-sans min-w-[110px]\">🏷️ Hints</th>\n </tr>\n </thead>\n <tbody className=\"divide-y divide-border/40\">\n {rows.length === 0 ? (\n <tr>\n <td colSpan={9} className=\"p-8 text-center text-muted-foreground font-sans text-xs\">\n {outputs.length === 0\n ? 'No output statements recorded for this run.'\n : 'No output statements match the current filter.'}\n </td>\n </tr>\n ) : (\n rows.map((out, idx) => {\n const cats = extractMetricsByCategory(out.metrics);\n const started = out.timeSpan?.started;\n const ended = out.timeSpan?.ended;\n const elapsedStr = ended !== undefined && started !== undefined ? formatMMSS(ended - started) : 'running';\n const wallTimeStr = formatClockTime(new Date(ended ?? started ?? 0));\n const offsetStr = started !== undefined && t0 !== undefined ? `+${formatMMSS(started - t0)}` : '+00:00';\n const hoverInfo = `#${out.id ?? idx + 1} · Block: ${out.sourceBlockKey || 'session'}${\n out.completionReason ? ` · Reason: ${out.completionReason}` : ''\n }`;\n\n const badgeCell = (badges: IMetric[]) => (\n <td className=\"p-2 font-sans\">\n {badges.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">{presentBadges(badges)}</div>\n ) : (\n <span className=\"text-muted-foreground/30 font-mono text-[11px] select-none\">—</span>\n )}\n </td>\n );\n\n return (\n <tr\n key={out.id ?? idx}\n title={hoverInfo}\n className=\"hover:bg-muted/30 transition-colors group cursor-default\"\n >\n {/* 1. Type (minimal size, first column) */}\n <td className=\"p-2 text-center whitespace-nowrap\">\n <span\n className={`inline-block rounded px-1.5 py-0.2 text-[9px] font-bold uppercase tracking-wider ${\n OUTPUT_TYPE_CLASS[String(out.outputType)] ?? OUTPUT_TYPE_CLASS.system\n }`}\n title={`Type: ${out.outputType} | ${hoverInfo}`}\n >\n {String(out.outputType ?? 'system').slice(0, 4)}\n </span>\n </td>\n\n {/* 2. Consolidated time (line 1: offset & elapsed, line 2: wall time) */}\n <td className=\"p-2 whitespace-nowrap leading-tight\">\n <div className=\"flex items-center gap-1.5 font-mono text-[11px]\">\n <span className=\"font-bold text-primary tabular-nums\">{offsetStr}</span>\n <span className=\"text-[10px] text-muted-foreground/80 tabular-nums\">({elapsedStr})</span>\n </div>\n <div className=\"font-mono text-[10px] text-muted-foreground/70 tabular-nums\">\n {wallTimeStr}\n </div>\n </td>\n\n {/* 3. Movement */}\n {badgeCell(cats.efforts)}\n {/* 4. Reps */}\n {badgeCell(cats.reps)}\n {/* 5. Load */}\n {badgeCell(cats.loads)}\n {/* 6. Rounds */}\n {badgeCell(cats.rounds)}\n {/* 7. Target (durations) */}\n {badgeCell(cats.durations)}\n {/* 8. Distance */}\n {badgeCell(cats.distances)}\n {/* 9. Hints */}\n {badgeCell(cats.hints)}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n </>\n );\n}\n","import { useMemo, useState, type ReactNode } from 'react';\nimport type { RowsQueryResult, RowsRun } from '@bitcobblers/wod-wiki-wql';\nimport {\n OutputStatementsTable,\n OutputFilterPills,\n DEFAULT_OUTPUT_FILTERS,\n DEFAULT_PRIMARY_FILTER,\n normalizeOutputFilter,\n type OutputFilterInput,\n type OutputStatementRow,\n} from './OutputStatementsTable';\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 /** Filter presets for the pills row (defaults to All/Segments/Events). */\n presets?: OutputFilterInput[];\n /** Controlled filter expression — omit to let the table own its filter state. */\n filter?: string;\n onFilterChange?: (filter: string) => void;\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\n/** The Session Results Table — renders a Rows Query result: one section per\n * run, filter pills on top, and the shared statement table as the body. */\nexport function RowsTable({\n result,\n renderRunHeaderExtra,\n presets,\n filter,\n onFilterChange,\n}: RowsTableProps) {\n const [internalFilter, setInternalFilter] = useState(DEFAULT_PRIMARY_FILTER);\n const activeFilter = filter ?? internalFilter;\n const setFilter = onFilterChange ?? setInternalFilter;\n\n const normalizedPresets = useMemo(\n () => (presets ?? DEFAULT_OUTPUT_FILTERS).map(normalizeOutputFilter),\n [presets],\n );\n\n const runs = useMemo(\n () =>\n result.runs.map((run) => ({\n run,\n // Event rows are the promoted statement snapshots — structurally the\n // same shape as stored output statements.\n statements: run.events as unknown as OutputStatementRow[],\n startTime: run.events[0]?.timeSpan?.started ?? run.timestamp,\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 data-testid=\"rows-table\" className=\"flex flex-col gap-3\">\n <OutputFilterPills\n presets={normalizedPresets}\n filter={activeFilter}\n onChange={setFilter}\n />\n {runs.map(({ run, statements, startTime }) => (\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 <OutputStatementsTable\n outputs={statements}\n filter={activeFilter}\n timeOrigin={startTime}\n />\n </section>\n ))}\n </div>\n );\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 { useCallback, useEffect, useState } from 'react';\nimport { type EventRecord, MetricType } from '@bitcobblers/wod-wiki-core';\nimport { parseQuery, isFindQuery, type RowsQueryResult, type RowsRun, type ParsedFindQuery } 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: EventRecord[] | 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}\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-rpe-easy/15 hover:text-rpe-easy',\n rpe > 3 && rpe <= 6 && 'hover:bg-rpe-moderate/15 hover:text-rpe-moderate',\n rpe > 6 && rpe <= 8 && 'hover:bg-rpe-hard/15 hover:text-rpe-hard',\n rpe > 8 && 'hover:bg-rpe-max/15 hover:text-rpe-max',\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}: 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(`:session{block:${blockContentId}}`);\n if (!isFindQuery(wideQuery)) return;\n\n void (executor.runFind ? executor.runFind(wideQuery as ParsedFindQuery) : (executor as any).runRows(wideQuery))\n .then((res: any) => {\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 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 { ReactNode, useMemo } from 'react';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\n\nexport interface WqlEmptyStateProps {\n result?: QueryResult | undefined;\n className?: string;\n actions?: ReactNode;\n}\n\nexport function WqlEmptyState({ result, className, actions }: 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 && !actions) 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 && <div>{message}</div>}\n {actions && <div className=\"mt-3\">{actions}</div>}\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(undefined, { maximumSignificantDigits: 3 })}\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 { AnyParsedQuery, QueryResult, Series, TabularResult } from '@bitcobblers/wod-wiki-wql';\n\nexport interface MergedPoint {\n ts: number;\n [label: string]: number | string;\n}\n\n/**\n * Adapter — pipeline/document outputs ride the QueryResult shape the widget\n * renderers already consume. The `parsed` union widens to the aggregate\n * member: chart renderers read only `error`/`family` off it, never metric\n * fields of the narrower members.\n */\nexport function toChartResult(input: {\n parsed: AnyParsedQuery;\n series?: Series[];\n unit?: string;\n error?: string;\n table?: TabularResult;\n}): QueryResult {\n // Presentation-union cast (AnyParsedQuery → aggregate member): renderers\n // consume `.error`/`.family` only; the raw query text stays intact.\n const parsed = input.parsed as QueryResult['parsed'];\n return {\n parsed,\n series: input.series ?? [],\n stages: { selected: 0, buckets: 0, aggregated: 0, groups: 0 },\n matched: [],\n ...(input.unit !== undefined ? { unit: input.unit } : {}),\n ...(input.error ? { error: input.error } : {}),\n ...(input.table ? { table: input.table } : {}),\n };\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\nfunction formatValue(v: number, unit?: string): string {\n return `${v.toLocaleString()}${unit ? ` ${unit}` : ''}`;\n}\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', formatValue(shape.value, unit)]],\n more: 0,\n };\n }\n if (shape.kind === 'bars') {\n const all = result.series.map((s) => [\n s.label,\n formatValue(s.points[0]?.value ?? 0, unit),\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 ? formatValue(v, unit) : '—';\n }),\n ]);\n return { head, body, more: Math.max(0, timestamps.length - MAX_ROWS) };\n }\n return { head: [], body: [], more: 0 };\n }, [result, shape, unit]);\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, attributes, params, label, unit }: GoalRingsProps & { attributes?: Record<string, string> }) {\n if (!result || result.series.length === 0) {\n return <WqlEmptyState result={result} />;\n }\n\n const rawTarget = attributes?.['goal'] ?? (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-signal-positive';\n textColor = 'text-signal-positive';\n } else if (pct >= 75) {\n strokeColor = 'stroke-primary';\n } else if (pct >= 50) {\n strokeColor = 'stroke-signal-caution';\n } else {\n strokeColor = 'stroke-signal-negative';\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, attributes }: ZoneDistributionProps & { attributes?: Record<string, string> }) {\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 const rawTargets = attributes?.['targets'];\n if (rawTargets) {\n const rawTokens = rawTargets.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 } else if (params && params.length > 0) {\n // Legacy positional form (pre-decision-22 notes): one space-separated\n // params token carrying the same targets.\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 }\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-signal-positive',\n bgClass: 'text-signal-positive',\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-signal-caution',\n bgClass: 'text-signal-caution',\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-signal-negative',\n bgClass: 'text-signal-negative',\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-signal-positive'\n : delta > 0\n ? 'text-signal-caution'\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 React, { type ReactNode } from 'react';\nimport { PieChart, Pie, Cell, Tooltip, ResponsiveContainer } from 'recharts';\nimport type { QueryResult } from '@bitcobblers/wod-wiki-wql';\nimport { isDashboardWidgetType, PLANNED_WIDGET_TYPES, resolveWidgetType, unknownWidgetTypeMessage } from '@bitcobblers/wod-wiki-wql';\nimport { SERIES_COLORS } from './chartPalette';\nimport { compactNumber } from './chartData';\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 /** Fence-tag presentation attributes (decision 22) — preferred over legacy positional params. */\n attributes?: Record<string, string>;\n}\n\nexport function WidgetChart({ type, result, label, unit, params, attributes }: WidgetChartProps) {\n if (type !== '' && !isDashboardWidgetType(type)) {\n return <WidgetProblemBadge message={unknownWidgetTypeMessage(type)} />;\n }\n\n const resolved = resolveWidgetType(type);\n\n if (resolved === 'table' && (result as any)?.table) {\n return (\n <div className=\"w-full h-full min-h-[160px]\">\n <TabularTable table={(result as any).table} />\n </div>\n );\n }\n if (resolved === 'list' && (result as any)?.parsed?.family === 'find') {\n return (\n <div className=\"w-full h-full min-h-[160px]\">\n <ThingList result={result as any} />\n </div>\n );\n }\n\n if (!result || result.parsed.error || ('series' in result && 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, attributes)}\n </div>\n );\n}\n\nfunction renderChart(\n type: string,\n result: QueryResult,\n label?: string,\n unit?: string,\n params?: string[],\n attributes?: Record<string, string>,\n): ReactNode {\n switch (type) {\n case 'value':\n return <QueryValue result={result} label={label ?? ''} unit={unit} />;\n case 'donut':\n return <WqlDonut result={result} unit={unit} label={label} />;\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} attributes={attributes} params={params} label={label} unit={unit} />;\n case 'zone-distribution':\n return <ZoneDistribution result={result} attributes={attributes} 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 unknown as { has?: (t: string) => boolean }).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/** Donut (`:donut` sink / dashboard `donut` widget): one slice per series —\n * the series' point total. Recharts Pie with an inner radius; an\n * accessible text summary rides alongside for screen readers. */\nfunction WqlDonut({ result, unit, label }: { result: QueryResult; unit?: string; label?: string }) {\n const data = result.series.map((s, i) => ({\n name: s.label,\n value: s.points.reduce((sum, p) => sum + (p.missing ? 0 : p.value), 0),\n fill: SERIES_COLORS[i % SERIES_COLORS.length],\n }));\n const slices = data.filter((d) => d.value > 0);\n const summaryUnit = result.series[0]?.unit ?? unit ?? '';\n const summary = slices.length > 0\n ? `${label ?? 'distribution'}: ${slices.map((d) => `${d.name} ${compactNumber(d.value)}${summaryUnit}`).join(', ')}`\n : 'no data';\n\n return (\n <div\n className=\"w-full h-full flex flex-col items-center justify-center\"\n role=\"img\"\n aria-label={summary}\n data-testid=\"wql-donut\"\n >\n {slices.length === 0 ? (\n <span className=\"text-xs text-muted-foreground\">No data</span>\n ) : (\n <>\n <div className=\"w-full h-[220px] min-h-[160px] shrink-0\">\n <ResponsiveDonut data={slices} unit={summaryUnit} />\n </div>\n <ul className=\"shrink-0 text-[10px] font-mono text-muted-foreground space-y-0.5\" aria-hidden=\"true\">\n {slices.map((d) => (\n <li key={d.name} className=\"flex items-center gap-1.5\">\n <span className=\"inline-block size-2 rounded-sm\" style={{ background: d.fill }} />\n <span>{`${d.name} ${compactNumber(d.value)}${summaryUnit}`}</span>\n </li>\n ))}\n </ul>\n </>\n )}\n </div>\n );\n}\n\nfunction ResponsiveDonut({ data, unit }: { data: Array<{ name: string; value: number; fill: string }>; unit: string }) {\n return (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <PieChart margin={{ top: 4, right: 8, bottom: 4, left: 8 }}>\n <Pie\n data={data}\n dataKey=\"value\"\n nameKey=\"name\"\n cx=\"50%\"\n cy=\"50%\"\n innerRadius=\"55%\"\n outerRadius=\"85%\"\n paddingAngle={2}\n stroke=\"hsl(var(--background))\"\n isAnimationActive={false}\n >\n {data.map((d) => (\n <Cell key={d.name} fill={d.fill} />\n ))}\n </Pie>\n <Tooltip formatter={(value) => `${compactNumber(Number(value))}${unit}`} />\n </PieChart>\n </ResponsiveContainer>\n );\n}\n\nfunction TabularTable({ table }: { table: { columns: Array<{ name: string; unit?: string }>; rows: Array<Record<string, unknown>>; groups?: Array<{ key: string; label: string; rows: Array<Record<string, unknown>> }> } }) {\n return (\n <div className=\"h-full overflow-auto\" data-testid=\"tabular-table\">\n <table className=\"w-full text-[11px] font-mono border-collapse\">\n <thead>\n <tr className=\"border-b border-border text-muted-foreground text-left\">\n {table.columns.map((c) => (\n <th key={c.name} className=\"py-1 px-2 font-medium\">\n {c.name}{c.unit ? ` (${c.unit})` : ''}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {table.groups ? (\n table.groups.map((group) => (\n <React.Fragment key={group.key}>\n <tr className=\"bg-muted/40 font-semibold border-b border-border/60\">\n <td colSpan={table.columns.length} className=\"py-1 px-2\">\n {group.label}\n </td>\n </tr>\n {group.rows.map((row, i) => (\n <tr key={i} className=\"border-b border-border/40 hover:bg-muted/20\">\n {table.columns.map((c) => (\n <td key={c.name} className=\"py-1 px-2 whitespace-nowrap\">\n {String(row[c.name] ?? '')}\n </td>\n ))}\n </tr>\n ))}\n </React.Fragment>\n ))\n ) : (\n table.rows.map((row, i) => (\n <tr key={i} className=\"border-b border-border/40 hover:bg-muted/20\">\n {table.columns.map((c) => (\n <td key={c.name} className=\"py-1 px-2 whitespace-nowrap\">\n {String(row[c.name] ?? '')}\n </td>\n ))}\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n );\n}\n\nfunction ThingList({ result }: { result: any }) {\n const items = result.notes?.length ? result.notes : result.blocks?.length ? result.blocks : result.efforts?.length ? result.efforts : result.runs ?? [];\n return (\n <div className=\"h-full overflow-auto space-y-1\" data-testid=\"thing-list\">\n {items.map((item: any, i: number) => (\n <div key={item.id ?? item.resultId ?? i} className=\"py-1 px-2 text-xs border-b border-border/40 truncate\">\n {item.title ?? item.label ?? item.noteTitle ?? item.id ?? item.resultId}\n </div>\n ))}\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 { useEffect, useState } from 'react';\n\nexport interface VisualViewportRect {\n /**\n * Visible viewport height in px, or null when the VisualViewport API is\n * unavailable (SSR, older engines). Consumers should fall back to a\n * dynamic-viewport unit (e.g. `100dvh`) in that case.\n */\n height: number | null;\n /** Distance from the layout viewport top to the visual viewport top (pinch-zoom). */\n offsetTop: number;\n /**\n * Distance the visual viewport's bottom edge sits above the layout\n * viewport's bottom edge — i.e. the on-screen keyboard's height (0 when\n * the keyboard is closed).\n */\n offsetBottom: number;\n}\n\nfunction readVisualViewport(): VisualViewportRect {\n if (typeof window === 'undefined' || !window.visualViewport) {\n return { height: null, offsetTop: 0, offsetBottom: 0 };\n }\n const vv = window.visualViewport;\n return {\n height: vv.height,\n offsetTop: vv.offsetTop,\n offsetBottom: Math.max(0, window.innerHeight - vv.height - vv.offsetTop),\n };\n}\n\n/**\n * Tracks `window.visualViewport` (resize + scroll). Drives keyboard-aware\n * bottom-anchored UI (dialogs, thumb docks) without keyboard-size guessing\n * or browser sniffing: the platform reports the visible rectangle.\n */\nexport function useVisualViewportRect(): VisualViewportRect {\n const [rect, setRect] = useState<VisualViewportRect>(readVisualViewport);\n\n useEffect(() => {\n const vv = window.visualViewport;\n if (!vv) return;\n const update = () => setRect(readVisualViewport());\n vv.addEventListener('resize', update);\n vv.addEventListener('scroll', update);\n return () => {\n vv.removeEventListener('resize', update);\n vv.removeEventListener('scroll', update);\n };\n }, []);\n\n return rect;\n}\n","import { useEffect, useId, useRef, type CSSProperties, type KeyboardEvent, type ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport { X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport { useVisualViewportRect } from './visualViewport';\n\nexport interface EditorDialogProps {\n /** Controls visibility; the dialog unmounts its portal when closed. */\n open: boolean;\n onClose: () => void;\n /** Dialog heading (aria-labelledby target). */\n title: string;\n /** Optional secondary line under the title (aria-describedby target). */\n description?: string;\n /** Body content — scrolls independently of the header/footer. */\n children: ReactNode;\n /** Sticky footer (e.g. Cancel/Save) — pinned above the keyboard on mobile. */\n footer?: ReactNode;\n /** 'default' (centered/full-screen, unchanged) or 'sheet' (mobile bottom\n * sheet over the lower visible viewport, non-input initial focus,\n * safe-area footer; desktop keeps the centered panel). */\n presentation?: 'default' | 'sheet';\n}\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * EditorDialog — accessible editor surface shared by dashboard/effort/note\n * editing flows.\n *\n * Deliberately NOT a native `<dialog>`: the top layer would obscure any\n * body-portaled surfaces a host renders above it (the WQL composer's\n * hover/touch affordances, palette results). This renders a plain fixed\n * overlay via portal, so portaled content keeps painting and receiving\n * clicks/focus above it.\n *\n * Focus containment is lenient by the same constraint: Tab cycles within the\n * dialog only while focus is inside it — focus that moves into a body-portaled\n * popover is never yanked back, and the popover keeps its own keyboard\n * handling. Escape is handled at the dialog container, so Escape consumed by\n * a popover (e.g. to dismiss it) does not also close the dialog.\n *\n * Mobile (< sm): full visual-viewport screen driven by `window.visualViewport`\n * (falls back to `100dvh`) — the keyboard shrinking the viewport lifts the\n * footer, never the focused field. Desktop (sm+): contained centered panel.\n */\nexport function EditorDialog({\n open,\n onClose,\n title,\n description,\n children,\n footer,\n presentation = 'default',\n}: EditorDialogProps) {\n const titleId = useId();\n const descriptionId = useId();\n const panelRef = useRef<HTMLDivElement>(null);\n const restoreFocusRef = useRef<Element | null>(null);\n const viewport = useVisualViewportRect();\n const sheet = presentation === 'sheet';\n\n // Background scroll lock + initial focus while open; restore on close.\n // Sheet presentation never pulls focus into an input — the keyboard must\n // stay closed until an explicit tap — so it skips [data-autofocus].\n useEffect(() => {\n if (!open) return;\n restoreFocusRef.current = document.activeElement;\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n const frame = requestAnimationFrame(() => {\n const panel = panelRef.current;\n if (!panel) return;\n const target = sheet\n ? panel\n : (panel.querySelector<HTMLElement>('[data-autofocus]') ?? panel);\n target.focus();\n });\n return () => {\n cancelAnimationFrame(frame);\n document.body.style.overflow = previousOverflow;\n const restore = restoreFocusRef.current;\n if (restore instanceof HTMLElement && document.contains(restore)) restore.focus();\n };\n }, [open, sheet]);\n\n if (!open || typeof document === 'undefined') return null;\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n if (event.key === 'Escape') {\n event.stopPropagation();\n onClose();\n return;\n }\n if (event.key !== 'Tab') return;\n const panel = panelRef.current;\n if (!panel) return;\n const focusable = Array.from(panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n if (focusable.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n const active = document.activeElement;\n if (event.shiftKey && (active === first || !panel.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n\n // Visual-viewport anchoring: `left/right: 0` + explicit top/height keeps the\n // dialog exactly on the visible rectangle (keyboard lift, pinch-zoom top),\n // with 100dvh as the no-VisualViewport fallback.\n const viewportStyle: CSSProperties = {\n top: viewport.offsetTop,\n height: viewport.height ?? '100dvh',\n };\n\n return createPortal(\n <div\n className={cn(\n 'fixed left-0 right-0 z-50 flex flex-col bg-black/40 dark:bg-black/60 sm:items-center sm:justify-center sm:bg-background/80 sm:p-4 sm:backdrop-blur-sm',\n sheet && 'max-sm:justify-end',\n )}\n style={viewportStyle}\n onMouseDown={(event) => {\n if (event.target === event.currentTarget) onClose();\n }}\n >\n <div\n ref={panelRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={description ? descriptionId : undefined}\n tabIndex={-1}\n onKeyDown={handleKeyDown}\n className={cn(\n 'flex min-h-0 w-full flex-col overflow-hidden bg-card outline-none sm:max-h-full sm:max-w-2xl sm:flex-none sm:rounded-xl sm:border sm:border-border sm:shadow-2xl',\n // Sheet: bottom-anchored at its natural height over the lower\n // visible viewport (expands toward full height as content needs),\n // with a rounded top edge; desktop keeps the centered panel.\n sheet\n ? 'max-sm:flex-none max-sm:min-h-[66%] max-sm:max-h-full max-sm:rounded-t-2xl'\n : 'flex-1 sm:max-h-full',\n )}\n >\n {sheet && (\n <div aria-hidden className=\"flex justify-center pt-2 sm:hidden\">\n <div className=\"h-1 w-10 rounded-full bg-border\" />\n </div>\n )}\n <div className=\"flex items-start justify-between gap-3 border-b border-border/80 px-4 py-3 sm:px-6 sm:py-4\">\n <div className=\"min-w-0\">\n <h2 id={titleId} className=\"text-base font-semibold text-foreground\">\n {title}\n </h2>\n {description && (\n <p id={descriptionId} className=\"mt-0.5 text-xs text-muted-foreground\">\n {description}\n </p>\n )}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"flex size-11 shrink-0 items-center justify-center rounded-lg text-muted-foreground transition-colors hover:bg-muted hover:text-foreground sm:size-9\"\n >\n <X className=\"size-5 sm:size-4\" />\n </button>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4 sm:px-6\">{children}</div>\n {footer && (\n <div\n className={cn(\n 'border-t border-border/80 bg-muted/10 px-4 py-3 sm:px-6',\n // 44px default mobile density; sheet actions get the full\n // 48px touch target.\n sheet\n ? 'max-sm:[&_button]:min-h-12 max-sm:[&_button]:min-w-11'\n : 'max-sm:[&_button]:min-h-11 max-sm:[&_button]:min-w-11',\n // Sheet rides the visual viewport bottom; clear the home\n // indicator / gesture area.\n sheet && 'max-sm:pb-[max(0.75rem,env(safe-area-inset-bottom))]',\n )}\n >\n {footer}\n </div>\n )}\n </div>\n </div>,\n document.body,\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\n/**\n * Heterogeneous slot store: `Editor` components are invariant in `TValue`\n * (`onChange: (value: TValue) => void`), so no concrete generic unifies\n * every registered slot. The store uses the `any` escape at this single\n * internal boundary; the public per-slot API stays generic.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- see above\ntype StoredSlot = CustomSlotDefinition<any>;\n\nexport class ComposerRegistry {\n private readonly slots = new Map<string, StoredSlot>();\n private readonly listeners = new Set<() => void>();\n private cachedList: StoredSlot[] = [];\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 | undefined {\n return this.slots.get(type);\n }\n\n listSlots(): CustomSlotDefinition[] {\n return this.cachedList;\n }\n getAllSlots(): CustomSlotDefinition[] {\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[] {\n const slots = useSyncExternalStore(\n (cb) => registry.subscribe(cb),\n () => registry.listSlots(),\n );\n return useMemo(() => slots, [slots]);\n}\n","/**\n * The WqlComposer pill vocabulary — types, metadata, and option lists.\n * Compilation and restore live in `./queryAst` (ticket 013): composer state\n * is the C6 AST; strings are produced only through the engine serializer.\n *\n * Canonical structure (work item 3): a query has a `kind` (find documents vs\n * measure numbers), a singular `target` (colon `<target>` head), and an optional\n * `source` storage scope (`Where stored` — WQL_SOURCE_VALUES; all sources =\n * no source filter). Filter capability sets mirror what the QueryService\n * executors actually apply — parser acceptance alone never advertises a\n * clause (`has:` parses but no executor applies it, so it is not offered).\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-wql) — 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 {\n allowedFilterTypesForTarget,\n CONTENT_GROUPING_DIMENSIONS,\n WQL_AGGREGATORS,\n WQL_CALC_TARGETS,\n WQL_DISPLAY_UNITS,\n WQL_FIND_TARGETS,\n WQL_METRIC_AGGREGATES,\n WQL_METRIC_FAMILIES,\n WQL_RESULT_PLANES,\n WQL_SOURCE_VALUES,\n WQL_TAG_KEYS,\n WQL_VIRTUAL_DIMS,\n} from '@bitcobblers/wod-wiki-wql';\n\nexport { allowedFilterTypesForTarget, CONTENT_GROUPING_DIMENSIONS };\n\nexport type ClauseType =\n | 'kind'\n | 'target'\n | 'source'\n | 'text'\n | 'catalog'\n | 'tag'\n | 'effort'\n | 'domain'\n | 'format'\n | 'equipment'\n | 'quality'\n | 'intent'\n | 'discipline'\n | 'intensity'\n | 'origin'\n | 'type'\n | 'time'\n | 'where'\n | 'agg'\n | 'metric'\n | 'groupby'\n | 'rollup'\n | 'unit'\n | 'result'\n | 'block'\n | 'note'\n | 'page'\n | 'plane'\n | 'pipes';\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 /** Index into the parsed AST's global filters array (ast.filters[filterIndex])\n * — identifies one specific filter occurrence; editing one occurrence must\n * never merge or rewrite another. */\n filterIndex?: number;\n /** True when this filter occurrence is negated (`!key:value`). */\n negate?: boolean;\n}\n\n// ── Canonical kind / target / scope options ────────────────────────────────\n\n/** Query shape: `find` compiles the colon `<target>` skeleton (`:note{…}`),\n * `aggregate` compiles `agg:metric{filters} by {dims}` and exposes agg/metric. */\nexport const KIND_OPTIONS = [\n { value: 'find', label: 'Find', description: 'Find things: notes, blocks, efforts, sessions, tables' },\n { value: 'aggregate', label: 'Measure', description: 'Measure numbers: aggregate a metric by dimensions' },\n];\n\n/** Singular find targets — the colon `<target>` head (C7 closed enum). */\nexport const TARGET_OPTIONS = WQL_FIND_TARGETS.map((t) => ({\n value: t,\n label: t.charAt(0).toUpperCase() + t.slice(1),\n description: {\n note: 'Find notes across journal, feeds and playground',\n block: 'Find fenced workout/dashboard regions',\n effort: 'Find registered movements and benchmarks',\n session: 'Find completed workout sessions',\n segment: 'Cross-workout segment table',\n event: 'Telemetry events table',\n }[t],\n}));\n\n/** Storage scopes — the `source:` filter values (`Where stored`). All\n * sources means no source filter at all. */\nexport const SOURCE_OPTIONS = WQL_SOURCE_VALUES.map((s) => ({\n value: s,\n label: s.charAt(0).toUpperCase() + s.slice(1),\n description: {\n journal: 'Daily journal notes',\n feeds: 'Curated feed notes',\n guides: 'Static guide pages',\n playground: 'Playground scratch pages',\n dashboards: 'Dashboard notes',\n efforts: 'Exercise library notes',\n }[s],\n}));\n\n/** Output-statement planes for `plane:` on `:session` (executor narrows\n * events by the promoted `outputType` column). */\nexport const PLANE_OPTIONS = WQL_RESULT_PLANES.map((v) => ({ value: v, label: v }));\n\n\n// ── Options & Data Sources ──────────────────────────────────────────────────\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 }));\n/** Multi-unit bucket widths — parse accepts any `N>1` + d|w (single-unit\n * day/week grouping is `by {day}`/`by {week}`, never `.rollup(1w)`); the\n * list is common suggestions, typed widths are parser-validated. */\nexport const ROLLUP_OPTIONS = [\n { value: '2d', label: '2 days' },\n { value: '7d', label: '7 days' },\n { value: '14d', label: '14 days' },\n { value: '2w', label: '2 weeks' },\n { value: '4w', label: '4 weeks' },\n { value: '12w', label: '12 weeks' },\n { value: '26w', label: '26 weeks' },\n { value: '52w', label: '52 weeks' },\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];\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\n/** Structural pills seeded onto every query (queryAst seeding) — they clear\n * back to an empty value instead of being removed. */\nexport const CLEAR_ONLY_TYPES: Record<string, true> = { source: true, time: true };\n\nexport const CLAUSE_META: Record<ClauseType, ClauseMeta> = {\n kind: { label: 'Kind', inputType: 'radio', placeholder: 'find, measure…', placeholderText: 'Find | Measure', icon: '🧭', description: 'Find things or measure numbers' },\n target: { label: 'Find', inputType: 'select', placeholder: 'note, block, effort…', placeholderText: ': [target]', icon: '🎯', description: 'What to find — singular', prefix: ':' },\n source: { label: 'Where stored', inputType: 'select', placeholder: 'journal, feeds…', placeholderText: 'source: [scope]', icon: '🌐', description: 'Storage scope — all sources means no scope', prefix: 'source:' },\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 domain: { label: 'Domain', inputType: 'select', placeholder: 'crossfit, parkour, swimming…',placeholderText: 'domain: [discipline]', icon: '🌐', description: 'Filter by sport/training domain', prefix: 'domain:' },\n format: { label: 'Format', inputType: 'select', placeholder: 'for-time, amrap, emom…', placeholderText: 'format: [shape]', icon: '⏱', description: 'Filter by session time structure', prefix: 'format:' },\n equipment: { label: 'Equipment', inputType: 'select', placeholder: 'kettlebell, barbell…', placeholderText: 'equipment: [gear]', icon: '🏋', description: 'Filter by required gear', prefix: 'equipment:' },\n quality: { label: 'Quality', inputType: 'select', placeholder: 'strength, conditioning…', placeholderText: 'quality: [stimulus]', icon: '⚡', description: 'Filter by physical stimulus', prefix: 'quality:' },\n intent: { label: 'Intent', inputType: 'select', placeholder: 'benchmark, competition…', placeholderText: 'intent: [tier]', icon: '🎯', description: 'Filter by protocol status', prefix: 'intent:' },\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 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: '2w, 4w, 12w…', placeholderText: 'rollup: [period]', icon: '🗓', description: 'Multi-unit bucket period (by {week}/by {day} for 1-unit)' },\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 page: { label: 'Page', inputType: 'select', placeholder: 'true, false…', placeholderText: 'page: [true|false]', icon: '📄', description: 'Notes that are (or are not) pages', prefix: 'page:' },\n plane: { label: 'Output Plane',inputType: 'select', placeholder: 'segment, load, event…', placeholderText: 'plane: [type]', icon: '📋', description: 'Output-statement plane on :session', prefix: 'plane:' },\n pipes: { label: 'Pipes', inputType: 'freetext', placeholder: '| order by date | limit 10', placeholderText: '| select | order | limit', icon: '⇥', description: 'Presentation pipes — select/order/limit/offset' },\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 * QueryPalette — token pills for the composer's clause row.\n *\n * Pills are real buttons in the native tab order (no virtual navigation);\n * removal is a sibling labelled button rather than an interactive control\n * nested inside another button. Editors — built-in option lists\n * (InlineClauseEditor) and custom slot editors — render in the composer's\n * owned picker region under the box; the pill never opens a surface itself\n * and nothing here portals to the body.\n */\nimport { X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport type { QueryClause } from './queryClauses';\nimport { CLEAR_ONLY_TYPES, getClauseMeta } from './queryClauses';\n\nexport interface TokenSlotPillProps {\n clause: QueryClause;\n isActive?: boolean;\n invalid?: boolean;\n invalidReason?: string;\n onClick?: () => void;\n onRemove?: () => 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 compact = false,\n placeholderOverride,\n}: TokenSlotPillProps) {\n const meta = getClauseMeta(clause.type);\n const hasValue = Boolean(clause.value && clause.value.trim());\n const removeLabel = CLEAR_ONLY_TYPES[clause.type] ? `Clear ${meta.label}` : `Remove ${meta.label}`;\n\n return (\n <span className=\"relative inline-flex items-center\">\n <button\n type=\"button\"\n data-testid={`token-slot-${clause.type}`}\n onClick={onClick}\n aria-pressed={isActive || undefined}\n title={invalid ? invalidReason : undefined}\n className={cn(\n 'inline-flex items-center gap-1 rounded-full text-xs font-mono transition-all cursor-pointer select-none border focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring hover:font-bold hover:scale-[1.02]',\n // Whole pill is a touch target too: 44px minimum at every width.\n 'min-h-11 min-w-11',\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]' : 'px-2.5 py-1',\n )}\n >\n <span className=\"text-[10px] opacity-70\">{meta.icon}</span>\n {/* Label prefix only while the pill is engaged — at rest the value\n alone reads cleaner than the \"<label>: value\" prefix. */}\n {isActive && (\n <span className=\"font-semibold text-[11px] opacity-90\">{meta.label}:</span>\n )}\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 </button>\n {onRemove && (\n <button\n type=\"button\"\n data-testid={`token-slot-remove-${clause.type}`}\n onClick={onRemove}\n aria-label={removeLabel}\n title={removeLabel}\n className={cn(\n 'inline-flex items-center justify-center -ml-0.5 p-1 rounded-full transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n invalid\n ? 'text-destructive/70 hover:text-destructive'\n : 'text-inherit opacity-70 hover:opacity-100 hover:bg-black/10',\n // Labelled removal is a real control: 44px hit target everywhere.\n 'min-h-11 min-w-11',\n )}\n >\n <X className=\"w-3 h-3\" />\n </button>\n )}\n </span>\n );\n}\n","/**\n * InlineClauseEditor — the composer's in-card value editor. Rendered under\n * the composer box for the active pill: the composer owns this surface and\n * routes ↑/↓/Enter from the focused search input. Nothing here portals or\n * autofocuses; Tab stays native in this guided picker and moves real focus\n * out of the composer. Only the WQL text editor (WqlTextEditor) intercepts\n * Tab — to accept a completion and hop syntactic slots.\n *\n * ARIA relation: with `listId` the list is a labelled listbox whose rows\n * carry stable ids (`clauseOptionId`), so the combobox input can point at it\n * via aria-controls/aria-activedescendant. `highlightIdx === -1` means no\n * active row; `filteredItems.length` addresses the typed-exact row, which is\n * a real indexed option row after the filtered items.\n *\n * Presentational: the composer resolves options (useClauseItems) and owns\n * the highlight index + commits.\n */\nimport { ArrowDown, ArrowUp, Check, X } from 'lucide-react';\nimport { cn } from '../utils/cn';\nimport type { QueryClause } from './queryClauses';\nimport { getClauseMeta } from './queryClauses';\n\n/** Stable option row id shared with the combobox input's\n * aria-activedescendant. The typed-exact row renders at index\n * `filteredItems.length`. */\nexport function clauseOptionId(listId: string | undefined, idx: number): string | undefined {\n return listId ? `${listId}-option-${idx}` : undefined;\n}\n\nexport interface InlineClauseEditorProps {\n clause: QueryClause;\n filteredItems: { value: string; label: string }[];\n selectedValues: string[];\n isMulti: boolean;\n typedValue: string;\n canCommitTyped: boolean;\n emptyText: string | null;\n /** -1 = no active row; otherwise the rendered index (typed row = filteredItems.length). */\n highlightIdx: number;\n onHighlight: (idx: number) => void;\n onCommitValue: (value: string) => void;\n onCommitTyped: (value: string) => void;\n /** Listbox id for the composer input's aria-controls/aria-activedescendant. */\n listId?: string;\n /** Explicit multi-select finish (Done). Single-select closes on commit. */\n onDone?: () => void;\n /** Ordered multi-select (groupby dims): receive the reordered dimension list. */\n onReorder?: (values: string[]) => void;\n}\n\nexport function InlineClauseEditor({\n clause,\n filteredItems,\n selectedValues,\n isMulti,\n typedValue,\n canCommitTyped,\n emptyText,\n highlightIdx,\n onHighlight,\n onCommitValue,\n onCommitTyped,\n listId,\n onDone,\n onReorder,\n}: InlineClauseEditorProps) {\n const meta = getClauseMeta(clause.type);\n const current = clause.value.trim();\n const typedIdx = filteredItems.length;\n // The committed value strip always shows what the clause holds — for\n // single-select that is the current value itself.\n const shownValues = selectedValues.length > 0\n ? selectedValues\n : !isMulti && current ? [current] : [];\n\n const reorder = (i: number, dir: -1 | 1) => {\n if (!onReorder) return;\n const to = i + dir;\n if (to < 0 || to >= selectedValues.length) return;\n const next = [...selectedValues];\n [next[i], next[to]] = [next[to]!, next[i]!];\n onReorder(next);\n };\n\n return (\n <div\n className=\"mx-0.5 rounded-xl border border-border bg-popover shadow-md p-1\"\n data-testid=\"wql-clause-editor\"\n data-clause-type={clause.type}\n >\n <div className=\"flex items-center gap-2 px-2 pt-1 pb-1.5\">\n <span aria-hidden className=\"text-[11px]\">{meta.icon}</span>\n <span className=\"text-xs sm:text-[11px] font-semibold text-foreground font-mono\">{meta.label}</span>\n <span className=\"hidden sm:block ml-auto text-[10px] text-muted-foreground/70 font-mono truncate\">\n ↑↓ move · Enter {isMulti ? 'add/remove' : 'set'} · Esc done · Tab exits\n </span>\n </div>\n\n {shownValues.length > 0 && (\n <div className={cn('px-2 pb-1.5', isMulti && 'border-b border-border/50')}>\n <div className=\"flex flex-wrap gap-1.5 sm:gap-1 max-h-24 overflow-y-auto overscroll-contain touch-pan-y sm:max-h-none sm:overflow-visible\">\n {shownValues.map((v, i) => (\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-xs sm:text-[10px] font-mono min-h-11 sm:min-h-0\"\n >\n <span className=\"max-w-40 truncate\">{v}</span>\n {onReorder && shownValues.length > 1 && (\n <>\n <button\n type=\"button\"\n aria-label={`Move ${v} up`}\n disabled={i === 0}\n onClick={() => reorder(i, -1)}\n className=\"px-0.5 hover:text-foreground disabled:opacity-30 min-h-11 min-w-11 sm:min-h-5 sm:min-w-5\"\n >\n <ArrowUp className=\"w-3 h-3\" />\n </button>\n <button\n type=\"button\"\n aria-label={`Move ${v} down`}\n disabled={i === shownValues.length - 1}\n onClick={() => reorder(i, 1)}\n className=\"px-0.5 hover:text-foreground disabled:opacity-30 min-h-11 min-w-11 sm:min-h-5 sm:min-w-5\"\n >\n <ArrowDown className=\"w-3 h-3\" />\n </button>\n </>\n )}\n {isMulti && (\n <button\n type=\"button\"\n onClick={() => onCommitValue(v)}\n aria-label={`Remove ${v}`}\n className=\"hover:text-destructive min-h-11 min-w-11 sm:min-h-5 sm:min-w-5 -mr-1.5 sm:-mr-1\"\n >\n <X className=\"w-2.5 h-2.5\" />\n </button>\n )}\n </span>\n ))}\n </div>\n {isMulti && (\n <p className=\"pt-1 text-xs sm:text-[10px] text-muted-foreground\" data-testid=\"wql-clause-editor-multi-hint\">\n {clause.type === 'groupby' ? 'Group in this order.' : 'Match any selected value (OR).'}\n </p>\n )}\n </div>\n )}\n\n <div\n id={listId}\n role=\"listbox\"\n aria-label={`${meta.label} options`}\n aria-multiselectable={isMulti || undefined}\n className=\"max-h-[min(45svh,20rem)] sm:max-h-44 overflow-y-auto overscroll-contain touch-pan-y flex flex-col gap-0.5\"\n >\n {canCommitTyped && (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={false}\n id={clauseOptionId(listId, typedIdx)}\n data-active={highlightIdx === typedIdx || undefined}\n onMouseEnter={() => onHighlight(typedIdx)}\n onClick={() => onCommitTyped(typedValue)}\n data-testid={`clause-commit-typed-${clause.type}`}\n className={cn(\n 'flex items-center justify-between px-2 py-2 sm:py-1 text-sm sm:text-xs text-left rounded hover:bg-muted/60 transition-colors font-mono min-h-12 sm:min-h-0',\n highlightIdx === typedIdx && 'bg-muted/60',\n )}\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) || (!isMulti && current === item.value);\n const active = idx === highlightIdx;\n return (\n <button\n key={item.value}\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n id={clauseOptionId(listId, idx)}\n data-active={active || undefined}\n data-testid={`wql-clause-editor-${clause.type}-opt-${idx}`}\n onMouseEnter={() => onHighlight(idx)}\n onClick={() => onCommitValue(item.value)}\n className={cn(\n 'flex items-center justify-between px-2 py-2 sm:py-1 text-sm sm:text-xs text-left rounded transition-colors font-mono min-h-12 sm:min-h-0',\n active ? 'bg-primary/15 font-semibold' : 'hover:bg-muted/60',\n selected && 'text-primary',\n )}\n >\n <span className=\"truncate\">{item.label}</span>\n {selected && <Check className=\"w-3 h-3 shrink-0\" />}\n </button>\n );\n })}\n {emptyText && (\n <div className=\"px-2 py-2 sm:py-1.5 text-sm sm:text-xs text-muted-foreground italic\">{emptyText}</div>\n )}\n </div>\n\n {isMulti && onDone && (\n <div className=\"sticky bottom-0 -mx-1 -mb-1 px-3 pt-1.5 pb-[max(0.375rem,env(safe-area-inset-bottom))] bg-popover rounded-b-xl flex justify-end\">\n <button\n type=\"button\"\n onClick={onDone}\n data-testid=\"wql-clause-editor-done\"\n className=\"inline-flex w-full sm:w-auto items-center justify-center min-h-12 sm:min-h-9 px-3 rounded-lg bg-primary text-primary-foreground text-sm sm:text-xs font-semibold hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n Done{shownValues.length > 0 ? ` · ${shownValues.length} selected` : ''}\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * clauseVocab — option lists and multi-value typing for clause editors.\n * Extracted from QueryPalette so the inline editor, the standalone popover,\n * and the clauseItems hook share one vocabulary. All lists are canonical\n * (queryClauses — engine vocab); closed lists reject unknown typed values,\n * open/parser-validated ones are decided in clauseItems.\n */\nimport {\n KIND_OPTIONS,\n TARGET_OPTIONS,\n SOURCE_OPTIONS,\n PLANE_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\n/** Multi-select (toggle-in-place) clause types. `source` is independently\n * multi-select — applySourceFilter ORs the scope values. Typed tag keys and\n * `groupby` OR their values in the engine (value lists join with `|`). */\nexport const MULTI_VALUE_TYPES: Record<string, true> = {\n tag: true,\n catalog: true,\n effort: true,\n domain: true,\n format: true,\n equipment: true,\n quality: true,\n intent: true,\n discipline: true,\n intensity: true,\n origin: true,\n type: true,\n source: true,\n groupby: true,\n};\n\nexport const STATIC_OPTIONS: Record<string, { value: string; label: string }[]> = {\n kind: KIND_OPTIONS,\n target: TARGET_OPTIONS,\n source: SOURCE_OPTIONS,\n plane: PLANE_OPTIONS,\n time: TIME_OPTIONS,\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};\n","import { useSyncExternalStore } from 'react';\nimport { EFFORT_DISCIPLINES } from '@bitcobblers/wod-wiki-lang';\nimport { catalogOfItem, WQL_INTENSITY_TIERS } from '@bitcobblers/wod-wiki-wql';\nimport 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 unknown as { frontmatter?: { tags?: unknown[] } };\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\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 const catalog = catalogOfItem(b);\n if (catalog) set.add(catalog);\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\n/** Tags: user labels rank first with their spelling, corpus fills the rest —\n * one case-insensitive dedup path, insertion order kept (no global sort). */\nexport function mergeTagSuggestions(userLabels: string[], corpusLabels: string[]): string[] {\n return mergeSuggestionItems(\n [...userLabels, ...corpusLabels].map((label) => ({ value: label.trim() })),\n [],\n ).map((item) => item.value);\n}\n\n/** Canonical static block types — actual indexed corpus types rank ahead at runtime. */\nexport const CANONICAL_BLOCK_TYPES = ['wod', 'movement', 'workout'] as const;\n\n/** Suggestion items for a canonical readonly vocabulary; labels are display-only. */\nexport function canonicalSuggestionItems(values: readonly string[]): SuggestionItem[] {\n return values.map((value) => ({ value, label: value.charAt(0).toUpperCase() + value.slice(1) }));\n}\n\n/** Case-insensitive dedup by value key: vault entries keep their position,\n * enum keys take the canonical spelling, then remaining canonical values\n * append. First label wins — it is display-only. */\nexport function mergeSuggestionItems(vault: SuggestionItem[], canonical: SuggestionItem[]): SuggestionItem[] {\n const keyOf = (value: string) => value.trim().toLowerCase();\n const canonicalValueByKey = new Map(canonical.map((item) => [keyOf(item.value), item.value]));\n const seen = new Map<string, SuggestionItem>();\n const add = (item: SuggestionItem) => {\n const key = keyOf(item.value);\n if (!key || seen.has(key)) return;\n seen.set(key, { ...item, value: canonicalValueByKey.get(key) ?? item.value });\n };\n for (const item of vault) add(item);\n for (const item of canonical) add(item);\n return Array.from(seen.values());\n}\n\nconst builtinBindings: Record<string, SuggestionBinding> = {\n discipline: {\n load: async () => canonicalSuggestionItems(EFFORT_DISCIPLINES),\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 intensity: {\n load: async () => canonicalSuggestionItems(WQL_INTENSITY_TIERS),\n cache: 'static',\n open: false,\n emptyText: 'No intensity tiers available',\n },\n type: {\n load: async () => canonicalSuggestionItems(CANONICAL_BLOCK_TYPES),\n cache: 'static',\n open: false,\n emptyText: 'No indexed block types yet',\n },\n};\n\nexport const SUGGESTION_BINDINGS: Record<string, SuggestionBinding> = { ...builtinBindings };\n\n/** Clause types with a registered suggestion source — lets catalogs offer\n * binding-backed fields without hardcoding type lists. */\nexport function suggestionBoundTypes(): string[] {\n return Object.keys(SUGGESTION_BINDINGS);\n}\n\n// Reactive availability of binding-backed clause types: async app\n// registrations (dynamic tag types, origins) notify subscribers so pickers\n// render sources once loaded, not only at module init.\nconst bindingListeners = new Set<() => void>();\nlet boundTypesSnapshot = Object.keys(SUGGESTION_BINDINGS);\n\nexport function subscribeSuggestionBoundTypes(listener: () => void): () => void {\n bindingListeners.add(listener);\n return () => {\n bindingListeners.delete(listener);\n };\n}\n\n/** useSyncExternalStore-compatible snapshot of registered binding types. */\nexport function useSuggestionBoundTypes(): string[] {\n return useSyncExternalStore(subscribeSuggestionBoundTypes, () => boundTypesSnapshot);\n}\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 boundTypesSnapshot = Object.keys(SUGGESTION_BINDINGS);\n for (const listener of bindingListeners) listener();\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 // One normalization path for every binding, custom hosts included:\n // case-insensitive dedup preserving source (vault-first) order.\n const items = mergeSuggestionItems(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 * clauseItems — shared option resolution for clause value editors (the\n * composer's inline editor and the standalone ClausePopover). One searchable\n * vocabulary for every list (work item 4): static and suggestion-backed\n * options filter by typed text, known selected values survive refreshed\n * suggestion sources, and the exact typed value is a real selectable action\n * at index `filteredItems.length` (deduplicated against visible matches).\n * Typed values are commit-gated per slot: closed static vocab rejects\n * unknown values; time/rollup accept any parser-valid relative period /\n * multi-unit bucket width; metric/unit stay open (grammar accepts any word).\n */\nimport { STATIC_OPTIONS, MULTI_VALUE_TYPES } from './clauseVocab';\nimport { useSuggestions } from './useSuggestions';\nimport { getClauseMeta, type QueryClause } from './queryClauses';\nimport { parseQuery } from '@bitcobblers/wod-wiki-wql';\n\nexport interface ClauseItemsResult {\n isMulti: boolean;\n selectedValues: string[];\n /** All options (selected values preserved), unfiltered. */\n items: { value: string; label: string }[];\n /** Options after the typed filter; the exact typed value (when\n * committable) is selectable at index `filteredItems.length`. */\n filteredItems: { value: string; label: string }[];\n /** The typed filter text, trimmed — a verbatim value when the slot is open. */\n typedValue: string;\n canCommitTyped: boolean;\n loading: boolean;\n /** True when the slot accepts typed values not present in the list (#831). */\n openSlot: boolean;\n /** Every list is searchable (work item 4): typing always filters. */\n hasFilterInput: boolean;\n /** Empty-state copy for the current filter; null when the list has rows. */\n emptyText: string | null;\n}\n\n/** Relative periods (`last <n><d|w>`), multi-unit bucket widths\n * (`.rollup(<n><d|w>)`, n>1) and grouping dimensions (`by {dim}` — custom\n * dims are grammar-open) accept any parser-valid value, not only the\n * preset lists. Shape-checked first, then confirmed through parseQuery so\n * validity can never drift from the grammar. */\nfunction parserValidValue(type: string, value: string): boolean {\n const v = value.trim();\n if (type === 'time') {\n if (v.toLowerCase() === 'all') return true;\n if (!/^last\\s+\\d+[dw]$/i.test(v)) return false;\n const probe = parseQuery(`:note ${v}`);\n return !probe.error && probe.family === 'find' && probe.window?.kind === 'relative';\n }\n if (type === 'rollup') {\n if (!/^\\d+[dw]$/i.test(v)) return false;\n const probe = parseQuery(`sum:tis{}.rollup(${v})`);\n return !probe.error && probe.family === 'aggregate' && probe.rollup !== undefined;\n }\n if (type === 'groupby') {\n if (!/^[a-zA-Z][\\w-]*$/.test(v)) return false;\n const probe = parseQuery(`sum:tis{} by {${v}}`);\n return !probe.error && probe.family === 'aggregate' && probe.groupBy?.includes(v) === true;\n }\n return true;\n}\n\nexport function useClauseItems(\n clause: QueryClause | undefined,\n filterQuery: string,\n options?: { dropSelected?: boolean; supportedValues?: readonly string[] },\n): ClauseItemsResult {\n const type = clause?.type ?? '';\n const { items: dynamicItems, loading, binding } = useSuggestions(type);\n const staticItems = STATIC_OPTIONS[type];\n // Dynamic tag keys (app-registered custom types) OR their values like the\n // builtin tags — every suggestion-backed field toggles in place; only\n // binding-less structural/freetext fields stay single-select.\n const isMulti = type in MULTI_VALUE_TYPES || !!binding;\n const selectedValues = clause?.value\n ? clause.value.split('|').map((v) => v.trim()).filter(Boolean)\n : [];\n\n // Root-supplied consumer-accurate list (e.g. content card-grouping\n // dimensions): authoritative AND closed — binding/static are ignored and\n // no typed exact-value action is offered; unsupported existing values stay\n // Advanced-editable, never silently replaced.\n const supplied = options?.supportedValues !== undefined;\n const rawItems: { value: string; label: string }[] = supplied\n ? options!.supportedValues!.map((v) => ({ value: v, label: v }))\n : 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 // Wildcard alignment: when every selected value carries the `*` flag,\n // base suggestions are compared/toggled in wildcard form so existing\n // selections stay checked and never duplicate; mixed flags keep the exact\n // stored forms (per-value semantics). Typed exact values stay committable.\n const allWildcard = selectedValues.length > 0 && selectedValues.every((v) => v.endsWith('*'));\n const baseItems = allWildcard\n ? rawItems.map((i) => (i.value.endsWith('*') ? i : { ...i, value: `${i.value}*` }))\n : rawItems;\n\n // Selected known values survive refreshed sources (work item 4): a value\n // missing from a vocab-backed list is merged back so it stays visible and\n // toggleable. Pure freetext slots (no vocab, no binding) keep no rows.\n const present = new Set(baseItems.map((i) => i.value.toLowerCase()));\n const missing = (supplied || staticItems || binding) && !options?.dropSelected\n ? selectedValues.filter((v) => !present.has(v.toLowerCase())).map((v) => ({ value: v, label: v }))\n : [];\n const items = missing.length ? [...baseItems, ...missing] : baseItems;\n\n const query = filterQuery.trim().toLowerCase();\n const filteredItems = query\n ? items.filter(\n (item) =>\n item.value.toLowerCase().includes(query) ||\n item.label.toLowerCase().includes(query),\n )\n : items;\n\n // Open slots accept typed values: suggestion-backed fields honor the\n // binding's openness; closed static vocab rejects unknown values — except\n // metric/unit (grammar-open words) and time/rollup (parser-validated).\n // Supplied lists are consumer-accurate and always closed.\n const openSlot = supplied\n ? false\n : !staticItems || binding\n ? (binding?.open ?? true)\n : type === 'metric' || type === 'unit' || type === 'time' || type === 'rollup';\n\n // Visible commit affordance for typed free text (#854), deduplicated\n // against the full list so an exact match never hides a valid action.\n const typedValue = filterQuery.trim();\n const parserOk = parserValidValue(type, typedValue);\n const canCommitTyped =\n typedValue.length > 0 &&\n openSlot &&\n parserOk &&\n !items.some((item) => item.value.toLowerCase() === typedValue.toLowerCase());\n\n let emptyText: string | null = null;\n if (filteredItems.length === 0 && !canCommitTyped) {\n if (loading) emptyText = 'Loading…';\n else if (items.length === 0) emptyText = binding?.emptyText ?? 'Nothing here yet';\n else if (!query) emptyText = 'No options';\n else if (!openSlot) emptyText = 'No matches — no such option';\n else if (!parserOk) emptyText = `No matches — not a valid ${getClauseMeta(type).label.toLowerCase()} value`;\n else emptyText = 'No matches';\n }\n\n return {\n isMulti,\n selectedValues,\n items,\n filteredItems,\n typedValue,\n canCommitTyped,\n loading,\n openSlot,\n hasFilterInput: true,\n emptyText,\n };\n}\n","import { type ParsedFindQuery, type ParsedAggregateQuery, type ParsedPipelineQuery, type PipelineSource } from '@bitcobblers/wod-wiki-wql';\nimport type { AnyParsedQuery } from './useWqlStageCounts';\nexport interface WqlDiagnostics {\n valid: boolean;\n /** Exact resolved draft text, including invalid input. */\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 groupBy?: 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 groupBy: ast.groupBy?.length ? ast.groupBy.join(', ') : 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\nexport interface WqlPipelineSummary {\n source: string;\n /** One entry per transform stage, in order — `sum:tis`, `avg:load`, … */\n functions: string[];\n sink?: string;\n timeWindow?: string;\n filterCount: number;\n}\n\nfunction pipelineSourceLabel(source: PipelineSource): string {\n if (source.kind === 'dataset') return source.name;\n return 'target' in source.query ? `:${source.query.target}` : `:${source.query.agg}`;\n}\n\nexport function summarizePipeline(ast: ParsedPipelineQuery): WqlPipelineSummary {\n const sourceQuery = ast.source.kind === 'query' ? ast.source.query : undefined;\n return {\n source: pipelineSourceLabel(ast.source),\n functions: ast.transforms.map((stage) => `${stage.agg}:${stage.metric}`),\n sink: ast.sink ? `:${ast.sink.head}` : undefined,\n timeWindow: sourceQuery?.window\n ? sourceQuery.window.kind === 'relative'\n ? `last ${sourceQuery.window.size}${sourceQuery.window.unit}`\n : `from ${sourceQuery.window.start}${sourceQuery.window.end ? ` to ${sourceQuery.window.end}` : ''}`\n : undefined,\n filterCount: sourceQuery ? sourceQuery.filters.length : 0,\n };\n}\n\n","import { AlertCircle, AlertTriangle, CheckCircle2 } from 'lucide-react';\nimport type { ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { isAggregateQuery, isFindQuery, isPipelineQuery, wqlGroupingDimensions } from '@bitcobblers/wod-wiki-wql';\nimport { summarizeAggregate, summarizeFind, summarizePipeline, type WqlDiagnostics } from './diagnostics';\nimport type { WqlStageCounts } from './useWqlStageCounts';\n\nexport interface WqlDiagnosticsStripProps {\n diagnostics: WqlDiagnostics;\n offendingLabel?: string;\n stages?: WqlStageCounts;\n /** Hide the AST summary chips (target/scope/time or agg/metric/by…) —\n * header contexts where the pills right below already show that state. */\n hideSummary?: boolean;\n /** 'card' (default) renders the rounded, bordered bubble. 'header' renders\n * a flat header section separated from the composer by an accent line. */\n variant?: 'card' | 'header';\n actions?: ReactNode;\n className?: string;\n}\n\nfunction SummaryChip({ label, value, testId, warnTitle }: { label: string; value: string; testId: string; warnTitle?: string }) {\n const legacyTestId = testId.startsWith('diag-') ? testId.replace('diag-', 'wql-') : testId;\n return (\n <span data-testid={testId} title={warnTitle} className=\"inline-flex items-center gap-1 whitespace-nowrap\">\n <span className=\"opacity-60\">{label}:</span>\n <span data-testid={legacyTestId} className={cn('font-semibold', warnTitle && 'text-signal-caution underline decoration-wavy underline-offset-2')}>{value}</span>\n </span>\n );\n}\n\nexport function WqlDiagnosticsStrip({\n diagnostics,\n offendingLabel,\n stages,\n hideSummary = false,\n variant = 'card',\n actions,\n className,\n}: WqlDiagnosticsStripProps) {\n const { valid, ast, error } = diagnostics;\n const header = variant === 'header';\n const advisories = ast.advisories ?? [];\n const supportedDims = new Set(isPipelineQuery(ast) ? [] : wqlGroupingDimensions(ast.family === 'find' ? ast.target : '', ast.family));\n const unsupportedDims = isPipelineQuery(ast) ? [] : (ast.groupBy ?? []).filter(dim => !supportedDims.has(dim));\n const warning = valid && (advisories.length > 0 || unsupportedDims.length > 0);\n const warningMessage = advisories[0] ?? `Unsupported grouping: ${unsupportedDims.join(', ')}`;\n\n return (\n <div\n data-testid=\"wql-diagnostics-strip\"\n aria-live=\"polite\"\n className={cn(\n 'flex flex-wrap items-center justify-between gap-x-4 gap-y-1.5 px-3 py-1.5 text-xs font-mono transition-colors',\n header\n ? valid\n ? 'border-b border-primary/30 text-muted-foreground'\n : 'border-b border-destructive/50 bg-destructive/5 text-destructive'\n : cn(\n 'rounded-lg border',\n valid\n ? 'bg-muted/30 border-border text-muted-foreground'\n : 'bg-destructive/5 border-destructive/30 text-destructive',\n ),\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} data-warning={warning || undefined} role={valid ? 'status' : 'alert'} aria-live=\"polite\">\n {valid ? (\n warning ? (\n <>\n <AlertTriangle className=\"w-3.5 h-3.5 text-signal-caution shrink-0\" />\n <span className=\"text-signal-caution\">Warning</span>\n <span className=\"opacity-80\">{warningMessage}</span>\n </>\n ) : (\n <>\n <CheckCircle2 className=\"w-3.5 h-3.5 text-signal-positive shrink-0\" />\n <span className=\"text-signal-positive\">Valid</span>\n </>\n )\n ) : (\n <>\n <AlertCircle className=\"w-3.5 h-3.5 text-destructive shrink-0\" />\n <span>Invalid</span>\n <span>\n {offendingLabel ? `${offendingLabel}: ` : ''}\n {error || 'Syntax error'}\n </span>\n </>\n )}\n </div>\n\n {!hideSummary && 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.groupBy && (\n <SummaryChip\n label=\"by\"\n value={summary.groupBy}\n testId=\"diag-summary-groupby\"\n warnTitle={unsupportedDims.length > 0 ? `Unsupported grouping: ${unsupportedDims.join(', ')}` : undefined}\n />\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 {!hideSummary && 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\n label=\"by\"\n value={summary.groupBy}\n testId=\"diag-summary-groupby\"\n warnTitle={unsupportedDims.length > 0 ? `Unsupported grouping: ${unsupportedDims.join(', ')}` : undefined}\n />\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 {!hideSummary && valid && isPipelineQuery(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 = summarizePipeline(ast);\n return (\n <>\n <SummaryChip label=\"source\" value={summary.source} testId=\"diag-summary-source\" />\n {summary.functions.map((fn, i) => (\n <SummaryChip key={i} label={`fn ${i + 1}`} value={fn} testId={`diag-summary-fn-${i + 1}`} />\n ))}\n {summary.sink && (\n <SummaryChip label=\"sink\" value={summary.sink} testId=\"diag-summary-sink\" />\n )}\n {summary.timeWindow && (\n <SummaryChip label=\"time\" value={summary.timeWindow} testId=\"diag-summary-time\" />\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 of {stages.selected}</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, isPipelineQuery, 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 const countedAst = useRef<AnyParsedQuery | undefined>(undefined);\n\n const executorRef = useRef(execute);\n executorRef.current = execute;\n\n const runnable = valid && !ast.error && execute !== undefined && !isPipelineQuery(ast);\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 countedAst.current = ast;\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 && countedAst.current === ast ? stages : undefined;\n}\n","import { parseQuery, serialize, isFindQuery, isPipelineQuery, WQL_NOTE_DEFAULT_SOURCES, type ParsedAggregateQuery, type ParsedFindQuery, type AnyParsedQuery, type TagFilter } from '@bitcobblers/wod-wiki-wql';\nimport { composerRegistry } from './ComposerRegistry';\nimport { CLAUSE_META, getClauseMeta, allowedFilterTypesForTarget, type QueryClause } from './queryClauses';\nimport { getSuggestionBinding } from './suggestionSources';\n\nexport interface QueryDraft {\n wql: string;\n ast: AnyParsedQuery;\n valid: boolean;\n error?: string;\n}\n\nconst KEY_TYPE: Record<string, string> = { tags: 'tag' };\nconst TYPE_KEY: Record<string, string> = { tag: 'tags' };\n\nfunction semantic(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(semantic);\n if (value !== null && typeof value === 'object') {\n return Object.fromEntries(Object.entries(value)\n .filter(([key, item]) => !['raw', 'advisories', 'error', 'head'].includes(key) && item !== undefined && !(key === 'groupBy' && Array.isArray(item) && item.length === 0))\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([key, item]) => [key, semantic(item)]));\n }\n return value;\n}\n\nexport function isLosslessQuery(ast: AnyParsedQuery): boolean {\n if (ast.error) return false;\n const restored = parseQuery(serialize(ast));\n return !restored.error && JSON.stringify(semantic(ast)) === JSON.stringify(semantic(restored));\n}\n\nfunction snapshot(wql: string, error?: string): QueryDraft {\n const parsed = parseQuery(wql);\n const ast = error ? { ...parsed, raw: wql, error } : parsed;\n return { wql, ast, valid: !ast.error, error: ast.error };\n}\n\nfunction emit(ast: AnyParsedQuery): QueryDraft {\n const text = serialize(ast);\n const result = snapshot(text);\n return result.valid && !isLosslessQuery(ast)\n ? snapshot(text, 'This value cannot be represented losslessly in WQL.')\n : result;\n}\n\nfunction clause(type: string, value: string, extra?: Partial<QueryClause>): QueryClause {\n return { id: `c-${type}`, type, ...getClauseMeta(type), value, ...extra };\n}\n\nfunction windowText(ast: ParsedFindQuery | ParsedAggregateQuery): string {\n const window = ast.window;\n if (!window) return 'all';\n return window.kind === 'relative' ? `last ${window.size}${window.unit}`\n : `from ${window.start}${window.end ? ` to ${window.end}` : ''}`;\n}\n\nexport function astToPills(ast: AnyParsedQuery): QueryClause[] | null {\n // Pipelines keep their raw text editable in the composer; structured pills\n // cannot represent stage order without flattening it away.\n if (isPipelineQuery(ast) || ast.error || !isLosslessQuery(ast)) return null;\n if (ast.filters.some((filter) => filter.values.some((value) => value.value.includes('|') || (!value.wildcard && value.value.endsWith('*'))))) return null;\n const pills = [clause('kind', ast.family)];\n if (ast.family === 'find') pills.push(clause('target', ast.target));\n else pills.push(clause('agg', ast.agg), clause('metric', ast.metric));\n if (ast.window || allowedFilterTypesForTarget(ast.family === 'find' ? ast.target : '', ast.family).has('time')) pills.push(clause('time', windowText(ast)));\n ast.filters.forEach((filter, filterIndex) => {\n const value = filter.values.map((item) => `${item.value}${item.wildcard ? '*' : ''}`).join('|');\n const custom = composerRegistry.getAllSlots().find((slot) => {\n if (!slot.parseValue) return false;\n const parsed = slot.parseValue(value);\n return parsed !== undefined && slot.wqlGenerator(parsed) === filterText(filter);\n });\n const type = custom?.type ?? KEY_TYPE[filter.key] ?? filter.key;\n pills.push(clause(type, value, {\n id: `c-filter-${filterIndex}`, filterIndex, negate: filter.negate,\n }));\n });\n if (ast.groupBy?.length) pills.push(clause('groupby', ast.groupBy.join('|')));\n if (ast.family === 'aggregate' && ast.rollup) pills.push(clause('rollup', `${ast.rollup.size}${ast.rollup.unit}`));\n if (ast.displayUnit) pills.push(clause('unit', ast.displayUnit));\n const serialized = serialize(ast);\n if (ast.join) pills.push(clause('where', serialized.split(' where ')[1]?.split(' | ')[0] ?? ''));\n if (ast.family === 'find' && ast.pipes) pills.push(clause('pipes', serialized.split(' | ').slice(1).join(' | ')));\n return pills;\n}\n\nexport function wqlToPills(wql: string): QueryClause[] | null {\n return astToPills(parseQuery(wql));\n}\n\nfunction filterText(filter: TagFilter): string {\n // Canonical heads vary with the filter (`:journal{`, `:feed{`, …);\n // strip whatever head the serializer chose. The serializer quotes values\n // containing whitespace, which the grammar requires. sourceScope mirrors\n // the generic :note default so serialize never appends a scope suffix.\n return serialize({ family: 'find', raw: '', target: 'note', sourceScope: [...WQL_NOTE_DEFAULT_SOURCES], filters: [filter] }).replace(/^[^{]*\\{/, '').replace(/\\}$/, '');\n}\n\nfunction parsedFilter(type: string, value: string, negate: boolean): TagFilter | undefined {\n const custom = composerRegistry.getSlot(type);\n if (custom) {\n const typed = custom.parseValue ? custom.parseValue(value) : value;\n if (typed === undefined || custom.validate?.(typed)) return undefined;\n const parsed = parseQuery(`:note{${custom.wqlGenerator(typed)}}`);\n return parsed.error || !isFindQuery(parsed) ? undefined : parsed.filters[0];\n }\n const key = TYPE_KEY[type] ?? type;\n const values = value.split('|').map((part) => {\n const wildcard = part.endsWith('*');\n return { value: wildcard ? part.slice(0, -1) : part, wildcard };\n });\n const filter = { key, negate, values };\n const parsed = parseQuery(`:note{${filterText(filter)}}`);\n return !parsed.error && isFindQuery(parsed) && parsed.filters.length === 1 && JSON.stringify(semantic(parsed.filters[0])) === JSON.stringify(semantic(filter)) ? parsed.filters[0] : undefined;\n}\n\nexport function editQueryClause(query: string, edited: QueryClause, value: string | null): QueryDraft {\n const current = snapshot(query);\n if (!current.valid) return current;\n const ast = current.ast;\n if (isPipelineQuery(ast)) return snapshot(query, 'Pipelines are edited as WQL text — structured pills cannot change a stage without flattening it.');\n if (!isLosslessQuery(ast)) return snapshot(query, 'This query requires Edit WQL to preserve every clause.');\n const clean = value?.trim() ?? '';\n if (edited.type === 'kind' || edited.type === 'target') return pivotQuery(query, edited.type, clean).draft;\n if (edited.filterIndex !== undefined || !['time', 'agg', 'metric', 'groupby', 'rollup', 'unit', 'where', 'pipes'].includes(edited.type)) {\n const filter = clean && !(edited.type === 'source' && clean === 'all') ? parsedFilter(edited.type, clean, edited.negate ?? false) : undefined;\n if (clean && !filter && !(edited.type === 'source' && clean === 'all')) return snapshot(query, `Invalid ${getClauseMeta(edited.type).label} value`);\n const filters = [...ast.filters];\n if (edited.filterIndex !== undefined) {\n if (!filters[edited.filterIndex]) return current;\n if (filter) filters[edited.filterIndex] = filter;\n else filters.splice(edited.filterIndex, 1);\n } else if (filter) filters.push(filter);\n return emit({ ...ast, filters });\n }\n if (edited.type === 'time') {\n if (!clean || clean === 'all') return emit({ ...ast, window: undefined });\n const parsed = parseQuery(`:note ${/^(last|from)\\b/.test(clean) ? clean : `last ${clean}`}`);\n if (parsed.error || !isFindQuery(parsed) || !parsed.window) return snapshot(query, parsed.error ?? 'Invalid time window');\n return emit({ ...ast, window: parsed.window });\n }\n if (edited.type === 'groupby') return emit({ ...ast, groupBy: [...new Set(clean.split('|').filter(Boolean))] });\n if (edited.type === 'unit') return emit({ ...ast, displayUnit: clean || undefined });\n if (edited.type === 'agg' && ast.family === 'aggregate') return snapshot(serialize(ast).replace(/^[^:]+:/, `${clean}:`));\n if (edited.type === 'metric' && ast.family === 'aggregate') return emit({ ...ast, metric: clean });\n if (edited.type === 'rollup' && ast.family === 'aggregate') {\n if (!clean) return emit({ ...ast, rollup: undefined });\n const parsed = parseQuery(`sum:tis{} by {week}.rollup(${clean})`);\n if (parsed.error || parsed.family !== 'aggregate' || !parsed.rollup) return snapshot(query, parsed.error ?? 'Invalid bucket width');\n return emit({ ...ast, rollup: parsed.rollup });\n }\n if (edited.type === 'where') {\n const base = serialize({ ...ast, join: undefined });\n return snapshot(clean ? `${base} where ${clean}` : base);\n }\n if (edited.type === 'pipes' && ast.family === 'find') {\n const base = serialize({ ...ast, pipes: undefined });\n return snapshot(clean ? `${base} | ${clean}` : base);\n }\n return current;\n}\n\nexport function pivotQuery(query: string, type: 'kind' | 'target', value: string): { draft: QueryDraft; removed: string[] } {\n const current = snapshot(query);\n const ast = current.ast;\n if (!current.valid) return { draft: current, removed: [] };\n if (isPipelineQuery(ast)) return { draft: snapshot(query, 'Pipelines are pivoted as WQL text — stage order cannot survive a structured pivot.'), removed: [] };\n const family = type === 'kind' ? value : 'find';\n const target = type === 'target' ? value : ast.family === 'find' ? ast.target : 'note';\n const allowed = allowedFilterTypesForTarget(target, family === 'aggregate' ? 'aggregate' : 'find');\n const removed: string[] = [];\n const filters = ast.filters.filter((filter) => {\n const dynamicFact = (family === 'aggregate' || target === 'segment' || target === 'event') && !(filter.key in CLAUSE_META) && Boolean(getSuggestionBinding(filter.key));\n const keep = allowed.has(KEY_TYPE[filter.key] ?? filter.key) || dynamicFact || Boolean(composerRegistry.getSlot(filter.key));\n if (!keep) removed.push(filterText(filter));\n return keep;\n });\n if (family === ast.family && (ast.family !== 'find' || target === ast.target)) return { draft: current, removed: [] };\n const window = allowed.has('time') ? ast.window : undefined;\n const groupBy = allowed.has('groupby') ? ast.groupBy : undefined;\n const displayUnit = allowed.has('unit') ? ast.displayUnit : undefined;\n if (ast.displayUnit && !displayUnit) removed.push('Unit');\n if (ast.window && !window) removed.push('Time window');\n if (ast.groupBy?.length && !groupBy) removed.push('Group By');\n const join = family === 'find' && ast.family === 'find' && allowed.has('where') ? ast.join : undefined;\n if (ast.join && !join) removed.push('Join');\n if (family === 'aggregate') {\n if (ast.family === 'find' && ast.pipes) removed.push('Presentation pipes');\n return { draft: emit({ family: 'aggregate', raw: '', agg: 'sum', metric: 'tis', filters, window, groupBy: groupBy ?? [], displayUnit }), removed };\n }\n if (ast.family === 'aggregate') {\n removed.push(`Measure ${ast.agg}:${ast.metric}`);\n if (ast.rollup) removed.push('Bucket width');\n }\n return { draft: emit({ family: 'find', raw: '', target, filters, window, groupBy, displayUnit, pipes: ast.family === 'find' ? ast.pipes : undefined, join }), removed };\n}\n\nexport function resolveQueryDraft(query: string, pendingText = ''): QueryDraft {\n if (!pendingText.trim()) return snapshot(query);\n const text = pendingText.trim();\n const complete = parseQuery(pendingText);\n if (!complete.error || /^(find|sum|avg|min|max|count|last|first|p\\d+):/.test(text) || /^[\\w-]+:[^{]*\\{/.test(text) || /^[:@|]/.test(text)) return snapshot(pendingText);\n const base = snapshot(query);\n if (!base.valid) return snapshot(pendingText);\n // Pipeline + free-text edit: no structured merge — pending text rides as\n // the whole draft so the raw pipeline stays editable and unflattened.\n if (isPipelineQuery(base.ast)) return snapshot(pendingText);\n if (!isLosslessQuery(base.ast)) return snapshot(query, 'Use Edit WQL for this query.');\n if (/^(last|from)\\b/.test(text)) {\n const window = parseQuery(`:note ${text}`);\n if (window.error || !isFindQuery(window) || !window.window) return snapshot(pendingText, window.error ?? 'Invalid time window');\n return emit({ ...base.ast, window: window.window });\n }\n if (/^!?[\\w-]+:/.test(text)) {\n const parsed = parseQuery(`:note{${text}}`);\n if (parsed.error || !isFindQuery(parsed) || !parsed.filters.length) return snapshot(pendingText, parsed.error ?? 'Invalid filter');\n const filters = [...base.ast.filters];\n for (const filter of parsed.filters) {\n const index = filters.findIndex((existing) => existing.key === filter.key);\n if (index < 0) filters.push(filter);\n else filters[index] = filter;\n }\n return emit({ ...base.ast, filters });\n }\n if (/[{}]/.test(text)) return snapshot(pendingText);\n const terms = text.startsWith('\"') ? text.slice(1).replace(/\"$/, '') : pendingText;\n if (!terms) return base;\n const filters = [...base.ast.filters];\n const filter: TagFilter = { key: 'text', negate: false, values: [{ value: terms, wildcard: false }] };\n const index = filters.findIndex((existing) => existing.key === 'text' && !existing.negate);\n if (index < 0) filters.push(filter);\n else filters[index] = filter;\n return emit({ ...base.ast, filters });\n}\n","import { createElement, useEffect, useRef } from 'react';\nimport { renderToStaticMarkup } from 'react-dom/server';\nimport { ChartNoAxesCombined, ListFilter, Search, Tag } from 'lucide-react';\nimport { EditorState } from '@codemirror/state';\nimport { EditorView, keymap, placeholder as cmPlaceholder, type KeyBinding } from '@codemirror/view';\nimport { cursorDocEnd, cursorDocStart, cursorPageDown, cursorPageUp, history, historyKeymap } from '@codemirror/commands';\nimport {\n acceptCompletion, autocompletion, closeCompletion, completionStatus, currentCompletions, moveCompletionSelection,\n setSelectedCompletion, startCompletion,\n} from '@codemirror/autocomplete';\nimport { syntaxHighlighting, syntaxTree } from '@codemirror/language';\nimport { linter, type Diagnostic } from '@codemirror/lint';\nimport { parseQuery, isPipelineQuery, supportsWqlFilterKey, wqlCompletionSource, wqlHighlightStyle, wqlLanguage } from '@bitcobblers/wod-wiki-wql';\nimport { loadSuggestions } from './suggestionSources';\n\nconst completionIcons = {\n search: renderToStaticMarkup(createElement(Search, { size: 16 })),\n metric: renderToStaticMarkup(createElement(ChartNoAxesCombined, { size: 16 })),\n filter: renderToStaticMarkup(createElement(ListFilter, { size: 16 })),\n value: renderToStaticMarkup(createElement(Tag, { size: 16 })),\n};\n\n/** Slot starts Tab/Shift-Tab hops between: head, each filter key, each filter\n * value, grouping dimensions and suffix nodes (rollup). */\nconst SLOT_NODES: Record<string, true> = { Head: true, Filter: true, TagValue: true, Rollup: true };\n\nfunction slotPositions(state: EditorState): number[] {\n const slots: number[] = [];\n syntaxTree(state).iterate({\n enter: node => {\n if (SLOT_NODES[node.name]) slots.push(node.from);\n else if (node.name === 'Word' && node.node.parent?.name === 'GroupBy') slots.push(node.from);\n return true;\n },\n });\n return slots.sort((a, b) => a - b);\n}\n\nfunction advanceSlot(view: EditorView, dir: 1 | -1): boolean {\n const head = view.state.selection.main.head;\n const slots = slotPositions(view.state);\n const next = dir > 0 ? slots.find(slot => slot > head) : [...slots].reverse().find(slot => slot < head);\n if (next === undefined) return false;\n view.dispatch({ selection: { anchor: next }, scrollIntoView: true });\n return true;\n}\n\n/** Parse-error and ignored-filter squiggles. Errors sit on the Lezer error\n * nodes (whole query as fallback); warnings sit on the exact filter text the\n * target's capability table rejects — unsupported key or operator alike. */\nexport function wqlLint(view: EditorView): Diagnostic[] {\n const doc = view.state.doc.toString();\n if (!doc.trim()) return [];\n const ast = parseQuery(doc);\n if (ast.error) {\n const spans: { from: number; to: number }[] = [];\n syntaxTree(view.state).iterate({\n enter: node => {\n if (node.type.isError) spans.push({ from: node.from, to: node.to });\n return true;\n },\n });\n return (spans.length ? spans : [{ from: 0, to: doc.length }]).map(span => {\n const to = Math.min(Math.max(span.to, span.from + 1), doc.length);\n return { from: Math.min(span.from, to - 1), to, severity: 'error' as const, message: ast.error! };\n });\n }\n // Pipeline stages own their filters; top-level capability warnings don't apply.\n if (isPipelineQuery(ast)) return [];\n const filters: { from: number; to: number; text: string }[] = [];\n syntaxTree(view.state).iterate({\n enter: node => {\n if (node.name === 'Filter') filters.push({ from: node.from, to: node.to, text: doc.slice(node.from, node.to) });\n return true;\n },\n });\n if (filters.length !== ast.filters.length) return [];\n const where = ast.family === 'find' ? ast.target : 'this query';\n const out: Diagnostic[] = [];\n ast.filters.forEach((filter, index) => {\n if (supportsWqlFilterKey(ast.family === 'find' ? ast.target : '', ast.family, filter.key)) return;\n const node = filters[index]!;\n out.push({\n from: node.from,\n to: node.to,\n severity: 'warning',\n message: /^[^\\s:]+\\s*[<>=~]/.test(node.text)\n ? `Operators on \"${filter.key}\" are ignored for ${where}`\n : `Filter \"${filter.key}\" is ignored for ${where}`,\n });\n });\n return out;\n}\n\n/** Key bindings shared with the regression tests: completion-first navigation\n * (wrapping via moveCompletionSelection, page via `by: 'page'` clamps, Home/\n * End select first/last row), Tab accepts-then-hops the next syntactic slot\n * and Shift-Tab the previous, Enter accepts or closes-and-submits, Escape\n * closes then blurs. Snippet fields keep their own higher-precedence\n * Tab/Shift-Tab bindings. While an IME composition is active\n * (`view.compositionStarted`, true from compositionstart to compositionend)\n * every binding bows out; ArrowLeft/Right stay native cursor motion. */\nexport function wqlEditorKeymap(onSubmit: () => void, onEscape: () => boolean): KeyBinding[] {\n return [\n { key: 'Mod-Enter', run: () => { onSubmit(); return true; } },\n { key: 'Ctrl-Space', run: startCompletion },\n { key: 'ArrowDown', run: view => completionStatus(view.state) === 'active' && moveCompletionSelection(true)(view) },\n { key: 'ArrowUp', run: view => completionStatus(view.state) === 'active' && moveCompletionSelection(false)(view) },\n { key: 'PageUp', run: view => completionStatus(view.state) === 'active' ? moveCompletionSelection(false, 'page')(view) : cursorPageUp(view) },\n { key: 'PageDown', run: view => completionStatus(view.state) === 'active' ? moveCompletionSelection(true, 'page')(view) : cursorPageDown(view) },\n {\n key: 'Home',\n run: view => completionStatus(view.state) === 'active'\n ? (view.dispatch({ effects: setSelectedCompletion(0) }), true)\n : cursorDocStart(view),\n },\n {\n key: 'End',\n run: view => completionStatus(view.state) === 'active'\n ? (view.dispatch({ effects: setSelectedCompletion(currentCompletions(view.state).length - 1) }), true)\n : cursorDocEnd(view),\n },\n {\n key: 'Tab',\n run: view => {\n if (view.compositionStarted) return false;\n const accepted = acceptCompletion(view);\n return advanceSlot(view, 1) || accepted;\n },\n },\n {\n key: 'Shift-Tab',\n run: view => {\n if (view.compositionStarted) return false;\n const accepted = acceptCompletion(view);\n return advanceSlot(view, -1) || accepted;\n },\n },\n {\n key: 'Enter',\n run: view => {\n if (view.compositionStarted) return false;\n if (acceptCompletion(view)) return true;\n closeCompletion(view);\n onSubmit();\n return true;\n },\n },\n // First Escape closes the popup; the second blurs back to the host\n // (onEscape) or the editor itself — never two levels at once.\n { key: 'Escape', run: view => view.compositionStarted || (closeCompletion(view) || onEscape() || (view.contentDOM.blur(), true)) },\n ...historyKeymap,\n ];\n}\n\nexport function WqlTextEditor({ value, onChange, onSubmit, onEscape, placeholder, autoFocus = false, dense = false }: {\n value: string;\n onChange: (value: string) => void;\n onSubmit: () => void;\n onEscape: () => boolean;\n /** Shown while the draft is empty. */\n placeholder?: string;\n autoFocus?: boolean;\n /** Compact single-line height (~36px) for inline toolbars (the stream\n * sticky header); the default is the roomy 48px form height. */\n dense?: boolean;\n}) {\n const host = useRef<HTMLDivElement>(null);\n const view = useRef<EditorView | undefined>(undefined);\n const callbacks = useRef({ onChange, onSubmit, onEscape });\n callbacks.current = { onChange, onSubmit, onEscape };\n const replacing = useRef(false);\n const initialValue = useRef(value);\n\n useEffect(() => {\n if (!host.current) return;\n const source = wqlCompletionSource({\n values: async key => (await loadSuggestions(key === 'tags' ? 'tag' : key)).map(item => ({ label: item.value, detail: item.label, type: 'constant' })),\n });\n const editor = new EditorView({\n parent: host.current,\n state: EditorState.create({\n doc: initialValue.current,\n extensions: [\n wqlLanguage, syntaxHighlighting(wqlHighlightStyle), history(), EditorView.lineWrapping,\n ...(placeholder ? [cmPlaceholder(placeholder)] : []),\n EditorView.contentAttributes.of({ 'aria-label': 'WQL', 'data-testid': 'wql-text-input' }),\n autocompletion({\n defaultKeymap: false, selectOnOpen: false,\n // Keyboard nav/accept must never wait out the pointer-intent delay.\n interactionDelay: 0,\n override: [source],\n icons: false,\n addToOptions: [{ position: 20, render: completion => {\n const icon = document.createElement('span');\n icon.className = 'wql-completion-icon';\n icon.setAttribute('aria-hidden', 'true');\n icon.innerHTML = completion.label === 'find' ? completionIcons.search\n : completion.type === 'keyword' || completion.type === 'variable' ? completionIcons.metric\n : completion.type === 'property' ? completionIcons.filter : completionIcons.value;\n return icon;\n } }],\n }),\n linter(wqlLint),\n keymap.of(wqlEditorKeymap(\n () => callbacks.current.onSubmit(),\n () => callbacks.current.onEscape(),\n )),\n EditorView.domEventHandlers({\n // Clicking a head/target/filter token selects it and lists its alternatives;\n // typing then replaces it, picking swaps it.\n mouseup: (event, editor) => {\n if (event.button !== 0) return false;\n let { from, to } = editor.state.selection.main;\n if (from === to) {\n const line = editor.state.doc.lineAt(from);\n const word = Array.from(line.text.matchAll(/[\\w.*-]+/g)).find(m => line.from + m.index! <= from && from <= line.from + m.index! + m[0].length);\n if (!word) return false;\n from = line.from + word.index!;\n to = from + word[0].length;\n let node = syntaxTree(editor.state).resolveInner(to, -1);\n while (node.parent && !['Head', 'Filter'].includes(node.name)) node = node.parent;\n if (!['Head', 'Filter'].includes(node.name)) return false;\n editor.dispatch({ selection: { anchor: from, head: to } });\n }\n startCompletion(editor);\n return false;\n },\n keydown: (event, editor) => {\n // IME safety: while composing (or once a composition has started\n // and not yet ended) swallow every key this editor owns so no\n // accept/close/navigation fires mid-composition.\n if (event.isComposing || editor.compositionStarted) return true;\n if (event.key === 'Enter' || event.key === 'Escape' || (['ArrowDown', 'ArrowUp'].includes(event.key) && completionStatus(editor.state) === 'active')) event.stopPropagation();\n return false;\n },\n }),\n EditorView.updateListener.of(update => {\n if (update.docChanged && !replacing.current) callbacks.current.onChange(update.state.doc.toString());\n }),\n EditorView.theme({\n '&': { width: '100%', fontSize: '14px', backgroundColor: 'transparent' },\n '&.cm-focused': { outline: 'none' },\n '.cm-content': { fontFamily: 'var(--font-mono, ui-monospace, monospace)', padding: dense ? '8px 0' : '12px 0', minHeight: dense ? '34px' : '48px' },\n '.cm-line': { padding: '0 12px' },\n '.cm-line span[class*=\"tok-\"]:hover, .cm-line span[class^=\"tok-\"]:hover': { fontWeight: '700', textShadow: '0 0 0.5px currentColor', cursor: 'pointer' },\n '.cm-scroller': { overflow: 'auto' },\n '.cm-placeholder': { color: 'hsl(var(--muted-foreground))' },\n '.cm-tooltip': {\n backgroundColor: 'hsl(var(--popover))', color: 'hsl(var(--popover-foreground))',\n border: '1px solid hsl(var(--border))', borderRadius: '12px',\n boxShadow: '0 8px 24px rgb(0 0 0 / 0.16)',\n fontFamily: 'var(--font-sans, Inter, system-ui, sans-serif)', fontSize: '14px',\n },\n '.cm-tooltip-autocomplete': { overflow: 'hidden', minWidth: 'min(18rem, calc(100vw - 2rem))', maxWidth: 'calc(100vw - 2rem)' },\n '.cm-tooltip-autocomplete > ul': { padding: '4px', maxHeight: 'min(20rem, 45vh)', overscrollBehavior: 'contain' },\n '.cm-tooltip-autocomplete > ul > li': {\n display: 'flex', alignItems: 'center', gap: '8px', minHeight: '40px',\n padding: '8px 10px', borderRadius: '8px', lineHeight: '20px',\n },\n '.cm-tooltip-autocomplete > ul > li:hover': { backgroundColor: 'hsl(var(--muted))' },\n '.cm-tooltip-autocomplete > ul > li[aria-selected]': {\n backgroundColor: 'hsl(var(--accent))', color: 'hsl(var(--accent-foreground))',\n boxShadow: 'inset 2px 0 hsl(var(--primary))',\n },\n '.wql-completion-icon': { display: 'inline-flex', flexShrink: '0', color: 'hsl(var(--primary))' },\n '.cm-completionLabel': { fontWeight: '500', overflow: 'hidden', textOverflow: 'ellipsis' },\n '.cm-completionMatchedText': { textDecoration: 'none', fontWeight: '700', color: 'hsl(var(--primary))' },\n '.cm-completionDetail': { marginLeft: 'auto', paddingLeft: '12px', fontSize: '12px', fontStyle: 'normal', color: 'hsl(var(--muted-foreground))' },\n '@media (pointer: coarse)': { '.cm-tooltip-autocomplete > ul > li': { minHeight: '48px' } },\n }),\n ],\n }),\n });\n view.current = editor;\n if (autoFocus) editor.focus();\n return () => { editor.destroy(); view.current = undefined; };\n }, [autoFocus, placeholder, dense]);\n\n useEffect(() => {\n const editor = view.current;\n if (!editor || editor.state.doc.toString() === value) return;\n replacing.current = true;\n editor.dispatch({ changes: { from: 0, to: editor.state.doc.length, insert: value } });\n replacing.current = false;\n }, [value]);\n\n return <div ref={host} className=\"min-w-0 w-full rounded-lg border border-border bg-background focus-within:ring-2 focus-within:ring-ring\" data-testid=\"wql-text-editor\" />;\n}\n","import { useEffect, useId, useMemo, useRef, useState, type KeyboardEvent, type ReactNode } from 'react';\nimport { cn } from '../utils/cn';\nimport { TokenSlotPill } from './QueryPalette';\nimport { InlineClauseEditor } from './InlineClauseEditor';\nimport { useClauseItems } from './clauseItems';\nimport { composerRegistry, useComposerSlots } from './ComposerRegistry';\nimport { WqlDiagnosticsStrip } from './WqlDiagnosticsStrip';\nimport { useWqlStageCounts, DEFAULT_DIAGNOSTICS_DEBOUNCE_MS, type WqlExecutor, type WqlStageCounts, type AnyParsedQuery } from './useWqlStageCounts';\nimport { CLAUSE_META, CONTENT_GROUPING_DIMENSIONS, getClauseMeta, allowedFilterTypesForTarget, type ClauseType, type QueryClause } from './queryClauses';\nimport { astToPills, editQueryClause, pivotQuery, resolveQueryDraft, type QueryDraft } from './queryAst';\nimport { isPipelineQuery } from '@bitcobblers/wod-wiki-wql';\nimport { useSuggestionBoundTypes } from './suggestionSources';\nimport { WqlTextEditor } from './WqlTextEditor';\n\nexport interface WqlValidationState {\n valid: boolean;\n error?: string;\n}\n\nexport interface WqlComposerProps {\n initialQuery?: string;\n query?: string;\n /** Synchronous resolved draft, including invalid exact text. Execution debounce belongs to the host. */\n onQueryChange?: (wql: string) => void;\n onValidationChange?: (state: WqlValidationState) => void;\n onAstChange?: (ast: AnyParsedQuery) => void;\n /** Explicit actions receive the current valid draft on the first activation. */\n onSubmit?: (wql: string) => void;\n actionLabel?: string;\n compact?: boolean;\n showDiagnostics?: boolean;\n diagnosticsPosition?: 'top' | 'bottom';\n execute?: WqlExecutor;\n /** Reuse host execution counts instead of running another query. */\n stages?: WqlStageCounts;\n debounceMs?: number;\n customSlots?: ReactNode;\n diagnosticsActions?: ReactNode;\n hiddenClauseTypes?: ClauseType[];\n /** Priority only; valid choices are never excluded by favorites. */\n preferredChoices?: readonly string[];\n autoFocus?: boolean;\n placeholder?: string;\n className?: string;\n}\n\ntype ActiveEditor =\n | { kind: 'closed' }\n | { kind: 'value'; clause: QueryClause }\n | { kind: 'wql' };\n\nexport function WqlComposer({\n initialQuery, query, onQueryChange, onValidationChange, onAstChange, onSubmit, actionLabel,\n compact = false, showDiagnostics = true, diagnosticsPosition = 'bottom', execute, stages: suppliedStages,\n debounceMs = DEFAULT_DIAGNOSTICS_DEBOUNCE_MS, customSlots, diagnosticsActions,\n hiddenClauseTypes, preferredChoices, autoFocus = false, placeholder = 'Search text or enter WQL', className,\n}: WqlComposerProps) {\n const [desktop, setDesktop] = useState(false);\n const [base, setBase] = useState(query ?? initialQuery ?? ':note');\n const [pending, setPending] = useState('');\n const [active, setActive] = useState<ActiveEditor>({ kind: 'closed' });\n const [search, setSearch] = useState('');\n const [highlight, setHighlight] = useState(-1);\n const [error, setError] = useState<string>();\n const [undo, setUndo] = useState<string>();\n const [pivot, setPivot] = useState<{ draft: QueryDraft; removed: string[] }>();\n const inputRef = useRef<HTMLInputElement>(null);\n const pickerRef = useRef<HTMLInputElement>(null);\n const openerRef = useRef<HTMLElement | null>(null);\n const emittedRef = useRef(query ?? initialQuery ?? ':note');\n const queryRef = useRef(query);\n const currentRef = useRef(resolveQueryDraft(base));\n const callbacks = useRef({ onQueryChange, onValidationChange, onAstChange });\n callbacks.current = { onQueryChange, onValidationChange, onAstChange };\n const id = useId();\n const listId = `${id}-options`;\n const slots = useComposerSlots();\n const boundTypes = useSuggestionBoundTypes();\n const external = query !== undefined && query !== queryRef.current && query !== emittedRef.current;\n const resolved = useMemo(() => resolveQueryDraft(external ? query : base, external ? '' : pending), [base, pending, external, query]);\n currentRef.current = resolved;\n const pills = useMemo(() => astToPills(resolved.ast) ?? [], [resolved.ast]);\n const guided = resolved.valid && astToPills(resolved.ast) !== null;\n const hidden = new Set<string>(hiddenClauseTypes);\n const editorClause = active.kind === 'value' ? active.clause : undefined;\n const customEditor = editorClause ? composerRegistry.getSlot(editorClause.type) : undefined;\n const supportedValues = editorClause?.type === 'groupby' && resolved.ast.family === 'find' && ['note', 'block'].includes(resolved.ast.target) ? CONTENT_GROUPING_DIMENSIONS : undefined;\n const values = useClauseItems(editorClause, search, { supportedValues });\n const preferredItems = [...values.filteredItems].sort((a, b) => {\n const ai = preferredChoices?.indexOf(a.value) ?? -1;\n const bi = preferredChoices?.indexOf(b.value) ?? -1;\n return (ai < 0 ? Infinity : ai) - (bi < 0 ? Infinity : bi);\n });\n // Pipelines render no filter pills (guided=false), so they need no\n // capability table — empty set by model, not a suppressed call.\n const allowed = isPipelineQuery(resolved.ast) ? new Set<string>() : allowedFilterTypesForTarget(resolved.ast.family === 'find' ? resolved.ast.target : '', resolved.ast.family);\n // Pipelines carry no top-level window; the date editor only opens on\n // find/aggregate drafts whose pills exist.\n const astWindow = isPipelineQuery(resolved.ast) ? undefined : resolved.ast.window;\n const draftWindow = () => {\n const draft = currentRef.current.ast;\n return isPipelineQuery(draft) ? undefined : draft.window;\n };\n const factTarget = resolved.ast.family === 'aggregate' || (resolved.ast.family === 'find' && ['segment', 'event'].includes(resolved.ast.target));\n const dynamicTypes = factTarget ? boundTypes.filter((type) => !(type in CLAUSE_META)) : [];\n const catalog = [...Object.keys(CLAUSE_META), ...dynamicTypes, ...slots.map((slot) => slot.type)]\n .filter((type, index, all) => all.indexOf(type) === index && !hidden.has(type))\n .filter((type) => ['kind', 'target'].includes(type) || allowed.has(type) || dynamicTypes.includes(type) || slots.some((slot) => slot.type === type))\n .filter((type) => type !== 'target' || resolved.ast.family === 'find')\n .filter((type) => type !== 'pipes' && type !== 'where')\n .filter((type) => type.toLowerCase().includes(pending.toLowerCase()) || getClauseMeta(type).label.toLowerCase().includes(pending.toLowerCase()))\n .sort((a, b) => Number(b.startsWith(pending)) - Number(a.startsWith(pending)));\n const suggesting = active.kind === 'closed' && pending.trim() !== '' && catalog.length > 0 && !/[{}:]/.test(pending);\n const textAction = suggesting || allowed.has('text');\n const optionCount = active.kind === 'value' ? values.filteredItems.length + Number(values.canCommitTyped) : catalog.length + Number(textAction);\n const countedStages = useWqlStageCounts(resolved.ast, resolved.valid && !error, suppliedStages ? undefined : execute, debounceMs);\n const stages = suppliedStages ?? countedStages;\n\n useEffect(() => {\n if (query === undefined || query === queryRef.current) return;\n queryRef.current = query;\n if (query === emittedRef.current) return;\n emittedRef.current = query;\n setBase(query);\n setPending('');\n setActive({ kind: 'closed' });\n setSearch('');\n setHighlight(-1);\n setError(undefined);\n setPivot(undefined);\n }, [query]);\n\n useEffect(() => {\n callbacks.current.onValidationChange?.({ valid: resolved.valid && !error && !pivot, error: error ?? resolved.error ?? (pivot ? 'Confirm or cancel the query change' : undefined) });\n callbacks.current.onAstChange?.(resolved.ast);\n }, [resolved, error, pivot]);\n\n useEffect(() => {\n const media = window.matchMedia?.('(min-width: 640px)');\n if (!media) return;\n const update = () => setDesktop(media.matches);\n update();\n media.addEventListener('change', update);\n return () => media.removeEventListener('change', update);\n }, []);\n\n useEffect(() => {\n if (autoFocus) inputRef.current?.focus();\n }, [autoFocus]);\n\n useEffect(() => {\n if (active.kind === 'value') pickerRef.current?.focus();\n }, [active.kind]);\n\n useEffect(() => {\n if (highlight >= 0) document.getElementById(`${listId}-option-${highlight}`)?.scrollIntoView?.({ block: 'nearest' });\n }, [highlight, listId]);\n\n const notify = (draft: QueryDraft) => {\n currentRef.current = draft;\n const changed = draft.wql !== emittedRef.current;\n emittedRef.current = draft.wql;\n callbacks.current.onValidationChange?.({ valid: draft.valid, error: draft.error });\n callbacks.current.onAstChange?.(draft.ast);\n if (changed) callbacks.current.onQueryChange?.(draft.wql);\n };\n\n const commit = (draft: QueryDraft) => {\n setBase(draft.wql);\n setPending('');\n setError(undefined);\n notify(draft);\n };\n\n const closeEditor = () => {\n setActive({ kind: 'closed' });\n setSearch('');\n setHighlight(-1);\n setError(undefined);\n if (openerRef.current?.isConnected) openerRef.current.focus();\n else inputRef.current?.focus();\n };\n\n const openEditor = (clause: QueryClause) => {\n if (pending && currentRef.current.valid) commit(currentRef.current);\n openerRef.current = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n if (clause.type === 'where' || clause.type === 'pipes') {\n setActive({ kind: 'wql' });\n commit(currentRef.current);\n } else {\n setActive({ kind: 'value', clause });\n setSearch('');\n }\n setHighlight(-1);\n setError(undefined);\n };\n\n const openField = (type: string) => {\n const existing = pills.find((pill) => pill.type === type);\n if (pending) commit(resolveQueryDraft(base));\n openEditor(existing ?? { id: `new-${type}`, type, ...getClauseMeta(type), value: '' });\n };\n\n const updateClause = (clause: QueryClause, value: string | null) => {\n if (clause.type === 'kind' || clause.type === 'target') {\n const next = pivotQuery(currentRef.current.wql, clause.type, value ?? '');\n if (!next.draft.valid) { setError(next.draft.error); return; }\n if (next.removed.length) { setPivot(next); return; }\n commit(next.draft);\n closeEditor();\n return;\n }\n const next = editQueryClause(currentRef.current.wql, clause, value);\n if (!next.valid) { setError(next.error); return; }\n commit(next);\n if (active.kind === 'value') {\n const previousIndex = clause.filterIndex;\n const updated = astToPills(next.ast)?.find((pill) => previousIndex !== undefined ? pill.filterIndex === previousIndex && Boolean(value) : pill.type === clause.type);\n setActive({ kind: 'value', clause: updated ?? { ...clause, value: value ?? '', filterIndex: undefined } });\n }\n };\n\n const chooseValue = (value: string) => {\n if (active.kind !== 'value') return;\n if (values.isMulti) {\n const selected = values.selectedValues;\n const wildcard = active.clause.value !== '' && active.clause.value.split('|').every((item) => item.endsWith('*'));\n const picked = wildcard && !value.endsWith('*') ? `${value}*` : value;\n updateClause(active.clause, (selected.includes(picked) ? selected.filter((item) => item !== picked) : [...selected, picked]).join('|'));\n } else {\n const next = editQueryClause(currentRef.current.wql, active.clause, value);\n if (!next.valid) { setError(next.error); return; }\n updateClause(active.clause, value);\n if (!['kind', 'target'].includes(active.clause.type)) closeEditor();\n }\n };\n\n const submit = () => {\n const draft = currentRef.current;\n if (!draft.valid || error || pivot) return;\n commit(draft);\n onSubmit?.(draft.wql);\n };\n\n const handleKeys = (event: KeyboardEvent<HTMLElement>) => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Enter' && (event.ctrlKey || event.metaKey)) {\n event.preventDefault(); event.stopPropagation(); submit(); return;\n }\n if (event.key === 'Escape') {\n if (pivot) { event.preventDefault(); event.stopPropagation(); setPivot(undefined); return; }\n if (active.kind !== 'closed') { event.preventDefault(); event.stopPropagation(); closeEditor(); return; }\n if (suggesting) { event.preventDefault(); event.stopPropagation(); commit(currentRef.current); setHighlight(-1); return; }\n }\n if (active.kind === 'value' && event.currentTarget instanceof HTMLInputElement && event.currentTarget === inputRef.current) {\n if (['Enter', 'ArrowDown', 'ArrowUp'].includes(event.key)) event.stopPropagation();\n if (event.key === 'Enter') { event.preventDefault(); submit(); }\n return;\n }\n if ((active.kind === 'value' || suggesting) && ['ArrowDown', 'ArrowUp'].includes(event.key)) {\n event.preventDefault(); event.stopPropagation();\n setHighlight((index) => event.key === 'ArrowDown' ? (index + 1) % optionCount : (index <= 0 ? optionCount - 1 : index - 1));\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault(); event.stopPropagation();\n if (highlight >= 0 && suggesting && catalog[highlight]) openField(catalog[highlight]);\n else if (suggesting && highlight === catalog.length) submit();\n else if (active.kind === 'value') {\n if (highlight >= 0 && highlight < preferredItems.length) chooseValue(preferredItems[highlight].value);\n else if (values.canCommitTyped && (highlight === preferredItems.length || highlight < 0)) chooseValue(values.typedValue);\n else if (search && !values.openSlot) setError(`Unknown ${getClauseMeta(active.clause.type).label} value`);\n } else submit();\n return;\n }\n if (event.key === 'Backspace' && active.kind === 'closed' && !pending) {\n const visible = Array.from(event.currentTarget.closest('[data-testid=\"wql-composer-root\"]')?.querySelectorAll<HTMLElement>('[data-testid^=\"token-slot-\"]:not([data-testid^=\"token-slot-remove-\"]):not([data-testid^=\"token-slot-value-\"])') ?? []);\n visible.at(-1)?.focus();\n }\n };\n\n const action = <>{actionLabel && <button type=\"button\" onClick={submit} disabled={!resolved.valid || Boolean(error) || Boolean(pivot)} className=\"min-h-12 rounded-lg bg-primary px-4 text-primary-foreground disabled:opacity-50\">{actionLabel}</button>}{diagnosticsActions}</>;\n const diagnostics = { ...resolved, valid: resolved.valid && !error, error: error ?? resolved.error };\n\n return (\n <div className={cn('min-w-0 space-y-2', desktop && compact && 'flex flex-wrap items-center gap-2 space-y-0 [&>:not([data-wql-inline])]:w-full', className)} data-testid=\"wql-composer-root\">\n {diagnosticsPosition === 'top' && showDiagnostics && <WqlDiagnosticsStrip diagnostics={diagnostics} stages={stages} actions={action} variant=\"header\" />}\n {(desktop || active.kind === 'wql' || !guided) && <div data-wql-inline className={cn('min-w-0', desktop && compact ? 'flex-1' : 'w-full')}><WqlTextEditor value={resolved.wql} placeholder={placeholder} dense={desktop && compact} onChange={(text) => commit(resolveQueryDraft(text))} onSubmit={submit} onEscape={() => { if (active.kind === 'closed') return false; closeEditor(); return true; }} autoFocus={autoFocus} /></div>}\n <div className={cn('flex min-w-0 flex-wrap items-center gap-1', !desktop && 'rounded-xl border border-border p-2', desktop && compact && 'hidden')} data-testid=\"wql-composer\" onKeyDown={(event) => {\n if (!['Delete', 'Backspace'].includes(event.key) || !(event.target instanceof HTMLButtonElement)) return;\n const buttons = Array.from(event.currentTarget.querySelectorAll('[data-testid^=\"token-slot-\"]:not([data-testid^=\"token-slot-remove-\"]):not([data-testid^=\"token-slot-value-\"])'));\n const pill = pills.filter((item) => !hidden.has(item.type))[buttons.indexOf(event.target)];\n if (!pill || ['kind', 'target', 'agg', 'metric'].includes(pill.type)) return;\n event.preventDefault(); event.stopPropagation();\n setUndo(currentRef.current.wql);\n updateClause(pill, null);\n inputRef.current?.focus();\n }}>\n {guided && active.kind !== 'wql' && pills.filter((pill) => !hidden.has(pill.type)).map((pill) => <TokenSlotPill key={pill.id} clause={pill} compact={compact} isActive={active.kind === 'value' && active.clause.id === pill.id} onClick={() => openEditor(pill)} onRemove={['kind', 'target', 'agg', 'metric'].includes(pill.type) ? undefined : () => { setUndo(currentRef.current.wql); updateClause(pill, null); }} />)}\n {!desktop && active.kind !== 'wql' && guided && <input ref={inputRef} type=\"text\" role=\"combobox\" aria-label=\"Search text or WQL\" aria-controls={suggesting ? listId : undefined} aria-expanded={suggesting} aria-activedescendant={suggesting && highlight >= 0 ? `${listId}-option-${highlight}` : undefined} value={pending} placeholder={placeholder} onChange={(event) => { const text = event.target.value; setPending(text); setHighlight(-1); setError(undefined); notify(resolveQueryDraft(base, text)); }} onKeyDown={handleKeys} className=\"min-h-12 min-w-0 flex-[1_1_140px] bg-transparent font-mono text-base outline-none\" data-testid=\"wql-composer-input\" />}\n {customSlots}\n </div>\n {(!desktop || undo) && <div data-wql-inline={desktop && compact ? '' : undefined} className=\"flex flex-wrap items-center gap-2\">\n {!desktop && <button type=\"button\" onClick={() => { commit(currentRef.current); if (active.kind === 'wql') closeEditor(); else setActive({ kind: 'wql' }); }} disabled={active.kind === 'wql' && !guided} className=\"min-h-12 rounded-lg px-3\">{active.kind === 'wql' ? 'Guided controls' : 'Edit WQL'}</button>}\n {undo && <button type=\"button\" onClick={() => { commit(resolveQueryDraft(undo)); setUndo(undefined); }} className={cn('rounded-lg', desktop && compact ? 'min-h-9 px-2.5 text-xs text-muted-foreground hover:text-foreground' : 'min-h-12 px-3')}>Undo removal</button>}\n </div>}\n {active.kind === 'value' && <div data-testid=\"wql-field-picker\" className=\"min-w-0 rounded-xl border border-border p-2 focus-within:ring-2 focus-within:ring-ring\" onKeyDown={(event) => { if (event.key === 'Escape' || (event.key === 'Enter' && (event.ctrlKey || event.metaKey))) handleKeys(event); }}>\n <button type=\"button\" onClick={closeEditor} className=\"min-h-12 px-3\">Back</button>\n <label className=\"block text-sm\">Search {getClauseMeta(active.clause.type).label}\n <input ref={pickerRef} type=\"search\" role=\"combobox\" aria-label={`Search ${getClauseMeta(active.clause.type).label}`} aria-controls={listId} aria-expanded=\"true\" aria-activedescendant={highlight >= 0 ? `${listId}-option-${highlight}` : undefined} value={search} onChange={(event) => { setSearch(event.target.value); setHighlight(-1); setError(undefined); }} onKeyDown={handleKeys} className=\"min-h-12 w-full rounded border border-border bg-background px-3 text-base\" data-testid=\"wql-picker-search\" />\n </label>\n {active.kind === 'value' && active.clause.filterIndex !== undefined && <div className=\"flex flex-wrap gap-2\">\n <label className=\"flex min-h-12 items-center gap-2\"><input type=\"checkbox\" checked={active.clause.negate ?? false} onChange={(event) => updateClause({ ...active.clause, negate: event.target.checked }, active.clause.value)} />Exclude</label>\n <label className=\"flex min-h-12 items-center gap-2\"><input type=\"checkbox\" checked={active.clause.value.split('|').every((value) => value.endsWith('*'))} onChange={(event) => updateClause(active.clause, active.clause.value.split('|').map((value) => `${value.replace(/\\*$/, '')}${event.target.checked ? '*' : ''}`).join('|'))} />Starts with</label>\n </div>}\n {active.kind === 'value' && active.clause.type === 'time' && <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n <label>Start date<input type=\"date\" aria-label=\"Start date\" className=\"min-h-12 w-full bg-background text-base\" onChange={(event) => { const end = draftWindow(); updateClause(active.clause, `from ${event.target.value}${end?.kind === 'range' && end.end ? ` to ${end.end}` : ''}`); }} value={astWindow?.kind === 'range' ? astWindow.start : ''} /></label>\n <label>End date<input type=\"date\" aria-label=\"End date\" className=\"min-h-12 w-full bg-background text-base\" onChange={(event) => { const window = draftWindow(); if (window?.kind === 'range') updateClause(active.clause, `from ${window.start}${event.target.value ? ` to ${event.target.value}` : ''}`); else setError('Choose a start date first'); }} value={astWindow?.kind === 'range' ? astWindow.end ?? '' : ''} /></label>\n </div>}\n {active.kind === 'value' && (customEditor ? <customEditor.Editor value={customEditor.parseValue ? customEditor.parseValue(active.clause.value) : active.clause.value} onChange={(value) => updateClause(active.clause, customEditor.formatValue ? customEditor.formatValue(value) : String(value))} onClose={closeEditor} /> : <InlineClauseEditor clause={active.clause} filteredItems={preferredItems} selectedValues={values.selectedValues} isMulti={values.isMulti} typedValue={values.typedValue} canCommitTyped={values.canCommitTyped} emptyText={values.emptyText} highlightIdx={highlight} onHighlight={setHighlight} onCommitValue={chooseValue} onCommitTyped={chooseValue} listId={listId} onDone={closeEditor} onReorder={(dimensions) => updateClause(active.clause, dimensions.join('|'))} />)}\n </div>}\n {suggesting && <div id={listId} role=\"listbox\" aria-label=\"Query conditions\" className=\"max-h-64 overflow-y-auto rounded-xl border border-border p-1\" data-testid=\"wql-filter-typeahead\">\n {catalog.map((type, index) => <button key={type} id={`${listId}-option-${index}`} type=\"button\" role=\"option\" aria-selected={false} onMouseEnter={() => setHighlight(index)} onClick={() => openField(type)} className={cn('flex min-h-12 w-full items-center gap-2 rounded px-3 text-left', index === highlight && 'bg-muted')} data-testid={`wql-filter-typeahead-${type}`}><span>{pills.some((pill) => pill.type === type) ? 'Edit' : 'Add'} {getClauseMeta(type).label}</span><span className=\"text-xs text-muted-foreground\">{type}</span></button>)}\n {textAction && <button id={`${listId}-option-${catalog.length}`} type=\"button\" role=\"option\" aria-selected={false} onMouseEnter={() => setHighlight(catalog.length)} className={cn('min-h-12 w-full rounded px-3 text-left', highlight === catalog.length && 'bg-muted')} onClick={submit}>Search text {pending}</button>}\n </div>}\n {pivot && <div role=\"alertdialog\" aria-label=\"Confirm query pivot\" className=\"rounded-xl border border-border p-3\"><p>Changing the query removes incompatible clauses:</p><ul>{pivot.removed.map((item) => <li key={item}>{item}</li>)}</ul><button type=\"button\" className=\"min-h-12 px-3\" onClick={() => setPivot(undefined)}>Cancel</button><button type=\"button\" className=\"min-h-12 px-3\" onClick={() => { commit(pivot.draft); setPivot(undefined); closeEditor(); }}>Change query</button></div>}\n {!showDiagnostics && (error ?? resolved.error) && <p role=\"alert\" className=\"text-sm text-destructive\">{error ?? resolved.error}</p>}\n {!guided && !resolved.error && <p className=\"text-sm text-muted-foreground\">Use Edit WQL to preserve every clause.</p>}\n {pending && <p className=\"text-sm text-muted-foreground\" data-testid=\"wql-composer-pending\">{resolved.valid ? 'Current draft includes this text' : resolved.error}</p>}\n {showDiagnostics && diagnosticsPosition === 'bottom' ? <WqlDiagnosticsStrip diagnostics={diagnostics} stages={stages} actions={action} /> : diagnosticsPosition !== 'top' || !showDiagnostics ? <div className=\"flex flex-wrap items-center justify-end gap-2\">{action}</div> : null}\n </div>\n );\n}\n","/**\n * filterTypeahead — matches free text typed into the WqlComposer's input\n * against the filter-clause vocabulary (queryClauses). While the user types\n * a filter key ('so', 'inten', 'eff'…) the composer proposes adding that\n * filter — or, when a pill of that type is already on the query, editing it.\n * Accept (Tab or tap) adds/activates the pill and opens its condition\n * editor; the composer owns candidates (source-plane allowlist, existing\n * pills, hidden types) and the accept behavior.\n *\n * Pure module: no React.\n */\n\nexport interface FilterTypeaheadCandidate {\n /** Clause type key, e.g. 'source' | 'effort' | 'catalog'. */\n type: string\n label: string\n /** Placeholder describing the condition, e.g. 'journal, notes, metrics…'. */\n hint: string\n icon: string\n /** True when a pill of this type is already on the query — accept edits it. */\n present: boolean\n /** Index of the existing pill when `present`. */\n pillIdx?: number\n}\n\nexport interface FilterTypeaheadMatch extends FilterTypeaheadCandidate {}\n\n/**\n * Match the typed text against candidate filter keys/labels: prefix match on\n * the type key first, then the display label; shorter keys rank first within\n * the same class. Mid-WQL text (whitespace, braces, or a `:` — the\n * composer's query/raw/invalid pending paths own that) proposes nothing.\n */\nexport function matchFilterTypeahead(\n freeText: string,\n candidates: FilterTypeaheadCandidate[],\n): FilterTypeaheadMatch[] {\n const raw = freeText.trim();\n if (!raw) return [];\n if (/[\\s:{}]/.test(raw)) return [];\n const needle = raw.toLowerCase();\n return candidates\n .filter(\n (c) =>\n c.type.toLowerCase().startsWith(needle) ||\n c.label.toLowerCase().startsWith(needle),\n )\n .sort((a, b) => rank(a, needle) - rank(b, needle));\n}\n\nfunction rank(c: FilterTypeaheadCandidate, needle: string): number {\n const typeHit = c.type.toLowerCase().startsWith(needle) ? 0 : 10;\n return typeHit + c.type.length;\n}\n","import { useId, useState } from 'react';\nimport { parseQuery } from '@bitcobblers/wod-wiki-wql';\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 id = useId();\n const [start, setStart] = useState(value?.start ?? '');\n const [end, setEnd] = useState(value?.end ?? '');\n // Real grammar + civil-calendar validation: the parser rejects 02-30,\n // month 13, and other regex-passing strings via Date component round-trip.\n // The shape check only guards which message to show, not acceptance.\n const shaped = ISO_DATE.test(start) && ISO_DATE.test(end);\n const parseError = shaped\n ? parseQuery(`:note from ${start} to ${end}`).error\n : undefined;\n const orderError = shaped && start > end ? 'Date range end must not precede its start' : undefined;\n const error = parseError ?? orderError;\n const ready = shaped && !error;\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 htmlFor={`${id}-start`} className=\"text-[10px] uppercase font-bold text-muted-foreground\">\n Start\n </label>\n <input\n id={`${id}-start`}\n type=\"date\"\n value={start}\n onChange={(e) => setStart(e.target.value)}\n className=\"w-full min-h-12 rounded border border-border bg-background px-1.5 text-base font-mono\"\n data-testid=\"date-range-start\"\n />\n </div>\n <div>\n <label htmlFor={`${id}-end`} className=\"text-[10px] uppercase font-bold text-muted-foreground\">\n End\n </label>\n <input\n id={`${id}-end`}\n type=\"date\"\n value={end}\n onChange={(e) => setEnd(e.target.value)}\n className=\"w-full min-h-12 rounded border border-border bg-background px-1.5 text-base font-mono\"\n data-testid=\"date-range-end\"\n />\n </div>\n </div>\n {error && (\n <p role=\"alert\" className=\"text-[11px] text-destructive\" data-testid=\"date-range-error\">\n {error}\n </p>\n )}\n <div className=\"pt-1 flex items-center justify-between gap-2 border-t border-border/50\">\n <code className=\"text-[10px] font-mono text-muted-foreground truncate\">\n {ready ? `daterange:${start}_${end}` : 'daterange: <start>_<end>'}\n </code>\n <div className=\"flex gap-1.5 shrink-0\">\n <button\n type=\"button\"\n onClick={onClose}\n className=\"min-h-12 px-3 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=\"min-h-12 px-3 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","/**\n * WqlQueryInspectorModal — edit a ```query block's WQL through the shared\n * composer, hosted on the shared EditorDialog (sheet presentation on\n * mobile: no autofocus, footer outside the scroll body).\n *\n * The draft is controlled and its validity tracked synchronously alongside\n * every change; Apply re-validates the exact draft text at action time and\n * hands it to the host — the fence patcher upstream preserves the rest of\n * the note source. A rejected write keeps the dialog open with the draft\n * intact and the error visible; Cancel (or Escape) never writes.\n */\nimport { useCallback, useEffect, useState } from 'react';\nimport { EditorDialog } from '../dialog/EditorDialog';\nimport { WqlComposer, type WqlExecutor, type WqlValidationState } from '../composer';\nimport { isFindQuery, parseQuery } 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 /** Persist the applied query. A returned Promise gates the button until\n * it settles; a rejection keeps the dialog open with the error visible. */\n onApply: (newQuery: string) => void | Promise<void>;\n title?: string;\n subtitle?: string;\n /** Label for the confirm button (defaults to \"Apply to Block\"). */\n applyLabel?: 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 applyLabel = 'Apply to Block',\n executor,\n}: WqlQueryInspectorModalProps) {\n const [wql, setWql] = useState<string>(initialQuery);\n const [validation, setValidation] = useState<WqlValidationState>({\n valid: !parseQuery(initialQuery).error,\n });\n const [applying, setApplying] = useState(false);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n if (isOpen) {\n setWql(initialQuery);\n setValidation({ valid: !parseQuery(initialQuery).error });\n setError(null);\n }\n }, [isOpen, initialQuery]);\n\n const diagnosticsExecutor = useCallback<WqlExecutor>(\n (ast) => {\n if (!executor) throw new Error('No executor provided');\n return isFindQuery(ast) ? executor.runFind(ast) : executor.runQuery(ast.raw);\n },\n [executor],\n );\n\n const handleApply = async () => {\n // Validate the exact draft at action time; the composer's synchronous\n // state is not relied on within the same event.\n if (applying || parseQuery(wql).error) return;\n setApplying(true);\n setError(null);\n try {\n await onApply(wql);\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : String(err));\n } finally {\n setApplying(false);\n }\n };\n\n return (\n <EditorDialog\n open={isOpen}\n onClose={onClose}\n presentation=\"sheet\"\n title={title}\n description={subtitle}\n footer={\n <>\n <div className=\"flex-1 min-w-0 truncate font-mono text-xs text-muted-foreground\" data-testid=\"wql-inspector-draft\">\n {wql}\n </div>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"min-h-12 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 data-testid=\"wql-inspector-apply\"\n onClick={() => void handleApply()}\n disabled={!validation.valid || applying}\n className=\"min-h-12 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 {applying ? 'Applying…' : applyLabel}\n </button>\n </>\n }\n >\n <div className=\"space-y-4\">\n <WqlComposer\n query={wql}\n onQueryChange={setWql}\n onValidationChange={setValidation}\n execute={executor ? diagnosticsExecutor : undefined}\n showDiagnostics\n />\n {error && (\n <p role=\"alert\" className=\"rounded-md border border-destructive/40 bg-destructive/10 px-3 py-2 text-xs text-destructive font-mono\">\n {error}\n </p>\n )}\n </div>\n </EditorDialog>\n );\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport { Edit3 } from 'lucide-react';\nimport { parseQuery, isFindQuery, isPipelineQuery, substituteTokens, isDashboardWidgetType, unknownTokensMessage, unknownWidgetTypeMessage, type QueryResult, type FindQueryResult, type PipelineResult, type NoteContainer, type RowsQueryResult } 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 { toChartResult } from '../widgets/chartData';\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 * May return the write's Promise so a rejected save keeps the editor\n * open; a plain void write is fire-and-forget. */\n onSaveQuery?: (nextQuery: string) => void | Promise<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 /** Fence-tag presentation attributes (decision 22). */\n attributes?: Record<string, string>;\n /** Optional RPE capture handler. */\n onCaptureRpe?: (resultId: string, rpe: number) => Promise<void>;\n /** Optional click handler for opening a note from :note results. */\n onOpenNote?: (item: { id: string; title?: string; blockContentId?: string }) => void;\n /** Optional resolver returning the destination href for an item in :note results. */\n noteHref?: (item: { id: string; title?: string; blockContentId?: string }) => string;\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 attributes,\n onCaptureRpe,\n onOpenNote,\n noteHref,\n}: QueryBlockViewProps) {\n const [isModalOpen, setIsModalOpen] = useState(false);\n\n const extracted = useMemo(() => extractBlockQueries(query), [query]);\n // Decision 22: the body IS the Query Document — no positional split.\n // Presentation config rides fence-tag attributes.\n const { query: effectiveQuery, missing } = useMemo(() => {\n const raw = extracted.length > 0 ? extracted[0].query : query;\n const subQuery = substituteTokens(raw, tokenValues ?? {});\n // Fence-tag attributes (`goal=$token`) resolve against the same values;\n // a missing token blocks the widget rather than rendering a NaN target.\n const missingSet = new Set(subQuery.missing);\n for (const value of Object.values(attributes ?? {})) {\n for (const m of substituteTokens(value, tokenValues ?? {}).missing) missingSet.add(m);\n }\n return { query: subQuery.query, missing: [...missingSet] };\n }, [extracted, query, tokenValues, attributes]);\n\n const resolvedAttributes = useMemo(() => {\n const out: Record<string, string> = {};\n for (const [key, value] of Object.entries(attributes ?? {})) {\n out[key] = substituteTokens(value, tokenValues ?? {}).query;\n }\n return out;\n }, [attributes, 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 [pipelineResult, setPipelineResult] = useState<PipelineResult | 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 setPipelineResult(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 let retryTimer: number | NodeJS.Timeout | undefined;\n const isSession = parsed.target === 'session';\n const executeFind = (attemptCount: number) => {\n void executor\n .runFind(parsed)\n .then((res) => {\n if (cancelled) return;\n setFindResult(res);\n if (isSession && (res.runs ?? []).length === 0 && attemptCount < 4) {\n const delays = [50, 150, 350, 750];\n retryTimer = setTimeout(() => {\n if (!cancelled) executeFind(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 executeFind(0);\n return () => {\n cancelled = true;\n clearTimeout(retryTimer);\n };\n }\n\n if (isPipelineQuery(parsed)) {\n if (!executor.runPipeline) {\n setRunError('pipeline queries are not supported by this executor');\n return;\n }\n void executor\n .runPipeline(effectiveQuery)\n .then((res) => {\n if (!cancelled) setPipelineResult(res);\n })\n .catch((err) => {\n if (!cancelled) setRunError(err instanceof Error ? err.message : String(err));\n });\n return () => {\n cancelled = true;\n };\n }\n\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 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 (!isFindQuery(parsed) || parsed.target !== 'session') 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 ) : isFindQuery(parsed) ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n {(findResult as any)?.table ? (\n <WidgetChart type=\"table\" result={findResult as any} />\n ) : resultId && findResult?.runs && findResult.runs.length > 0 ? (\n <RowsResultsChrome\n resultId={resultId}\n sessionResult={findResult as any}\n executor={executor}\n onCaptureRpe={onCaptureRpe}\n onCaptured={() => setRowsRefreshKey((k) => k + 1)}\n />\n ) : findResult?.runs ? (\n <RowsTable result={findResult as any} />\n ) : findResult ? (\n <FindResultList\n target={parsed.target}\n notes={findResult.notes}\n blocks={findResult.blocks}\n containers={findResult.containers}\n onOpenNote={onOpenNote}\n noteHref={noteHref}\n />\n ) : (\n <div className=\"text-xs text-muted-foreground py-2\">Loading rows…</div>\n )}\n </QueryBlockShell>\n ) : isPipelineQuery(parsed) ? (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <PipelineResultView\n result={pipelineResult}\n onOpenNote={onOpenNote}\n noteHref={noteHref}\n widgetType={widgetType}\n attributes={resolvedAttributes}\n fallbackLabel={parsed.raw}\n />\n </QueryBlockShell>\n ) : (\n <QueryBlockShell onEdit={onEdit} readOnly={readOnly}>\n <AnalyticsChart\n result={result}\n metric={parsed.metric}\n widgetType={widgetType}\n attributes={resolvedAttributes}\n />\n </QueryBlockShell>\n )}\n {canEdit && (\n <WqlQueryInspectorModal\n isOpen={isModalOpen}\n onClose={() => setIsModalOpen(false)}\n initialQuery={effectiveQuery}\n executor={executor}\n onApply={(nextQuery) => onSaveQuery(nextQuery)}\n />\n )}\n </div>\n );\n}\n\nfunction AnalyticsChart({\n result,\n metric,\n widgetType,\n attributes,\n}: {\n result: QueryResult | undefined;\n metric: string;\n widgetType?: string;\n attributes?: Record<string, string>;\n}) {\n const shape = useChartShape(result);\n\n if (widgetType != null && widgetType !== '') {\n return <WidgetChart type={widgetType} result={result} label={metric} attributes={attributes} />;\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\n/**\n * Canonical page link for a matched note — the parent Page wins over the\n * standalone note (slug pages → /p/:slug, journal date pages →\n * /journal/:date); undefined lets the caller's resolver answer.\n */\nfunction containerPageHref(container: NoteContainer | undefined): string | undefined {\n if (!container || container.kind !== 'page') return undefined;\n const { slug, date } = container as { slug?: string; date?: string };\n if (slug) return `/p/${encodeURIComponent(slug)}`;\n if (date) return `/journal/${encodeURIComponent(date)}`;\n return undefined;\n}\n\nfunction FindResultList({\n target,\n notes,\n blocks,\n containers,\n onOpenNote,\n noteHref,\n}: {\n target: string;\n notes: FindQueryResult['notes'];\n blocks: FindQueryResult['blocks'];\n containers?: FindQueryResult['containers'];\n onOpenNote?: (item: { id: string; title?: string; blockContentId?: string }) => void;\n noteHref?: (item: { id: string; title?: string; blockContentId?: string }) => string;\n}) {\n const isBlock = target === 'block';\n const items = isBlock ? blocks : notes;\n\n if (items.length === 0) {\n return (\n <div className=\"text-xs text-muted-foreground py-2\">\n No {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} {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 const typedItem = item as unknown as { id: string; title?: string; blockContentId?: string };\n const title = isBlock\n ? typedItem.title || typedItem.blockContentId || item.id\n : typedItem.title || item.id;\n const href = containers\n ? containerPageHref(containers[item.id]) ?? (noteHref ? noteHref(typedItem) : undefined)\n : noteHref\n ? noteHref(typedItem)\n : undefined;\n return (\n <li key={item.id} className=\"rounded hover:bg-muted/50 truncate\">\n {href ? (\n <a\n href={href}\n onClick={(e) => {\n if (onOpenNote) {\n e.preventDefault();\n onOpenNote(typedItem);\n }\n }}\n className=\"block py-0.5 px-1.5 text-primary hover:underline truncate\"\n >\n {title}\n </a>\n ) : onOpenNote ? (\n <button\n type=\"button\"\n onClick={() => onOpenNote(typedItem)}\n className=\"w-full text-left py-0.5 px-1.5 text-primary hover:underline truncate\"\n >\n {title}\n </button>\n ) : (\n <span className=\"block py-0.5 px-1.5 text-foreground truncate\">{title}</span>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n}\n\n/**\n * Pipeline result rendering (`:source | :fn | :chart`, `@dataset | …`).\n * The terminal chart sink picks the real renderer (all six heads map onto\n * production widgets); a source-only pipeline passes its content plane\n * through; a sink-less numeric result falls back to the automatic chart\n * shape.\n */\nfunction PipelineResultView({\n result,\n onOpenNote,\n noteHref,\n widgetType,\n attributes,\n fallbackLabel,\n}: {\n result: PipelineResult | undefined;\n onOpenNote?: (item: { id: string; title?: string; blockContentId?: string }) => void;\n noteHref?: (item: { id: string; title?: string; blockContentId?: string }) => string;\n widgetType?: string;\n attributes?: Record<string, string>;\n fallbackLabel: string;\n}) {\n if (!result) {\n return <div className=\"text-xs text-muted-foreground py-2\">Loading…</div>;\n }\n if (result.error) {\n return (\n <div className=\"text-xs text-destructive bg-destructive/10 border border-destructive/20 rounded p-2\">\n Query execution error: {result.error}\n </div>\n );\n }\n\n const listTarget =\n result.parsed.source.kind === 'query' && result.parsed.source.query.family === 'find'\n ? result.parsed.source.query.target\n : 'note';\n if ((result.notes?.length ?? 0) + (result.blocks?.length ?? 0) > 0) {\n return (\n <FindResultList\n target={listTarget}\n notes={result.notes ?? []}\n blocks={result.blocks ?? []}\n containers={result.containers}\n onOpenNote={onOpenNote}\n noteHref={noteHref}\n />\n );\n }\n\n if (result.runs && result.runs.length > 0) {\n // Session-run pipelines surface the rows grid (RowsQueryResult shape).\n const rowsResult = { parsed: result.parsed, runs: result.runs, table: result.table } as unknown as RowsQueryResult;\n return <RowsTable result={rowsResult} />;\n }\n\n const chartHead = widgetType != null && widgetType !== '' ? widgetType : result.chart?.head;\n if (chartHead) {\n const sinkAttributes = Object.fromEntries(\n (result.chart?.filters ?? []).map((f) => [f.key, f.values.map((v) => v.value).join(',')]),\n );\n // Bounded height: h-full resolves to 0 against an auto-height shell and\n // leaves ResponsiveContainer charts with no size to measure.\n return (\n <div className=\"w-full h-[220px] min-h-[160px]\">\n <WidgetChart\n type={chartHead}\n result={toChartResult(result)}\n label={fallbackLabel}\n attributes={{ ...sinkAttributes, ...attributes }}\n />\n </div>\n );\n }\n\n if (result.series && result.series.length > 0) {\n return (\n <div className=\"w-full h-[220px] min-h-[160px]\">\n <AnalyticsChart result={toChartResult(result)} metric={fallbackLabel} />\n </div>\n );\n }\n\n return <WqlEmptyState result={toChartResult(result)} />;\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 focus-visible:opacity-100 [@media(pointer:coarse)]: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 | Promise<void>;\n onOpenNote?: (item: { id: string; title?: string; blockContentId?: string }) => void;\n noteHref?: (item: { id: string; title?: string; blockContentId?: string }) => string;\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?.readOnly === other.options?.readOnly &&\n this.options?.executor === other.options?.executor &&\n this.options?.onOpenNote === other.options?.onOpenNote &&\n this.options?.noteHref === other.options?.noteHref\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 return this.options.onSaveQuery(this.sectionId, nextQuery);\n }\n const result = saveBlockQuerySource(view, this.sectionId, nextQuery);\n if (!result.ok) throw new Error(result.message);\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 onOpenNote={this.options?.onOpenNote}\n noteHref={this.options?.noteHref}\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 return this.options.onSaveQuery(this.sectionId, nextQuery);\n }\n const result = saveBlockQuerySource(view, this.sectionId, nextQuery);\n if (!result.ok) throw new Error(result.message);\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 onOpenNote={this.options?.onOpenNote}\n noteHref={this.options?.noteHref}\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 if (view.state.readOnly) {\n return { ok: false, message: \"Cannot modify query source in read-only mode.\" };\n }\n\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-signal-positive hover:text-signal-positive/80\",\n mode === \"error\" && \"text-signal-caution hover:text-signal-caution/80\",\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 if (view.state.readOnly) {\n return {\n ok: false,\n config: {},\n message: \"Cannot modify widget source in read-only mode.\",\n };\n }\n\n const parsed = parseWidgetConfig(markdown);\n if (!parsed.ok) {\n return parsed;\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-signal-positive/40 ring-1 ring-signal-positive/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 {\n // sectionField not present in this editor state; nothing to decorate.\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. @internal\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 indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);\n return indented >= indentAfter + 5 ? 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 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*)?$/;\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, line.pos))\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-]+)+(\\/[^\\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 = 122,\n Unit = 1,\n identifier = 123,\n callee = 124,\n VariableName = 2,\n queryIdentifier = 125,\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);\nconst queryIdentifiers = new ExternalTokenizer(\n identifierTokens(queryIdentifier, queryVariableName, QueryCallee)\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\": tags.definitionKeyword,\n \"from to selector\": 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\": 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:38, \"nth-child\":38, \"nth-last-child\":38, \"nth-of-type\":38, \"nth-last-of-type\":38, dir:38, \"host-context\":38, if:84, url:124, \"url-prefix\":124, domain:124, regexp:124};\nconst spec_queryIdentifier = {__proto__:null,or:98, and:98, not:106, only:106, layer:170};\nconst spec_QueryCallee = {__proto__:null,selector:112, layer:166};\nconst spec_AtKeyword = {__proto__:null,\"@import\":162, \"@media\":174, \"@charset\":178, \"@namespace\":182, \"@keyframes\":188, \"@supports\":200, \"@scope\":204};\nconst spec_identifier = {__proto__:null,to:207};\nconst parser = LRParser.deserialize({\n version: 14,\n states: \"EbQYQdOOO#qQdOOP#xO`OOOOQP'#Cf'#CfOOQP'#Ce'#CeO#}QdO'#ChO$nQaO'#CcO$xQdO'#CkO%TQdO'#DpO%YQdO'#DrO%_QdO'#DuO%_QdO'#DxOOQP'#FV'#FVO&eQhO'#EhOOQS'#FU'#FUOOQS'#Ek'#EkQYQdOOO&lQdO'#EOO&PQhO'#EUO&lQdO'#EWO'aQdO'#EYO'lQdO'#E]O'tQhO'#EcO(VQdO'#EeO(bQaO'#CfO)VQ`O'#D{O)[Q`O'#F`O)gQdO'#F`QOQ`OOP)qO&jO'#CaPOOO)C@t)C@tOOQP'#Cj'#CjOOQP,59S,59SO#}QdO,59SO)|QdO,59VO%TQdO,5:[O%YQdO,5:^O%_QdO,5:aO%_QdO,5:cO%_QdO,5:dO%_QdO'#ErO*XQ`O,58}O*aQdO'#DzOOQS,58},58}OOQP'#Cn'#CnOOQO'#Dn'#DnOOQP,59V,59VO*hQ`O,59VO*mQ`O,59VOOQP'#Dq'#DqOOQP,5:[,5:[OOQO'#Ds'#DsO*rQpO,5:^O+]QaO,5:aO+sQaO,5:dOOQW'#DZ'#DZO,ZQhO'#DdO,xQhO'#FaO'tQhO'#DbO-WQ`O'#DhOOQW'#F['#F[O-]Q`O,5;SO-eQ`O'#DeOOQS-E8i-E8iOOQ['#Cs'#CsO-jQdO'#CtO.QQdO'#CzO.hQdO'#C}O/OQ!pO'#DPO1RQ!jO,5:jOOQO'#DU'#DUO*mQ`O'#DTO1cQ!nO'#FXO3`Q`O'#DVO3eQ`O'#DkOOQ['#FX'#FXO-`Q`O,5:pO3jQ!bO,5:rOOQS'#E['#E[O3rQ`O,5:tO3wQdO,5:tOOQO'#E_'#E_O4PQ`O,5:wO4UQhO,5:}O%_QdO'#DgOOQS,5;P,5;PO-eQ`O,5;PO4^QdO,5;PO4fQdO,5:gO4vQdO'#EtO5TQ`O,5;zO5TQ`O,5;zPOOO'#Ej'#EjP5`O&jO,58{POOO,58{,58{OOQP1G.n1G.nOOQP1G.q1G.qO*hQ`O1G.qO*mQ`O1G.qOOQP1G/v1G/vO5kQpO1G/xO5sQaO1G/{O6ZQaO1G/}O6qQaO1G0OO7XQaO,5;^OOQO-E8p-E8pOOQS1G.i1G.iO7cQ`O,5:fO7hQdO'#DoO7oQdO'#CrOOQP1G/x1G/xO&lQdO1G/xO7vQ!jO'#DZO8UQ!bO,59vO8^QhO,5:OOOQO'#F]'#F]O8XQ!bO,59zO'tQhO,59xO8fQhO'#EvO8sQ`O,5;{O9OQhO,59|O9uQhO'#DiOOQW,5:S,5:SOOQS1G0n1G0nOOQW,5:P,5:PO9|Q!fO'#FYOOQS'#FY'#FYOOQS'#Em'#EmO;^QdO,59`OOQ[,59`,59`O;tQdO,59fOOQ[,59f,59fO<[QdO,59iOOQ[,59i,59iOOQ[,59k,59kO&lQdO,59mO<rQhO'#EQOOQW'#EQ'#EQO=WQ`O1G0UO1[QhO1G0UOOQ[,59o,59oO'tQhO'#DXOOQ[,59q,59qO=]Q#tO,5:VOOQS1G0[1G0[OOQS1G0^1G0^OOQS1G0`1G0`O=hQ`O1G0`O=mQdO'#E`OOQS1G0c1G0cOOQS1G0i1G0iO=xQaO,5:RO-`Q`O1G0kOOQS1G0k1G0kO-eQ`O1G0kO>PQ!fO1G0ROOQO1G0R1G0ROOQO,5;`,5;`O>gQdO,5;`OOQO-E8r-E8rO>tQ`O1G1fPOOO-E8h-E8hPOOO1G.g1G.gOOQP7+$]7+$]OOQP7+%d7+%dO&lQdO7+%dOOQS1G0Q1G0QO?PQaO'#F_O?ZQ`O,5:ZO?`Q!fO'#ElO@^QdO'#FWO@hQ`O,59^O@mQ!bO7+%dO&lQdO1G/bO@uQhO1G/fOOQW1G/j1G/jOOQW1G/d1G/dOAWQhO,5;bOOQO-E8t-E8tOAfQhO'#DZOAtQhO'#F^OBPQ`O'#F^OBUQ`O,5:TOOQS-E8k-E8kOOQ[1G.z1G.zOOQ[1G/Q1G/QOOQ[1G/T1G/TOOQ[1G/X1G/XOBZQdO,5:lOOQS7+%p7+%pOB`Q`O7+%pOBeQhO'#DYOBmQ`O,59sO'tQhO,59sOOQ[1G/q1G/qOBuQ`O1G/qOOQS7+%z7+%zOBzQbO'#DPOOQO'#Eb'#EbOCYQ`O'#EaOOQO'#Ea'#EaOCeQ`O'#EwOCmQdO,5:zOOQS,5:z,5:zOOQ[1G/m1G/mOOQS7+&V7+&VO-`Q`O7+&VOCxQ!fO'#EsO&lQdO'#EsOEPQdO7+%mOOQO7+%m7+%mOOQO1G0z1G0zOEdQ!bO<<IOOElQdO'#EqOEvQ`O,5;yOOQP1G/u1G/uOOQS-E8j-E8jOFOQdO'#EpOFYQ`O,5;rOOQ]1G.x1G.xOOQP<<IO<<IOOFbQdO7+$|OOQO'#D]'#D]OFiQ!bO7+%QOFqQhO'#EoOF{Q`O,5;xO&lQdO,5;xOOQW1G/o1G/oOOQO'#ES'#ESOGTQ`O1G0WOOQS<<I[<<I[O&lQdO,59tOGnQhO1G/_OOQ[1G/_1G/_OGuQ`O1G/_OOQW-E8l-E8lOOQ[7+%]7+%]OOQO,5:{,5:{O=pQdO'#ExOCeQ`O,5;cOOQS,5;c,5;cOOQS-E8u-E8uOOQS1G0f1G0fOOQS<<Iq<<IqOG}Q!fO,5;_OOQS-E8q-E8qOOQO<<IX<<IXOOQPAN>jAN>jOIUQaO,5;]OOQO-E8o-E8oOI`QdO,5;[OOQO-E8n-E8nOOQW<<Hh<<HhOOQW<<Hl<<HlOIjQhO<<HlOI{QhO,5;ZOJWQ`O,5;ZOOQO-E8m-E8mOJ]QdO1G1dOBZQdO'#EuOJgQ`O7+%rOOQW7+%r7+%rOJoQ!bO1G/`OOQ[7+$y7+$yOJzQhO7+$yPKRQ`O'#EnOOQO,5;d,5;dOOQO-E8v-E8vOOQS1G0}1G0}OKWQ`OAN>WO&lQdO1G0uOK]Q`O7+'OOOQO,5;a,5;aOOQO-E8s-E8sOOQW<<I^<<I^OOQ[<<He<<HePOQW,5;Y,5;YOOQWG23rG23rOKeQdO7+&a\",\n stateData: \"Kx~O#sOS#tQQ~OW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#oRO~OQiOW[OZ[O]TO`VOaVOi]OjWOmXO!jYO!mZO!saO!ybO!{cO!}dO#QeO#WfO#YgO#ohO~O#m$SP~P!dO#tmO~O#ooO~O]qO`rOarOjsOmtO!juO!mwO#nvO~OpzO!^xO~P$SOc!QO#o|O#p}O~O#o!RO~O#o!TO~OW[OZ[O]TO`VOaVOjWOmXO!jYO!mZO#oRO~OS!]Oe!YO!V![O!Y!`O#q!XOp$TP~Ok$TP~P&POQ!jOe!cOm!dOp!eOr!mOt!mOz!kO!`!lO#o!bO#p!hO#}!fO~Ot!qO!`!lO#o!pO~Ot!sO#o!sO~OS!]Oe!YO!V![O!Y!`O#q!XO~Oe!vOpzO#Z!xO~O]YX`YX`!pXaYXjYXmYXpYX!^YX!jYX!mYX#nYX~O`!zO~Ok!{O#m$SXo$SX~O#m$SXo$SX~P!dO#u#OO#v#OO#w#QO~Oc#UO#o|O#p}O~OpzO!^xO~Oo$SP~P!dOe#`O~Oe#aO~Ol#bO!h#cO~O]qO`rOarOjsOmtO~Op!ia!^!ia!j!ia!m!ia#n!iad!ia~P*zOp!la!^!la!j!la!m!la#n!lad!la~P*zOR#gOS!]Oe!YOr#gOt#gO!V![O!Y!`O#q#dO#}!fO~O!R#iO!^#jOk$TXp$TX~Oe#mO~Ok#oOpzO~Oe!vO~O]#rO`#rOd#uOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl#wO~P&lO]#rO`#rOi#rOj#rOk#rOo#yO~P&lOP#zOSsXesXksXvsX!VsX!YsX!usX!wsX#qsX!TsXQsX]sX`sXdsXisXjsXmsXpsXrsXtsXzsX!`sX#osX#psX#}sXlsXosX!^sX!qsX#msX~Ov#{O!u#|O!w#}Ok$TP~P'tOe#aOS#{Xk#{Xv#{X!V#{X!Y#{X!u#{X!w#{X#q#{XQ#{X]#{X`#{Xd#{Xi#{Xj#{Xm#{Xp#{Xr#{Xt#{Xz#{X!`#{X#o#{X#p#{X#}#{Xl#{Xo#{X!^#{X!q#{X#m#{X~Oe$RO~Oe$TO~Ok$VOv#{O~Ok$WO~Ot$XO!`!lO~Op$YO~OpzO!R#iO~OpzO#Z$`O~O!q$bOk!oa#m!oao!oa~P&lOk#hX#m#hXo#hX~P!dOk!{O#m$Sao$Sa~O#u#OO#v#OO#w$hO~Ol$jO!h$kO~Op!ii!^!ii!j!ii!m!ii#n!iid!ii~P*zOp!ki!^!ki!j!ki!m!ki#n!kid!ki~P*zOp!li!^!li!j!li!m!li#n!lid!li~P*zOp#fa!^#fa~P$SOo$lO~Od$RP~P%_Od#zP~P&lO`!PXd}X!R}X!T!PX~O`$sO!T$tO~Od$uO!R#iO~Ok#jXp#jX!^#jX~P'tO!^#jOk$Tap$Ta~O!R#iOk!Uap!Ua!^!Uad!Ua`!Ua~OS!]Oe!YO!V![O!Y!`O#q$yO~Od$QP~P9dOv#{OQ#|X]#|X`#|Xd#|Xe#|Xi#|Xj#|Xk#|Xm#|Xp#|Xr#|Xt#|Xz#|X!`#|X#o#|X#p#|X#}#|Xl#|Xo#|X~O]#rO`#rOd%OOi#rOj#rOk#rO~P&lO]#rO`#rOi#rOj#rOk#rOl%PO~P&lO]#rO`#rOi#rOj#rOk#rOo%QO~P&lOe%SOS!tXk!tX!V!tX!Y!tX#q!tX~Ok%TO~Od%YOt%ZO!a%ZO~Ok%[O~Oo%cO#o%^O#}%]O~Od%dO~P$SOv#{O!^%hO!q%jOk!oi#m!oio!oi~P&lOk#ha#m#hao#ha~P!dOk!{O#m$Sio$Si~O!^%mOd$RX~P$SOd%oO~Ov#{OQ#`Xd#`Xe#`Xm#`Xp#`Xr#`Xt#`Xz#`X!^#`X!`#`X#o#`X#p#`X#}#`X~O!^%qOd#zX~P&lOd%sO~Ol%tOv#{O~OR#gOr#gOt#gO#q%vO#}!fO~O!R#iOk#jap#ja!^#ja~O`!PXd}X!R}X!^}X~O!R#iO!^%xOd$QX~O`%zO~Od%{O~O#o%|O~Ok&OO~O`&PO!R#iO~Od&ROk&QO~Od&UO~OP#zOpsX!^sXdsX~O#}%]Op#TX!^#TX~OpzO!^&WO~Oo&[O#o%^O#}%]O~Ov#{OQ#gXe#gXk#gXm#gXp#gXr#gXt#gXz#gX!^#gX!`#gX!q#gX#m#gX#o#gX#p#gX#}#gXo#gX~O!^%hO!q&`Ok!oq#m!oqo!oq~P&lOl&aOv#{O~Od#eX!^#eX~P%_O!^%mOd$Ra~Od#dX!^#dX~P&lO!^%qOd#za~Od&fO~P&lOd&gO!T&hO~Od#cX!^#cX~P9dO!^%xOd$Qa~O]&mOd&oO~OS#bae#ba!V#ba!Y#ba#q#ba~Od&qO~PG]Od&qOk&rO~Ov#{OQ#gae#gak#gam#gap#gar#gat#gaz#ga!^#ga!`#ga!q#ga#m#ga#o#ga#p#ga#}#gao#ga~Od#ea!^#ea~P$SOd#da!^#da~P&lOR#gOr#gOt#gO#q%vO#}%]O~O!R#iOd#ca!^#ca~O`&xO~O!^%xOd$Qi~P&lO]&mOd&|O~Ov#{Od|ik|i~Od&}O~PG]Ok'OO~Od'PO~O!^%xOd$Qq~Od#cq!^#cq~P&lO#s!a#t#}]#}v!m~\",\n goto: \"2h$UPPPPP$VP$YP$c$uP$cP%X$cPP%_PPP%e%o%oPPPPP%oPP%oP&]P%oP%o'W%oP't'w'}'}(^'}P'}P'}P'}'}P(m'}(yP(|PP)p)v$c)|$c*SP$cP$c$cP*Y*{+YP$YP+aP+dP$YP$YP$YP+j$YP+m+p+s+z$YP$YPP$YP,P,V,f,|-[-b-l-r-x.O.U.`.f.l.rPPPPPPPPPPP.x/R/w/z0|P1U1u2O2R2U2[RnQ_^OP`kz!{$dq[OPYZ`kuvwxz!v!{#`$d%mqSOPYZ`kuvwxz!v!{#`$d%mQpTR#RqQ!OVR#SrQ#S!QS$Q!i!jR$i#U!V!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'Q!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QU#g!Y$t&hU%`$Y%b&WR&V%_!V!iac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QR$S!kQ%W$RR&S%Xk!^]bf!Y![!g#i#j#m$P$R%X%xQ#e!YQ${#mQ%w$tQ&j%xR&w&hQ!ygQ#p!`Q$^!xR%f$`R#n!]!U!mac!c!d!e!z#a#c#t#v#x#{$a$k$p$s%h%i%q%u%z&P&d&l&x'QQ!qdR$X!rQ!PVR#TrQ#S!PR$i#TQ!SWR#VsQ!UXR#WtQ{UQ!wgQ#^yQ#o!_Q$U!nQ$[!uQ$_!yQ%e$^Q&Y%aQ&]%fR&v&XSjPzQ!}kQ$c!{R%k$dZiPkz!{$dR$P!gQ%}%SR&z&mR!rdR!teR$Z!tS%a$Y%bR&t&WV%_$Y%b&WQ#PmR$g#PQ`OSkPzU!a`k$dR$d!{Q$p#aY%p$p%u&d&l'QQ%u$sQ&d%qQ&l%zR'Q&xQ#t!cQ#v!dQ#x!eV$}#t#v#xQ%X$RR&T%XQ%y$zS&k%y&yR&y&lQ%r$pR&e%rQ%n$mR&c%nQyUR#]yQ%i$aR&_%iQ!|jS$e!|$fR$f!}Q&n%}R&{&nQ#k!ZR$x#kQ%b$YR&Z%bQ&X%aR&u&X__OP`kz!{$d^UOP`kz!{$dQ!VYQ!WZQ#XuQ#YvQ#ZwQ#[xQ$]!vQ$m#`R&b%mR$q#aQ!gaQ!oc[#q!c!d!e#t#v#xQ$a!zd$o#a$p$s%q%u%z&d&l&x'QQ$r#cQ%R#{S%g$a%iQ%l$kQ&^%hR&p&P]#s!c!d!e#t#v#xW!Z]b!g$PQ!ufQ#f!YQ#l![Q$v#iQ$w#jQ$z#mS%V$R%XR&i%xQ#h!YQ%w$tR&w&hR$|#mR$n#`QlPR#_zQ!_]Q!nbQ$O!gR%U$P\",\n nodeNames: \"⚠ Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector 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 CallQuery ArgList , CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName MatchOp 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 AtRule Styles\",\n maxTerm: 143,\n nodeProps: [\n [\"isolate\", -2,5,36,\"\"],\n [\"openedBy\", 20,\"(\",28,\"[\",31,\"{\"],\n [\"closedBy\", 21,\")\",29,\"]\",32,\"}\"]\n ],\n propSources: [cssHighlighting],\n skippedNodes: [0,5,106],\n repeatNodeCount: 15,\n tokenData: \"JQ~R!YOX$qX^%i^p$qpq%iqr({rs-ust/itu6Wuv$qvw7Qwx7cxy9Qyz9cz{9h{|:R|}>t}!O?V!O!P?t!P!Q@]!Q![AU![!]BP!]!^B{!^!_C^!_!`DY!`!aDm!a!b$q!b!cEn!c!}$q!}#OG{#O#P$q#P#QH^#Q#R6W#R#o$q#o#pHo#p#q6W#q#rIQ#r#sIc#s#y$q#y#z%i#z$f$q$f$g%i$g#BY$q#BY#BZ%i#BZ$IS$q$IS$I_%i$I_$I|$q$I|$JO%i$JO$JT$q$JT$JU%i$JU$KV$q$KV$KW%i$KW&FU$q&FU&FV%i&FV;'S$q;'S;=`Iz<%lO$q`$tSOy%Qz;'S%Q;'S;=`%c<%lO%Q`%VS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q`%fP;=`<%l%Q~%nh#s~OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Q~'ah#s~!a`OX%QX^'Y^p%Qpq'Yqy%Qz#y%Q#y#z'Y#z$f%Q$f$g'Y$g#BY%Q#BY#BZ'Y#BZ$IS%Q$IS$I_'Y$I_$I|%Q$I|$JO'Y$JO$JT%Q$JT$JU'Y$JU$KV%Q$KV$KW'Y$KW&FU%Q&FU&FV'Y&FV;'S%Q;'S;=`%c<%lO%Qj)OUOy%Qz#]%Q#]#^)b#^;'S%Q;'S;=`%c<%lO%Qj)gU!a`Oy%Qz#a%Q#a#b)y#b;'S%Q;'S;=`%c<%lO%Qj*OU!a`Oy%Qz#d%Q#d#e*b#e;'S%Q;'S;=`%c<%lO%Qj*gU!a`Oy%Qz#c%Q#c#d*y#d;'S%Q;'S;=`%c<%lO%Qj+OU!a`Oy%Qz#f%Q#f#g+b#g;'S%Q;'S;=`%c<%lO%Qj+gU!a`Oy%Qz#h%Q#h#i+y#i;'S%Q;'S;=`%c<%lO%Qj,OU!a`Oy%Qz#T%Q#T#U,b#U;'S%Q;'S;=`%c<%lO%Qj,gU!a`Oy%Qz#b%Q#b#c,y#c;'S%Q;'S;=`%c<%lO%Qj-OU!a`Oy%Qz#h%Q#h#i-b#i;'S%Q;'S;=`%c<%lO%Qj-iS!qY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Q~-xWOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c<%lO-u~.gOt~~.jRO;'S-u;'S;=`.s;=`O-u~.vXOY-uZr-urs.bs#O-u#O#P.g#P;'S-u;'S;=`/c;=`<%l-u<%lO-u~/fP;=`<%l-uj/nYjYOy%Qz!Q%Q!Q![0^![!c%Q!c!i0^!i#T%Q#T#Z0^#Z;'S%Q;'S;=`%c<%lO%Qj0cY!a`Oy%Qz!Q%Q!Q![1R![!c%Q!c!i1R!i#T%Q#T#Z1R#Z;'S%Q;'S;=`%c<%lO%Qj1WY!a`Oy%Qz!Q%Q!Q![1v![!c%Q!c!i1v!i#T%Q#T#Z1v#Z;'S%Q;'S;=`%c<%lO%Qj1}YrY!a`Oy%Qz!Q%Q!Q![2m![!c%Q!c!i2m!i#T%Q#T#Z2m#Z;'S%Q;'S;=`%c<%lO%Qj2tYrY!a`Oy%Qz!Q%Q!Q![3d![!c%Q!c!i3d!i#T%Q#T#Z3d#Z;'S%Q;'S;=`%c<%lO%Qj3iY!a`Oy%Qz!Q%Q!Q![4X![!c%Q!c!i4X!i#T%Q#T#Z4X#Z;'S%Q;'S;=`%c<%lO%Qj4`YrY!a`Oy%Qz!Q%Q!Q![5O![!c%Q!c!i5O!i#T%Q#T#Z5O#Z;'S%Q;'S;=`%c<%lO%Qj5TY!a`Oy%Qz!Q%Q!Q![5s![!c%Q!c!i5s!i#T%Q#T#Z5s#Z;'S%Q;'S;=`%c<%lO%Qj5zSrY!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qd6ZUOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qd6tS!hS!a`Oy%Qz;'S%Q;'S;=`%c<%lO%Qb7VSZQOy%Qz;'S%Q;'S;=`%c<%lO%Q~7fWOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z<%lO7c~8RRO;'S7c;'S;=`8[;=`O7c~8_XOY7cZw7cwx.bx#O7c#O#P8O#P;'S7c;'S;=`8z;=`<%l7c<%lO7c~8}P;=`<%l7cj9VSeYOy%Qz;'S%Q;'S;=`%c<%lO%Q~9hOd~n9oUWQvWOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Qj:YWvW!mQOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj:wU!a`Oy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Qj;bY!a`#}YOy%Qz!Q%Q!Q![;Z![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj<VY!a`Oy%Qz{%Q{|<u|}%Q}!O<u!O!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj<zU!a`Oy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj=eU!a`#}YOy%Qz!Q%Q!Q![=^![;'S%Q;'S;=`%c<%lO%Qj>O[!a`#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%Qj>yS!^YOy%Qz;'S%Q;'S;=`%c<%lO%Qj?[WvWOy%Qz!O%Q!O!P:r!P!Q%Q!Q![=w![;'S%Q;'S;=`%c<%lO%Qj?yU]YOy%Qz!Q%Q!Q![;Z![;'S%Q;'S;=`%c<%lO%Q~@bTvWOy%Qz{@q{;'S%Q;'S;=`%c<%lO%Q~@xS!a`#t~Oy%Qz;'S%Q;'S;=`%c<%lO%QjAZ[#}YOy%Qz!O%Q!O!P;Z!P!Q%Q!Q![=w![!g%Q!g!h<Q!h#X%Q#X#Y<Q#Y;'S%Q;'S;=`%c<%lO%QjBUU`YOy%Qz![%Q![!]Bh!];'S%Q;'S;=`%c<%lO%QbBoSaQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjCQSkYOy%Qz;'S%Q;'S;=`%c<%lO%QhCcU!TWOy%Qz!_%Q!_!`Cu!`;'S%Q;'S;=`%c<%lO%QhC|S!TW!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QlDaS!TW!hSOy%Qz;'S%Q;'S;=`%c<%lO%QjDtV!jQ!TWOy%Qz!_%Q!_!`Cu!`!aEZ!a;'S%Q;'S;=`%c<%lO%QbEbS!jQ!a`Oy%Qz;'S%Q;'S;=`%c<%lO%QjEqYOy%Qz}%Q}!OFa!O!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjFfW!a`Oy%Qz!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjGV[iY!a`Oy%Qz}%Q}!OGO!O!Q%Q!Q![GO![!c%Q!c!}GO!}#T%Q#T#oGO#o;'S%Q;'S;=`%c<%lO%QjHQSmYOy%Qz;'S%Q;'S;=`%c<%lO%QnHcSl^Oy%Qz;'S%Q;'S;=`%c<%lO%QjHtSpYOy%Qz;'S%Q;'S;=`%c<%lO%QjIVSoYOy%Qz;'S%Q;'S;=`%c<%lO%QfIhU!mQOy%Qz!_%Q!_!`6m!`;'S%Q;'S;=`%c<%lO%Q`I}P;=`<%l$q\",\n tokenizers: [descendant, unitToken, identifiers, queryIdentifiers, 1, 2, 3, 4, new LocalTokenGroup(\"m~RRYZ[z{a~~g~aO#v~~dP!P!Qg~lO#w~~\", 28, 129)],\n topRules: {\"StyleSheet\":[0,6],\"Styles\":[1,105]},\n dynamicPrecedences: {\"76\":1},\n specialized: [{term: 124, get: (value) => spec_callee[value] || -1},{term: 125, get: (value) => spec_queryIdentifier[value] || -1},{term: 4, get: (value) => spec_QueryCallee[value] || -1},{term: 25, get: (value) => spec_AtKeyword[value] || -1},{term: 123, get: (value) => spec_identifier[value] || -1}],\n tokenPrec: 1963\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 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 = obj[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 })\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://github.com/lezer-parser/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(\" \"));\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, _b, _c;\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 (((_b = (_a = tag.parent) === null || _a === void 0 ? void 0 : _a.lastChild) === null || _b === void 0 ? void 0 : _b.name) != \"CloseTag\" &&\n (name = elementName(state.doc, tag.parent, head)) &&\n !selfClosers.has(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 && ((_c = tag.lastChild) === null || _c === void 0 ? void 0 : _c.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, type IFieldCatalog } 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 { linkPreview } from \"./link-preview\";\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 /** Injected field catalog (ticket 15) — catalog-backed typeahead for wql\n * editors. The app supplies it; this package never opens storage. */\n catalog?: IFieldCatalog;\n /** Dynamic typed-tag filter values (`domain:`/`format:`/`equipment:`/\n * `quality:`/`intent:`) for wql editors — host reads its tags store. */\n tagTypeValues?: (key: string) => Promise<readonly string[]> | readonly string[];\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 // Dark-Mode Standard host rule (#994/#998): default to the host's current\n // theme — `dark` lives on documentElement, so an editor inherits it for\n // free at mount. Hosts with reactive theming (playground NoteEditor) pass\n // isDark explicitly and reconfigure through their own compartment.\n isDark = typeof document !== 'undefined' && document.documentElement.classList.contains('dark'),\n readOnly = false,\n lineNumbers: showLineNums = true,\n lineWrapping = true,\n executor,\n onResultSaved,\n catalog,\n tagTypeValues,\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 const completionOptions = {\n ...(catalog ? { catalog } : {}),\n ...(tagTypeValues ? { tagTypeValues } : {}),\n };\n extensions.push(wql(completionOptions));\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 linkPreview,\n queryBlockPreview({ executor, onResultSaved }),\n );\n }\n\n if (extraExtensions.length > 0) {\n extensions.push(...extraExtensions);\n }\n\n return extensions;\n}\n"]}
|