@klarkxy/dsh-deep-view 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"client.inner.cjs","names":["grouped","TONES","CALLOUT_TONES","isRecord","cellText","withUnit","useState","useRef","useId","Fragment","useState","Fragment","useId","useRef","useCallback","MarkdownText","useMemo","useState","useRef","useCallback","envelope"],"sources":["../src/core/formula.js","../src/core/views.js","../src/contracts.ts","../src/ui.tsx","../src/chart.tsx","../src/widget.tsx","../src/styles.ts","../src/answer-text.ts","../src/answers.ts","../src/client.tsx"],"sourcesContent":["// Adapted from deep-view/src/core/formula.js (deep-view 0.1.0, Apache-2.0).\n// Kept as the same bounded expression interpreter: no eval, property access,\n// assignment or loops. The DSH migration preserves its grammar and error model.\n// It reads names and calls a fixed set of functions without reaching the page.\n\nconst FUNCTIONS = {\n min: { args: [1, Infinity], run: (...values) => Math.min(...values.map(num)) },\n max: { args: [1, Infinity], run: (...values) => Math.max(...values.map(num)) },\n abs: { args: [1, 1], run: value => Math.abs(num(value)) },\n floor: { args: [1, 1], run: value => Math.floor(num(value)) },\n ceil: { args: [1, 1], run: value => Math.ceil(num(value)) },\n sqrt: { args: [1, 1], run: value => Math.sqrt(num(value)) },\n pow: { args: [2, 2], run: (base, power) => num(base) ** num(power) },\n round: { args: [1, 2], run: (value, digits = 0) => roundTo(num(value), digitsOf(digits)) },\n clamp: { args: [3, 3], run: (value, low, high) => Math.min(Math.max(num(value), num(low)), num(high)) },\n fixed: { args: [1, 2], run: (value, digits = 0) => roundTo(num(value), digitsOf(digits)).toFixed(digitsOf(digits)) },\n format: { args: [1, 2], run: (value, digits = 0) => grouped(num(value), digitsOf(digits)) },\n percent: { args: [1, 2], run: (value, digits = 0) => `${grouped(num(value) * 100, digitsOf(digits))}%` },\n}\nexport const FORMULA_FUNCTIONS = Object.keys(FUNCTIONS)\nconst CONSTANTS = new Map([['true', true], ['false', false]])\n// Nesting deeper than this is no calculation a view needs; the parser recurses per level.\nconst MAX_NESTING = 64\n\nclass FormulaError extends Error {}\nconst fail = (message) => { throw new FormulaError(message) }\n\nfunction num(value) {\n if (typeof value === 'number') return value\n if (typeof value === 'boolean') return value ? 1 : 0\n const parsed = Number(value)\n if (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(parsed)) return parsed\n return fail(`${JSON.stringify(value)} is not a number`)\n}\nconst digitsOf = (digits) => {\n const value = num(digits)\n if (!Number.isInteger(value) || value < 0 || value > 10) fail('digits must be a whole number from 0 to 10')\n return value\n}\nconst roundTo = (value, digits) => {\n const scale = 10 ** digits\n return Math.round(value * scale) / scale\n}\nfunction grouped(value, digits) {\n if (!Number.isFinite(value)) return String(value)\n const [whole, part] = Math.abs(roundTo(value, digits)).toFixed(digits).split('.')\n const sign = value < 0 && Number(whole + (part ?? '')) !== 0 ? '-' : ''\n return `${sign}${whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}${part ? `.${part}` : ''}`\n}\n\n// -------------------------------------------------------------------------\n// Tokens and parsing\n\nconst IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/\nexport const isName = value => typeof value === 'string' && IDENT.test(value)\nconst OPERATORS = ['==', '!=', '<=', '>=', '&&', '||', '+', '-', '*', '/', '%', '<', '>', '!', '?', ':', '(', ')', ',']\n\nfunction tokenize(source) {\n const tokens = []\n let at = 0\n while (at < source.length) {\n const char = source[at]\n if (/\\s/.test(char)) { at += 1; continue }\n const number = /^(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/.exec(source.slice(at))\n if (number) { tokens.push({ kind: 'number', value: Number(number[0]), at }); at += number[0].length; continue }\n const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(source.slice(at))\n if (name) { tokens.push({ kind: 'name', value: name[0], at }); at += name[0].length; continue }\n if (char === '\"' || char === '\\'') {\n let end = at + 1\n let text = ''\n while (end < source.length && source[end] !== char) {\n if (source[end] === '\\\\' && end + 1 < source.length) { text += source[end + 1]; end += 2; continue }\n text += source[end]\n end += 1\n }\n if (end >= source.length) fail(`unclosed string at ${at + 1}`)\n tokens.push({ kind: 'string', value: text, at })\n at = end + 1\n continue\n }\n const operator = OPERATORS.find(op => source.startsWith(op, at))\n if (operator === undefined) fail(`unexpected ${JSON.stringify(char)} at ${at + 1}`)\n tokens.push({ kind: 'op', value: operator, at })\n at += operator.length\n }\n return tokens\n}\n\nconst BINARY = [['||'], ['&&'], ['==', '!='], ['<', '<=', '>', '>='], ['+', '-'], ['*', '/', '%']]\n\nfunction parse(source) {\n const tokens = tokenize(source)\n let index = 0\n let depth = 0\n const peek = () => tokens[index]\n const isOp = value => peek()?.kind === 'op' && peek().value === value\n const expect = (value) => {\n if (!isOp(value)) fail(peek() ? `expected \"${value}\" at ${peek().at + 1}` : `expected \"${value}\" at the end`)\n index += 1\n }\n const nest = (read) => {\n depth += 1\n if (depth > MAX_NESTING) fail(`nested more than ${MAX_NESTING} levels`)\n const node = read()\n depth -= 1\n return node\n }\n const ternary = () => nest(() => {\n const test = binary(0)\n if (!isOp('?')) return test\n index += 1\n const yes = ternary()\n expect(':')\n return { type: 'if', test, yes, no: ternary() }\n })\n const binary = (level) => {\n if (level === BINARY.length) return unary()\n let left = binary(level + 1)\n while (peek()?.kind === 'op' && BINARY[level].includes(peek().value)) {\n const op = peek().value\n index += 1\n left = { type: 'binary', op, left, right: binary(level + 1) }\n }\n return left\n }\n const unary = () => {\n if (isOp('-') || isOp('!') || isOp('+')) {\n const op = peek().value\n index += 1\n return nest(() => ({ type: 'unary', op, value: unary() }))\n }\n return primary()\n }\n const primary = () => {\n const token = peek()\n if (token === undefined) fail('the formula ends too early')\n index += 1\n if (token.kind === 'number' || token.kind === 'string') return { type: 'value', value: token.value }\n if (token.kind === 'op' && token.value === '(') {\n const inner = ternary()\n expect(')')\n return inner\n }\n if (token.kind !== 'name') fail(`unexpected \"${token.value}\" at ${token.at + 1}`)\n if (!isOp('(')) return CONSTANTS.has(token.value) ? { type: 'value', value: CONSTANTS.get(token.value) } : { type: 'name', name: token.value }\n const fn = Object.hasOwn(FUNCTIONS, token.value) ? FUNCTIONS[token.value] : undefined\n if (fn === undefined) fail(`unknown function \"${token.value}\"; allowed: ${FORMULA_FUNCTIONS.join(', ')}`)\n index += 1\n const args = []\n if (!isOp(')')) {\n args.push(ternary())\n while (isOp(',')) { index += 1; args.push(ternary()) }\n }\n expect(')')\n if (args.length < fn.args[0] || args.length > fn.args[1]) {\n fail(`${token.value}() takes ${fn.args[0] === fn.args[1] ? fn.args[0] : fn.args[1] === Infinity ? `at least ${fn.args[0]}` : `${fn.args[0]} or ${fn.args[1]}`} argument${fn.args[1] === 1 ? '' : 's'}; got ${args.length}`)\n }\n return { type: 'call', name: token.value, args }\n }\n if (tokens.length === 0) fail('the formula is empty')\n const tree = ternary()\n if (index < tokens.length) fail(`unexpected \"${peek().value}\" at ${peek().at + 1}`)\n return tree\n}\n\nfunction namesIn(node, found = new Set()) {\n if (node.type === 'name') found.add(node.name)\n else if (node.type === 'unary') namesIn(node.value, found)\n else if (node.type === 'binary') { namesIn(node.left, found); namesIn(node.right, found) }\n else if (node.type === 'if') { namesIn(node.test, found); namesIn(node.yes, found); namesIn(node.no, found) }\n else if (node.type === 'call') for (const arg of node.args) namesIn(arg, found)\n return found\n}\n\n// { tree, names } or { error }. `names` are the names the formula reads.\nexport function compileFormula(source) {\n if (typeof source !== 'string') return { error: 'expected a formula string' }\n try {\n const tree = parse(source)\n return { tree, names: [...namesIn(tree)] }\n } catch (error) {\n if (error instanceof FormulaError) return { error: error.message }\n throw error\n }\n}\n\n// -------------------------------------------------------------------------\n// Evaluation. `lookup(name)` returns a name's value or throws.\n\nfunction run(node, lookup) {\n switch (node.type) {\n case 'value': return node.value\n case 'name': return lookup(node.name)\n case 'unary': {\n const value = run(node.value, lookup)\n if (node.op === '!') return !truthy(value)\n return node.op === '-' ? -num(value) : num(value)\n }\n case 'if': return truthy(run(node.test, lookup)) ? run(node.yes, lookup) : run(node.no, lookup)\n case 'call': return FUNCTIONS[node.name].run(...node.args.map(arg => run(arg, lookup)))\n default: return binary(node, lookup)\n }\n}\nconst truthy = value => (typeof value === 'string' ? value !== '' : Boolean(value))\n\nfunction binary(node, lookup) {\n if (node.op === '&&') return truthy(run(node.left, lookup)) ? run(node.right, lookup) : false\n if (node.op === '||') { const left = run(node.left, lookup); return truthy(left) ? left : run(node.right, lookup) }\n const left = run(node.left, lookup)\n const right = run(node.right, lookup)\n switch (node.op) {\n case '+': return typeof left === 'string' || typeof right === 'string' ? `${show(left)}${show(right)}` : num(left) + num(right)\n case '-': return num(left) - num(right)\n case '*': return num(left) * num(right)\n case '/': return num(left) / num(right)\n case '%': return num(left) % num(right)\n case '==': return left === right\n case '!=': return left !== right\n case '<': return num(left) < num(right)\n case '<=': return num(left) <= num(right)\n case '>': return num(left) > num(right)\n default: return num(left) >= num(right)\n }\n}\n\n// A value as text: numbers lose float noise (0.1 + 0.2 shows 0.3).\nexport function show(value) {\n if (typeof value === 'number') return Number.isFinite(value) ? String(Number(value.toPrecision(12))) : String(value)\n return String(value)\n}\n\n// A scope for one view: input values, plus `let` names worked out on demand. A cycle\n// or a missing name fails the formula that reads it.\nexport function createScope(inputs, lets) {\n const done = new Map()\n const busy = new Set()\n const lookup = (name) => {\n if (inputs.has(name)) return inputs.get(name)\n if (done.has(name)) return done.get(name)\n const tree = lets.get(name)\n if (tree === undefined) fail(`unknown name \"${name}\"`)\n if (busy.has(name)) fail(`\"${name}\" refers to itself`)\n busy.add(name)\n try {\n const value = run(tree, lookup)\n done.set(name, value)\n return value\n } finally { busy.delete(name) }\n }\n return lookup\n}\n\n// { value } or { error }.\nexport function evaluate(tree, lookup) {\n try {\n return { value: run(tree, lookup) }\n } catch (error) {\n if (error instanceof FormulaError) return { error: error.message }\n if (error instanceof RangeError) return { error: 'the formula is too deep to work out' }\n throw error\n }\n}\n","// Adapted from deep-view/src/core/views.js (deep-view 0.1.0, Apache-2.0).\n// DSH migration: html is deliberately rejected rather than migrating its frame;\n// validation, formulas and answers retain the original bounded JSON semantics.\n// Pure validation and evaluation of a declarative card, on Host and Client.\n// Formulas use formula.js; model-authored code never enters the DOM.\n\nimport { compileFormula, createScope, evaluate, isName, show } from './formula.js'\n\nconst LAYOUT = ['stack', 'row']\nconst DISPLAY = ['text', 'metric', 'table', 'chart', 'progress', 'callout', 'sources']\nconst INPUT_TYPES = ['slider', 'choice', 'toggle', 'number']\nconst ANSWERS = ['options', 'confirm', 'form', 'submit']\nconst COMPONENTS = [...LAYOUT, ...DISPLAY, ...INPUT_TYPES, ...ANSWERS]\nconst TONES = ['good', 'warn', 'bad']\nconst TEXT_TONES = ['muted']\nconst CALLOUT_TONES = ['info', 'good', 'warn', 'bad']\nexport const CHART_KINDS = ['bar', 'hbar', 'line', 'area', 'donut']\nconst INTERACTIVE = new Set(ANSWERS)\nconst INPUTS = new Set(INPUT_TYPES)\nconst PROPS = {\n stack: ['children', 'let'],\n row: ['children', 'let'],\n text: ['text', 'tone'],\n metric: ['label', 'value', 'tone', 'caption'],\n table: ['columns', 'rows'],\n chart: ['kind', 'categories', 'series', 'unit', 'caption'],\n progress: ['label', 'percent', 'value', 'max', 'valueLabel', 'tone'],\n callout: ['text', 'tone'],\n sources: ['items'],\n slider: ['id', 'label', 'min', 'max', 'step', 'value', 'unit'],\n choice: ['id', 'label', 'options', 'value'],\n toggle: ['id', 'label', 'value'],\n number: ['id', 'label', 'min', 'max', 'step', 'value', 'unit'],\n options: ['id', 'options', 'multi'],\n confirm: ['id', 'confirmLabel', 'cancelLabel'],\n form: ['id', 'fields', 'submitLabel'],\n submit: ['id', 'label'],\n}\nconst MAX_DEPTH = 8\nconst MAX_NODES = 64\nconst MAX_CHILDREN = 16\nconst MAX_TEXT = 2000\nconst MAX_CELL = 200\nconst MAX_COLUMNS = 8\nconst MAX_ROWS = 50\nconst MAX_OPTIONS = 8\nconst MAX_FIELDS = 6\nconst SUMMARY_PART = 40\nconst SUMMARY_COUNT = 8\nconst RESERVED = new Set(['true', 'false'])\n// UTF-8 bytes of the blueprint JSON plus the title. Not a wrapped document:\n// the tool rejects a show_view whose viewBytes() is over this before it\n// normalizes or validates, so the number has to be the bytes the model sent.\nexport const VIEW_BYTE_LIMIT = 8192\n\nconst isRecord = value => value !== null && typeof value === 'object' && !Array.isArray(value)\nconst quoted = value => JSON.stringify(value)\nconst allowed = list => list.join(', ')\nconst isNumber = value => typeof value === 'number' && Number.isFinite(value)\nconst isScalar = value => typeof value === 'string' || typeof value === 'boolean' || isNumber(value)\n\n// `{ \"=\": \"a * b\" }`: a value worked out from the view's inputs.\nexport const isFormula = value => isRecord(value) && Object.keys(value).length === 1 && Object.hasOwn(value, '=')\n\nexport function viewBytes(title, view) {\n return new TextEncoder().encode(`${JSON.stringify(view) ?? ''}${title ?? ''}`).length\n}\n\nconst NUMERIC = ['value', 'percent', 'min', 'max', 'step', 'height']\nconst numeric = value => (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Number(value)) ? Number(value) : value)\n\n// Some providers serialize nested arrays as `{ item: [...] }` (XML-style) and\n// numbers as strings. Normalize the blueprint before validation so a model is\n// not asked to retry a call whose only fault is the provider's encoding.\n// Arrays are unwrapped; numeric fields and chart values accept a numeric string.\n// Returns a new object; the input is not mutated.\nexport function normalizeView(value) {\n if (Array.isArray(value)) return value.map(normalizeView)\n if (!isRecord(value)) return value\n const keys = Object.keys(value)\n // Unwrap recursively: a provider may nest the wrapper, as { item: { item: [...] } }.\n if (keys.length === 1 && keys[0] === 'item') {\n const inner = normalizeView(value.item)\n if (Array.isArray(inner)) return inner\n }\n // Define own properties: an incoming \"__proto__\" key must become data the\n // validator can reject, not hit the prototype setter and vanish from the JSON.\n const out = {}\n for (const key of keys) Object.defineProperty(out, key, { value: normalizeView(value[key]), writable: true, enumerable: true, configurable: true })\n for (const field of NUMERIC) if (Object.hasOwn(out, field)) out[field] = numeric(out[field])\n if (Array.isArray(out.values)) out.values = out.values.map(numeric)\n return out\n}\n\nexport function validateView(view) {\n const ctx = { ids: new Set(), nodes: 0, interactive: false, inputs: new Map(), lets: new Map(), formulas: [] }\n const error = checkNode(view, 'view', 1, ctx) ?? checkFormulas(ctx)\n return error === undefined ? { ok: true, interactive: ctx.interactive } : { ok: false, error }\n}\n\n// What show_view checks before it shows a view: the same answer on the host and\n// in the client. The bytes are measured as sent, before normalizeView unwraps the\n// provider's encoding, or a wrapped view could shrink under the byte limit. The\n// normalized view and the trimmed title come back; the title may be empty.\nexport function checkShownView(title, sent) {\n let bytes\n try { bytes = viewBytes(title, sent) } catch { return { error: 'The view is not JSON data.' } }\n if (bytes > VIEW_BYTE_LIMIT) return { error: `The view is ${bytes} bytes; the limit is ${VIEW_BYTE_LIMIT}.` }\n if (title !== undefined && title !== null && typeof title !== 'string') return { error: 'title: expected a string' }\n const named = String(title ?? '').trim()\n const view = normalizeView(sent)\n const checked = validateView(view)\n if (!checked.ok) return { error: checked.error }\n return { title: named, view, interactive: checked.interactive }\n}\n\nfunction checkNode(node, path, depth, ctx) {\n if (!isRecord(node)) return `${path}: expected a component object`\n if (depth > MAX_DEPTH) return `${path}: ${depth} levels exceeds the limit of ${MAX_DEPTH}`\n ctx.nodes += 1\n if (ctx.nodes > MAX_NODES) return `${path}: ${ctx.nodes} components exceeds the limit of ${MAX_NODES}`\n const type = node.type\n if (!COMPONENTS.includes(type)) return `${path}.type: unknown component ${quoted(type)}; allowed: ${allowed(COMPONENTS)}`\n const props = PROPS[type]\n for (const key of Object.keys(node)) {\n if (key === 'type' || props.includes(key)) continue\n return `${path}.${key}: unknown property ${quoted(key)}; allowed: ${allowed(props)}`\n }\n if (INTERACTIVE.has(type)) ctx.interactive = true\n switch (type) {\n case 'stack': case 'row': return checkLayout(node, path, depth, ctx)\n case 'text': return checkText(node, path, ctx)\n case 'metric': return checkMetric(node, path, ctx)\n case 'table': return checkTable(node, path, ctx)\n case 'chart': return checkChart(node, path, ctx)\n case 'progress': return checkProgress(node, path, ctx)\n case 'callout': return checkCallout(node, path, ctx)\n case 'sources': return checkSources(node, path)\n case 'slider': case 'number': return checkNumberInput(node, path, ctx)\n case 'choice': return checkChoice(node, path, ctx)\n case 'toggle': return checkToggle(node, path, ctx)\n case 'options': return checkOptions(node, path, ctx)\n case 'confirm': return checkConfirm(node, path, ctx)\n case 'form': return checkForm(node, path, ctx)\n default: return checkSubmit(node, path, ctx)\n }\n}\n\nfunction checkLayout(node, path, depth, ctx) {\n if (node.let !== undefined) {\n if (depth !== 1) return `${path}.let: only the outermost component can define names`\n if (!isRecord(node.let)) return `${path}.let: expected an object of names to formulas`\n for (const [name, source] of Object.entries(node.let)) {\n if (!isName(name) || RESERVED.has(name)) return `${path}.let.${name}: a name is letters, digits and _, and starts with a letter or _`\n if (typeof source !== 'string') return `${path}.let.${name}: expected a formula string`\n ctx.lets.set(name, { source, path: `${path}.let.${name}` })\n }\n }\n if (!Array.isArray(node.children)) return `${path}.children: expected an array of 1 to ${MAX_CHILDREN} components`\n if (node.children.length < 1 || node.children.length > MAX_CHILDREN) return `${path}.children: expected 1 to ${MAX_CHILDREN} children; got ${node.children.length}`\n for (let index = 0; index < node.children.length; index += 1) {\n const error = checkNode(node.children[index], `${path}.children[${index}]`, depth + 1, ctx)\n if (error !== undefined) return error\n }\n return undefined\n}\n\n// A property that may be a literal of `kind` or a formula giving one. Formulas are\n// checked once the whole tree, with every input and name, is known.\nfunction checkValue(node, key, path, ctx, kind, { required = false, max = MAX_TEXT } = {}) {\n const value = node[key]\n const at = `${path}.${key}`\n if (value === undefined) return required ? `${at}: ${expected(kind)}` : undefined\n if (isFormula(value)) {\n ctx.formulas.push({ source: value['='], path: at, kind })\n return undefined\n }\n if (kind === 'number') return isNumber(value) ? undefined : `${at}: ${expected(kind)}`\n if (Array.isArray(kind)) return kind.includes(value) ? undefined : `${at}: unknown tone ${quoted(value)}; allowed: ${allowed(kind)}`\n if (kind === 'string') {\n if (typeof value !== 'string') return `${at}: ${expected(kind)}`\n return value.length > max ? `${at}: ${value.length} characters exceeds the limit of ${max}` : undefined\n }\n if (!isScalar(value)) return `${at}: ${expected(kind)}`\n return undefined\n}\nconst expected = kind => (kind === 'number' ? 'expected a number' : kind === 'string' ? 'expected a string' : Array.isArray(kind) ? `expected one of ${allowed(kind)}` : 'expected a string or a number')\n\nfunction checkText(node, path, ctx) {\n return checkValue(node, 'text', path, ctx, 'string', { required: true })\n ?? checkValue(node, 'tone', path, ctx, TEXT_TONES)\n}\n\nfunction checkMetric(node, path, ctx) {\n if (typeof node.label !== 'string') return `${path}.label: expected a string`\n if (node.value === undefined) return `${path}.value: expected a string or a number`\n if (typeof node.value === 'number' && !Number.isFinite(node.value)) return `${path}.value: expected a finite number`\n return checkValue(node, 'value', path, ctx, 'scalar')\n ?? checkValue(node, 'tone', path, ctx, TONES)\n ?? checkValue(node, 'caption', path, ctx, 'string')\n}\n\nfunction checkTable(node, path, ctx) {\n if (!Array.isArray(node.columns)) return `${path}.columns: expected an array of at most ${MAX_COLUMNS} columns`\n if (node.columns.length > MAX_COLUMNS) return `${path}.columns: ${node.columns.length} columns exceeds the limit of ${MAX_COLUMNS}`\n for (let index = 0; index < node.columns.length; index += 1) {\n const column = node.columns[index]\n const at = `${path}.columns[${index}]`\n if (!isRecord(column)) return `${at}: expected a column object`\n for (const key of Object.keys(column)) {\n if (key !== 'key' && key !== 'label') return `${at}.${key}: unknown property ${quoted(key)}; allowed: key, label`\n }\n if (typeof column.key !== 'string' || column.key === '') return `${at}.key: expected a non-empty string`\n if (typeof column.label !== 'string') return `${at}.label: expected a string`\n }\n if (!Array.isArray(node.rows)) return `${path}.rows: expected an array of at most ${MAX_ROWS} rows`\n if (node.rows.length > MAX_ROWS) return `${path}.rows: ${node.rows.length} rows exceeds the limit of ${MAX_ROWS}`\n for (let row = 0; row < node.rows.length; row += 1) {\n const cells = node.rows[row]\n if (!Array.isArray(cells)) return `${path}.rows[${row}]: expected an array of cells`\n for (let column = 0; column < cells.length; column += 1) {\n const at = `${path}.rows[${row}][${column}]`\n if (isFormula(cells[column])) { ctx.formulas.push({ source: cells[column]['='], path: at, kind: 'scalar' }); continue }\n const text = cellText(cells[column])\n if (text.length > MAX_CELL) return `${at}: ${text.length} characters exceeds the limit of ${MAX_CELL}`\n }\n }\n return undefined\n}\n\nfunction checkChart(node, path, ctx) {\n if (node.kind !== undefined && !CHART_KINDS.includes(node.kind)) return `${path}.kind: unknown chart ${quoted(node.kind)}; allowed: ${allowed(CHART_KINDS)}`\n if (!Array.isArray(node.categories) || node.categories.length === 0) return `${path}.categories: expected a non-empty array of labels`\n for (let index = 0; index < node.categories.length; index += 1) {\n const label = node.categories[index]\n if (typeof label !== 'string' && !isNumber(label)) return `${path}.categories[${index}]: expected a string`\n }\n if (!Array.isArray(node.series) || node.series.length === 0) return `${path}.series: expected a non-empty array of { name?, values }`\n if (node.kind === 'donut' && node.series.length > 1) return `${path}.series: a donut takes one series; got ${node.series.length}`\n for (let index = 0; index < node.series.length; index += 1) {\n const series = node.series[index]\n const at = `${path}.series[${index}]`\n if (!isRecord(series)) return `${at}: expected a series object`\n for (const key of Object.keys(series)) {\n if (key !== 'name' && key !== 'values') return `${at}.${key}: unknown property ${quoted(key)}; allowed: name, values`\n }\n if (series.name !== undefined && typeof series.name !== 'string') return `${at}.name: expected a string`\n if (!Array.isArray(series.values)) return `${at}.values: expected an array of numbers`\n if (series.values.length !== node.categories.length) return `${at}.values: ${series.values.length} values for ${node.categories.length} categories`\n for (let item = 0; item < series.values.length; item += 1) {\n const value = series.values[item]\n if (isFormula(value)) ctx.formulas.push({ source: value['='], path: `${at}.values[${item}]`, kind: 'number' })\n else if (!isNumber(value)) return `${at}.values[${item}]: expected a number`\n }\n }\n if (node.unit !== undefined && typeof node.unit !== 'string') return `${path}.unit: expected a string`\n if (node.caption !== undefined && typeof node.caption !== 'string') return `${path}.caption: expected a string`\n return undefined\n}\n\nfunction checkProgress(node, path, ctx) {\n if (node.label !== undefined && typeof node.label !== 'string') return `${path}.label: expected a string`\n if ((node.percent === undefined) === (node.value === undefined)) return `${path}: give percent (0 to 100), or value with max`\n if (node.percent !== undefined && !isFormula(node.percent)) {\n if (typeof node.percent !== 'number' || !Number.isFinite(node.percent) || node.percent < 0 || node.percent > 100) return `${path}.percent: expected a number from 0 to 100`\n }\n if (node.value !== undefined && node.max === undefined) return `${path}.max: expected a number with value`\n if (node.value === undefined && node.max !== undefined) return `${path}.value: expected a number with max`\n return checkValue(node, 'percent', path, ctx, 'number')\n ?? checkValue(node, 'value', path, ctx, 'number')\n ?? checkValue(node, 'max', path, ctx, 'number')\n ?? checkValue(node, 'valueLabel', path, ctx, 'scalar')\n ?? checkValue(node, 'tone', path, ctx, TONES)\n}\n\nfunction checkCallout(node, path, ctx) {\n return checkValue(node, 'text', path, ctx, 'string', { required: true })\n ?? checkValue(node, 'tone', path, ctx, CALLOUT_TONES)\n}\n\nfunction checkSources(node, path) {\n if (!Array.isArray(node.items) || node.items.length === 0) return `${path}.items: expected a non-empty array of { label, url }`\n for (let index = 0; index < node.items.length; index += 1) {\n const item = node.items[index]\n const at = `${path}.items[${index}]`\n if (!isRecord(item)) return `${at}: expected a { label, url } object`\n for (const key of Object.keys(item)) {\n if (key !== 'label' && key !== 'url') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, url`\n }\n if (typeof item.label !== 'string' || item.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (typeof item.url !== 'string' || !/^https?:\\/\\/[^\\s]+$/i.test(item.url)) return `${at}.url: expected an http(s) address`\n }\n return undefined\n}\n\nfunction checkInputId(node, path, ctx) {\n if (!isName(node.id) || RESERVED.has(node.id)) return `${path}.id: an input id is letters, digits and _, and starts with a letter or _, so formulas can use it`\n if (ctx.ids.has(node.id)) return `${path}.id: duplicate id ${quoted(node.id)}`\n ctx.ids.add(node.id)\n if (typeof node.label !== 'string') return `${path}.label: expected a string`\n return undefined\n}\n\nfunction checkNumberInput(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n for (const key of ['min', 'max', 'step']) {\n if (node[key] !== undefined && !isNumber(node[key])) return `${path}.${key}: expected a number`\n }\n if (node.type === 'slider' && (node.min === undefined || node.max === undefined)) return `${path}: a slider needs min and max`\n if (node.min !== undefined && node.max !== undefined && node.max <= node.min) return `${path}.max: expected more than min (${node.min})`\n if (node.step !== undefined && node.step <= 0) return `${path}.step: expected more than 0`\n if (!isNumber(node.value)) return `${path}.value: expected a number`\n if ((node.min !== undefined && node.value < node.min) || (node.max !== undefined && node.value > node.max)) return `${path}.value: expected a number from ${node.min ?? '-∞'} to ${node.max ?? '∞'}`\n if (node.unit !== undefined && typeof node.unit !== 'string') return `${path}.unit: expected a string`\n ctx.inputs.set(node.id, node.value)\n return undefined\n}\n\nfunction checkChoice(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n if (!Array.isArray(node.options) || node.options.length === 0) return `${path}.options: expected a non-empty array of { label, value }`\n const labels = new Set()\n const values = new Set()\n for (let index = 0; index < node.options.length; index += 1) {\n const option = node.options[index]\n const at = `${path}.options[${index}]`\n if (!isRecord(option)) return `${at}: expected a { label, value } object`\n for (const key of Object.keys(option)) {\n if (key !== 'label' && key !== 'value') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, value`\n }\n if (typeof option.label !== 'string' || option.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (labels.has(option.label)) return `${at}.label: duplicate label ${quoted(option.label)}`\n labels.add(option.label)\n const value = option.value ?? option.label\n if (!isScalar(value)) return `${at}.value: expected a string, a number or true/false`\n if (values.has(value)) return `${at}.value: duplicate value ${quoted(value)}`\n values.add(value)\n }\n const chosen = node.value ?? choiceValue(node.options[0])\n if (!values.has(chosen)) return `${path}.value: expected one of the options' values`\n ctx.inputs.set(node.id, chosen)\n return undefined\n}\n\nfunction checkToggle(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.value !== undefined && typeof node.value !== 'boolean') return `${path}.value: expected true or false`\n ctx.inputs.set(node.id, node.value === true)\n return undefined\n}\n\nfunction checkOptions(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.multi !== undefined && typeof node.multi !== 'boolean') return `${path}.multi: expected a boolean`\n if (!Array.isArray(node.options)) return `${path}.options: expected an array of 1 to ${MAX_OPTIONS} options`\n if (node.options.length < 1 || node.options.length > MAX_OPTIONS) return `${path}.options: expected 1 to ${MAX_OPTIONS} options; got ${node.options.length}`\n const labels = new Set()\n for (let index = 0; index < node.options.length; index += 1) {\n const option = node.options[index]\n const at = `${path}.options[${index}]`\n if (!isRecord(option)) return `${at}: expected an option object`\n for (const key of Object.keys(option)) {\n if (key !== 'label' && key !== 'description') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, description`\n }\n if (typeof option.label !== 'string' || option.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (labels.has(option.label)) return `${at}.label: duplicate label ${quoted(option.label)}`\n labels.add(option.label)\n if (option.description !== undefined && typeof option.description !== 'string') return `${at}.description: expected a string`\n }\n return undefined\n}\n\nfunction checkConfirm(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.confirmLabel !== undefined && typeof node.confirmLabel !== 'string') return `${path}.confirmLabel: expected a string`\n if (node.cancelLabel !== undefined && typeof node.cancelLabel !== 'string') return `${path}.cancelLabel: expected a string`\n return undefined\n}\n\nfunction checkForm(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.submitLabel !== undefined && typeof node.submitLabel !== 'string') return `${path}.submitLabel: expected a string`\n if (!Array.isArray(node.fields)) return `${path}.fields: expected an array of at most ${MAX_FIELDS} fields`\n if (node.fields.length > MAX_FIELDS) return `${path}.fields: ${node.fields.length} fields exceeds the limit of ${MAX_FIELDS}`\n const seen = new Set()\n for (let index = 0; index < node.fields.length; index += 1) {\n const field = node.fields[index]\n const at = `${path}.fields[${index}]`\n if (!isRecord(field)) return `${at}: expected a field object`\n for (const key of Object.keys(field)) {\n if (key !== 'id' && key !== 'label' && key !== 'placeholder') return `${at}.${key}: unknown property ${quoted(key)}; allowed: id, label, placeholder`\n }\n if (typeof field.id !== 'string' || field.id === '') return `${at}.id: expected a non-empty string`\n if (field.id === '__proto__') return `${at}.id: \"__proto__\" cannot be an id`\n if (seen.has(field.id)) return `${at}.id: duplicate field id ${quoted(field.id)}`\n seen.add(field.id)\n if (typeof field.label !== 'string') return `${at}.label: expected a string`\n if (field.placeholder !== undefined && typeof field.placeholder !== 'string') return `${at}.placeholder: expected a string`\n }\n return undefined\n}\n\nfunction checkSubmit(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.label !== undefined && typeof node.label !== 'string') return `${path}.label: expected a string`\n return undefined\n}\n\nfunction checkId(node, path, ctx) {\n if (typeof node.id !== 'string' || node.id === '') return `${path}.id: expected a non-empty string`\n // A `__proto__` id would write through to a plain object's prototype where the\n // answer is kept, losing it silently.\n if (node.id === '__proto__') return `${path}.id: \"__proto__\" cannot be an id`\n if (ctx.ids.has(node.id)) return `${path}.id: duplicate id ${quoted(node.id)}`\n ctx.ids.add(node.id)\n return undefined\n}\n\n// Every formula parses, reads only inputs and names the view defines, and gives the\n// right kind of value with the inputs as the Bot set them.\nfunction checkFormulas(ctx) {\n const known = new Set([...ctx.inputs.keys(), ...ctx.lets.keys()])\n const lets = new Map()\n for (const [name, entry] of ctx.lets) {\n if (ctx.inputs.has(name)) return `${entry.path}: ${quoted(name)} is already an input id`\n const compiled = compileFormula(entry.source)\n if (compiled.error !== undefined) return `${entry.path}: ${compiled.error}`\n const unknown = compiled.names.find(item => !known.has(item))\n if (unknown !== undefined) return `${entry.path}: unknown name ${quoted(unknown)}; known: ${allowed([...known]) || '(none)'}`\n lets.set(name, compiled.tree)\n }\n const lookup = createScope(ctx.inputs, lets)\n for (const [name, entry] of ctx.lets) {\n const result = evaluate(lets.get(name), lookup)\n if (result.error !== undefined) return `${entry.path}: ${result.error}`\n }\n for (const formula of ctx.formulas) {\n const compiled = compileFormula(formula.source)\n if (compiled.error !== undefined) return `${formula.path}: ${compiled.error}`\n const unknown = compiled.names.find(item => !known.has(item))\n if (unknown !== undefined) return `${formula.path}: unknown name ${quoted(unknown)}; known: ${allowed([...known]) || '(none)'}`\n const result = evaluate(compiled.tree, lookup)\n if (result.error !== undefined) return `${formula.path}: ${result.error}`\n const problem = kindProblem(result.value, formula.kind)\n if (problem !== undefined) return `${formula.path}: the formula gives ${quoted(result.value)}; ${problem}`\n }\n return undefined\n}\n\nfunction kindProblem(value, kind) {\n if (kind === 'number') return isNumber(value) ? undefined : 'expected a number'\n if (Array.isArray(kind)) return kind.includes(value) ? undefined : `expected one of ${allowed(kind)}`\n if (kind === 'string') return isScalar(value) ? undefined : 'expected text'\n return isScalar(value) ? undefined : 'expected a string or a number'\n}\n\nfunction cellText(value) {\n if (typeof value === 'string') return value\n const text = JSON.stringify(value)\n return typeof text === 'string' ? text : ''\n}\n\n// -------------------------------------------------------------------------\n// Working a blueprint out: the client draws with these, the summary reads them.\n\nconst compiled = new WeakMap()\nconst treeOf = (formula) => {\n let entry = compiled.get(formula)\n if (entry === undefined) {\n entry = compileFormula(formula['='])\n compiled.set(formula, entry)\n }\n return entry\n}\n\nexport const choiceValue = option => option?.value ?? option?.label\n\nfunction walk(node, visit) {\n if (!isRecord(node)) return\n visit(node)\n if (LAYOUT.includes(node.type) && Array.isArray(node.children)) for (const child of node.children) walk(child, visit)\n}\n\nexport function viewInputs(view) {\n const found = []\n walk(view, (node) => { if (INPUTS.has(node.type)) found.push(node) })\n return found\n}\n\nexport function inputDefault(node) {\n if (node.type === 'toggle') return node.value === true\n if (node.type === 'choice') return node.value ?? choiceValue(Array.isArray(node.options) ? node.options[0] : undefined)\n return node.value\n}\n\nexport const hasInputs = view => viewInputs(view).length > 0\n\n// The values a view's formulas read: each input's default unless `values` sets it.\nexport function viewScope(view, values = {}) {\n const inputs = new Map()\n for (const node of viewInputs(view)) inputs.set(node.id, Object.hasOwn(values, node.id) ? values[node.id] : inputDefault(node))\n const lets = new Map()\n for (const [name, source] of Object.entries(isRecord(view?.let) ? view.let : {})) {\n const entry = compileFormula(source)\n if (entry.tree !== undefined) lets.set(name, entry.tree)\n }\n return createScope(inputs, lets)\n}\n\n// A property's value: the literal, or the formula worked out. A formula that fails\n// with these inputs gives `fallback`.\nexport function resolve(value, lookup, fallback = undefined) {\n if (!isFormula(value)) return value\n const entry = treeOf(value)\n if (entry.tree === undefined) return fallback\n const result = evaluate(entry.tree, lookup)\n return result.error === undefined ? result.value : fallback\n}\n\nexport const asText = value => (value === undefined || value === null ? '' : show(value))\n\n// -------------------------------------------------------------------------\n// Summaries\n\nfunction clip(text) {\n const flat = String(text).replace(/\\s+/g, ' ').trim()\n return flat.length <= SUMMARY_PART ? flat : flat.slice(0, SUMMARY_PART)\n}\n\nconst choiceLabel = (node, value) => (Array.isArray(node.options) ? node.options : []).find(option => choiceValue(option) === value)?.label ?? asText(value)\n\nfunction inputText(node, value) {\n if (node.type === 'toggle') return value === true ? 'on' : 'off'\n if (node.type === 'choice') return choiceLabel(node, value)\n return `${asText(value)}${node.unit ? ` ${node.unit}` : ''}`\n}\n\nfunction progressPercent(node, lookup) {\n if (node.percent !== undefined) return Number(resolve(node.percent, lookup, 0))\n const max = Number(resolve(node.max, lookup, 0))\n return max > 0 ? (Number(resolve(node.value, lookup, 0)) / max) * 100 : 0\n}\n\nfunction componentSummary(node, lookup) {\n const value = item => asText(resolve(item, lookup, ''))\n switch (node.type) {\n case 'text': return `text: ${value(node.text)}`\n case 'metric': return `metric: ${node.label}=${value(node.value)}`\n case 'table': return `table: ${(Array.isArray(node.columns) ? node.columns : []).map(column => column?.label ?? column?.key ?? '').filter(Boolean).join('/')}`\n case 'chart': {\n const series = Array.isArray(node.series) ? node.series[0] : undefined\n const values = Array.isArray(series?.values) ? series.values : []\n const unit = node.unit ? ` ${node.unit}` : ''\n return `chart: ${(Array.isArray(node.categories) ? node.categories : []).map((label, index) => `${label}=${value(values[index])}${unit}`).join(', ')}`\n }\n case 'progress': return `progress: ${node.label ? `${node.label} ` : ''}${Math.round(progressPercent(node, lookup))}%`\n case 'callout': return `callout: ${value(node.text)}`\n case 'sources': return `sources: ${(Array.isArray(node.items) ? node.items : []).map(item => item?.label).filter(Boolean).join('/')}`\n case 'slider': case 'number': case 'choice': case 'toggle': return `${node.type}: ${node.label}=${inputText(node, inputDefault(node))}`\n case 'options': return `options: ${(Array.isArray(node.options) ? node.options : []).map(option => option?.label).filter(Boolean).join('/')}`\n case 'confirm': return 'confirm'\n case 'form': return `form: ${(Array.isArray(node.fields) ? node.fields : []).map(field => field?.label ?? field?.id).filter(Boolean).join('/')}`\n case 'submit': return `submit: ${node.label ?? 'Send'}`\n default: return undefined\n }\n}\n\n// One line for a handoff or a checkpoint. Containers add nothing of their own;\n// each component keeps one short phrase, and the line stops after a few. Formulas\n// show what they give with the inputs as the Bot set them.\nexport function viewSummary(view) {\n const parts = []\n const lookup = viewScope(view)\n const visit = (node) => {\n if (parts.length >= SUMMARY_COUNT || !isRecord(node)) return\n const line = componentSummary(node, lookup)\n if (line !== undefined) parts.push(clip(line))\n if (parts.length >= SUMMARY_COUNT || !LAYOUT.includes(node.type) || !Array.isArray(node.children)) return\n for (const child of node.children) visit(child)\n }\n visit(view)\n return parts.join('; ')\n}\n\n// The inputs of an answer as `Label=value` pairs, for the Bot's history.\nexport function inputsSummary(view, inputs) {\n if (!isRecord(inputs)) return ''\n return viewInputs(view)\n .filter(node => Object.hasOwn(inputs, node.id))\n .map(node => `${node.label || node.id}=${inputText(node, inputs[node.id])}`)\n .join('; ')\n}\n\n// -------------------------------------------------------------------------\n// Answers\n\nfunction interactiveNodes(node, found = []) {\n walk(node, (item) => { if (INTERACTIVE.has(item.type)) found.push(item) })\n return found\n}\n\n// `action` is the id of the component the user submitted. One submit settles\n// the whole card, so only that component's values are kept, plus the inputs'\n// values when the view has inputs.\nexport function validateViewAnswer(view, action, values) {\n const nodes = interactiveNodes(view)\n if (typeof action !== 'string' || action === '') return { error: `action: expected an interactive component id; allowed: ${allowed(nodes.map(node => node.id))}` }\n const node = nodes.find(item => item.id === action)\n if (node === undefined) return { error: `action: no interactive component with id ${quoted(action)}; allowed: ${allowed(nodes.map(item => item.id))}` }\n if (!isRecord(values)) return { error: 'values: expected an object' }\n const inputs = validateInputs(view, values.inputs)\n if (inputs.error !== undefined) return inputs\n const extra = inputs.inputs === undefined ? {} : { inputs: inputs.inputs }\n if (node.type === 'submit') return { ...extra }\n const own = node.type === 'options' ? validateOptions(node, values) : node.type === 'confirm' ? validateConfirm(values) : validateForm(node, values)\n return own.error === undefined ? { ...own, ...extra } : own\n}\n\n// Every input of the view, as sent or else as the Bot set it.\nfunction validateInputs(view, sent) {\n const nodes = viewInputs(view)\n if (nodes.length === 0) return sent === undefined ? {} : { error: 'values.inputs: this view has no inputs' }\n if (sent !== undefined && !isRecord(sent)) return { error: 'values.inputs: expected an object of input ids to values' }\n const given = sent ?? {}\n const ids = nodes.map(node => node.id)\n const unknown = Object.keys(given).find(key => !ids.includes(key))\n if (unknown !== undefined) return { error: `values.inputs.${unknown}: unknown input; allowed: ${allowed(ids)}` }\n const inputs = {}\n for (const node of nodes) {\n const value = Object.hasOwn(given, node.id) ? given[node.id] : inputDefault(node)\n const at = `values.inputs.${node.id}`\n if (node.type === 'toggle' && typeof value !== 'boolean') return { error: `${at}: expected true or false` }\n if (node.type === 'choice' && !(Array.isArray(node.options) ? node.options : []).some(option => choiceValue(option) === value)) return { error: `${at}: expected one of the options' values` }\n if (node.type === 'slider' || node.type === 'number') {\n if (!isNumber(value)) return { error: `${at}: expected a number` }\n if ((node.min !== undefined && value < node.min) || (node.max !== undefined && value > node.max)) return { error: `${at}: expected a number from ${node.min ?? '-∞'} to ${node.max ?? '∞'}` }\n }\n inputs[node.id] = value\n }\n return { inputs }\n}\n\nfunction validateOptions(node, values) {\n if (!Array.isArray(values.selected)) return { error: 'values.selected: expected an array of option labels' }\n const labels = new Set((node.options ?? []).map(option => option?.label))\n const picked = values.selected.filter(label => typeof label === 'string' && labels.has(label))\n const selected = node.multi === true ? [...new Set(picked)] : picked.slice(0, 1)\n if (selected.length === 0) return { error: 'values.selected: select at least one option' }\n return { selected }\n}\n\nfunction validateConfirm(values) {\n if (typeof values.confirmed !== 'boolean') return { error: 'values.confirmed: expected a boolean' }\n return { confirmed: values.confirmed }\n}\n\nfunction validateForm(node, values) {\n if (!isRecord(values.fields)) return { error: 'values.fields: expected an object of field ids to strings' }\n const declared = (node.fields ?? []).map(field => field?.id).filter(id => typeof id === 'string')\n const allowedIds = new Set(declared)\n const fields = {}\n for (const [key, value] of Object.entries(values.fields)) {\n if (!allowedIds.has(key)) return { error: `values.fields.${key}: unknown field; allowed: ${allowed(declared)}` }\n if (typeof value !== 'string') return { error: `values.fields.${key}: expected a string` }\n if (value.length > MAX_TEXT) return { error: `values.fields.${key}: ${value.length} characters exceeds the limit of ${MAX_TEXT}` }\n fields[key] = value\n }\n return { fields }\n}\n","import type { RpcResult as SharedRpcResult } from '@klarkxy/dsh-plugin-kit/contracts'\nexport type RpcResult<T = unknown> = SharedRpcResult<T>\nexport const PLUGIN_NAME = '@klarkxy/dsh-deep-view'\nexport const RPC_CHANNEL = '/dsh-deep-view'\nexport const VIEW_OWNER = 'dsh-deep-view'\n\nexport type Scalar = string | number | boolean\nexport type Formula = { '=': string }\nexport type Value = Scalar | Formula\nexport type ChoiceOption = { label: string; value?: Scalar }\nexport type ViewNode = {\n type: 'stack' | 'row' | 'text' | 'metric' | 'table' | 'chart' | 'progress' | 'callout' | 'sources'\n | 'slider' | 'number' | 'choice' | 'toggle' | 'options' | 'confirm' | 'form' | 'submit'\n id?: string\n children?: ViewNode[]\n let?: Record<string, string>\n text?: Value\n label?: string\n value?: Value\n tone?: Value\n caption?: Value\n columns?: { key: string; label: string }[]\n rows?: Value[][]\n kind?: 'bar' | 'hbar' | 'line' | 'area' | 'donut'\n categories?: Scalar[]\n series?: { name?: string; values: (number | Formula)[] }[]\n unit?: string\n percent?: Value\n max?: Value\n valueLabel?: Value\n items?: { label: string; url: string }[]\n min?: number\n step?: number\n options?: ChoiceOption[] | { label: string; description?: string }[]\n multi?: boolean\n confirmLabel?: string\n cancelLabel?: string\n fields?: { id: string; label: string; placeholder?: string }[]\n submitLabel?: string\n}\nexport type ShownView = { title: string; view: ViewNode; interactive: boolean }\nexport type ViewFailure = { error: string }\nexport type PendingView = { id: string; sessionId: string; callId?: string; title: string; view: ViewNode }\nexport type ViewAnswer = { id: string; action: string; values: Record<string, unknown> }\n/** Stored on the same user message as its readable answer, outside model text. */\nexport type ViewAnswerMetadata = { owner: typeof VIEW_OWNER; version: 1; answer: ViewAnswer }\nexport type ViewPresentation = {\n owner: typeof VIEW_OWNER\n viewId?: string\n title: string\n view: ViewNode\n interactive: boolean\n awaitReply: boolean\n}\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","// Migrated from deep-view/src/react/ui.js (Apache-2.0).\n// Small, host-neutral labels and SVG controls; no private color tokens.\nimport type { ReactNode } from 'react'\nexport type ViewT = (key: string, params?: Record<string, unknown>) => string\nexport const english: ViewT = (key, params) => key.replace(/\\{(\\w+)\\}/g, (_, name) => String(params?.[name] ?? `{${name}}`))\n\nexport function LineIcon({ paths }: { paths: string[] }) {\n return <svg width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">{paths.map((d, index) => <path key={index} d={d} />)}</svg>\n}\nexport const DotsIcon = () => <LineIcon paths={['M5 10h.01M10 10h.01M15 10h.01']} />\nexport const CheckIcon = () => <LineIcon paths={['M4.5 10.5l3.5 3.5 7.5-8']} />\nexport const CopyIcon = () => <LineIcon paths={['M8.5 7h6A1.5 1.5 0 0 1 16 8.5v6a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 7 14.5v-6A1.5 1.5 0 0 1 8.5 7z', 'M4 12.5V5.5A1.5 1.5 0 0 1 5.5 4H13']} />\nexport const TableIcon = () => <LineIcon paths={['M4.5 4h11A1.5 1.5 0 0 1 17 5.5v9a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 3 14.5v-9A1.5 1.5 0 0 1 4.5 4z', 'M3 8.5h14M8 8.5V16']} />\nexport const InfoIcon = () => <LineIcon paths={['M10 3.5a6.5 6.5 0 1 1 0 13 6.5 6.5 0 0 1 0-13z', 'M10 9.25v4', 'M10 6.6h.01']} />\nexport const LinkIcon = () => <svg width=\"12\" height=\"12\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M8.5 11.5l3-3\" /><path d=\"M7 9.5L5.5 11a2.5 2.5 0 0 0 3.5 3.5L10.5 13\" /><path d=\"M13 10.5l1.5-1.5A2.5 2.5 0 0 0 11 5.5L9.5 7\" /></svg>\nexport const keyLetter = (index: number) => String.fromCharCode(65 + index)\nexport function Segmented({ label, value, className, children }: { label: string; value: number; className?: string; children: ReactNode }) {\n return <div className={className ? `dvui-seg ${className}` : 'dvui-seg'} role=\"group\" aria-label={label} data-active={value}>{children}</div>\n}\n","// Chart layout and interaction adapted from deep-view/src/react/chart.js (Apache-2.0).\n// SVG is responsive, keyboard navigable, and uses only official --dsw-* theme tokens.\nimport { Fragment, useId, useLayoutEffect, useRef, useState } from 'react'\nimport type { CSSProperties, KeyboardEvent } from 'react'\nimport { asText, resolve } from './core/index.js'\nimport type { ViewNode } from './contracts.ts'\nimport { english, type ViewT } from './ui.tsx'\n\nexport const PALETTE = [\n 'var(--dsw-alias-state-business-primary)', 'var(--dsw-alias-brand-primary)',\n 'var(--dsw-alias-state-success-primary)', 'var(--dsw-alias-state-warn-primary)',\n 'var(--dsw-alias-state-error-primary)',\n]\nconst colorAt = (index: number) => PALETTE[index % PALETTE.length]\nconst TICK = 10\nconst LABEL = 11\nconst textWidth = (text: unknown, size: number) => [...String(text)].reduce((sum, char) => sum + (char.charCodeAt(0) > 0x2e80 ? size : size * 0.58), 0)\nconst fit = (text: unknown, room: number, size: number) => {\n if (textWidth(text, size) <= room) return String(text)\n let out = ''\n for (const char of String(text)) {\n if (textWidth(`${out}${char}…`, size) > room) break\n out += char\n }\n return out === '' ? '' : `${out}…`\n}\nexport function formatNumber(value: number) {\n if (!Number.isFinite(value)) return asText(value)\n const abs = Math.abs(value)\n const digits = abs >= 100 ? 0 : abs >= 10 ? 1 : 2\n return Number(value.toFixed(digits)).toLocaleString('en-US', { maximumFractionDigits: digits })\n}\nconst withUnit = (value: number, unit: string) => unit ? (unit === '%' ? `${formatNumber(value)}%` : `${formatNumber(value)} ${unit}`) : formatNumber(value)\n\nexport function niceTicks(low: number, high: number) {\n let lo = low\n let hi = high\n if (lo === hi) { lo = Math.min(0, lo); hi = hi === 0 ? 1 : Math.max(0, hi) }\n if (lo === hi) hi = lo + 1\n const raw = (hi - lo) / 4\n const magnitude = 10 ** Math.floor(Math.log10(raw))\n const step = [1, 2, 2.5, 5, 10].map(scale => scale * magnitude).find(candidate => candidate >= raw)!\n const start = Math.floor(lo / step + 1e-9) * step\n const end = Math.ceil(hi / step - 1e-9) * step\n const ticks = []\n for (let value = start; value <= end + step / 2; value += step) ticks.push(Number(value.toPrecision(12)))\n return ticks\n}\n\nexport type ChartSeries = { name: string; color: string; values: number[] }\nexport type ChartData = { kind: string; categories: string[]; series: ChartSeries[]; unit: string }\nexport function chartData(node: ViewNode, lookup: (name: string) => unknown): ChartData {\n const categories = (Array.isArray(node.categories) ? node.categories : []).map(asText)\n const series = (Array.isArray(node.series) ? node.series : []).map((item, index) => ({\n name: typeof item?.name === 'string' ? item.name : '', color: colorAt(index),\n values: categories.map((_, at) => {\n const value = Number(resolve(Array.isArray(item?.values) ? item.values[at] : undefined, lookup, 0))\n return Number.isFinite(value) ? value : 0\n }),\n }))\n return { kind: node.kind ?? 'bar', categories, series, unit: typeof node.unit === 'string' ? node.unit : '' }\n}\nconst csvCell = (value: string) => /[\",\\n]/.test(value) ? `\"${value.replace(/\"/g, '\"\"')}\"` : value\nexport function chartCsv({ categories, series, unit }: ChartData, t: ViewT = english) {\n const head = ['', ...series.map((item, index) => item.name || (series.length === 1 ? unit || t('Value') : `${t('Series')} ${index + 1}`))]\n const rows = categories.map((label, at) => [label, ...series.map(item => String(item.values[at]))])\n return [head, ...rows].map(row => row.map(cell => csvCell(String(cell))).join(',')).join('\\n')\n}\n\ntype Point = { x: number; y: number }\ntype Hit = { x: number; y: number; w: number; h: number }\ntype Drawn = { parts: React.ReactNode[]; height: number; points: Point[]; hits: Hit[]; size?: number; values?: number[]; total?: number }\nfunction valueAxis(values: number[], zero: boolean) {\n const finite = values.length > 0 ? values : [0]\n const low = Math.min(...finite)\n const high = Math.max(...finite)\n if (zero) return niceTicks(Math.min(0, low), Math.max(0, high))\n const pad = (high - low) * 0.1 || Math.abs(high) * 0.1 || 1\n return niceTicks(low - pad, high + pad)\n}\nfunction columns({ categories, series, unit, kind }: ChartData, width: number, active: number | null, shown: boolean[]): Drawn {\n const visible = series.filter((_, index) => shown[index])\n const ticks = valueAxis(visible.flatMap(item => item.values), kind !== 'line')\n const lo = ticks[0]\n const hi = ticks.at(-1)!\n const left = Math.ceil(Math.max(...ticks.map(tick => textWidth(withUnit(tick, unit), TICK)))) + 10\n const top = 8\n const height = 220\n const bottom = 24\n const plot = { x: left, y: top, w: Math.max(40, width - left - 4), h: height - top - bottom }\n const y = (value: number) => plot.y + plot.h - ((value - lo) / (hi - lo)) * plot.h\n const band = plot.w / categories.length\n const parts: React.ReactNode[] = []\n for (const tick of ticks) {\n parts.push(<line key={`g${tick}`} className=\"dvui-chart-grid\" x1={plot.x} x2={plot.x + plot.w} y1={y(tick)} y2={y(tick)} />)\n parts.push(<text key={`t${tick}`} className=\"dvui-chart-tick\" x={plot.x - 8} y={y(tick) + 3} textAnchor=\"end\">{withUnit(tick, unit)}</text>)\n }\n const points: Point[] = []\n categories.forEach((label, at) => {\n const cx = plot.x + band * at + band / 2\n parts.push(<text key={`c${at}`} className=\"dvui-chart-label\" x={cx} y={height - 7} textAnchor=\"middle\">{fit(label, band - 4, LABEL)}</text>)\n points.push({ x: cx, y: y(Math.max(...visible.map(item => item.values[at]), lo)) })\n })\n if (kind === 'bar') {\n const group = band * 0.72\n const gap = visible.length > 1 ? 2 : 0\n const barW = Math.max(2, (group - gap * (visible.length - 1)) / visible.length)\n const zero = y(Math.max(lo, Math.min(0, hi)))\n categories.forEach((_, at) => visible.forEach((item, row) => {\n const value = item.values[at]\n const x = plot.x + band * at + (band - group) / 2 + row * (barW + gap)\n const top2 = Math.min(y(value), zero)\n const tall = Math.max(1, Math.abs(y(value) - zero))\n const r = Math.min(4, barW / 2, tall)\n const d = value >= 0\n ? `M${x},${top2 + tall}V${top2 + r}q0,-${r} ${r},-${r}h${barW - 2 * r}q${r},0 ${r},${r}V${top2 + tall}z`\n : `M${x},${top2}V${top2 + tall - r}q0,${r} ${r},${r}h${barW - 2 * r}q${r},0 ${r},-${r}V${top2}z`\n parts.push(<path key={`b${at}-${row}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} d={d} style={{ fill: item.color }} />)\n }))\n } else {\n const xs = categories.map((_, at) => plot.x + band * at + band / 2)\n visible.forEach((item, row) => {\n const line = item.values.map((value, at) => `${at === 0 ? 'M' : 'L'}${xs[at]},${y(value)}`).join('')\n if (kind === 'area') {\n const base = y(Math.max(lo, Math.min(0, hi)))\n parts.push(<path key={`a${row}`} className=\"dvui-chart-area\" d={`${line}L${xs.at(-1)},${base}L${xs[0]},${base}z`} style={{ fill: item.color }} />)\n }\n parts.push(<path key={`l${row}`} className=\"dvui-chart-line\" d={line} style={{ stroke: item.color }} />)\n item.values.forEach((value, at) => parts.push(<circle key={`p${row}-${at}`} className=\"dvui-chart-dot\" cx={xs[at]} cy={y(value)} r={active === at ? 4 : 2.5} style={{ fill: item.color }} />))\n })\n if (active !== null) parts.unshift(<line key=\"guide\" className=\"dvui-chart-guide\" x1={xs[active]} x2={xs[active]} y1={plot.y} y2={plot.y + plot.h} />)\n }\n return { parts, height, points, hits: categories.map((_, at) => ({ x: plot.x + band * at, y: plot.y, w: band, h: plot.h })) }\n}\nfunction rows({ categories, series, unit }: ChartData, width: number, active: number | null, shown: boolean[]): Drawn {\n const visible = series.filter((_, index) => shown[index])\n const ticks = valueAxis(visible.flatMap(item => item.values), true)\n const lo = ticks[0]\n const hi = ticks.at(-1)!\n const labelW = Math.min(width * 0.38, Math.ceil(Math.max(...categories.map(label => textWidth(label, LABEL)))) + 10)\n const valueW = Math.ceil(Math.max(...visible.flatMap(item => item.values).map(value => textWidth(withUnit(value, unit), LABEL)))) + 10\n const barH = 14\n const rowH = 10 + visible.length * barH + (visible.length - 1) * 2\n const top = 4\n const height = top + rowH * categories.length + 22\n const plot = { x: labelW, y: top, w: Math.max(40, width - labelW - valueW), h: rowH * categories.length }\n const x = (value: number) => plot.x + ((value - lo) / (hi - lo)) * plot.w\n const parts: React.ReactNode[] = []\n for (const tick of ticks) {\n parts.push(<line key={`g${tick}`} className=\"dvui-chart-grid\" x1={x(tick)} x2={x(tick)} y1={plot.y} y2={plot.y + plot.h} />)\n parts.push(<text key={`t${tick}`} className=\"dvui-chart-tick\" x={x(tick)} y={height - 6} textAnchor=\"middle\">{withUnit(tick, unit)}</text>)\n }\n const points: Point[] = []\n const zero = x(Math.max(lo, Math.min(0, hi)))\n categories.forEach((label, at) => {\n const rowY = plot.y + rowH * at + 5\n parts.push(<text key={`c${at}`} className=\"dvui-chart-label\" x={labelW - 10} y={rowY + (rowH - 10) / 2 + 4} textAnchor=\"end\">{fit(label, labelW - 12, LABEL)}</text>)\n visible.forEach((item, row) => {\n const value = item.values[at]\n const by = rowY + row * (barH + 2)\n const left = Math.min(x(value), zero)\n const long = Math.max(1, Math.abs(x(value) - zero))\n parts.push(<rect key={`b${at}-${row}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} x={left} y={by} width={long} height={barH} rx={Math.min(4, long / 2)} style={{ fill: item.color }} />)\n parts.push(<text key={`v${at}-${row}`} className=\"dvui-chart-value\" x={left + long + 6} y={by + barH - 3}>{withUnit(value, unit)}</text>)\n })\n points.push({ x: Math.max(...visible.map(item => x(item.values[at])), zero), y: rowY })\n })\n return { parts, height, points, hits: categories.map((_, at) => ({ x: 0, y: plot.y + rowH * at, w: width, h: rowH })) }\n}\nfunction donut({ categories, series }: ChartData, width: number, active: number | null, hover: (at: number) => void): Drawn {\n const values = (series[0]?.values ?? []).map(value => Math.max(0, value))\n const total = values.reduce((sum, value) => sum + value, 0)\n const size = Math.min(180, Math.max(120, width * 0.42))\n const r = size / 2\n const inner = r * 0.62\n const cx = r\n const cy = r\n const parts: React.ReactNode[] = []\n const points: Point[] = []\n let angle = -Math.PI / 2\n values.forEach((value, at) => {\n const sweep = total > 0 ? (value / total) * Math.PI * 2 : 0\n const end = angle + sweep\n const mid = angle + sweep / 2\n points.push({ x: cx + Math.cos(mid) * (r - (r - inner) / 2), y: cy + Math.sin(mid) * (r - (r - inner) / 2) })\n if (sweep > 0) {\n const large = sweep > Math.PI ? 1 : 0\n const full = sweep >= Math.PI * 2 - 1e-6\n const p = (radius: number, theta: number) => `${cx + Math.cos(theta) * radius},${cy + Math.sin(theta) * radius}`\n const d = full\n ? `M${p(r, angle)}A${r},${r} 0 1 1 ${p(r, angle + Math.PI)}A${r},${r} 0 1 1 ${p(r, angle)}M${p(inner, angle)}A${inner},${inner} 0 1 0 ${p(inner, angle + Math.PI)}A${inner},${inner} 0 1 0 ${p(inner, angle)}z`\n : `M${p(r, angle)}A${r},${r} 0 ${large} 1 ${p(r, end)}L${p(inner, end)}A${inner},${inner} 0 ${large} 0 ${p(inner, angle)}z`\n parts.push(<path key={`s${at}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} d={d} fillRule=\"evenodd\" style={{ fill: colorAt(at) }} onPointerEnter={() => hover(at)} />)\n }\n angle = end\n })\n return { parts, height: size, size, points, total, values, hits: [] }\n}\nfunction useWidth(box: React.RefObject<HTMLDivElement | null>, initial: number) {\n const [width, setWidth] = useState(initial)\n useLayoutEffect(() => {\n const node = box.current\n if (!node || typeof ResizeObserver !== 'function') return undefined\n const measure = () => { const next = Math.round(node.clientWidth); if (next > 0) setWidth(next) }\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(node)\n return () => observer.disconnect()\n }, [box])\n return width\n}\n\nexport type ChartHandle = { label: string | null; asTable: boolean; toggleTable(): void; copy(): void }\nexport function ChartTable({ data, t = english }: { data: ChartData; t?: ViewT }) {\n const { categories, series, unit } = data\n const heads = series.map((item, index) => item.name || (series.length === 1 ? unit || t('Value') : `${t('Series')} ${index + 1}`))\n return <div className=\"dvui-table\"><table><thead><tr><th scope=\"col\" />{heads.map((head, index) => <th key={index} scope=\"col\" className=\"dvui-num\">{head}</th>)}</tr></thead><tbody>{categories.map((label, at) => <tr key={`${at}-${label}`}><th scope=\"row\">{label}</th>{series.map((item, index) => <td key={index} className=\"dvui-num\">{withUnit(item.values[at], series.length === 1 && !item.name ? '' : unit)}</td>)}</tr>)}</tbody></table></div>\n}\nexport function WidgetChart({ node, lookup, registerChart, refreshCharts, t = english }: { node: ViewNode; lookup: (name: string) => unknown; registerChart?: (key: string, handle: ChartHandle) => (() => void) | void; refreshCharts?: () => void; t?: ViewT }) {\n const data = chartData(node, lookup)\n const { kind, categories, series, unit } = data\n const box = useRef<HTMLElement>(null)\n const width = useWidth(box as React.RefObject<HTMLDivElement | null>, 520)\n const [active, setActive] = useState<number | null>(null)\n const [hidden, setHidden] = useState<number[]>([])\n const [asTable, setAsTable] = useState(false)\n const [copied, setCopied] = useState(false)\n const labelId = useId()\n const menuKey = useId()\n const table = useRef(asTable)\n table.current = asTable\n const shown = series.map((_, index) => !hidden.includes(index))\n const label = typeof node.caption === 'string' && node.caption !== '' ? node.caption : t('Chart')\n const isDonut = kind === 'donut'\n const legendBeside = isDonut && width >= 360\n const drawn = isDonut ? donut(data, legendBeside ? width - 200 : width, active, setActive) : kind === 'hbar' ? rows(data, width, active, shown) : columns(data, width, active, shown)\n const svgWidth = isDonut ? drawn.size! : width\n const move = (event: KeyboardEvent<SVGSVGElement>) => {\n const keys: Record<string, number> = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 }\n if (event.key === 'Escape') { setActive(null); return }\n if (keys[event.key] === undefined) return\n event.preventDefault()\n setActive(current => current === null ? 0 : (current + keys[event.key] + categories.length) % categories.length)\n }\n const point = active === null ? null : drawn.points[active]\n const share = (at: number) => unit === '%' ? withUnit(drawn.values![at], unit) : `${withUnit(drawn.values![at], unit)} · ${drawn.total! > 0 ? Math.round((drawn.values![at] / drawn.total!) * 100) : 0}%`\n const tipRows = active === null || isDonut ? [] : series.filter((_, index) => shown[index]).map(item => ({ color: item.color, name: item.name, value: withUnit(item.values[active], unit) }))\n const copy = () => {\n void navigator.clipboard?.writeText(chartCsv(data, t)).then(() => { setCopied(true); setTimeout(() => setCopied(false), 1200) }).catch(() => {})\n }\n const toggleTable = () => { table.current = !table.current; setAsTable(table.current) }\n const action = useRef<ChartHandle>({ label: null, asTable: false, toggleTable, copy })\n action.current = { label: typeof node.caption === 'string' && node.caption !== '' ? node.caption : null, get asTable() { return table.current }, toggleTable, copy }\n useLayoutEffect(() => registerChart?.(menuKey, { get label() { return action.current.label }, get asTable() { return action.current.asTable }, toggleTable: () => action.current.toggleTable(), copy: () => action.current.copy() }), [registerChart, menuKey])\n useLayoutEffect(() => { refreshCharts?.() }, [refreshCharts, asTable, label])\n const legend = isDonut\n ? <div className=\"dvui-chart-legend dvui-chart-legend-list\">{categories.map((name, at) => <div key={`${at}-${name}`} className=\"dvui-chart-key\" data-dim={active !== null && active !== at ? '' : undefined} onPointerEnter={() => setActive(at)} onPointerLeave={() => setActive(null)}><i style={{ background: colorAt(at) }} /><span className=\"dvui-chart-key-name\">{name}</span><span className=\"dvui-chart-key-value\">{share(at)}</span></div>)}</div>\n : series.length > 1 ? <div className=\"dvui-chart-legend\">{series.map((item, index) => <button key={`${index}-${item.name}`} type=\"button\" className=\"dvui-chart-key\" aria-pressed={shown[index]} onClick={() => setHidden(before => before.includes(index) ? before.filter(item => item !== index) : shown.filter(Boolean).length > 1 ? [...before, index] : before)}><i style={{ background: item.color }} />{item.name || `${t('Series')} ${index + 1}`}</button>)}</div> : null\n const plot = <div className=\"dvui-chart-plot\" style={isDonut ? { width: svgWidth } : undefined}>\n <svg className=\"dvui-chart-svg\" width={svgWidth} height={drawn.height} viewBox={`0 0 ${svgWidth} ${drawn.height}`} role=\"img\" aria-labelledby={labelId} tabIndex={0} onKeyDown={move} onBlur={() => setActive(null)} onPointerLeave={() => setActive(null)}>\n {drawn.parts}\n {isDonut ? (active === null\n ? <text className=\"dvui-chart-center\" x={svgWidth / 2} y={drawn.height / 2 + 5} textAnchor=\"middle\">{unit === '%' ? '' : withUnit(drawn.total!, unit)}</text>\n : <Fragment><text className=\"dvui-chart-center-name\" x={svgWidth / 2} y={drawn.height / 2 - 4} textAnchor=\"middle\">{fit(categories[active], drawn.size! * 0.56, LABEL)}</text><text className=\"dvui-chart-center\" x={svgWidth / 2} y={drawn.height / 2 + 14} textAnchor=\"middle\">{share(active)}</text></Fragment>)\n : drawn.hits.map((hit, at) => <rect key={`h${at}`} className=\"dvui-chart-hit\" x={hit.x} y={hit.y} width={hit.w} height={hit.h} onPointerEnter={() => setActive(at)} />)}\n </svg>\n {point && !asTable && !isDonut ? <div className=\"dvui-chart-tip\" role=\"status\" style={{ left: point.x, top: point.y } as CSSProperties}><b>{categories[active!]}</b>{tipRows.map((row, index) => <span key={index}><i style={{ background: row.color }} />{row.name ? `${row.name} ` : ''}{row.value}</span>)}</div> : null}\n </div>\n return <figure ref={box} className=\"dvui-chart\" data-kind={kind}>\n <span id={labelId} hidden>{label}</span>\n {asTable ? <ChartTable data={data} t={t} /> : isDonut ? <div className={legendBeside ? 'dvui-chart-donut dvui-chart-donut-beside' : 'dvui-chart-donut'} onPointerLeave={() => setActive(null)}>{plot}{legend}</div> : <Fragment>{legend}{plot}</Fragment>}\n {copied ? <span className=\"dvui-chart-copied\" role=\"status\">{t('Copied')}</span> : null}\n {typeof node.caption === 'string' && node.caption !== '' ? <figcaption className=\"dvui-caption\">{node.caption}</figcaption> : null}\n </figure>\n}\n","// Widget composition adapted from deep-view/src/react/card.js (Apache-2.0).\n// DSH migration: html/PNG export/Bot persistence are excluded. Local controls\n// remain live; only a supplied onSubmit callback may deliver an answer.\nimport { Fragment, useCallback, useEffect, useId, useRef, useState } from 'react'\nimport type { ComponentType } from 'react'\nimport { asText, choiceValue, inputDefault, resolve, viewInputs, viewScope } from './core/index.js'\nimport type { ViewNode } from './contracts.ts'\nimport { WidgetChart, type ChartHandle } from './chart.tsx'\nimport { CheckIcon, CopyIcon, DotsIcon, InfoIcon, LinkIcon, Segmented, TableIcon, english, keyLetter, type ViewT } from './ui.tsx'\n\n// Structural twin of the official MarkdownLabels: the widget layer stays\n// runtime-neutral, and any component accepting this shape (the official\n// MarkdownText included) is assignable.\nexport type MarkdownProps = { text: string; streaming?: boolean; labels: ViewLabels; variant?: 'body' | 'compact' }\nexport type ViewLabels = {\n code: { copyLabel: string; copiedLabel: string; toolbarLabels?: { codeLabel: string; wrapLabel: string; unwrapLabel: string } }\n footnotes: string\n}\nexport type Answer = { id: string; action: string; values: Record<string, unknown> }\nexport type WidgetCardProps = {\n title?: string\n view: ViewNode\n onSubmit?: (action: string, values: Record<string, unknown>) => void\n onDismiss?: () => void\n busy?: boolean\n settled?: boolean\n answer?: Answer | null\n t?: ViewT\n labels?: ViewLabels\n Markdown?: ComponentType<MarkdownProps>\n localOnly?: boolean\n}\ntype Ctx = {\n values: Record<string, unknown>\n setInput(id: string, value: unknown): void\n lookup(name: string): unknown\n locked: boolean\n answerLocked: boolean\n busy: boolean\n settled: boolean\n answer?: Answer | null\n onSubmit?: (action: string, values: Record<string, unknown>) => void\n registerChart(key: string, handle: ChartHandle): (() => void) | void\n refreshCharts(): void\n}\nconst TONES = ['good', 'warn', 'bad']\nconst CALLOUT_TONES = ['info', 'good', 'warn', 'bad']\nconst optionsOf = (node: ViewNode) => (Array.isArray(node.options) ? node.options : []) as { label: string; value?: string | number | boolean; description?: string }[]\nconst fieldsOf = (node: ViewNode) => (Array.isArray(node.fields) ? node.fields : [])\nconst cellText = (value: unknown) => value === null || value === undefined ? '' : typeof value === 'object' ? JSON.stringify(value) : asText(value)\nconst NUMERIC_CELL = /^[-+]?[\\d.,]+\\s?(%|[a-zA-Z]{1,4})?$/\nfunction hasType(node: ViewNode, types: Set<string>): boolean {\n return types.has(node.type) || (Array.isArray(node.children) && node.children.some(child => hasType(child, types)))\n}\nconst answerValues = (answer: Answer | null | undefined, node: ViewNode) => answer != null && answer.action === node.id ? answer.values : undefined\nconst withUnit = (value: unknown, unit?: string) => `${asText(value)}${unit ? ` ${unit}` : ''}`\nconst grouped = (value: unknown) => typeof value === 'number' && Number.isFinite(value) ? value.toLocaleString('en-US', { maximumFractionDigits: 6 }) : asText(value)\nfunction FallbackMarkdown({ text }: MarkdownProps) { return <span>{text}</span> }\n\nfunction OptionsInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n const [picked, setPicked] = useState<string[]>([])\n const options = optionsOf(node)\n const multi = node.multi === true\n const choose = (label: string) => {\n if (ctx.answerLocked) return\n if (multi) setPicked(current => current.includes(label) ? current.filter(item => item !== label) : [...current, label])\n else ctx.onSubmit?.(node.id!, { selected: [label] })\n }\n const onKey = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const index = event.key.toUpperCase().charCodeAt(0) - 65\n if (index >= 0 && index < options.length && !event.ctrlKey && !event.metaKey && !event.altKey) { event.preventDefault(); choose(options[index].label) }\n }\n return <Fragment>\n <div className=\"dvui-options\" role=\"group\" aria-label={t('Options')} onKeyDown={onKey}>{options.map((option, index) => {\n const selected = multi && picked.includes(option.label)\n return <button key={option.label} type=\"button\" className=\"dvui-option\" disabled={ctx.answerLocked} aria-pressed={multi ? selected : undefined} aria-keyshortcuts={keyLetter(index).toLowerCase()} onClick={() => choose(option.label)}>\n <span className=\"dvui-key\" aria-hidden=\"true\">{keyLetter(index)}</span>\n <span className=\"dvui-option-body\"><span className=\"dvui-option-label\">{option.label}</span>{option.description ? <span className=\"dvui-option-desc\">{option.description}</span> : null}</span>\n {selected ? <span className=\"dvui-check\"><CheckIcon /></span> : null}\n </button>\n })}</div>\n {multi ? <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked || picked.length === 0} onClick={() => ctx.onSubmit?.(node.id!, { selected: picked })}>{t('Submit')}</button></div> : null}\n </Fragment>\n}\nfunction SettledOptions({ node, answer, t }: { node: ViewNode; answer?: Answer | null; t: ViewT }) {\n const selected = answerValues(answer, node)?.selected\n const chosen = Array.isArray(selected) ? selected : []\n return <div className=\"dvui-options\" role=\"group\" aria-label={t('Your answer')}>{optionsOf(node).map(option => <div key={option.label} className=\"dvui-option\"><span className=\"dvui-option-body\"><span className=\"dvui-option-label\">{option.label}</span>{option.description ? <span className=\"dvui-option-desc\">{option.description}</span> : null}</span>{chosen.includes(option.label) ? <span className=\"dvui-check\" role=\"img\" aria-label={t('Selected')}><CheckIcon /></span> : null}</div>)}</div>\n}\nfunction ConfirmInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n return <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-button\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, { confirmed: false })}>{node.cancelLabel ?? t('Cancel')}</button><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, { confirmed: true })}>{node.confirmLabel ?? t('Confirm')}</button></div>\n}\nfunction SettledConfirm({ node, answer, t }: { node: ViewNode; answer?: Answer | null; t: ViewT }) {\n const confirmed = answerValues(answer, node)?.confirmed\n if (typeof confirmed !== 'boolean') return <ConfirmInput node={node} ctx={{ answerLocked: true } as Ctx} t={t} />\n return <span className=\"dvui-badge\">{confirmed ? node.confirmLabel ?? t('Confirm') : node.cancelLabel ?? t('Cancel')}</span>\n}\nfunction FormInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n const fields = fieldsOf(node)\n const [draft, setDraft] = useState<Record<string, string>>({})\n const submit = () => { if (!ctx.answerLocked) ctx.onSubmit?.(node.id!, { fields: Object.fromEntries(fields.map(field => [field.id, draft[field.id] ?? ''])) }) }\n return <form className=\"dvui-form\" onSubmit={event => { event.preventDefault(); submit() }}>{fields.map(field => <label key={field.id} className=\"dvui-field\"><span className=\"dvui-field-label\">{field.label}</span><input className=\"dvui-input\" type=\"text\" value={draft[field.id] ?? ''} autoComplete=\"off\" spellCheck={false} readOnly={ctx.answerLocked} aria-label={field.label} placeholder={field.placeholder} onChange={event => setDraft(current => ({ ...current, [field.id]: event.target.value }))} /></label>)}<div className=\"dvui-actions\"><button type=\"submit\" className=\"dvui-submit\" disabled={ctx.answerLocked}>{node.submitLabel ?? t('Submit')}</button></div></form>\n}\nfunction SettledForm({ node, answer }: { node: ViewNode; answer?: Answer | null }) {\n const fields = answerValues(answer, node)?.fields\n const values = fields !== null && typeof fields === 'object' ? fields as Record<string, unknown> : {}\n return <div className=\"dvui-form\">{fieldsOf(node).map(field => <label key={field.id} className=\"dvui-field\"><span className=\"dvui-field-label\">{field.label}</span><input className=\"dvui-input\" value={String(values[field.id] ?? '')} disabled readOnly aria-label={field.label} /></label>)}</div>\n}\nfunction WidgetTable({ node, lookup }: { node: ViewNode; lookup: (name: string) => unknown }) {\n const columns = Array.isArray(node.columns) ? node.columns : []\n const rows = (Array.isArray(node.rows) ? node.rows : []).map(row => (Array.isArray(row) ? row : []).map(cell => resolve(cell, lookup, '')))\n const numeric = columns.map((_, index) => {\n const cells = rows.map(row => row[index]).filter(cell => cell !== undefined && cell !== '')\n return cells.length > 0 && cells.every(cell => typeof cell === 'number' || (typeof cell === 'string' && NUMERIC_CELL.test(cell.trim())))\n })\n return <div className=\"dvui-table\"><table><thead><tr>{columns.map((column, index) => <th key={column.key ?? index} scope=\"col\" className={numeric[index] ? 'dvui-num' : undefined}>{column.label}</th>)}</tr></thead><tbody>{rows.map((row, rowIndex) => <tr key={rowIndex}>{columns.map((column, index) => <td key={column.key ?? index} className={numeric[index] ? 'dvui-num' : undefined}>{cellText(row[index])}</td>)}</tr>)}</tbody></table></div>\n}\nfunction WidgetProgress({ node, lookup, t }: { node: ViewNode; lookup: (name: string) => unknown; t: ViewT }) {\n let percent: number\n if (node.percent !== undefined) percent = Number(resolve(node.percent, lookup, 0))\n else {\n const max = Number(resolve(node.max, lookup, 0))\n percent = max > 0 ? (Number(resolve(node.value, lookup, 0)) / max) * 100 : 0\n }\n percent = Math.max(0, Math.min(100, Number.isFinite(percent) ? percent : 0))\n const tone = resolve(node.tone, lookup)\n const right = node.valueLabel !== undefined ? asText(resolve(node.valueLabel, lookup, '')) : `${Math.round(percent)}%`\n return <div className=\"dvui-progress\" data-tone={TONES.includes(String(tone)) ? String(tone) : undefined}><span className=\"dvui-progress-label\"><span>{node.label}</span><span>{right}</span></span><div className=\"dvui-progress-track\" role=\"progressbar\" aria-valuenow={Math.round(percent)} aria-valuemin={0} aria-valuemax={100} aria-label={node.label ?? t('Progress')} aria-valuetext={right}><div className=\"dvui-progress-fill\" style={{ width: `${percent}%` }} /></div></div>\n}\nfunction WidgetMetric({ node, lookup }: { node: ViewNode; lookup: (name: string) => unknown }) {\n const tone = resolve(node.tone, lookup)\n const caption = node.caption === undefined ? '' : asText(resolve(node.caption, lookup, ''))\n return <div className=\"dvui-metric\" data-tone={TONES.includes(String(tone)) ? String(tone) : undefined}><span className=\"dvui-metric-label\">{node.label}</span><span className=\"dvui-metric-value\">{asText(resolve(node.value, lookup, '—'))}</span>{caption !== '' ? <span className=\"dvui-caption\">{caption}</span> : null}</div>\n}\nfunction WidgetCallout({ node, lookup, Markdown, labels }: { node: ViewNode; lookup: (name: string) => unknown; Markdown: ComponentType<MarkdownProps>; labels: ViewLabels }) {\n const tone = resolve(node.tone, lookup)\n return <div className=\"dvui-callout\" data-tone={CALLOUT_TONES.includes(String(tone)) ? String(tone) : 'info'}><span className=\"dvui-callout-icon\" aria-hidden=\"true\"><InfoIcon /></span><div><Markdown text={asText(resolve(node.text, lookup, ''))} labels={labels} variant=\"compact\" /></div></div>\n}\nfunction WidgetSources({ node, t }: { node: ViewNode; t: ViewT }) {\n return <div className=\"dvui-sources\" role=\"list\" aria-label={t('Sources')}>{(node.items ?? []).map((item, index) => <a key={`${item.url}-${index}`} role=\"listitem\" className=\"dvui-source\" href={item.url} target=\"_blank\" rel=\"noopener noreferrer\" title={item.url}><LinkIcon />{item.label}</a>)}</div>\n}\nfunction InputHead({ id, label, value }: { id: string; label?: string; value?: string }) {\n return <div className=\"dvui-input-head\"><label htmlFor={id} className=\"dvui-input-label\">{label}</label>{value !== undefined ? <output htmlFor={id} className=\"dvui-input-value\">{value}</output> : null}</div>\n}\nconst numericBound = (bound: unknown) => typeof bound === 'number' && Number.isFinite(bound) ? bound : typeof bound === 'string' && bound.trim() !== '' && Number.isFinite(Number(bound)) ? Number(bound) : undefined\nfunction SliderInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const id = useId()\n const value = Number(ctx.values[node.id!])\n // Validation guarantees numeric min/max; resolve any stray non-numeric bound defensively.\n const min = numericBound(resolve(node.min, ctx.lookup, undefined))\n const max = numericBound(resolve(node.max, ctx.lookup, undefined))\n const percent = min !== undefined && max !== undefined && max > min ? ((value - min) / (max - min)) * 100 : 0\n return <div className=\"dvui-input-row\"><InputHead id={id} label={node.label} value={withUnit(grouped(value), node.unit)} /><input id={id} type=\"range\" className=\"dvui-range\" min={min} max={max} step={node.step ?? 'any'} value={value} disabled={ctx.locked} style={{ '--_dvui-fill': `${percent}%` } as React.CSSProperties} onChange={event => ctx.setInput(node.id!, Number(event.target.value))} /></div>\n}\nfunction NumberInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const id = useId()\n const [draft, setDraft] = useState<string | null>(null)\n const value = ctx.values[node.id!]\n const min = numericBound(resolve(node.min, ctx.lookup, undefined))\n const max = numericBound(resolve(node.max, ctx.lookup, undefined))\n return <div className=\"dvui-input-row\"><InputHead id={id} label={node.label} /><span className=\"dvui-number\"><input id={id} className=\"dvui-input\" type=\"number\" inputMode=\"decimal\" value={draft ?? asText(value)} min={min} max={max} step={node.step ?? 'any'} disabled={ctx.locked} onChange={event => {\n const raw = event.target.value\n setDraft(raw)\n const next = Number(raw)\n if (raw.trim() === '' || !Number.isFinite(next) || (min !== undefined && next < min) || (max !== undefined && next > max)) return\n ctx.setInput(node.id!, next)\n }} onBlur={() => setDraft(null)} />{node.unit ? <span className=\"dvui-unit\">{node.unit}</span> : null}</span></div>\n}\nfunction ChoiceInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const labelId = useId()\n const options = optionsOf(node)\n const current = ctx.values[node.id!]\n const side = options.length <= 4 && options.every(option => [...option.label].length <= 14)\n return <div className=\"dvui-input-row\"><span className=\"dvui-input-label\" id={labelId}>{node.label}</span>{side\n ? <Segmented label={node.label ?? ''} value={options.findIndex(option => choiceValue(option) === current)} className=\"dvui-choice-seg\">{options.map(option => <button key={option.label} type=\"button\" aria-pressed={choiceValue(option) === current} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, choiceValue(option))}>{option.label}</button>)}</Segmented>\n : <div className=\"dvui-radios\" role=\"radiogroup\" aria-labelledby={labelId}>{options.map(option => <button key={option.label} type=\"button\" role=\"radio\" className=\"dvui-radio\" aria-checked={choiceValue(option) === current} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, choiceValue(option))}><span className=\"dvui-radio-dot\" aria-hidden=\"true\" />{option.label}</button>)}</div>}</div>\n}\nfunction ToggleInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const on = ctx.values[node.id!] === true\n return <div className=\"dvui-toggle\"><span className=\"dvui-input-label\">{node.label}</span><button type=\"button\" role=\"switch\" className=\"dvui-switch\" aria-checked={on} aria-label={node.label} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, !on)}><span className=\"dvui-switch-knob\" aria-hidden=\"true\" /></button></div>\n}\nfunction WidgetNode({ node, ctx, Markdown, labels, t }: { node: ViewNode; ctx: Ctx; Markdown: ComponentType<MarkdownProps>; labels: ViewLabels; t: ViewT }) {\n const { lookup } = ctx\n switch (node.type) {\n case 'stack': case 'row': return <div className={node.type === 'row' ? 'dvui-row' : 'dvui-stack'}>{(node.children ?? []).map((child, index) => <WidgetNode key={child.id ?? `${child.type}-${index}`} node={child} ctx={ctx} Markdown={Markdown} labels={labels} t={t} />)}</div>\n case 'text': {\n const text = <Markdown text={asText(resolve(node.text, lookup, ''))} labels={labels} variant=\"compact\" />\n return node.tone === 'muted' ? <div className=\"dvui-muted\">{text}</div> : text\n }\n case 'metric': return <WidgetMetric node={node} lookup={lookup} />\n case 'table': return <WidgetTable node={node} lookup={lookup} />\n case 'chart': return <WidgetChart node={node} lookup={lookup} registerChart={ctx.registerChart} refreshCharts={ctx.refreshCharts} t={t} />\n case 'progress': return <WidgetProgress node={node} lookup={lookup} t={t} />\n case 'callout': return <WidgetCallout node={node} lookup={lookup} Markdown={Markdown} labels={labels} />\n case 'sources': return <WidgetSources node={node} t={t} />\n case 'slider': return <SliderInput node={node} ctx={ctx} />\n case 'number': return <NumberInput node={node} ctx={ctx} />\n case 'choice': return <ChoiceInput node={node} ctx={ctx} />\n case 'toggle': return <ToggleInput node={node} ctx={ctx} />\n case 'submit': return ctx.settled ? null : <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, {})}>{node.label || t('Send')}</button></div>\n case 'options': return ctx.settled ? <SettledOptions node={node} answer={ctx.answer} t={t} /> : <OptionsInput node={node} ctx={ctx} t={t} />\n case 'confirm': return ctx.settled ? <SettledConfirm node={node} answer={ctx.answer} t={t} /> : <ConfirmInput node={node} ctx={ctx} t={t} />\n case 'form': return ctx.settled ? <SettledForm node={node} answer={ctx.answer} /> : <FormInput node={node} ctx={ctx} t={t} />\n default: return null\n }\n}\nexport function WidgetView({ view, onSubmit, settled = false, answer = null, busy = false, registerChart, refreshCharts, t = english, labels = { code: { copyLabel: 'Copy', copiedLabel: 'Copied' }, footnotes: 'Footnotes' }, Markdown = FallbackMarkdown }: Omit<WidgetCardProps, 'title'> & { registerChart: Ctx['registerChart']; refreshCharts: () => void }) {\n const inputs = viewInputs(view) as ViewNode[]\n const [values, setValues] = useState<Record<string, unknown>>(() => Object.fromEntries(inputs.map(node => [node.id, inputDefault(node)])))\n const sent = answer?.values?.inputs\n const current = settled && sent !== null && typeof sent === 'object' ? { ...values, ...sent } : values\n const submit = (action: string, extra: Record<string, unknown>) => onSubmit?.(action, inputs.length > 0 ? { ...extra, inputs: current } : extra)\n const ctx: Ctx = {\n onSubmit: submit, settled, answer, busy, lookup: viewScope(view, current), values: current, locked: settled || busy, answerLocked: settled || busy || onSubmit === undefined,\n setInput: (id, value) => setValues(before => ({ ...before, [id]: value })), registerChart, refreshCharts,\n }\n return <WidgetNode node={view} ctx={ctx} Markdown={Markdown} labels={labels} t={t} />\n}\nfunction useChartHandles() {\n const [, bump] = useState(0)\n const charts = useRef(new Map<string, ChartHandle>())\n const refreshCharts = useCallback(() => bump(value => value + 1), [])\n const registerChart = useCallback((key: string, handle: ChartHandle) => {\n charts.current.set(key, handle)\n refreshCharts()\n return () => { charts.current.delete(key); refreshCharts() }\n }, [refreshCharts])\n return { charts: [...charts.current.values()], registerChart, refreshCharts }\n}\nfunction ViewMenu({ charts, t }: { charts: ChartHandle[]; t: ViewT }) {\n const [open, setOpen] = useState(false)\n const root = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (!open) return undefined\n const away = (event: PointerEvent) => { if (!root.current?.contains(event.target as Node)) setOpen(false) }\n const key = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false) }\n document.addEventListener('pointerdown', away, true)\n document.addEventListener('keydown', key)\n return () => { document.removeEventListener('pointerdown', away, true); document.removeEventListener('keydown', key) }\n }, [open])\n return <div ref={root} className=\"dvui-tools\" data-open={open ? '' : undefined}><button type=\"button\" className=\"dvui-more\" aria-label={t('Chart options')} aria-haspopup=\"menu\" aria-expanded={open} onClick={() => setOpen(value => !value)}><DotsIcon /></button>{open ? <div className=\"dvui-menu\" role=\"menu\">{charts.map((chart, index) => <Fragment key={`${chart.label}-${index}`}>{charts.length > 1 ? <div className=\"dvui-menu-label\">{chart.label ?? t('Chart {n}', { n: index + 1 })}</div> : null}<button type=\"button\" role=\"menuitem\" onClick={() => { setOpen(false); chart.toggleTable() }}><TableIcon />{chart.asTable ? t('View as chart') : t('View as table')}</button><button type=\"button\" role=\"menuitem\" onClick={() => { setOpen(false); chart.copy() }}><CopyIcon />{t('Copy data')}</button></Fragment>)}</div> : null}</div>\n}\nexport function WidgetCard({ title = '', view, onSubmit, onDismiss, busy = false, settled = false, answer = null, t = english, labels, Markdown, localOnly = false }: WidgetCardProps) {\n const titleId = useId()\n const { charts, registerChart, refreshCharts } = useChartHandles()\n const framed = hasType(view, new Set(['slider', 'number', 'choice', 'toggle', 'options', 'confirm', 'form', 'submit']))\n return <div className={`dvui-view ${framed ? 'dvui-framed' : 'dvui-bare'}${settled ? ' dvui-settled' : ''}`} role=\"group\" aria-labelledby={title ? titleId : undefined} aria-label={title ? undefined : t('View')} aria-busy={busy || undefined}>\n {title || onDismiss || charts.length > 0 ? <div className=\"dvui-head\"><p className=\"dvui-title\" id={titleId}>{title}</p>{charts.length > 0 ? <ViewMenu charts={charts} t={t} /> : null}{onDismiss ? <button type=\"button\" className=\"dvui-dismiss\" aria-label={t('Dismiss view')} onClick={onDismiss} disabled={busy}>×</button> : null}</div> : null}\n <div className=\"dvui-body\"><WidgetView view={view} onSubmit={onSubmit} settled={settled} answer={answer} busy={busy} registerChart={registerChart} refreshCharts={refreshCharts} t={t} labels={labels} Markdown={Markdown} /></div>\n {localOnly && hasType(view, new Set(['options', 'confirm', 'form', 'submit'])) ? <p className=\"dvui-local-note\" role=\"note\">{t('Local preview only; this card does not send an answer.')}</p> : null}\n </div>\n}\n","// All colour values come from the repository's official host token contract.\n// The root is scoped to the plugin's cells; no body or global element rules.\nexport const viewStyles = `\n.dvui-root { min-width: 0; color: var(--dsw-alias-label-primary); font-family: inherit; font-size: 14px; line-height: 22px; }\n.dvui-root * { box-sizing: border-box; }\n.dvui-root .dvui-view { min-width: 0; display: flex; flex-direction: column; gap: 10px; margin: 10px 0; }\n.dvui-root .dvui-bare { gap: 8px; }\n.dvui-root .dvui-framed { width: min(100%, 560px); padding: 14px 16px; border-radius: var(--dsw-radius-lg); background: var(--dsw-alias-bg-layer-1); box-shadow: var(--dsw-elevation-stroke); }\n.dvui-root .dvui-settled { color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-head { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }\n.dvui-root .dvui-title { flex: 1 1 0; min-width: 0; margin: 0; font-size: 13px; line-height: 18px; font-weight: 500; overflow-wrap: anywhere; }\n.dvui-root .dvui-body { min-width: 0; }\n.dvui-root .dvui-stack { display: flex; flex-direction: column; gap: 12px; min-width: 0; }\n.dvui-root .dvui-row { display: flex; flex-wrap: wrap; gap: 12px 24px; min-width: 0; }\n.dvui-root .dvui-row > * { flex: 1 1 160px; min-width: 0; }\n.dvui-root .dvui-metric { display: flex; flex-direction: column; gap: 1px; min-width: 0; }\n.dvui-root .dvui-metric-label,.dvui-root .dvui-caption,.dvui-root .dvui-field-label,.dvui-root .dvui-input-label { font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); overflow-wrap: anywhere; }\n.dvui-root .dvui-metric-value { font-size: 22px; line-height: 28px; font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.dvui-root .dvui-metric[data-tone=good] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=good] .dvui-progress-fill { color: var(--dsw-alias-state-success-primary); background: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-metric[data-tone=warn] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=warn] .dvui-progress-fill { color: var(--dsw-alias-state-warn-primary); background: var(--dsw-alias-state-warn-primary); }\n.dvui-root .dvui-metric[data-tone=bad] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=bad] .dvui-progress-fill { color: var(--dsw-alias-state-error-primary); background: var(--dsw-alias-state-error-primary); }\n.dvui-root .dvui-muted { font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-muted * { font-size: inherit !important; line-height: inherit !important; color: inherit !important; }\n.dvui-root .dvui-table { max-width: 100%; overflow-x: auto; border: .5px solid var(--dsw-alias-border-l2); border-radius: var(--dsw-radius-md); }\n.dvui-root .dvui-table table { border-collapse: collapse; min-width: 100%; font-size: 13px; line-height: 18px; }\n.dvui-root .dvui-table th { padding: 6px 10px; font-weight: 500; text-align: start; white-space: nowrap; color: var(--dsw-alias-label-secondary); border-bottom: .5px solid var(--dsw-alias-border-l2); }\n.dvui-root .dvui-table td { padding: 6px 10px; max-width: 280px; overflow-wrap: anywhere; }\n.dvui-root .dvui-table tbody tr + tr > * { border-top: .5px solid var(--dsw-alias-border-l1); }\n.dvui-root .dvui-table tbody th { font-weight: 400; border-bottom: 0; color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-num { text-align: end; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-progress { display: flex; flex-direction: column; gap: 5px; min-width: 0; }\n.dvui-root .dvui-progress-label { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-progress-label > span:first-child { color: var(--dsw-alias-label-primary); font-weight: 500; }\n.dvui-root .dvui-progress-track { height: 6px; border-radius: 999px; background: var(--dsw-alias-interactive-bg-hover); overflow: hidden; }\n.dvui-root .dvui-progress-fill { height: 100%; border-radius: inherit; background: var(--dsw-alias-state-business-primary); transition: width .12s ease; }\n.dvui-root .dvui-callout { display: flex; gap: 8px; padding: 8px 12px; border-radius: var(--dsw-radius-md); background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=good] { background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=warn] { background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=bad] { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent); }\n.dvui-root .dvui-callout-icon { flex: none; display: flex; padding-top: 3px; color: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-callout[data-tone=good] .dvui-callout-icon { color: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-callout[data-tone=warn] .dvui-callout-icon { color: var(--dsw-alias-state-warn-primary); }\n.dvui-root .dvui-callout[data-tone=bad] .dvui-callout-icon { color: var(--dsw-alias-state-error-primary); }\n.dvui-root .dvui-callout > div { flex: 1 1 auto; min-width: 0; }\n.dvui-root .dvui-sources { display: flex; flex-wrap: wrap; gap: 6px; }\n.dvui-root .dvui-source { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; height: 22px; padding: 0 6px; border-radius: var(--dsw-radius-sm); background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-secondary); font-size: 11px; line-height: 16px; text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.dvui-root .dvui-source:hover { color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-input-row { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.dvui-root .dvui-input-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }\n.dvui-root .dvui-input-value { font-size: 15px; line-height: 20px; font-weight: 600; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-range { appearance: none; width: 100%; height: 20px; margin: 0; background: transparent; cursor: pointer; }\n.dvui-root .dvui-range:disabled { cursor: default; opacity: .6; }\n.dvui-root .dvui-range::-webkit-slider-runnable-track { height: 6px; border-radius: 999px; background: linear-gradient(to right, var(--dsw-alias-state-business-primary) var(--_dvui-fill, 0%), var(--dsw-alias-interactive-bg-hover) var(--_dvui-fill, 0%)); }\n.dvui-root .dvui-range::-moz-range-track { height: 6px; border-radius: 999px; background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-range::-moz-range-progress { height: 6px; border-radius: 999px; background: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-range::-webkit-slider-thumb { appearance: none; width: 16px; height: 16px; margin-top: -5px; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-range::-moz-range-thumb { width: 16px; height: 16px; border: 0; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-number { display: flex; align-items: center; gap: 6px; max-width: 200px; }\n.dvui-root .dvui-unit { flex: none; font-size: 13px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-seg { display: flex; flex-wrap: wrap; gap: 2px; padding: 2px; border-radius: var(--dsw-radius-md); background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-choice-seg { align-self: flex-start; max-width: 100%; }\n.dvui-root .dvui-seg button { flex: 0 1 auto; min-height: 30px; padding: 4px 12px; border: 0; border-radius: var(--dsw-radius-sm); background: none; font: inherit; font-size: 13px; color: var(--dsw-alias-label-secondary); cursor: pointer; overflow-wrap: anywhere; }\n.dvui-root .dvui-seg button[aria-pressed=true] { background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-radios { display: flex; flex-direction: column; gap: 2px; }\n.dvui-root .dvui-radio { display: flex; align-items: center; gap: 8px; min-height: 30px; padding: 4px 8px; margin: 0 -8px; border: 0; border-radius: var(--dsw-radius-sm); background: none; font: inherit; text-align: start; color: inherit; cursor: pointer; }\n.dvui-root .dvui-radio:hover:not(:disabled),.dvui-root .dvui-option:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-radio-dot { flex: none; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--dsw-alias-border-l3); }\n.dvui-root .dvui-radio[aria-checked=true] .dvui-radio-dot { box-shadow: inset 0 0 0 5px var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 28px; }\n.dvui-root .dvui-switch { position: relative; flex: none; width: 36px; height: 20px; padding: 0; border: 0; border-radius: 999px; background: var(--dsw-alias-border-l3); cursor: pointer; }\n.dvui-root .dvui-switch[aria-checked=true] { background: var(--dsw-alias-button-primary-fill); }\n.dvui-root .dvui-switch-knob { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); transition: transform .15s ease; }\n.dvui-root .dvui-switch[aria-checked=true] .dvui-switch-knob { transform: translateX(16px); }\n.dvui-root .dvui-options { display: flex; flex-direction: column; gap: 1px; min-width: 0; margin: 0 -8px; }\n.dvui-root .dvui-option { position: relative; display: flex; align-items: flex-start; gap: 12px; width: 100%; min-width: 0; margin: 0; border: 0; border-radius: var(--dsw-radius-md); background: transparent; padding: 10px 8px; font: inherit; color: inherit; text-align: start; cursor: pointer; }\n.dvui-root .dvui-key { flex: none; width: 24px; height: 24px; border-radius: var(--dsw-radius-sm); background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 24px; text-align: center; }\n.dvui-root .dvui-option-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 1px; padding-top: 2px; }\n.dvui-root .dvui-option-label { font-size: 14px; line-height: 20px; font-weight: 500; overflow-wrap: anywhere; }\n.dvui-root .dvui-option-desc { font-size: 12px; line-height: 17px; color: var(--dsw-alias-label-secondary); overflow-wrap: anywhere; }\n.dvui-root .dvui-check { flex: none; display: inline-flex; align-items: center; color: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-form { display: flex; flex-direction: column; gap: 8px; margin: 0; }\n.dvui-root .dvui-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }\n.dvui-root .dvui-input { width: 100%; min-width: 0; min-height: 32px; padding: 5px 11px; border: .5px solid var(--dsw-alias-border-l3); border-radius: var(--dsw-radius-sm); outline: none; background: transparent; color: var(--dsw-alias-label-primary); font: inherit; font-size: 14px; line-height: 20px; }\n.dvui-root .dvui-input::placeholder { color: var(--dsw-alias-label-dimmed); }\n.dvui-root .dvui-input:focus-visible { border-color: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-actions { display: flex; justify-content: flex-end; gap: 8px; }\n.dvui-root .dvui-submit,.dvui-root .dvui-button { flex: none; min-height: 34px; padding: 0 14px; border: 0; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 500; cursor: pointer; }\n.dvui-root .dvui-submit { background: var(--dsw-alias-button-primary-fill); color: var(--dsw-alias-label-primary-foreground); }\n.dvui-root .dvui-submit:hover:not(:disabled) { background: var(--dsw-alias-button-primary-hover); }\n.dvui-root .dvui-button { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-button:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-active); }\n.dvui-root button:disabled { opacity: .45; cursor: default; }\n.dvui-root .dvui-badge { height: 22px; padding: 0 7px; border-radius: 999px; border: 1px dotted var(--dsw-alias-border-l3); color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 20px; }\n.dvui-root .dvui-tools { position: relative; flex: none; align-self: flex-start; }\n.dvui-root .dvui-more,.dvui-root .dvui-dismiss { width: 28px; height: 28px; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--dsw-alias-label-secondary); display: flex; align-items: center; justify-content: center; cursor: pointer; }\n.dvui-root .dvui-more:hover,.dvui-root .dvui-dismiss:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-menu { position: absolute; top: 32px; right: 0; z-index: 4; min-width: 180px; padding: 6px; border-radius: var(--dsw-radius-md); background: var(--dsw-menu-surface-fill); box-shadow: var(--dsw-elevation-panel); display: flex; flex-direction: column; gap: 2px; }\n.dvui-root .dvui-menu button { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; text-align: left; border: 0; background: none; border-radius: var(--dsw-radius-sm); padding: 6px 8px; font: inherit; font-size: 13px; line-height: 18px; color: var(--dsw-alias-label-primary); cursor: pointer; }\n.dvui-root .dvui-menu button:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-menu-label { padding: 2px 8px; font-size: 11px; line-height: 14px; color: var(--dsw-alias-label-tertiary); }\n.dvui-root .dvui-local-note { margin: 0; font-size: 12px; line-height: 18px; color: var(--dsw-alias-label-tertiary); }\n.dvui-root .dvui-chart { position: relative; margin: 0; min-width: 0; display: flex; flex-direction: column; gap: 8px; }\n.dvui-root .dvui-chart-plot { position: relative; min-width: 0; }\n.dvui-root .dvui-chart-svg { display: block; overflow: visible; outline: none; font-family: inherit; }\n.dvui-root .dvui-chart-svg text { pointer-events: none; }\n.dvui-root .dvui-chart-grid { stroke: var(--dsw-alias-border-l1); stroke-width: 1; stroke-dasharray: 3 3; }\n.dvui-root .dvui-chart-tick { font-size: 10px; fill: var(--dsw-alias-label-tertiary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-label,.dvui-root .dvui-chart-value { font-size: 11px; fill: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-value { font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-center { font-size: 15px; font-weight: 600; fill: var(--dsw-alias-label-primary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-center-name { font-size: 11px; fill: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-mark[data-dim] { opacity: .28; }\n.dvui-root .dvui-chart-line { fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n.dvui-root .dvui-chart-area { opacity: .14; }\n.dvui-root .dvui-chart-guide { stroke: var(--dsw-alias-border-l3); stroke-width: 1; }\n.dvui-root .dvui-chart-hit { fill: transparent; }\n.dvui-root .dvui-chart-tip { position: absolute; z-index: 4; pointer-events: none; transform: translate(-50%, calc(-100% - 8px)); display: flex; flex-direction: column; gap: 2px; padding: 6px 10px; border-radius: var(--dsw-radius-md); background: var(--dsw-menu-surface-fill); box-shadow: var(--dsw-elevation-panel); font-size: 12px; line-height: 16px; white-space: nowrap; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-tip span { display: flex; align-items: center; gap: 6px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-tip i,.dvui-root .dvui-chart-key i { flex: none; width: 8px; height: 8px; border-radius: 50%; }\n.dvui-root .dvui-chart-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; padding-right: 32px; }\n.dvui-root .dvui-chart-key { display: inline-flex; align-items: center; gap: 6px; min-height: 20px; padding: 0; border: 0; background: none; font: inherit; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); cursor: pointer; }\n.dvui-root .dvui-chart-key[aria-pressed=false],.dvui-root .dvui-chart-key[data-dim] { opacity: .4; }\n.dvui-root .dvui-chart-legend-list { flex-direction: column; flex-wrap: nowrap; gap: 6px; padding: 0; min-width: 0; }\n.dvui-root .dvui-chart-legend-list .dvui-chart-key { cursor: default; width: 100%; }\n.dvui-root .dvui-chart-key-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-chart-key-value { flex: none; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-donut { display: flex; flex-direction: column; align-items: center; gap: 12px; }\n.dvui-root .dvui-chart-donut-beside { flex-direction: row; align-items: center; gap: 24px; }\n.dvui-root .dvui-chart-donut-beside .dvui-chart-legend-list { flex: 1 1 auto; max-width: 280px; }\n.dvui-root .dvui-chart-copied { position: absolute; top: 2px; right: 36px; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-reasoning { margin: 6px 0; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-reasoning > summary { cursor: pointer; font-size: 12px; line-height: 20px; }\n.dvui-root .dvui-reasoning-body { padding: 4px 0 4px 12px; border-left: 1px solid var(--dsw-alias-border-l2); }\n.dvui-root .dvui-unknown { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--dsw-alias-label-secondary); font-size: 12px; }\n.dvui-root .dvui-tool-loading, .dvui-root.dvui-tool-loading { padding: 8px 0; color: var(--dsw-alias-label-secondary); font-size: 13px; }\n.dvui-root .dvui-tool-error, .dvui-root.dvui-tool-error { margin: 8px 0; color: var(--dsw-alias-label-error); font-size: 13px; }\n.dvui-root button:focus-visible,.dvui-root a:focus-visible,.dvui-root input:focus-visible,.dvui-root .dvui-chart-svg:focus-visible { outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary)); outline-offset: 2px; }\n@media (hover: hover) { .dvui-root .dvui-tools:not(:focus-within):not([data-open]) { opacity: 0; } .dvui-root .dvui-view:hover .dvui-tools { opacity: 1; } }\n@media (prefers-reduced-motion: reduce) { .dvui-root * { transition: none !important; } }\n`\n","import { choiceValue, inputsSummary, validateViewAnswer, viewInputs } from './core/index.js'\nimport { isRecord, type ViewAnswer, type ViewNode } from './contracts.ts'\n\ntype Card = { id: string; title: string; view: ViewNode }\nfunction controls(view: ViewNode): ViewNode[] {\n return ['options', 'confirm', 'form', 'submit'].includes(view.type)\n ? [view] : (view.children ?? []).flatMap(controls)\n}\n\nexport function answerText(card: Pick<Card, 'title' | 'view'>, action: string, values: Record<string, unknown>): string {\n const node = controls(card.view).find(node => node.id === action)\n const lines = [card.title || 'Deep View']\n if (Array.isArray(values.selected)) lines.push(values.selected.map(String).join(', '))\n if (typeof values.confirmed === 'boolean') lines.push(values.confirmed\n ? node?.confirmLabel ?? 'Confirm' : node?.cancelLabel ?? 'Cancel')\n if (isRecord(values.fields)) {\n for (const field of node?.fields ?? []) lines.push(`${field.label}: ${String(values.fields[field.id] ?? '')}`)\n }\n const inputs = inputsSummary(card.view, values.inputs)\n if (inputs) lines.push(inputs)\n if (node?.type === 'submit') lines.push(node.label ?? 'Submit')\n return lines.join('\\n')\n}\n\n/** Legacy messages have no metadata. Restore only unambiguous, fully validated\n * answers that reproduce the exact text written by this plugin. Never guess\n * from ordinary prose, and never modify the stored message. */\nexport function legacyAnswer(card: Card, text: string): ViewAnswer | null {\n if (text.startsWith('{')) {\n try {\n const data: unknown = JSON.parse(text)\n if (!isRecord(data) || data.kind !== 'answer_to_pending_view' || data.tool !== 'show_view' || !Array.isArray(data.answers)) return null\n const answer = data.answers.find(value => isRecord(value) && value.id === card.id)\n if (!isRecord(answer) || typeof answer.action !== 'string') return null\n const values = validateViewAnswer(card.view, answer.action, answer.values)\n return values.error === undefined ? { id: card.id, action: answer.action, values } : null\n } catch { return null }\n }\n const lines = text.split('\\n')\n if (lines.shift() !== (card.title || 'Deep View')) return null\n const candidates: ViewAnswer[] = []\n for (const node of controls(card.view)) {\n const rest = [...lines]\n const values: Record<string, unknown> = {}\n if (node.type === 'options') {\n const line = rest.shift()\n if (line === undefined) continue\n const labels = node.options?.map(option => option.label) ?? []\n if (node.multi && labels.some(label => label.includes(', '))) continue\n values.selected = node.multi ? line.split(', ') : [line]\n } else if (node.type === 'confirm') {\n const line = rest.shift(), yes = node.confirmLabel ?? 'Confirm', no = node.cancelLabel ?? 'Cancel'\n if (yes === no || line !== yes && line !== no) continue\n values.confirmed = line === yes\n } else if (node.type === 'form') {\n const fields: Record<string, string> = {}\n let valid = true\n for (const field of node.fields ?? []) {\n const line = rest.shift(), prefix = `${field.label}: `\n if (line === undefined || !line.startsWith(prefix)) { valid = false; break }\n fields[field.id] = line.slice(prefix.length)\n }\n if (!valid) continue\n values.fields = fields\n }\n const inputs = viewInputs(card.view) as ViewNode[]\n if (inputs.length) {\n const pairs = rest.shift()?.split('; ')\n if (!pairs || pairs.length !== inputs.length) continue\n const sent: Record<string, unknown> = {}\n let valid = true\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i], prefix = `${input.label || input.id}=`\n if (!pairs[i].startsWith(prefix)) { valid = false; break }\n const value = pairs[i].slice(prefix.length)\n if (input.type === 'toggle') sent[input.id!] = value === 'on' ? true : value === 'off' ? false : undefined\n else if (input.type === 'choice') {\n const choices = input.options?.filter(option => option.label === value) ?? []\n sent[input.id!] = choices.length === 1 ? choiceValue(choices[0]) : undefined\n } else {\n const unit = input.unit ? ` ${input.unit}` : ''\n sent[input.id!] = !unit || value.endsWith(unit) ? Number(unit ? value.slice(0, -unit.length) : value) : undefined\n }\n }\n if (!valid) continue\n values.inputs = sent\n }\n if (node.type === 'submit' && rest.shift() !== (node.label ?? 'Submit')) continue\n if (rest.length || !node.id) continue\n const checked = validateViewAnswer(card.view, node.id, values)\n if (checked.error === undefined && answerText(card, node.id, checked) === text) {\n candidates.push({ id: card.id, action: node.id, values: checked })\n }\n }\n return candidates.length === 1 ? candidates[0] : null\n}\n","import { checkShownView, validateViewAnswer } from './core/index.js'\nimport { isRecord, VIEW_OWNER, type ViewAnswer, type ViewNode } from './contracts.ts'\nimport type { ReplySnapshot, ToolViewBlock } from './runtime.ts'\nimport { legacyAnswer } from './answer-text.ts'\n\n/** Read visible, durable user/steering messages only, including inherited history. */\nexport function replyAnswers(snapshot: ReplySnapshot): ReadonlyMap<string, ViewAnswer> {\n const answers = new Map<string, ViewAnswer>()\n let cards: { id: string; title: string; view: ViewNode }[] = []\n const collect = (block: ToolViewBlock) => {\n const meta = block.meta\n if (block.kind === 'tool-result' && !block.isError && isRecord(meta) && meta.owner === VIEW_OWNER && meta.awaitReply === true && typeof meta.viewId === 'string') {\n const shown = checkShownView(meta.title, meta.view)\n if (!('error' in shown)) cards.push({ id: meta.viewId, title: shown.title, view: shown.view })\n }\n for (const child of block.subCalls ?? []) collect(child)\n }\n for (const key of snapshot.order) {\n const node = snapshot.nodes.get(key)\n if (node?.kind === 'tool-call' && node.data?.root) collect(node.data.root)\n if (node?.kind !== 'user' && node?.kind !== 'steering') continue\n const source = node.data?.source\n if (!isRecord(source) || source.kind !== 'user') continue\n // Only the very next human message can answer an old card, and it must\n // match exactly one card. Ambiguous/edited legacy text remains a preview.\n if (source.deepView === undefined) {\n const text = node.data?.content?.filter(isRecord).filter(block => block.type === 'text').map(block => block.text).join('') ?? ''\n const candidates = cards.map(card => legacyAnswer(card, text)).filter((answer): answer is ViewAnswer => answer !== null)\n if (candidates.length === 1 && !answers.has(candidates[0].id)) answers.set(candidates[0].id, candidates[0])\n }\n cards = []\n if (!isRecord(source.deepView)) continue\n const meta = source.deepView\n if (meta.owner !== VIEW_OWNER || meta.version !== 1 || !isRecord(meta.answer)) continue\n const answer = meta.answer\n if (typeof answer.id !== 'string' || typeof answer.action !== 'string' || !isRecord(answer.values)) continue\n // The first accepted reply settles a card; later inputs cannot change it.\n if (!answers.has(answer.id)) answers.set(answer.id, answer as ViewAnswer)\n }\n return answers\n}\n\nexport function checkedAnswer(answer: ViewAnswer | undefined, id: string | undefined, view: ViewNode): ViewAnswer | null {\n if (!answer || !id || answer.id !== id) return null\n const values = validateViewAnswer(view, answer.action, answer.values)\n return values.error === undefined ? { id, action: answer.action, values } : null\n}\n\nexport function sameAnswers(left: ReadonlyMap<string, ViewAnswer>, right: ReadonlyMap<string, ViewAnswer>): boolean {\n return left.size === right.size && [...left].every(([id, answer]) => {\n const next = right.get(id)\n return next === answer || next?.action === answer.action && JSON.stringify(next.values) === JSON.stringify(answer.values)\n })\n}\n","import type { Context } from '@deepseek-ai/cordis'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { MarkdownText, type MarkdownLabels } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { checkShownView } from './core/index.js'\nimport { PLUGIN_NAME, RPC_CHANNEL, VIEW_OWNER, isRecord, type PendingView, type RpcResult, type ShownView, type ViewPresentation } from './contracts.ts'\nimport type { ToolViewProps, ToolArgsView, ReplyViewProps, ReplySnapshot } from './runtime.ts'\nimport { WidgetCard, type Answer } from './widget.tsx'\nimport { viewStyles } from './styles.ts'\nimport { checkedAnswer, replyAnswers, sameAnswers } from './answers.ts'\n\nexport const name = 'dsh-deep-view-client'\nexport const inject = ['slots', 'connection', 'locale'] as const\nexport const LOCALE = 'deep-view'\n\nexport const uiZh = {\n copy: '复制', copied: '已复制', footnotes: '脚注', code: '代码', wrap: '自动换行', unwrap: '不换行',\n prepared: '卡片将在最终回复中显示', preparing: '正在准备视图…', error: '视图未能显示', invalid: '视图数据无效',\n local: '仅本地预览;此卡片不会发送回答。', answerFailed: '回答未能发送,请重试。',\n chart: '图表', chartOptions: '图表选项', viewAsChart: '查看图表', viewAsTable: '查看表格', copyData: '复制数据',\n chartNumber: '图表 {n}', value: '值', series: '系列', view: '视图', sources: '来源', progress: '进度', yourAnswer: '你的回答',\n options: '选项', submit: '提交', cancel: '取消', confirm: '确认', send: '发送', selected: '已选择',\n}\nexport const uiEn: Record<keyof typeof uiZh, string> = {\n copy: 'Copy', copied: 'Copied', footnotes: 'Footnotes', code: 'Code', wrap: 'Wrap lines', unwrap: 'Do not wrap lines',\n prepared: 'The card will appear in the final reply', preparing: 'Preparing view…', error: 'The view could not be shown', invalid: 'Invalid view data',\n local: 'Local preview only; this card does not send an answer.', answerFailed: 'The answer could not be sent; try again.',\n chart: 'Chart', chartOptions: 'Chart options', viewAsChart: 'View as chart', viewAsTable: 'View as table', copyData: 'Copy data',\n chartNumber: 'Chart {n}', value: 'Value', series: 'Series', view: 'View', sources: 'Sources', progress: 'Progress', yourAnswer: 'Your answer',\n options: 'Options', submit: 'Submit', cancel: 'Cancel', confirm: 'Confirm', send: 'Send', selected: 'Selected',\n}\ntype UiKey = keyof typeof uiZh\nexport type UiT = (key: UiKey, params?: Record<string, unknown>) => string\nconst viewT = (t: UiT): ((key: string, params?: Record<string, unknown>) => string) => (key, params) => {\n const keys: Record<string, UiKey> = {\n Copy: 'copy', Copied: 'copied', Footnotes: 'footnotes', Chart: 'chart', 'Chart options': 'chartOptions',\n 'View as chart': 'viewAsChart', 'View as table': 'viewAsTable', 'Copy data': 'copyData', 'Chart {n}': 'chartNumber',\n Value: 'value', Series: 'series', View: 'view', Sources: 'sources', Progress: 'progress', 'Your answer': 'yourAnswer',\n 'Local preview only; this card does not send an answer.': 'local',\n Options: 'options', Submit: 'submit', Cancel: 'cancel', Confirm: 'confirm', Send: 'send', Selected: 'selected',\n }\n return keys[key] ? t(keys[key], params) : key.replace(/\\{(\\w+)\\}/g, (_, name) => String(params?.[name] ?? `{${name}}`))\n}\n\n// WidgetCard's Markdown prop is runtime-neutral (labels: unknown); adapt the\n// official component once here instead of weakening the widget contract.\nfunction ViewMarkdown(props: Parameters<typeof MarkdownText>[0]) {\n return <MarkdownText {...props} />\n}\nexport function useMarkdownLabels(t: UiT): MarkdownLabels {\n return useMemo(() => ({ code: { copyLabel: t('copy'), copiedLabel: t('copied'), toolbarLabels: { codeLabel: t('code'), wrapLabel: t('wrap'), unwrapLabel: t('unwrap') } }, footnotes: t('footnotes') }), [t])\n}\n\n// 'tool.call.toolview' owner contract (dsh-client-ui-tool 0.2.2 slots.d.ts):\n// phase 'preparing'|'start' carry a call block whose args is a lazy\n// PartialArguments view; 'result' carries a ToolResultNode whose `meta` is the\n// persisted output.presentationMeta and whose args may be empty when the call\n// left the loaded window.\nfunction isArgsView(value: unknown): value is ToolArgsView {\n return isRecord(value) && typeof value.text === 'function' && typeof value.value === 'function'\n}\nfunction argField(args: ToolArgsView | undefined, key: string): unknown {\n if (!isArgsView(args)) return undefined\n const value = args.value(key)\n return value !== undefined ? value : args.text(key)\n}\nexport function readToolCall(props: Pick<ToolViewProps, 'phase' | 'block'>): { presentation?: ViewPresentation; title: unknown; view: unknown; viewReady: boolean; phase: string; isError: boolean } {\n const block = props.block\n const phase = props.phase ?? (block.kind === 'tool-result' ? 'result' : 'start')\n const isError = phase === 'result' && block.isError === true\n const meta = phase === 'result' ? block.meta : undefined\n if (isRecord(meta) && meta.owner === VIEW_OWNER) {\n const shown = checkShownView(meta.title, meta.view) as ShownView | { error: string }\n if ('error' in shown) return { title: meta.title, view: meta.view, viewReady: true, phase, isError: true }\n return { presentation: { owner: VIEW_OWNER, ...shown, ...(typeof meta.viewId === 'string' ? { viewId: meta.viewId } : {}), awaitReply: meta.awaitReply === true }, title: meta.title, view: meta.view, viewReady: true, phase, isError }\n }\n const args = block.args\n const title = argField(args, 'title')\n const viewReady = phase !== 'preparing' || isArgsView(args) && args.complete('view')\n const view = viewReady ? argField(args, 'view') : undefined\n return { title, view, viewReady, phase, isError }\n}\nexport function ToolCallView(props: ToolViewProps & { restoredAnswer?: Answer; call(endpoint: string, payload: unknown): Promise<unknown> }) {\n const t = props.t as UiT\n const labels = useMarkdownLabels(t)\n const read = useMemo(() => readToolCall(props), [props.block, props.phase])\n const shown = useMemo(() => {\n if (read.presentation) return read.presentation\n if (!read.viewReady || read.phase === 'preparing') return undefined\n const checked = checkShownView(read.title, read.view) as ShownView | { error: string }\n return 'error' in checked ? undefined : { ...checked, awaitReply: checked.interactive }\n }, [read.presentation, read.viewReady, read.phase, read.title, read.view])\n const [pending, setPending] = useState<PendingView | null>(null)\n const [busy, setBusy] = useState(false)\n const [failed, setFailed] = useState(false)\n const [localAnswer, setAnswer] = useState<Answer | null>(null)\n const restored = useMemo(() => shown\n ? checkedAnswer(props.restoredAnswer, read.presentation?.viewId, shown.view) : null,\n [props.restoredAnswer, read.presentation?.viewId, shown])\n const answer = restored ?? localAnswer\n const sequence = useRef(0)\n const callId = props.callId\n useEffect(() => {\n const seq = ++sequence.current\n setPending(null)\n setFailed(false)\n if (restored || !read.presentation?.awaitReply || !callId) return\n void props.call('pending', { sessionId: props.sessionId, callId }).then(result => {\n if (sequence.current !== seq) return\n const envelope = result as RpcResult<PendingView | null> | undefined\n if (envelope?.ok) setPending(envelope.value)\n }).catch(() => {})\n return () => { sequence.current += 1 }\n }, [props.call, props.sessionId, callId, read.presentation?.awaitReply, read.presentation?.viewId, restored])\n const submit = useCallback((action: string, values: Record<string, unknown>) => {\n if (!pending || busy) return\n setBusy(true)\n setFailed(false)\n void props.call('reply', { sessionId: props.sessionId, viewId: pending.id, action, values }).then(result => {\n const envelope = result as RpcResult | undefined\n if (envelope?.ok) { setAnswer({ id: pending.id, action, values }); setPending(null) }\n else setFailed(true)\n }).catch(() => setFailed(true)).finally(() => setBusy(false))\n }, [props.call, props.sessionId, pending, busy])\n if (read.phase === 'preparing') return <div className=\"dvui-root dvui-tool-loading\" role=\"status\">{t('preparing')}</div>\n if (read.isError || !shown) {\n // A settled error or a call without a valid view argument renders the\n // honest fallback; an in-flight call still argues a loading state.\n if (read.phase !== 'result' && !read.isError) return <div className=\"dvui-root dvui-tool-loading\" role=\"status\">{t('preparing')}</div>\n return <div className=\"dvui-root dvui-tool-error\" role=\"status\">{t(read.isError ? 'error' : 'invalid')}</div>\n }\n const canAnswer = shown.awaitReply && pending !== null && answer === null\n return <div className=\"dvui-root\"><WidgetCard title={shown.title} view={shown.view} onSubmit={canAnswer ? submit : undefined} busy={busy} settled={answer !== null || !canAnswer} answer={answer} t={viewT(t)} labels={labels} Markdown={ViewMarkdown} localOnly={answer === null && !canAnswer && shown.interactive} />{failed ? <p className=\"dvui-tool-error\" role=\"alert\">{t('answerFailed')}</p> : null}</div>\n}\n\n/** Collect only this turn's successfully persisted cards, including PTC children.\n * The turn index also covers hidden process rows; no all-history scan or DOM\n * relocation is needed. Result metadata works even when arguments were evicted.\n */\nexport function replyCards(snapshot: ReplySnapshot, turn: number): ToolViewProps['block'][] {\n const cards: ToolViewProps['block'][] = []\n const seen = new Set<string>()\n const visit = (block: ToolViewProps['block']) => {\n if (block.kind === 'tool-result' && !block.isError && !seen.has(block.callId)\n && isRecord(block.meta) && block.meta.owner === VIEW_OWNER) {\n const read = readToolCall({ phase: 'result', block })\n if (read.presentation && !read.isError) { seen.add(block.callId); cards.push(block) }\n }\n for (const child of block.subCalls ?? []) visit(child)\n }\n for (const key of snapshot.locations.getTurn(turn)) {\n const node = snapshot.nodes.get(key)\n if (node?.kind === 'tool-call' && node.data?.root) visit(node.data.root)\n }\n return cards\n}\n\nconst sameCards = (left: ToolViewProps['block'][], right: ToolViewProps['block'][]) =>\n left.length === right.length && left.every((block, index) => block === right[index])\n\n/** Native completed-turn surface: always outside the process disclosure. */\nexport function ReplyView(props: ReplyViewProps) {\n const cards = props.useChat(snapshot => replyCards(snapshot, props.turn.turn), sameCards)\n const answers = props.useChat(replyAnswers, sameAnswers)\n if (props.turn.status !== 'closed' || cards.length === 0) return null\n return <div className=\"dvui-root\" data-deep-view-reply>{cards.map(block =>\n <ToolCallView key={`${props.sessionId}:${block.callId}`} sessionId={props.sessionId} callId={block.callId}\n phase=\"result\" block={block} t={props.t} call={props.call}\n restoredAnswer={isRecord(block.meta) && typeof block.meta.viewId === 'string' ? answers.get(block.meta.viewId) : undefined} />)}</div>\n}\n\n/** Tool activity contains status only, never the user's interactive card. */\nexport function ToolCallStatus(props: ToolViewProps) {\n const read = readToolCall(props)\n return <div className=\"dvui-root\" role=\"status\">{props.t(read.isError ? 'error'\n : read.phase === 'result' && !read.presentation ? 'invalid'\n : read.phase === 'result' ? 'prepared' : 'preparing')}</div>\n}\n\ntype Client = Context & {\n connection: { rpc: { call(channel: string, endpoint: string, payload: unknown): Promise<unknown> } }\n slots: {\n inject(key: string, callback: () => unknown): () => void\n register(spec: Record<string, unknown>, render: unknown): () => void\n }\n locale: { register(namespace: string, dictionaries: { zh: Record<string, string>; en: Record<string, string> }): () => void }\n}\nexport function apply(ctx: Context): void {\n const client = ctx as unknown as Client\n ctx.effect(() => client.locale.register(LOCALE, { zh: { ...uiZh }, en: { ...uiEn } }), 'deep-view.locale')\n ctx.effect(() => {\n if (typeof document === 'undefined') return () => {}\n const style = document.createElement('style')\n style.setAttribute('data-plugin', PLUGIN_NAME)\n style.textContent = viewStyles\n document.head.appendChild(style)\n return () => style.remove()\n }, 'deep-view.styles')\n ctx.effect(() => client.slots.inject('tool.call.toolview', () => client.slots.register({\n name: 'tool.call.toolview', key: 'show_view', locale: LOCALE,\n }, ToolCallStatus)), 'deep-view.tool')\n ctx.effect(() => client.slots.inject('conversation.chat.turnTail', () => client.slots.register({\n name: 'conversation.chat.turnTail', id: 'deep-view', order: 20, locale: LOCALE,\n inject: () => ({ call: (endpoint: string, payload: unknown) => client.connection.rpc.call(RPC_CHANNEL, endpoint, payload) }),\n }, ReplyView)), 'deep-view.reply')\n}\n"],"mappings":";;;;;AAKA,MAAM,YAAY;CAChB,KAAK;EAAE,MAAM,CAAC,GAAG,QAAQ;EAAG,MAAM,GAAG,WAAW,KAAK,IAAI,GAAG,OAAO,IAAI,GAAG,CAAC;CAAE;CAC7E,KAAK;EAAE,MAAM,CAAC,GAAG,QAAQ;EAAG,MAAM,GAAG,WAAW,KAAK,IAAI,GAAG,OAAO,IAAI,GAAG,CAAC;CAAE;CAC7E,KAAK;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAK,UAAS,KAAK,IAAI,IAAI,KAAK,CAAC;CAAE;CACxD,OAAO;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAK,UAAS,KAAK,MAAM,IAAI,KAAK,CAAC;CAAE;CAC5D,MAAM;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAK,UAAS,KAAK,KAAK,IAAI,KAAK,CAAC;CAAE;CAC1D,MAAM;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAK,UAAS,KAAK,KAAK,IAAI,KAAK,CAAC;CAAE;CAC1D,KAAK;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,MAAM,UAAU,IAAI,IAAI,KAAK,IAAI,KAAK;CAAE;CACnE,OAAO;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,OAAO,SAAS,MAAM,QAAQ,IAAI,KAAK,GAAG,SAAS,MAAM,CAAC;CAAE;CACzF,OAAO;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,OAAO,KAAK,SAAS,KAAK,IAAI,KAAK,IAAI,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC;CAAE;CACtG,OAAO;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,OAAO,SAAS,MAAM,QAAQ,IAAI,KAAK,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,QAAQ,SAAS,MAAM,CAAC;CAAE;CACnH,QAAQ;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,OAAO,SAAS,MAAMA,UAAQ,IAAI,KAAK,GAAG,SAAS,MAAM,CAAC;CAAE;CAC1F,SAAS;EAAE,MAAM,CAAC,GAAG,CAAC;EAAG,MAAM,OAAO,SAAS,MAAM,GAAGA,UAAQ,IAAI,KAAK,IAAI,KAAK,SAAS,MAAM,CAAC,EAAE;CAAG;AACzG;AACA,MAAa,oBAAoB,OAAO,KAAK,SAAS;AACtD,MAAM,4BAAY,IAAI,IAAI,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,SAAS,KAAK,CAAC,CAAC;AAE5D,MAAM,cAAc;AAEpB,IAAM,eAAN,cAA2B,MAAM,CAAC;AAClC,MAAM,QAAQ,YAAY;CAAE,MAAM,IAAI,aAAa,OAAO;AAAE;AAE5D,SAAS,IAAI,OAAO;CAClB,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,IAAI,OAAO,UAAU,WAAW,OAAO,QAAQ,IAAI;CACnD,MAAM,SAAS,OAAO,KAAK;CAC3B,IAAI,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,MAAM,CAAC,OAAO,MAAM,MAAM,GAAG,OAAO;CACtF,OAAO,KAAK,GAAG,KAAK,UAAU,KAAK,EAAE,iBAAiB;AACxD;AACA,MAAM,YAAY,WAAW;CAC3B,MAAM,QAAQ,IAAI,MAAM;CACxB,IAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,IAAI,KAAK,4CAA4C;CAC1G,OAAO;AACT;AACA,MAAM,WAAW,OAAO,WAAW;CACjC,MAAM,QAAQ,MAAM;CACpB,OAAO,KAAK,MAAM,QAAQ,KAAK,IAAI;AACrC;AACA,SAASA,UAAQ,OAAO,QAAQ;CAC9B,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO,OAAO,KAAK;CAChD,MAAM,CAAC,OAAO,QAAQ,KAAK,IAAI,QAAQ,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,MAAM,GAAG;CAEhF,OAAO,GADM,QAAQ,KAAK,OAAO,SAAS,QAAQ,GAAG,MAAM,IAAI,MAAM,KACpD,MAAM,QAAQ,yBAAyB,GAAG,IAAI,OAAO,IAAI,SAAS;AACrF;AAKA,MAAM,QAAQ;AACd,MAAa,UAAS,UAAS,OAAO,UAAU,YAAY,MAAM,KAAK,KAAK;AAC5E,MAAM,YAAY;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;CAAM;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;CAAK;AAAG;AAEtH,SAAS,SAAS,QAAQ;CACxB,MAAM,SAAS,CAAC;CAChB,IAAI,KAAK;CACT,OAAO,KAAK,OAAO,QAAQ;EACzB,MAAM,OAAO,OAAO;EACpB,IAAI,KAAK,KAAK,IAAI,GAAG;GAAE,MAAM;GAAG;EAAS;EACzC,MAAM,SAAS,wCAAwC,KAAK,OAAO,MAAM,EAAE,CAAC;EAC5E,IAAI,QAAQ;GAAE,OAAO,KAAK;IAAE,MAAM;IAAU,OAAO,OAAO,OAAO,EAAE;IAAG;GAAG,CAAC;GAAG,MAAM,OAAO,EAAE,CAAC;GAAQ;EAAS;EAC9G,MAAM,OAAO,0BAA0B,KAAK,OAAO,MAAM,EAAE,CAAC;EAC5D,IAAI,MAAM;GAAE,OAAO,KAAK;IAAE,MAAM;IAAQ,OAAO,KAAK;IAAI;GAAG,CAAC;GAAG,MAAM,KAAK,EAAE,CAAC;GAAQ;EAAS;EAC9F,IAAI,SAAS,QAAO,SAAS,KAAM;GACjC,IAAI,MAAM,KAAK;GACf,IAAI,OAAO;GACX,OAAO,MAAM,OAAO,UAAU,OAAO,SAAS,MAAM;IAClD,IAAI,OAAO,SAAS,QAAQ,MAAM,IAAI,OAAO,QAAQ;KAAE,QAAQ,OAAO,MAAM;KAAI,OAAO;KAAG;IAAS;IACnG,QAAQ,OAAO;IACf,OAAO;GACT;GACA,IAAI,OAAO,OAAO,QAAQ,KAAK,sBAAsB,KAAK,GAAG;GAC7D,OAAO,KAAK;IAAE,MAAM;IAAU,OAAO;IAAM;GAAG,CAAC;GAC/C,KAAK,MAAM;GACX;EACF;EACA,MAAM,WAAW,UAAU,MAAK,OAAM,OAAO,WAAW,IAAI,EAAE,CAAC;EAC/D,IAAI,aAAa,KAAA,GAAW,KAAK,cAAc,KAAK,UAAU,IAAI,EAAE,MAAM,KAAK,GAAG;EAClF,OAAO,KAAK;GAAE,MAAM;GAAM,OAAO;GAAU;EAAG,CAAC;EAC/C,MAAM,SAAS;CACjB;CACA,OAAO;AACT;AAEA,MAAM,SAAS;CAAC,CAAC,IAAI;CAAG,CAAC,IAAI;CAAG,CAAC,MAAM,IAAI;CAAG;EAAC;EAAK;EAAM;EAAK;CAAI;CAAG,CAAC,KAAK,GAAG;CAAG;EAAC;EAAK;EAAK;CAAG;AAAC;AAEjG,SAAS,MAAM,QAAQ;CACrB,MAAM,SAAS,SAAS,MAAM;CAC9B,IAAI,QAAQ;CACZ,IAAI,QAAQ;CACZ,MAAM,aAAa,OAAO;CAC1B,MAAM,QAAO,UAAS,KAAK,CAAC,EAAE,SAAS,QAAQ,KAAK,CAAC,CAAC,UAAU;CAChE,MAAM,UAAU,UAAU;EACxB,IAAI,CAAC,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,aAAa,MAAM,OAAO,KAAK,CAAC,CAAC,KAAK,MAAM,aAAa,MAAM,aAAa;EAC5G,SAAS;CACX;CACA,MAAM,QAAQ,SAAS;EACrB,SAAS;EACT,IAAI,QAAQ,aAAa,KAAK,oBAAoB,YAAY,QAAQ;EACtE,MAAM,OAAO,KAAK;EAClB,SAAS;EACT,OAAO;CACT;CACA,MAAM,gBAAgB,WAAW;EAC/B,MAAM,OAAO,OAAO,CAAC;EACrB,IAAI,CAAC,KAAK,GAAG,GAAG,OAAO;EACvB,SAAS;EACT,MAAM,MAAM,QAAQ;EACpB,OAAO,GAAG;EACV,OAAO;GAAE,MAAM;GAAM;GAAM;GAAK,IAAI,QAAQ;EAAE;CAChD,CAAC;CACD,MAAM,UAAU,UAAU;EACxB,IAAI,UAAU,OAAO,QAAQ,OAAO,MAAM;EAC1C,IAAI,OAAO,OAAO,QAAQ,CAAC;EAC3B,OAAO,KAAK,CAAC,EAAE,SAAS,QAAQ,OAAO,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,KAAK,GAAG;GACpE,MAAM,KAAK,KAAK,CAAC,CAAC;GAClB,SAAS;GACT,OAAO;IAAE,MAAM;IAAU;IAAI;IAAM,OAAO,OAAO,QAAQ,CAAC;GAAE;EAC9D;EACA,OAAO;CACT;CACA,MAAM,cAAc;EAClB,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,GAAG;GACvC,MAAM,KAAK,KAAK,CAAC,CAAC;GAClB,SAAS;GACT,OAAO,YAAY;IAAE,MAAM;IAAS;IAAI,OAAO,MAAM;GAAE,EAAE;EAC3D;EACA,OAAO,QAAQ;CACjB;CACA,MAAM,gBAAgB;EACpB,MAAM,QAAQ,KAAK;EACnB,IAAI,UAAU,KAAA,GAAW,KAAK,4BAA4B;EAC1D,SAAS;EACT,IAAI,MAAM,SAAS,YAAY,MAAM,SAAS,UAAU,OAAO;GAAE,MAAM;GAAS,OAAO,MAAM;EAAM;EACnG,IAAI,MAAM,SAAS,QAAQ,MAAM,UAAU,KAAK;GAC9C,MAAM,QAAQ,QAAQ;GACtB,OAAO,GAAG;GACV,OAAO;EACT;EACA,IAAI,MAAM,SAAS,QAAQ,KAAK,eAAe,MAAM,MAAM,OAAO,MAAM,KAAK,GAAG;EAChF,IAAI,CAAC,KAAK,GAAG,GAAG,OAAO,UAAU,IAAI,MAAM,KAAK,IAAI;GAAE,MAAM;GAAS,OAAO,UAAU,IAAI,MAAM,KAAK;EAAE,IAAI;GAAE,MAAM;GAAQ,MAAM,MAAM;EAAM;EAC7I,MAAM,KAAK,OAAO,OAAO,WAAW,MAAM,KAAK,IAAI,UAAU,MAAM,SAAS,KAAA;EAC5E,IAAI,OAAO,KAAA,GAAW,KAAK,qBAAqB,MAAM,MAAM,cAAc,kBAAkB,KAAK,IAAI,GAAG;EACxG,SAAS;EACT,MAAM,OAAO,CAAC;EACd,IAAI,CAAC,KAAK,GAAG,GAAG;GACd,KAAK,KAAK,QAAQ,CAAC;GACnB,OAAO,KAAK,GAAG,GAAG;IAAE,SAAS;IAAG,KAAK,KAAK,QAAQ,CAAC;GAAE;EACvD;EACA,OAAO,GAAG;EACV,IAAI,KAAK,SAAS,GAAG,KAAK,MAAM,KAAK,SAAS,GAAG,KAAK,IACpD,KAAK,GAAG,MAAM,MAAM,WAAW,GAAG,KAAK,OAAO,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,OAAO,WAAW,YAAY,GAAG,KAAK,OAAO,GAAG,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,KAAK,WAAW,GAAG,KAAK,OAAO,IAAI,KAAK,IAAI,QAAQ,KAAK,QAAQ;EAE5N,OAAO;GAAE,MAAM;GAAQ,MAAM,MAAM;GAAO;EAAK;CACjD;CACA,IAAI,OAAO,WAAW,GAAG,KAAK,sBAAsB;CACpD,MAAM,OAAO,QAAQ;CACrB,IAAI,QAAQ,OAAO,QAAQ,KAAK,eAAe,KAAK,CAAC,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,KAAK,GAAG;CAClF,OAAO;AACT;AAEA,SAAS,QAAQ,MAAM,wBAAQ,IAAI,IAAI,GAAG;CACxC,IAAI,KAAK,SAAS,QAAQ,MAAM,IAAI,KAAK,IAAI;MACxC,IAAI,KAAK,SAAS,SAAS,QAAQ,KAAK,OAAO,KAAK;MACpD,IAAI,KAAK,SAAS,UAAU;EAAE,QAAQ,KAAK,MAAM,KAAK;EAAG,QAAQ,KAAK,OAAO,KAAK;CAAE,OACpF,IAAI,KAAK,SAAS,MAAM;EAAE,QAAQ,KAAK,MAAM,KAAK;EAAG,QAAQ,KAAK,KAAK,KAAK;EAAG,QAAQ,KAAK,IAAI,KAAK;CAAE,OACvG,IAAI,KAAK,SAAS,QAAQ,KAAK,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,KAAK;CAC9E,OAAO;AACT;AAGA,SAAgB,eAAe,QAAQ;CACrC,IAAI,OAAO,WAAW,UAAU,OAAO,EAAE,OAAO,4BAA4B;CAC5E,IAAI;EACF,MAAM,OAAO,MAAM,MAAM;EACzB,OAAO;GAAE;GAAM,OAAO,CAAC,GAAG,QAAQ,IAAI,CAAC;EAAE;CAC3C,SAAS,OAAO;EACd,IAAI,iBAAiB,cAAc,OAAO,EAAE,OAAO,MAAM,QAAQ;EACjE,MAAM;CACR;AACF;AAKA,SAAS,IAAI,MAAM,QAAQ;CACzB,QAAQ,KAAK,MAAb;EACE,KAAK,SAAS,OAAO,KAAK;EAC1B,KAAK,QAAQ,OAAO,OAAO,KAAK,IAAI;EACpC,KAAK,SAAS;GACZ,MAAM,QAAQ,IAAI,KAAK,OAAO,MAAM;GACpC,IAAI,KAAK,OAAO,KAAK,OAAO,CAAC,OAAO,KAAK;GACzC,OAAO,KAAK,OAAO,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,KAAK;EAClD;EACA,KAAK,MAAM,OAAO,OAAO,IAAI,KAAK,MAAM,MAAM,CAAC,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,MAAM;EAC9F,KAAK,QAAQ,OAAO,UAAU,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,KAAK,KAAI,QAAO,IAAI,KAAK,MAAM,CAAC,CAAC;EACtF,SAAS,OAAO,OAAO,MAAM,MAAM;CACrC;AACF;AACA,MAAM,UAAS,UAAU,OAAO,UAAU,WAAW,UAAU,KAAK,QAAQ,KAAK;AAEjF,SAAS,OAAO,MAAM,QAAQ;CAC5B,IAAI,KAAK,OAAO,MAAM,OAAO,OAAO,IAAI,KAAK,MAAM,MAAM,CAAC,IAAI,IAAI,KAAK,OAAO,MAAM,IAAI;CACxF,IAAI,KAAK,OAAO,MAAM;EAAE,MAAM,OAAO,IAAI,KAAK,MAAM,MAAM;EAAG,OAAO,OAAO,IAAI,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM;CAAE;CAClH,MAAM,OAAO,IAAI,KAAK,MAAM,MAAM;CAClC,MAAM,QAAQ,IAAI,KAAK,OAAO,MAAM;CACpC,QAAQ,KAAK,IAAb;EACE,KAAK,KAAK,OAAO,OAAO,SAAS,YAAY,OAAO,UAAU,WAAW,GAAG,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI,KAAK;EAC9H,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,KAAK,MAAM,OAAO,SAAS;EAC3B,KAAK,MAAM,OAAO,SAAS;EAC3B,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,KAAK,MAAM,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK;EACxC,KAAK,KAAK,OAAO,IAAI,IAAI,IAAI,IAAI,KAAK;EACtC,SAAS,OAAO,IAAI,IAAI,KAAK,IAAI,KAAK;CACxC;AACF;AAGA,SAAgB,KAAK,OAAO;CAC1B,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,SAAS,KAAK,IAAI,OAAO,OAAO,MAAM,YAAY,EAAE,CAAC,CAAC,IAAI,OAAO,KAAK;CACnH,OAAO,OAAO,KAAK;AACrB;AAIA,SAAgB,YAAY,QAAQ,MAAM;CACxC,MAAM,uBAAO,IAAI,IAAI;CACrB,MAAM,uBAAO,IAAI,IAAI;CACrB,MAAM,UAAU,SAAS;EACvB,IAAI,OAAO,IAAI,IAAI,GAAG,OAAO,OAAO,IAAI,IAAI;EAC5C,IAAI,KAAK,IAAI,IAAI,GAAG,OAAO,KAAK,IAAI,IAAI;EACxC,MAAM,OAAO,KAAK,IAAI,IAAI;EAC1B,IAAI,SAAS,KAAA,GAAW,KAAK,iBAAiB,KAAK,EAAE;EACrD,IAAI,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,mBAAmB;EACrD,KAAK,IAAI,IAAI;EACb,IAAI;GACF,MAAM,QAAQ,IAAI,MAAM,MAAM;GAC9B,KAAK,IAAI,MAAM,KAAK;GACpB,OAAO;EACT,UAAU;GAAE,KAAK,OAAO,IAAI;EAAE;CAChC;CACA,OAAO;AACT;AAGA,SAAgB,SAAS,MAAM,QAAQ;CACrC,IAAI;EACF,OAAO,EAAE,OAAO,IAAI,MAAM,MAAM,EAAE;CACpC,SAAS,OAAO;EACd,IAAI,iBAAiB,cAAc,OAAO,EAAE,OAAO,MAAM,QAAQ;EACjE,IAAI,iBAAiB,YAAY,OAAO,EAAE,OAAO,sCAAsC;EACvF,MAAM;CACR;AACF;;;AC7PA,MAAM,SAAS,CAAC,SAAS,KAAK;AAC9B,MAAM,UAAU;CAAC;CAAQ;CAAU;CAAS;CAAS;CAAY;CAAW;AAAS;AACrF,MAAM,cAAc;CAAC;CAAU;CAAU;CAAU;AAAQ;AAC3D,MAAM,UAAU;CAAC;CAAW;CAAW;CAAQ;AAAQ;AACvD,MAAM,aAAa;CAAC,GAAG;CAAQ,GAAG;CAAS,GAAG;CAAa,GAAG;AAAO;AACrE,MAAMC,UAAQ;CAAC;CAAQ;CAAQ;AAAK;AACpC,MAAM,aAAa,CAAC,OAAO;AAC3B,MAAMC,kBAAgB;CAAC;CAAQ;CAAQ;CAAQ;AAAK;AACpD,MAAa,cAAc;CAAC;CAAO;CAAQ;CAAQ;CAAQ;AAAO;AAClE,MAAM,cAAc,IAAI,IAAI,OAAO;AACnC,MAAM,SAAS,IAAI,IAAI,WAAW;AAClC,MAAM,QAAQ;CACZ,OAAO,CAAC,YAAY,KAAK;CACzB,KAAK,CAAC,YAAY,KAAK;CACvB,MAAM,CAAC,QAAQ,MAAM;CACrB,QAAQ;EAAC;EAAS;EAAS;EAAQ;CAAS;CAC5C,OAAO,CAAC,WAAW,MAAM;CACzB,OAAO;EAAC;EAAQ;EAAc;EAAU;EAAQ;CAAS;CACzD,UAAU;EAAC;EAAS;EAAW;EAAS;EAAO;EAAc;CAAM;CACnE,SAAS,CAAC,QAAQ,MAAM;CACxB,SAAS,CAAC,OAAO;CACjB,QAAQ;EAAC;EAAM;EAAS;EAAO;EAAO;EAAQ;EAAS;CAAM;CAC7D,QAAQ;EAAC;EAAM;EAAS;EAAW;CAAO;CAC1C,QAAQ;EAAC;EAAM;EAAS;CAAO;CAC/B,QAAQ;EAAC;EAAM;EAAS;EAAO;EAAO;EAAQ;EAAS;CAAM;CAC7D,SAAS;EAAC;EAAM;EAAW;CAAO;CAClC,SAAS;EAAC;EAAM;EAAgB;CAAa;CAC7C,MAAM;EAAC;EAAM;EAAU;CAAa;CACpC,QAAQ,CAAC,MAAM,OAAO;AACxB;AACA,MAAM,YAAY;AAClB,MAAM,YAAY;AAClB,MAAM,eAAe;AACrB,MAAM,WAAW;AACjB,MAAM,WAAW;AACjB,MAAM,cAAc;AACpB,MAAM,WAAW;AACjB,MAAM,cAAc;AACpB,MAAM,aAAa;AAGnB,MAAM,2BAAW,IAAI,IAAI,CAAC,QAAQ,OAAO,CAAC;AAI1C,MAAa,kBAAkB;AAE/B,MAAMC,cAAW,UAAS,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC7F,MAAM,UAAS,UAAS,KAAK,UAAU,KAAK;AAC5C,MAAM,WAAU,SAAQ,KAAK,KAAK,IAAI;AACtC,MAAM,YAAW,UAAS,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAC5E,MAAM,YAAW,UAAS,OAAO,UAAU,YAAY,OAAO,UAAU,aAAa,SAAS,KAAK;AAGnG,MAAa,aAAY,UAASA,WAAS,KAAK,KAAK,OAAO,KAAK,KAAK,CAAC,CAAC,WAAW,KAAK,OAAO,OAAO,OAAO,GAAG;AAEhH,SAAgB,UAAU,OAAO,MAAM;CACrC,OAAO,IAAI,YAAY,CAAC,CAAC,OAAO,GAAG,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC;AACjF;AAEA,MAAM,UAAU;CAAC;CAAS;CAAW;CAAO;CAAO;CAAQ;AAAQ;AACnE,MAAM,WAAU,UAAU,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,MAAM,CAAC,OAAO,MAAM,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,IAAI;AAO7H,SAAgB,cAAc,OAAO;CACnC,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,IAAI,aAAa;CACxD,IAAI,CAACA,WAAS,KAAK,GAAG,OAAO;CAC7B,MAAM,OAAO,OAAO,KAAK,KAAK;CAE9B,IAAI,KAAK,WAAW,KAAK,KAAK,OAAO,QAAQ;EAC3C,MAAM,QAAQ,cAAc,MAAM,IAAI;EACtC,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO;CACnC;CAGA,MAAM,MAAM,CAAC;CACb,KAAK,MAAM,OAAO,MAAM,OAAO,eAAe,KAAK,KAAK;EAAE,OAAO,cAAc,MAAM,IAAI;EAAG,UAAU;EAAM,YAAY;EAAM,cAAc;CAAK,CAAC;CAClJ,KAAK,MAAM,SAAS,SAAS,IAAI,OAAO,OAAO,KAAK,KAAK,GAAG,IAAI,SAAS,QAAQ,IAAI,MAAM;CAC3F,IAAI,MAAM,QAAQ,IAAI,MAAM,GAAG,IAAI,SAAS,IAAI,OAAO,IAAI,OAAO;CAClE,OAAO;AACT;AAEA,SAAgB,aAAa,MAAM;CACjC,MAAM,MAAM;EAAE,qBAAK,IAAI,IAAI;EAAG,OAAO;EAAG,aAAa;EAAO,wBAAQ,IAAI,IAAI;EAAG,sBAAM,IAAI,IAAI;EAAG,UAAU,CAAC;CAAE;CAC7G,MAAM,QAAQ,UAAU,MAAM,QAAQ,GAAG,GAAG,KAAK,cAAc,GAAG;CAClE,OAAO,UAAU,KAAA,IAAY;EAAE,IAAI;EAAM,aAAa,IAAI;CAAY,IAAI;EAAE,IAAI;EAAO;CAAM;AAC/F;AAMA,SAAgB,eAAe,OAAO,MAAM;CAC1C,IAAI;CACJ,IAAI;EAAE,QAAQ,UAAU,OAAO,IAAI;CAAE,QAAQ;EAAE,OAAO,EAAE,OAAO,6BAA6B;CAAE;CAC9F,IAAI,QAAA,MAAyB,OAAO,EAAE,OAAO,eAAe,MAAM,uBAAuB,gBAAgB,GAAG;CAC5G,IAAI,UAAU,KAAA,KAAa,UAAU,QAAQ,OAAO,UAAU,UAAU,OAAO,EAAE,OAAO,2BAA2B;CACnH,MAAM,QAAQ,OAAO,SAAS,EAAE,CAAC,CAAC,KAAK;CACvC,MAAM,OAAO,cAAc,IAAI;CAC/B,MAAM,UAAU,aAAa,IAAI;CACjC,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,OAAO,QAAQ,MAAM;CAC/C,OAAO;EAAE,OAAO;EAAO;EAAM,aAAa,QAAQ;CAAY;AAChE;AAEA,SAAS,UAAU,MAAM,MAAM,OAAO,KAAK;CACzC,IAAI,CAACA,WAAS,IAAI,GAAG,OAAO,GAAG,KAAK;CACpC,IAAI,QAAQ,WAAW,OAAO,GAAG,KAAK,IAAI,MAAM,+BAA+B;CAC/E,IAAI,SAAS;CACb,IAAI,IAAI,QAAQ,WAAW,OAAO,GAAG,KAAK,IAAI,IAAI,MAAM,mCAAmC;CAC3F,MAAM,OAAO,KAAK;CAClB,IAAI,CAAC,WAAW,SAAS,IAAI,GAAG,OAAO,GAAG,KAAK,2BAA2B,OAAO,IAAI,EAAE,aAAa,QAAQ,UAAU;CACtH,MAAM,QAAQ,MAAM;CACpB,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAAG;EACnC,IAAI,QAAQ,UAAU,MAAM,SAAS,GAAG,GAAG;EAC3C,OAAO,GAAG,KAAK,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE,aAAa,QAAQ,KAAK;CACnF;CACA,IAAI,YAAY,IAAI,IAAI,GAAG,IAAI,cAAc;CAC7C,QAAQ,MAAR;EACE,KAAK;EAAS,KAAK,OAAO,OAAO,YAAY,MAAM,MAAM,OAAO,GAAG;EACnE,KAAK,QAAQ,OAAO,UAAU,MAAM,MAAM,GAAG;EAC7C,KAAK,UAAU,OAAO,YAAY,MAAM,MAAM,GAAG;EACjD,KAAK,SAAS,OAAO,WAAW,MAAM,MAAM,GAAG;EAC/C,KAAK,SAAS,OAAO,WAAW,MAAM,MAAM,GAAG;EAC/C,KAAK,YAAY,OAAO,cAAc,MAAM,MAAM,GAAG;EACrD,KAAK,WAAW,OAAO,aAAa,MAAM,MAAM,GAAG;EACnD,KAAK,WAAW,OAAO,aAAa,MAAM,IAAI;EAC9C,KAAK;EAAU,KAAK,UAAU,OAAO,iBAAiB,MAAM,MAAM,GAAG;EACrE,KAAK,UAAU,OAAO,YAAY,MAAM,MAAM,GAAG;EACjD,KAAK,UAAU,OAAO,YAAY,MAAM,MAAM,GAAG;EACjD,KAAK,WAAW,OAAO,aAAa,MAAM,MAAM,GAAG;EACnD,KAAK,WAAW,OAAO,aAAa,MAAM,MAAM,GAAG;EACnD,KAAK,QAAQ,OAAO,UAAU,MAAM,MAAM,GAAG;EAC7C,SAAS,OAAO,YAAY,MAAM,MAAM,GAAG;CAC7C;AACF;AAEA,SAAS,YAAY,MAAM,MAAM,OAAO,KAAK;CAC3C,IAAI,KAAK,QAAQ,KAAA,GAAW;EAC1B,IAAI,UAAU,GAAG,OAAO,GAAG,KAAK;EAChC,IAAI,CAACA,WAAS,KAAK,GAAG,GAAG,OAAO,GAAG,KAAK;EACxC,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,KAAK,GAAG,GAAG;GACrD,IAAI,CAAC,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG,OAAO,GAAG,KAAK,OAAO,KAAK;GACpE,IAAI,OAAO,WAAW,UAAU,OAAO,GAAG,KAAK,OAAO,KAAK;GAC3D,IAAI,KAAK,IAAI,MAAM;IAAE;IAAQ,MAAM,GAAG,KAAK,OAAO;GAAO,CAAC;EAC5D;CACF;CACA,IAAI,CAAC,MAAM,QAAQ,KAAK,QAAQ,GAAG,OAAO,GAAG,KAAK,uCAAuC,aAAa;CACtG,IAAI,KAAK,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,cAAc,OAAO,GAAG,KAAK,2BAA2B,aAAa,iBAAiB,KAAK,SAAS;CAC3J,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,SAAS,QAAQ,SAAS,GAAG;EAC5D,MAAM,QAAQ,UAAU,KAAK,SAAS,QAAQ,GAAG,KAAK,YAAY,MAAM,IAAI,QAAQ,GAAG,GAAG;EAC1F,IAAI,UAAU,KAAA,GAAW,OAAO;CAClC;AAEF;AAIA,SAAS,WAAW,MAAM,KAAK,MAAM,KAAK,MAAM,EAAE,WAAW,OAAO,MAAM,aAAa,CAAC,GAAG;CACzF,MAAM,QAAQ,KAAK;CACnB,MAAM,KAAK,GAAG,KAAK,GAAG;CACtB,IAAI,UAAU,KAAA,GAAW,OAAO,WAAW,GAAG,GAAG,IAAI,SAAS,IAAI,MAAM,KAAA;CACxE,IAAI,UAAU,KAAK,GAAG;EACpB,IAAI,SAAS,KAAK;GAAE,QAAQ,MAAM;GAAM,MAAM;GAAI;EAAK,CAAC;EACxD;CACF;CACA,IAAI,SAAS,UAAU,OAAO,SAAS,KAAK,IAAI,KAAA,IAAY,GAAG,GAAG,IAAI,SAAS,IAAI;CACnF,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO,KAAK,SAAS,KAAK,IAAI,KAAA,IAAY,GAAG,GAAG,iBAAiB,OAAO,KAAK,EAAE,aAAa,QAAQ,IAAI;CACjI,IAAI,SAAS,UAAU;EACrB,IAAI,OAAO,UAAU,UAAU,OAAO,GAAG,GAAG,IAAI,SAAS,IAAI;EAC7D,OAAO,MAAM,SAAS,MAAM,GAAG,GAAG,IAAI,MAAM,OAAO,mCAAmC,QAAQ,KAAA;CAChG;CACA,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,GAAG,IAAI,SAAS,IAAI;AAEtD;AACA,MAAM,YAAW,SAAS,SAAS,WAAW,sBAAsB,SAAS,WAAW,sBAAsB,MAAM,QAAQ,IAAI,IAAI,mBAAmB,QAAQ,IAAI,MAAM;AAEzK,SAAS,UAAU,MAAM,MAAM,KAAK;CAClC,OAAO,WAAW,MAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,UAAU,KAAK,CAAC,KAClE,WAAW,MAAM,QAAQ,MAAM,KAAK,UAAU;AACrD;AAEA,SAAS,YAAY,MAAM,MAAM,KAAK;CACpC,IAAI,OAAO,KAAK,UAAU,UAAU,OAAO,GAAG,KAAK;CACnD,IAAI,KAAK,UAAU,KAAA,GAAW,OAAO,GAAG,KAAK;CAC7C,IAAI,OAAO,KAAK,UAAU,YAAY,CAAC,OAAO,SAAS,KAAK,KAAK,GAAG,OAAO,GAAG,KAAK;CACnF,OAAO,WAAW,MAAM,SAAS,MAAM,KAAK,QAAQ,KAC/C,WAAW,MAAM,QAAQ,MAAM,KAAKF,OAAK,KACzC,WAAW,MAAM,WAAW,MAAM,KAAK,QAAQ;AACtD;AAEA,SAAS,WAAW,MAAM,MAAM,KAAK;CACnC,IAAI,CAAC,MAAM,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,KAAK,yCAAyC,YAAY;CACtG,IAAI,KAAK,QAAQ,SAAS,aAAa,OAAO,GAAG,KAAK,YAAY,KAAK,QAAQ,OAAO,gCAAgC;CACtH,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,QAAQ,SAAS,GAAG;EAC3D,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,KAAK,GAAG,KAAK,WAAW,MAAM;EACpC,IAAI,CAACE,WAAS,MAAM,GAAG,OAAO,GAAG,GAAG;EACpC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,IAAI,QAAQ,SAAS,QAAQ,SAAS,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAE7F,IAAI,OAAO,OAAO,QAAQ,YAAY,OAAO,QAAQ,IAAI,OAAO,GAAG,GAAG;EACtE,IAAI,OAAO,OAAO,UAAU,UAAU,OAAO,GAAG,GAAG;CACrD;CACA,IAAI,CAAC,MAAM,QAAQ,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,sCAAsC,SAAS;CAC7F,IAAI,KAAK,KAAK,SAAS,UAAU,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,OAAO,6BAA6B;CACvG,KAAK,IAAI,MAAM,GAAG,MAAM,KAAK,KAAK,QAAQ,OAAO,GAAG;EAClD,MAAM,QAAQ,KAAK,KAAK;EACxB,IAAI,CAAC,MAAM,QAAQ,KAAK,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI;EACtD,KAAK,IAAI,SAAS,GAAG,SAAS,MAAM,QAAQ,UAAU,GAAG;GACvD,MAAM,KAAK,GAAG,KAAK,QAAQ,IAAI,IAAI,OAAO;GAC1C,IAAI,UAAU,MAAM,OAAO,GAAG;IAAE,IAAI,SAAS,KAAK;KAAE,QAAQ,MAAM,OAAO,CAAC;KAAM,MAAM;KAAI,MAAM;IAAS,CAAC;IAAG;GAAS;GACtH,MAAM,OAAOC,WAAS,MAAM,OAAO;GACnC,IAAI,KAAK,SAAS,UAAU,OAAO,GAAG,GAAG,IAAI,KAAK,OAAO,mCAAmC;EAC9F;CACF;AAEF;AAEA,SAAS,WAAW,MAAM,MAAM,KAAK;CACnC,IAAI,KAAK,SAAS,KAAA,KAAa,CAAC,YAAY,SAAS,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,uBAAuB,OAAO,KAAK,IAAI,EAAE,aAAa,QAAQ,WAAW;CACzJ,IAAI,CAAC,MAAM,QAAQ,KAAK,UAAU,KAAK,KAAK,WAAW,WAAW,GAAG,OAAO,GAAG,KAAK;CACpF,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,WAAW,QAAQ,SAAS,GAAG;EAC9D,MAAM,QAAQ,KAAK,WAAW;EAC9B,IAAI,OAAO,UAAU,YAAY,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,KAAK,cAAc,MAAM;CACxF;CACA,IAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,KAAK,KAAK,OAAO,WAAW,GAAG,OAAO,GAAG,KAAK;CAC5E,IAAI,KAAK,SAAS,WAAW,KAAK,OAAO,SAAS,GAAG,OAAO,GAAG,KAAK,yCAAyC,KAAK,OAAO;CACzH,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;EAC1D,MAAM,SAAS,KAAK,OAAO;EAC3B,MAAM,KAAK,GAAG,KAAK,UAAU,MAAM;EACnC,IAAI,CAACD,WAAS,MAAM,GAAG,OAAO,GAAG,GAAG;EACpC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,IAAI,QAAQ,UAAU,QAAQ,UAAU,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAE/F,IAAI,OAAO,SAAS,KAAA,KAAa,OAAO,OAAO,SAAS,UAAU,OAAO,GAAG,GAAG;EAC/E,IAAI,CAAC,MAAM,QAAQ,OAAO,MAAM,GAAG,OAAO,GAAG,GAAG;EAChD,IAAI,OAAO,OAAO,WAAW,KAAK,WAAW,QAAQ,OAAO,GAAG,GAAG,WAAW,OAAO,OAAO,OAAO,cAAc,KAAK,WAAW,OAAO;EACvI,KAAK,IAAI,OAAO,GAAG,OAAO,OAAO,OAAO,QAAQ,QAAQ,GAAG;GACzD,MAAM,QAAQ,OAAO,OAAO;GAC5B,IAAI,UAAU,KAAK,GAAG,IAAI,SAAS,KAAK;IAAE,QAAQ,MAAM;IAAM,MAAM,GAAG,GAAG,UAAU,KAAK;IAAI,MAAM;GAAS,CAAC;QACxG,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,GAAG,UAAU,KAAK;EACzD;CACF;CACA,IAAI,KAAK,SAAS,KAAA,KAAa,OAAO,KAAK,SAAS,UAAU,OAAO,GAAG,KAAK;CAC7E,IAAI,KAAK,YAAY,KAAA,KAAa,OAAO,KAAK,YAAY,UAAU,OAAO,GAAG,KAAK;AAErF;AAEA,SAAS,cAAc,MAAM,MAAM,KAAK;CACtC,IAAI,KAAK,UAAU,KAAA,KAAa,OAAO,KAAK,UAAU,UAAU,OAAO,GAAG,KAAK;CAC/E,IAAK,KAAK,YAAY,KAAA,OAAgB,KAAK,UAAU,KAAA,IAAY,OAAO,GAAG,KAAK;CAChF,IAAI,KAAK,YAAY,KAAA,KAAa,CAAC,UAAU,KAAK,OAAO,GACnD;MAAA,OAAO,KAAK,YAAY,YAAY,CAAC,OAAO,SAAS,KAAK,OAAO,KAAK,KAAK,UAAU,KAAK,KAAK,UAAU,KAAK,OAAO,GAAG,KAAK;CAAA;CAEnI,IAAI,KAAK,UAAU,KAAA,KAAa,KAAK,QAAQ,KAAA,GAAW,OAAO,GAAG,KAAK;CACvE,IAAI,KAAK,UAAU,KAAA,KAAa,KAAK,QAAQ,KAAA,GAAW,OAAO,GAAG,KAAK;CACvE,OAAO,WAAW,MAAM,WAAW,MAAM,KAAK,QAAQ,KACjD,WAAW,MAAM,SAAS,MAAM,KAAK,QAAQ,KAC7C,WAAW,MAAM,OAAO,MAAM,KAAK,QAAQ,KAC3C,WAAW,MAAM,cAAc,MAAM,KAAK,QAAQ,KAClD,WAAW,MAAM,QAAQ,MAAM,KAAKF,OAAK;AAChD;AAEA,SAAS,aAAa,MAAM,MAAM,KAAK;CACrC,OAAO,WAAW,MAAM,QAAQ,MAAM,KAAK,UAAU,EAAE,UAAU,KAAK,CAAC,KAClE,WAAW,MAAM,QAAQ,MAAM,KAAKC,eAAa;AACxD;AAEA,SAAS,aAAa,MAAM,MAAM;CAChC,IAAI,CAAC,MAAM,QAAQ,KAAK,KAAK,KAAK,KAAK,MAAM,WAAW,GAAG,OAAO,GAAG,KAAK;CAC1E,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,MAAM,QAAQ,SAAS,GAAG;EACzD,MAAM,OAAO,KAAK,MAAM;EACxB,MAAM,KAAK,GAAG,KAAK,SAAS,MAAM;EAClC,IAAI,CAACC,WAAS,IAAI,GAAG,OAAO,GAAG,GAAG;EAClC,KAAK,MAAM,OAAO,OAAO,KAAK,IAAI,GAChC,IAAI,QAAQ,WAAW,QAAQ,OAAO,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAE7F,IAAI,OAAO,KAAK,UAAU,YAAY,KAAK,MAAM,KAAK,MAAM,IAAI,OAAO,GAAG,GAAG;EAC7E,IAAI,OAAO,KAAK,QAAQ,YAAY,CAAC,uBAAuB,KAAK,KAAK,GAAG,GAAG,OAAO,GAAG,GAAG;CAC3F;AAEF;AAEA,SAAS,aAAa,MAAM,MAAM,KAAK;CACrC,IAAI,CAAC,OAAO,KAAK,EAAE,KAAK,SAAS,IAAI,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK;CAC9D,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK,oBAAoB,OAAO,KAAK,EAAE;CAC3E,IAAI,IAAI,IAAI,KAAK,EAAE;CACnB,IAAI,OAAO,KAAK,UAAU,UAAU,OAAO,GAAG,KAAK;AAErD;AAEA,SAAS,iBAAiB,MAAM,MAAM,KAAK;CACzC,MAAM,UAAU,aAAa,MAAM,MAAM,GAAG;CAC5C,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,KAAK,MAAM,OAAO;EAAC;EAAO;EAAO;CAAM,GACrC,IAAI,KAAK,SAAS,KAAA,KAAa,CAAC,SAAS,KAAK,IAAI,GAAG,OAAO,GAAG,KAAK,GAAG,IAAI;CAE7E,IAAI,KAAK,SAAS,aAAa,KAAK,QAAQ,KAAA,KAAa,KAAK,QAAQ,KAAA,IAAY,OAAO,GAAG,KAAK;CACjG,IAAI,KAAK,QAAQ,KAAA,KAAa,KAAK,QAAQ,KAAA,KAAa,KAAK,OAAO,KAAK,KAAK,OAAO,GAAG,KAAK,gCAAgC,KAAK,IAAI;CACtI,IAAI,KAAK,SAAS,KAAA,KAAa,KAAK,QAAQ,GAAG,OAAO,GAAG,KAAK;CAC9D,IAAI,CAAC,SAAS,KAAK,KAAK,GAAG,OAAO,GAAG,KAAK;CAC1C,IAAK,KAAK,QAAQ,KAAA,KAAa,KAAK,QAAQ,KAAK,OAAS,KAAK,QAAQ,KAAA,KAAa,KAAK,QAAQ,KAAK,KAAM,OAAO,GAAG,KAAK,iCAAiC,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO;CAC/L,IAAI,KAAK,SAAS,KAAA,KAAa,OAAO,KAAK,SAAS,UAAU,OAAO,GAAG,KAAK;CAC7E,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,KAAK;AAEpC;AAEA,SAAS,YAAY,MAAM,MAAM,KAAK;CACpC,MAAM,UAAU,aAAa,MAAM,MAAM,GAAG;CAC5C,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,CAAC,MAAM,QAAQ,KAAK,OAAO,KAAK,KAAK,QAAQ,WAAW,GAAG,OAAO,GAAG,KAAK;CAC9E,MAAM,yBAAS,IAAI,IAAI;CACvB,MAAM,yBAAS,IAAI,IAAI;CACvB,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,QAAQ,SAAS,GAAG;EAC3D,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,KAAK,GAAG,KAAK,WAAW,MAAM;EACpC,IAAI,CAACA,WAAS,MAAM,GAAG,OAAO,GAAG,GAAG;EACpC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,IAAI,QAAQ,WAAW,QAAQ,SAAS,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAE/F,IAAI,OAAO,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,MAAM,IAAI,OAAO,GAAG,GAAG;EACjF,IAAI,OAAO,IAAI,OAAO,KAAK,GAAG,OAAO,GAAG,GAAG,0BAA0B,OAAO,OAAO,KAAK;EACxF,OAAO,IAAI,OAAO,KAAK;EACvB,MAAM,QAAQ,OAAO,SAAS,OAAO;EACrC,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,GAAG,GAAG;EACnC,IAAI,OAAO,IAAI,KAAK,GAAG,OAAO,GAAG,GAAG,0BAA0B,OAAO,KAAK;EAC1E,OAAO,IAAI,KAAK;CAClB;CACA,MAAM,SAAS,KAAK,SAAS,YAAY,KAAK,QAAQ,EAAE;CACxD,IAAI,CAAC,OAAO,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK;CACxC,IAAI,OAAO,IAAI,KAAK,IAAI,MAAM;AAEhC;AAEA,SAAS,YAAY,MAAM,MAAM,KAAK;CACpC,MAAM,UAAU,aAAa,MAAM,MAAM,GAAG;CAC5C,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,KAAK,UAAU,KAAA,KAAa,OAAO,KAAK,UAAU,WAAW,OAAO,GAAG,KAAK;CAChF,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,UAAU,IAAI;AAE7C;AAEA,SAAS,aAAa,MAAM,MAAM,KAAK;CACrC,MAAM,UAAU,QAAQ,MAAM,MAAM,GAAG;CACvC,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,KAAK,UAAU,KAAA,KAAa,OAAO,KAAK,UAAU,WAAW,OAAO,GAAG,KAAK;CAChF,IAAI,CAAC,MAAM,QAAQ,KAAK,OAAO,GAAG,OAAO,GAAG,KAAK,sCAAsC,YAAY;CACnG,IAAI,KAAK,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,aAAa,OAAO,GAAG,KAAK,0BAA0B,YAAY,gBAAgB,KAAK,QAAQ;CACpJ,MAAM,yBAAS,IAAI,IAAI;CACvB,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,QAAQ,QAAQ,SAAS,GAAG;EAC3D,MAAM,SAAS,KAAK,QAAQ;EAC5B,MAAM,KAAK,GAAG,KAAK,WAAW,MAAM;EACpC,IAAI,CAACA,WAAS,MAAM,GAAG,OAAO,GAAG,GAAG;EACpC,KAAK,MAAM,OAAO,OAAO,KAAK,MAAM,GAClC,IAAI,QAAQ,WAAW,QAAQ,eAAe,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAErG,IAAI,OAAO,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,MAAM,IAAI,OAAO,GAAG,GAAG;EACjF,IAAI,OAAO,IAAI,OAAO,KAAK,GAAG,OAAO,GAAG,GAAG,0BAA0B,OAAO,OAAO,KAAK;EACxF,OAAO,IAAI,OAAO,KAAK;EACvB,IAAI,OAAO,gBAAgB,KAAA,KAAa,OAAO,OAAO,gBAAgB,UAAU,OAAO,GAAG,GAAG;CAC/F;AAEF;AAEA,SAAS,aAAa,MAAM,MAAM,KAAK;CACrC,MAAM,UAAU,QAAQ,MAAM,MAAM,GAAG;CACvC,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,KAAK,iBAAiB,KAAA,KAAa,OAAO,KAAK,iBAAiB,UAAU,OAAO,GAAG,KAAK;CAC7F,IAAI,KAAK,gBAAgB,KAAA,KAAa,OAAO,KAAK,gBAAgB,UAAU,OAAO,GAAG,KAAK;AAE7F;AAEA,SAAS,UAAU,MAAM,MAAM,KAAK;CAClC,MAAM,UAAU,QAAQ,MAAM,MAAM,GAAG;CACvC,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,KAAK,gBAAgB,KAAA,KAAa,OAAO,KAAK,gBAAgB,UAAU,OAAO,GAAG,KAAK;CAC3F,IAAI,CAAC,MAAM,QAAQ,KAAK,MAAM,GAAG,OAAO,GAAG,KAAK,wCAAwC,WAAW;CACnG,IAAI,KAAK,OAAO,SAAS,YAAY,OAAO,GAAG,KAAK,WAAW,KAAK,OAAO,OAAO,+BAA+B;CACjH,MAAM,uBAAO,IAAI,IAAI;CACrB,KAAK,IAAI,QAAQ,GAAG,QAAQ,KAAK,OAAO,QAAQ,SAAS,GAAG;EAC1D,MAAM,QAAQ,KAAK,OAAO;EAC1B,MAAM,KAAK,GAAG,KAAK,UAAU,MAAM;EACnC,IAAI,CAACA,WAAS,KAAK,GAAG,OAAO,GAAG,GAAG;EACnC,KAAK,MAAM,OAAO,OAAO,KAAK,KAAK,GACjC,IAAI,QAAQ,QAAQ,QAAQ,WAAW,QAAQ,eAAe,OAAO,GAAG,GAAG,GAAG,IAAI,qBAAqB,OAAO,GAAG,EAAE;EAErH,IAAI,OAAO,MAAM,OAAO,YAAY,MAAM,OAAO,IAAI,OAAO,GAAG,GAAG;EAClE,IAAI,MAAM,OAAO,aAAa,OAAO,GAAG,GAAG;EAC3C,IAAI,KAAK,IAAI,MAAM,EAAE,GAAG,OAAO,GAAG,GAAG,0BAA0B,OAAO,MAAM,EAAE;EAC9E,KAAK,IAAI,MAAM,EAAE;EACjB,IAAI,OAAO,MAAM,UAAU,UAAU,OAAO,GAAG,GAAG;EAClD,IAAI,MAAM,gBAAgB,KAAA,KAAa,OAAO,MAAM,gBAAgB,UAAU,OAAO,GAAG,GAAG;CAC7F;AAEF;AAEA,SAAS,YAAY,MAAM,MAAM,KAAK;CACpC,MAAM,UAAU,QAAQ,MAAM,MAAM,GAAG;CACvC,IAAI,YAAY,KAAA,GAAW,OAAO;CAClC,IAAI,KAAK,UAAU,KAAA,KAAa,OAAO,KAAK,UAAU,UAAU,OAAO,GAAG,KAAK;AAEjF;AAEA,SAAS,QAAQ,MAAM,MAAM,KAAK;CAChC,IAAI,OAAO,KAAK,OAAO,YAAY,KAAK,OAAO,IAAI,OAAO,GAAG,KAAK;CAGlE,IAAI,KAAK,OAAO,aAAa,OAAO,GAAG,KAAK;CAC5C,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,GAAG,OAAO,GAAG,KAAK,oBAAoB,OAAO,KAAK,EAAE;CAC3E,IAAI,IAAI,IAAI,KAAK,EAAE;AAErB;AAIA,SAAS,cAAc,KAAK;CAC1B,MAAM,wBAAQ,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,KAAK,GAAG,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC;CAChE,MAAM,uBAAO,IAAI,IAAI;CACrB,KAAK,MAAM,CAAC,MAAM,UAAU,IAAI,MAAM;EACpC,IAAI,IAAI,OAAO,IAAI,IAAI,GAAG,OAAO,GAAG,MAAM,KAAK,IAAI,OAAO,IAAI,EAAE;EAChE,MAAM,WAAW,eAAe,MAAM,MAAM;EAC5C,IAAI,SAAS,UAAU,KAAA,GAAW,OAAO,GAAG,MAAM,KAAK,IAAI,SAAS;EACpE,MAAM,UAAU,SAAS,MAAM,MAAK,SAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;EAC5D,IAAI,YAAY,KAAA,GAAW,OAAO,GAAG,MAAM,KAAK,iBAAiB,OAAO,OAAO,EAAE,WAAW,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK;EACnH,KAAK,IAAI,MAAM,SAAS,IAAI;CAC9B;CACA,MAAM,SAAS,YAAY,IAAI,QAAQ,IAAI;CAC3C,KAAK,MAAM,CAAC,MAAM,UAAU,IAAI,MAAM;EACpC,MAAM,SAAS,SAAS,KAAK,IAAI,IAAI,GAAG,MAAM;EAC9C,IAAI,OAAO,UAAU,KAAA,GAAW,OAAO,GAAG,MAAM,KAAK,IAAI,OAAO;CAClE;CACA,KAAK,MAAM,WAAW,IAAI,UAAU;EAClC,MAAM,WAAW,eAAe,QAAQ,MAAM;EAC9C,IAAI,SAAS,UAAU,KAAA,GAAW,OAAO,GAAG,QAAQ,KAAK,IAAI,SAAS;EACtE,MAAM,UAAU,SAAS,MAAM,MAAK,SAAQ,CAAC,MAAM,IAAI,IAAI,CAAC;EAC5D,IAAI,YAAY,KAAA,GAAW,OAAO,GAAG,QAAQ,KAAK,iBAAiB,OAAO,OAAO,EAAE,WAAW,QAAQ,CAAC,GAAG,KAAK,CAAC,KAAK;EACrH,MAAM,SAAS,SAAS,SAAS,MAAM,MAAM;EAC7C,IAAI,OAAO,UAAU,KAAA,GAAW,OAAO,GAAG,QAAQ,KAAK,IAAI,OAAO;EAClE,MAAM,UAAU,YAAY,OAAO,OAAO,QAAQ,IAAI;EACtD,IAAI,YAAY,KAAA,GAAW,OAAO,GAAG,QAAQ,KAAK,sBAAsB,OAAO,OAAO,KAAK,EAAE,IAAI;CACnG;AAEF;AAEA,SAAS,YAAY,OAAO,MAAM;CAChC,IAAI,SAAS,UAAU,OAAO,SAAS,KAAK,IAAI,KAAA,IAAY;CAC5D,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO,KAAK,SAAS,KAAK,IAAI,KAAA,IAAY,mBAAmB,QAAQ,IAAI;CAClG,IAAI,SAAS,UAAU,OAAO,SAAS,KAAK,IAAI,KAAA,IAAY;CAC5D,OAAO,SAAS,KAAK,IAAI,KAAA,IAAY;AACvC;AAEA,SAASC,WAAS,OAAO;CACvB,IAAI,OAAO,UAAU,UAAU,OAAO;CACtC,MAAM,OAAO,KAAK,UAAU,KAAK;CACjC,OAAO,OAAO,SAAS,WAAW,OAAO;AAC3C;AAKA,MAAM,2BAAW,IAAI,QAAQ;AAC7B,MAAM,UAAU,YAAY;CAC1B,IAAI,QAAQ,SAAS,IAAI,OAAO;CAChC,IAAI,UAAU,KAAA,GAAW;EACvB,QAAQ,eAAe,QAAQ,IAAI;EACnC,SAAS,IAAI,SAAS,KAAK;CAC7B;CACA,OAAO;AACT;AAEA,MAAa,eAAc,WAAU,QAAQ,SAAS,QAAQ;AAE9D,SAAS,KAAK,MAAM,OAAO;CACzB,IAAI,CAACD,WAAS,IAAI,GAAG;CACrB,MAAM,IAAI;CACV,IAAI,OAAO,SAAS,KAAK,IAAI,KAAK,MAAM,QAAQ,KAAK,QAAQ,GAAG,KAAK,MAAM,SAAS,KAAK,UAAU,KAAK,OAAO,KAAK;AACtH;AAEA,SAAgB,WAAW,MAAM;CAC/B,MAAM,QAAQ,CAAC;CACf,KAAK,OAAO,SAAS;EAAE,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,IAAI;CAAE,CAAC;CACpE,OAAO;AACT;AAEA,SAAgB,aAAa,MAAM;CACjC,IAAI,KAAK,SAAS,UAAU,OAAO,KAAK,UAAU;CAClD,IAAI,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,YAAY,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK,KAAA,CAAS;CACtH,OAAO,KAAK;AACd;AAKA,SAAgB,UAAU,MAAM,SAAS,CAAC,GAAG;CAC3C,MAAM,yBAAS,IAAI,IAAI;CACvB,KAAK,MAAM,QAAQ,WAAW,IAAI,GAAG,OAAO,IAAI,KAAK,IAAI,OAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM,aAAa,IAAI,CAAC;CAC9H,MAAM,uBAAO,IAAI,IAAI;CACrB,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQA,WAAS,MAAM,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,GAAG;EAChF,MAAM,QAAQ,eAAe,MAAM;EACnC,IAAI,MAAM,SAAS,KAAA,GAAW,KAAK,IAAI,MAAM,MAAM,IAAI;CACzD;CACA,OAAO,YAAY,QAAQ,IAAI;AACjC;AAIA,SAAgB,QAAQ,OAAO,QAAQ,WAAW,KAAA,GAAW;CAC3D,IAAI,CAAC,UAAU,KAAK,GAAG,OAAO;CAC9B,MAAM,QAAQ,OAAO,KAAK;CAC1B,IAAI,MAAM,SAAS,KAAA,GAAW,OAAO;CACrC,MAAM,SAAS,SAAS,MAAM,MAAM,MAAM;CAC1C,OAAO,OAAO,UAAU,KAAA,IAAY,OAAO,QAAQ;AACrD;AAEA,MAAa,UAAS,UAAU,UAAU,KAAA,KAAa,UAAU,OAAO,KAAK,KAAK,KAAK;AAUvF,MAAM,eAAe,MAAM,WAAW,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,EAAA,CAAG,MAAK,WAAU,YAAY,MAAM,MAAM,KAAK,CAAC,EAAE,SAAS,OAAO,KAAK;AAE3J,SAAS,UAAU,MAAM,OAAO;CAC9B,IAAI,KAAK,SAAS,UAAU,OAAO,UAAU,OAAO,OAAO;CAC3D,IAAI,KAAK,SAAS,UAAU,OAAO,YAAY,MAAM,KAAK;CAC1D,OAAO,GAAG,OAAO,KAAK,IAAI,KAAK,OAAO,IAAI,KAAK,SAAS;AAC1D;AAkDA,SAAgB,cAAc,MAAM,QAAQ;CAC1C,IAAI,CAACA,WAAS,MAAM,GAAG,OAAO;CAC9B,OAAO,WAAW,IAAI,CAAC,CACpB,QAAO,SAAQ,OAAO,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC,CAC9C,KAAI,SAAQ,GAAG,KAAK,SAAS,KAAK,GAAG,GAAG,UAAU,MAAM,OAAO,KAAK,GAAG,GAAG,CAAC,CAC3E,KAAK,IAAI;AACd;AAKA,SAAS,iBAAiB,MAAM,QAAQ,CAAC,GAAG;CAC1C,KAAK,OAAO,SAAS;EAAE,IAAI,YAAY,IAAI,KAAK,IAAI,GAAG,MAAM,KAAK,IAAI;CAAE,CAAC;CACzE,OAAO;AACT;AAKA,SAAgB,mBAAmB,MAAM,QAAQ,QAAQ;CACvD,MAAM,QAAQ,iBAAiB,IAAI;CACnC,IAAI,OAAO,WAAW,YAAY,WAAW,IAAI,OAAO,EAAE,OAAO,0DAA0D,QAAQ,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC,IAAI;CACjK,MAAM,OAAO,MAAM,MAAK,SAAQ,KAAK,OAAO,MAAM;CAClD,IAAI,SAAS,KAAA,GAAW,OAAO,EAAE,OAAO,4CAA4C,OAAO,MAAM,EAAE,aAAa,QAAQ,MAAM,KAAI,SAAQ,KAAK,EAAE,CAAC,IAAI;CACtJ,IAAI,CAACA,WAAS,MAAM,GAAG,OAAO,EAAE,OAAO,6BAA6B;CACpE,MAAM,SAAS,eAAe,MAAM,OAAO,MAAM;CACjD,IAAI,OAAO,UAAU,KAAA,GAAW,OAAO;CACvC,MAAM,QAAQ,OAAO,WAAW,KAAA,IAAY,CAAC,IAAI,EAAE,QAAQ,OAAO,OAAO;CACzE,IAAI,KAAK,SAAS,UAAU,OAAO,EAAE,GAAG,MAAM;CAC9C,MAAM,MAAM,KAAK,SAAS,YAAY,gBAAgB,MAAM,MAAM,IAAI,KAAK,SAAS,YAAY,gBAAgB,MAAM,IAAI,aAAa,MAAM,MAAM;CACnJ,OAAO,IAAI,UAAU,KAAA,IAAY;EAAE,GAAG;EAAK,GAAG;CAAM,IAAI;AAC1D;AAGA,SAAS,eAAe,MAAM,MAAM;CAClC,MAAM,QAAQ,WAAW,IAAI;CAC7B,IAAI,MAAM,WAAW,GAAG,OAAO,SAAS,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,yCAAyC;CAC3G,IAAI,SAAS,KAAA,KAAa,CAACA,WAAS,IAAI,GAAG,OAAO,EAAE,OAAO,2DAA2D;CACtH,MAAM,QAAQ,QAAQ,CAAC;CACvB,MAAM,MAAM,MAAM,KAAI,SAAQ,KAAK,EAAE;CACrC,MAAM,UAAU,OAAO,KAAK,KAAK,CAAC,CAAC,MAAK,QAAO,CAAC,IAAI,SAAS,GAAG,CAAC;CACjE,IAAI,YAAY,KAAA,GAAW,OAAO,EAAE,OAAO,iBAAiB,QAAQ,4BAA4B,QAAQ,GAAG,IAAI;CAC/G,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,OAAO,OAAO,OAAO,KAAK,EAAE,IAAI,MAAM,KAAK,MAAM,aAAa,IAAI;EAChF,MAAM,KAAK,iBAAiB,KAAK;EACjC,IAAI,KAAK,SAAS,YAAY,OAAO,UAAU,WAAW,OAAO,EAAE,OAAO,GAAG,GAAG,0BAA0B;EAC1G,IAAI,KAAK,SAAS,YAAY,EAAE,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC,EAAA,CAAG,MAAK,WAAU,YAAY,MAAM,MAAM,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,GAAG,uCAAuC;EAC7L,IAAI,KAAK,SAAS,YAAY,KAAK,SAAS,UAAU;GACpD,IAAI,CAAC,SAAS,KAAK,GAAG,OAAO,EAAE,OAAO,GAAG,GAAG,qBAAqB;GACjE,IAAK,KAAK,QAAQ,KAAA,KAAa,QAAQ,KAAK,OAAS,KAAK,QAAQ,KAAA,KAAa,QAAQ,KAAK,KAAM,OAAO,EAAE,OAAO,GAAG,GAAG,2BAA2B,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO,MAAM;EAC9L;EACA,OAAO,KAAK,MAAM;CACpB;CACA,OAAO,EAAE,OAAO;AAClB;AAEA,SAAS,gBAAgB,MAAM,QAAQ;CACrC,IAAI,CAAC,MAAM,QAAQ,OAAO,QAAQ,GAAG,OAAO,EAAE,OAAO,sDAAsD;CAC3G,MAAM,SAAS,IAAI,KAAK,KAAK,WAAW,CAAC,EAAA,CAAG,KAAI,WAAU,QAAQ,KAAK,CAAC;CACxE,MAAM,SAAS,OAAO,SAAS,QAAO,UAAS,OAAO,UAAU,YAAY,OAAO,IAAI,KAAK,CAAC;CAC7F,MAAM,WAAW,KAAK,UAAU,OAAO,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,OAAO,MAAM,GAAG,CAAC;CAC/E,IAAI,SAAS,WAAW,GAAG,OAAO,EAAE,OAAO,8CAA8C;CACzF,OAAO,EAAE,SAAS;AACpB;AAEA,SAAS,gBAAgB,QAAQ;CAC/B,IAAI,OAAO,OAAO,cAAc,WAAW,OAAO,EAAE,OAAO,uCAAuC;CAClG,OAAO,EAAE,WAAW,OAAO,UAAU;AACvC;AAEA,SAAS,aAAa,MAAM,QAAQ;CAClC,IAAI,CAACA,WAAS,OAAO,MAAM,GAAG,OAAO,EAAE,OAAO,4DAA4D;CAC1G,MAAM,YAAY,KAAK,UAAU,CAAC,EAAA,CAAG,KAAI,UAAS,OAAO,EAAE,CAAC,CAAC,QAAO,OAAM,OAAO,OAAO,QAAQ;CAChG,MAAM,aAAa,IAAI,IAAI,QAAQ;CACnC,MAAM,SAAS,CAAC;CAChB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,MAAM,GAAG;EACxD,IAAI,CAAC,WAAW,IAAI,GAAG,GAAG,OAAO,EAAE,OAAO,iBAAiB,IAAI,4BAA4B,QAAQ,QAAQ,IAAI;EAC/G,IAAI,OAAO,UAAU,UAAU,OAAO,EAAE,OAAO,iBAAiB,IAAI,qBAAqB;EACzF,IAAI,MAAM,SAAS,UAAU,OAAO,EAAE,OAAO,iBAAiB,IAAI,IAAI,MAAM,OAAO,mCAAmC,WAAW;EACjI,OAAO,OAAO;CAChB;CACA,OAAO,EAAE,OAAO;AAClB;;;ACjqBA,MAAa,cAAc;AAC3B,MAAa,cAAc;AAC3B,MAAa,aAAa;AAkD1B,SAAgB,SAAS,OAAkD;CACzE,OAAO,UAAU,QAAQ,OAAO,UAAU,YAAY,CAAC,MAAM,QAAQ,KAAK;AAC5E;;;ACpDA,MAAa,WAAkB,KAAK,WAAW,IAAI,QAAQ,eAAe,GAAG,SAAS,OAAO,SAAS,SAAS,IAAI,KAAK,EAAE,CAAC;AAE3H,SAAgB,SAAS,EAAE,SAA8B;CACvD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,OAAM;EAAK,QAAO;EAAK,SAAQ;EAAY,MAAK;EAAO,QAAO;EAAe,aAAY;EAAM,eAAc;EAAQ,gBAAe;EAAQ,eAAY;EAAQ,UAAA,MAAM,KAAK,GAAG,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAqB,EAAI,GAAd,KAAc,CAAC;CAAO,CAAA;AACvO;AACA,MAAa,iBAAiB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO,CAAC,+BAA+B,EAAI,CAAA;AACnF,MAAa,kBAAkB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO,CAAC,yBAAyB,EAAI,CAAA;AAC9E,MAAa,iBAAiB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO,CAAC,yGAAyG,oCAAoC,EAAI,CAAA;AACjM,MAAa,kBAAkB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO,CAAC,2GAA2G,oBAAoB,EAAI,CAAA;AACpL,MAAa,iBAAiB,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,EAAU,OAAO;CAAC;CAAkD;CAAc;AAAa,EAAI,CAAA;AACjI,MAAa,iBAAiB,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;CAAK,OAAM;CAAK,QAAO;CAAK,SAAQ;CAAY,MAAK;CAAO,QAAO;CAAe,aAAY;CAAM,eAAc;CAAQ,gBAAe;CAAQ,eAAY;CAA7J,UAAA;EAAoK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,gBAAiB,CAAA;EAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,8CAA+C,CAAA;EAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAM,GAAE,8CAA+C,CAAA;CAAM;;AACjV,MAAa,aAAa,UAAkB,OAAO,aAAa,KAAK,KAAK;AAC1E,SAAgB,UAAU,EAAE,OAAO,OAAO,WAAW,YAAuF;CAC1I,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAW,YAAY,YAAY,cAAc;EAAY,MAAK;EAAQ,cAAY;EAAO,eAAa;EAAQ;CAAc,CAAA;AAC9I;;;ACVA,MAAa,UAAU;CACrB;CAA2C;CAC3C;CAA0C;CAC1C;AACF;AACA,MAAM,WAAW,UAAkB,QAAQ,QAAQ,QAAQ;AAC3D,MAAM,OAAO;AACb,MAAM,QAAQ;AACd,MAAM,aAAa,MAAe,SAAiB,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,OAAO,KAAK,WAAW,CAAC,IAAI,QAAS,OAAO,OAAO,MAAO,CAAC;AACtJ,MAAM,OAAO,MAAe,MAAc,SAAiB;CACzD,IAAI,UAAU,MAAM,IAAI,KAAK,MAAM,OAAO,OAAO,IAAI;CACrD,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,OAAO,IAAI,GAAG;EAC/B,IAAI,UAAU,GAAG,MAAM,KAAK,IAAI,IAAI,IAAI,MAAM;EAC9C,OAAO;CACT;CACA,OAAO,QAAQ,KAAK,KAAK,GAAG,IAAI;AAClC;AACA,SAAgB,aAAa,OAAe;CAC1C,IAAI,CAAC,OAAO,SAAS,KAAK,GAAG,OAAO,OAAO,KAAK;CAChD,MAAM,MAAM,KAAK,IAAI,KAAK;CAC1B,MAAM,SAAS,OAAO,MAAM,IAAI,OAAO,KAAK,IAAI;CAChD,OAAO,OAAO,MAAM,QAAQ,MAAM,CAAC,CAAC,CAAC,eAAe,SAAS,EAAE,uBAAuB,OAAO,CAAC;AAChG;AACA,MAAME,cAAY,OAAe,SAAiB,OAAQ,SAAS,MAAM,GAAG,aAAa,KAAK,EAAE,KAAK,GAAG,aAAa,KAAK,EAAE,GAAG,SAAU,aAAa,KAAK;AAE3J,SAAgB,UAAU,KAAa,MAAc;CACnD,IAAI,KAAK;CACT,IAAI,KAAK;CACT,IAAI,OAAO,IAAI;EAAE,KAAK,KAAK,IAAI,GAAG,EAAE;EAAG,KAAK,OAAO,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE;CAAE;CAC3E,IAAI,OAAO,IAAI,KAAK,KAAK;CACzB,MAAM,OAAO,KAAK,MAAM;CACxB,MAAM,YAAY,MAAM,KAAK,MAAM,KAAK,MAAM,GAAG,CAAC;CAClD,MAAM,OAAO;EAAC;EAAG;EAAG;EAAK;EAAG;CAAE,CAAC,CAAC,KAAI,UAAS,QAAQ,SAAS,CAAC,CAAC,MAAK,cAAa,aAAa,GAAG;CAClG,MAAM,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,IAAI;CAC7C,MAAM,MAAM,KAAK,KAAK,KAAK,OAAO,IAAI,IAAI;CAC1C,MAAM,QAAQ,CAAC;CACf,KAAK,IAAI,QAAQ,OAAO,SAAS,MAAM,OAAO,GAAG,SAAS,MAAM,MAAM,KAAK,OAAO,MAAM,YAAY,EAAE,CAAC,CAAC;CACxG,OAAO;AACT;AAIA,SAAgB,UAAU,MAAgB,QAA8C;CACtF,MAAM,cAAc,MAAM,QAAQ,KAAK,UAAU,IAAI,KAAK,aAAa,CAAC,EAAA,CAAG,IAAI,MAAM;CACrF,MAAM,UAAU,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,SAAS,CAAC,EAAA,CAAG,KAAK,MAAM,WAAW;EACnF,MAAM,OAAO,MAAM,SAAS,WAAW,KAAK,OAAO;EAAI,OAAO,QAAQ,KAAK;EAC3E,QAAQ,WAAW,KAAK,GAAG,OAAO;GAChC,MAAM,QAAQ,OAAO,QAAQ,MAAM,QAAQ,MAAM,MAAM,IAAI,KAAK,OAAO,MAAM,KAAA,GAAW,QAAQ,CAAC,CAAC;GAClG,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;EAC1C,CAAC;CACH,EAAE;CACF,OAAO;EAAE,MAAM,KAAK,QAAQ;EAAO;EAAY;EAAQ,MAAM,OAAO,KAAK,SAAS,WAAW,KAAK,OAAO;CAAG;AAC9G;AACA,MAAM,WAAW,UAAkB,SAAS,KAAK,KAAK,IAAI,IAAI,MAAM,QAAQ,MAAM,MAAI,EAAE,KAAK;AAC7F,SAAgB,SAAS,EAAE,YAAY,QAAQ,QAAmB,IAAW,SAAS;CAGpF,OAAO,CAAC,CAFM,IAAI,GAAG,OAAO,KAAK,MAAM,UAAU,KAAK,SAAS,OAAO,WAAW,IAAI,QAAQ,EAAE,OAAO,IAAI,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ,IAAI,CAE7H,GAAG,GADD,WAAW,KAAK,OAAO,OAAO,CAAC,OAAO,GAAG,OAAO,KAAI,SAAQ,OAAO,KAAK,OAAO,GAAG,CAAC,CAAC,CAC7E,CAAC,CAAC,CAAC,KAAI,QAAO,IAAI,KAAI,SAAQ,QAAQ,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI;AAC/F;AAKA,SAAS,UAAU,QAAkB,MAAe;CAClD,MAAM,SAAS,OAAO,SAAS,IAAI,SAAS,CAAC,CAAC;CAC9C,MAAM,MAAM,KAAK,IAAI,GAAG,MAAM;CAC9B,MAAM,OAAO,KAAK,IAAI,GAAG,MAAM;CAC/B,IAAI,MAAM,OAAO,UAAU,KAAK,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;CAC9D,MAAM,OAAO,OAAO,OAAO,MAAO,KAAK,IAAI,IAAI,IAAI,MAAO;CAC1D,OAAO,UAAU,MAAM,KAAK,OAAO,GAAG;AACxC;AACA,SAAS,QAAQ,EAAE,YAAY,QAAQ,MAAM,QAAmB,OAAe,QAAuB,OAAyB;CAC7H,MAAM,UAAU,OAAO,QAAQ,GAAG,UAAU,MAAM,MAAM;CACxD,MAAM,QAAQ,UAAU,QAAQ,SAAQ,SAAQ,KAAK,MAAM,GAAG,SAAS,MAAM;CAC7E,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,MAAM,GAAG,EAAE;CACtB,MAAM,OAAO,KAAK,KAAK,KAAK,IAAI,GAAG,MAAM,KAAI,SAAQ,UAAUA,WAAS,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;CAChG,MAAM,MAAM;CACZ,MAAM,SAAS;CAEf,MAAM,OAAO;EAAE,GAAG;EAAM,GAAG;EAAK,GAAG,KAAK,IAAI,IAAI,QAAQ,OAAO,CAAC;EAAG,GAAG;CAAsB;CAC5F,MAAM,KAAK,UAAkB,KAAK,IAAI,KAAK,KAAM,QAAQ,OAAO,KAAK,MAAO,KAAK;CACjF,MAAM,OAAO,KAAK,IAAI,WAAW;CACjC,MAAM,QAA2B,CAAC;CAClC,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAuB,WAAU;GAAkB,IAAI,KAAK;GAAG,IAAI,KAAK,IAAI,KAAK;GAAG,IAAI,EAAE,IAAI;GAAG,IAAI,EAAE,IAAI;EAAI,GAApG,IAAI,MAAgG,CAAC;EAC3H,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAuB,WAAU;GAAkB,GAAG,KAAK,IAAI;GAAG,GAAG,EAAE,IAAI,IAAI;GAAG,YAAW;GAAOA,UAAAA,WAAS,MAAM,IAAI;EAAQ,GAApH,IAAI,MAAgH,CAAC;CAC7I;CACA,MAAM,SAAkB,CAAC;CACzB,WAAW,SAAS,OAAO,OAAO;EAChC,MAAM,KAAK,KAAK,IAAI,OAAO,KAAK,OAAO;EACvC,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAqB,WAAU;GAAmB,GAAG;GAAI,GAAG;GAAY,YAAW;GAAU,UAAA,IAAI,OAAO,OAAO,GAAG,KAAK;EAAQ,GAApH,IAAI,IAAgH,CAAC;EAC3I,OAAO,KAAK;GAAE,GAAG;GAAI,GAAG,EAAE,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC;EAAE,CAAC;CACpF,CAAC;CACD,IAAI,SAAS,OAAO;EAClB,MAAM,QAAQ,OAAO;EACrB,MAAM,MAAM,QAAQ,SAAS,IAAI,IAAI;EACrC,MAAM,OAAO,KAAK,IAAI,IAAI,QAAQ,OAAO,QAAQ,SAAS,MAAM,QAAQ,MAAM;EAC9E,MAAM,OAAO,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;EAC5C,WAAW,SAAS,GAAG,OAAO,QAAQ,SAAS,MAAM,QAAQ;GAC3D,MAAM,QAAQ,KAAK,OAAO;GAC1B,MAAM,IAAI,KAAK,IAAI,OAAO,MAAM,OAAO,SAAS,IAAI,OAAO,OAAO;GAClE,MAAM,OAAO,KAAK,IAAI,EAAE,KAAK,GAAG,IAAI;GACpC,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;GAClD,MAAM,IAAI,KAAK,IAAI,GAAG,OAAO,GAAG,IAAI;GACpC,MAAM,IAAI,SAAS,IACf,IAAI,EAAE,GAAG,OAAO,KAAK,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,OAAO,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,OAAO,KAAK,KACpG,IAAI,EAAE,GAAG,KAAK,GAAG,OAAO,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,OAAO,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK;GAChG,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAA4B,WAAU;IAAkB,YAAU,WAAW,QAAQ,WAAW,KAAK,KAAK,KAAA;IAAc;IAAG,OAAO,EAAE,MAAM,KAAK,MAAM;GAAI,GAA9I,IAAI,GAAG,GAAG,KAAoI,CAAC;EACvK,CAAC,CAAC;CACJ,OAAO;EACL,MAAM,KAAK,WAAW,KAAK,GAAG,OAAO,KAAK,IAAI,OAAO,KAAK,OAAO,CAAC;EAClE,QAAQ,SAAS,MAAM,QAAQ;GAC7B,MAAM,OAAO,KAAK,OAAO,KAAK,OAAO,OAAO,GAAG,OAAO,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE;GACnG,IAAI,SAAS,QAAQ;IACnB,MAAM,OAAO,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAsB,WAAU;KAAkB,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,EAAE,GAAG,KAAK,GAAG,GAAG,GAAG,GAAG,KAAK;KAAI,OAAO,EAAE,MAAM,KAAK,MAAM;IAAI,GAA1H,IAAI,KAAsH,CAAC;GACnJ;GACA,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAsB,WAAU;IAAkB,GAAG;IAAM,OAAO,EAAE,QAAQ,KAAK,MAAM;GAAI,GAAhF,IAAI,KAA4E,CAAC;GACvG,KAAK,OAAO,SAAS,OAAO,OAAO,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAA8B,WAAU;IAAiB,IAAI,GAAG;IAAK,IAAI,EAAE,KAAK;IAAG,GAAG,WAAW,KAAK,IAAI;IAAK,OAAO,EAAE,MAAM,KAAK,MAAM;GAAI,GAAhI,IAAI,IAAI,GAAG,IAAqH,CAAC,CAAC;EAC/L,CAAC;EACD,IAAI,WAAW,MAAM,MAAM,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAkB,WAAU;GAAmB,IAAI,GAAG;GAAS,IAAI,GAAG;GAAS,IAAI,KAAK;GAAG,IAAI,KAAK,IAAI,KAAK;EAAI,GAAvG,OAAuG,CAAC;CACvJ;CACA,OAAO;EAAE;EAAO;EAAQ;EAAQ,MAAM,WAAW,KAAK,GAAG,QAAQ;GAAE,GAAG,KAAK,IAAI,OAAO;GAAI,GAAG,KAAK;GAAG,GAAG;GAAM,GAAG,KAAK;EAAE,EAAE;CAAE;AAC9H;AACA,SAAS,KAAK,EAAE,YAAY,QAAQ,QAAmB,OAAe,QAAuB,OAAyB;CACpH,MAAM,UAAU,OAAO,QAAQ,GAAG,UAAU,MAAM,MAAM;CACxD,MAAM,QAAQ,UAAU,QAAQ,SAAQ,SAAQ,KAAK,MAAM,GAAG,IAAI;CAClE,MAAM,KAAK,MAAM;CACjB,MAAM,KAAK,MAAM,GAAG,EAAE;CACtB,MAAM,SAAS,KAAK,IAAI,QAAQ,KAAM,KAAK,KAAK,KAAK,IAAI,GAAG,WAAW,KAAI,UAAS,UAAU,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;CACnH,MAAM,SAAS,KAAK,KAAK,KAAK,IAAI,GAAG,QAAQ,SAAQ,SAAQ,KAAK,MAAM,CAAC,CAAC,KAAI,UAAS,UAAUA,WAAS,OAAO,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI;CACpI,MAAM,OAAO;CACb,MAAM,OAAO,KAAK,QAAQ,SAAS,QAAQ,QAAQ,SAAS,KAAK;CACjE,MAAM,MAAM;CACZ,MAAM,SAAS,MAAM,OAAO,WAAW,SAAS;CAChD,MAAM,OAAO;EAAE,GAAG;EAAQ,GAAG;EAAK,GAAG,KAAK,IAAI,IAAI,QAAQ,SAAS,MAAM;EAAG,GAAG,OAAO,WAAW;CAAO;CACxG,MAAM,KAAK,UAAkB,KAAK,KAAM,QAAQ,OAAO,KAAK,MAAO,KAAK;CACxE,MAAM,QAA2B,CAAC;CAClC,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAuB,WAAU;GAAkB,IAAI,EAAE,IAAI;GAAG,IAAI,EAAE,IAAI;GAAG,IAAI,KAAK;GAAG,IAAI,KAAK,IAAI,KAAK;EAAI,GAApG,IAAI,MAAgG,CAAC;EAC3H,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAuB,WAAU;GAAkB,GAAG,EAAE,IAAI;GAAG,GAAG,SAAS;GAAG,YAAW;GAAUA,UAAAA,WAAS,MAAM,IAAI;EAAQ,GAAnH,IAAI,MAA+G,CAAC;CAC5I;CACA,MAAM,SAAkB,CAAC;CACzB,MAAM,OAAO,EAAE,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC;CAC5C,WAAW,SAAS,OAAO,OAAO;EAChC,MAAM,OAAO,KAAK,IAAI,OAAO,KAAK;EAClC,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAqB,WAAU;GAAmB,GAAG,SAAS;GAAI,GAAG,QAAQ,OAAO,MAAM,IAAI;GAAG,YAAW;GAAO,UAAA,IAAI,OAAO,SAAS,IAAI,KAAK;EAAQ,GAA7I,IAAI,IAAyI,CAAC;EACpK,QAAQ,SAAS,MAAM,QAAQ;GAC7B,MAAM,QAAQ,KAAK,OAAO;GAC1B,MAAM,KAAK,OAAO,MAAO;GACzB,MAAM,OAAO,KAAK,IAAI,EAAE,KAAK,GAAG,IAAI;GACpC,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;GAClD,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAA4B,WAAU;IAAkB,YAAU,WAAW,QAAQ,WAAW,KAAK,KAAK,KAAA;IAAW,GAAG;IAAM,GAAG;IAAI,OAAO;IAAM,QAAQ;IAAM,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC;IAAG,OAAO,EAAE,MAAM,KAAK,MAAM;GAAI,GAA9M,IAAI,GAAG,GAAG,KAAoM,CAAC;GACrO,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAA4B,WAAU;IAAmB,GAAG,OAAO,OAAO;IAAG,GAAG,KAAK,OAAO;IAAIA,UAAAA,WAAS,OAAO,IAAI;GAAQ,GAAjH,IAAI,GAAG,GAAG,KAAuG,CAAC;EAC1I,CAAC;EACD,OAAO,KAAK;GAAE,GAAG,KAAK,IAAI,GAAG,QAAQ,KAAI,SAAQ,EAAE,KAAK,OAAO,GAAG,CAAC,GAAG,IAAI;GAAG,GAAG;EAAK,CAAC;CACxF,CAAC;CACD,OAAO;EAAE;EAAO;EAAQ;EAAQ,MAAM,WAAW,KAAK,GAAG,QAAQ;GAAE,GAAG;GAAG,GAAG,KAAK,IAAI,OAAO;GAAI,GAAG;GAAO,GAAG;EAAK,EAAE;CAAE;AACxH;AACA,SAAS,MAAM,EAAE,YAAY,UAAqB,OAAe,QAAuB,OAAoC;CAC1H,MAAM,UAAU,OAAO,EAAE,EAAE,UAAU,CAAC,EAAA,CAAG,KAAI,UAAS,KAAK,IAAI,GAAG,KAAK,CAAC;CACxE,MAAM,QAAQ,OAAO,QAAQ,KAAK,UAAU,MAAM,OAAO,CAAC;CAC1D,MAAM,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,QAAQ,GAAI,CAAC;CACtD,MAAM,IAAI,OAAO;CACjB,MAAM,QAAQ,IAAI;CAClB,MAAM,KAAK;CACX,MAAM,KAAK;CACX,MAAM,QAA2B,CAAC;CAClC,MAAM,SAAkB,CAAC;CACzB,IAAI,QAAQ,CAAC,KAAK,KAAK;CACvB,OAAO,SAAS,OAAO,OAAO;EAC5B,MAAM,QAAQ,QAAQ,IAAK,QAAQ,QAAS,KAAK,KAAK,IAAI;EAC1D,MAAM,MAAM,QAAQ;EACpB,MAAM,MAAM,QAAQ,QAAQ;EAC5B,OAAO,KAAK;GAAE,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,SAAS;GAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,KAAK,IAAI,SAAS;EAAG,CAAC;EAC5G,IAAI,QAAQ,GAAG;GACb,MAAM,QAAQ,QAAQ,KAAK,KAAK,IAAI;GACpC,MAAM,OAAO,SAAS,KAAK,KAAK,IAAI;GACpC,MAAM,KAAK,QAAgB,UAAkB,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI,OAAO,GAAG,KAAK,KAAK,IAAI,KAAK,IAAI;GACxG,MAAM,IAAI,OACN,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAAQ,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,OAAO,KAAK,EAAE,GAAG,MAAM,GAAG,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,EAAE,EAAE,GAAG,MAAM,GAAG,MAAM,SAAS,EAAE,OAAO,KAAK,EAAE,KAC3M,IAAI,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,MAAM,KAAK,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,GAAG,MAAM,GAAG,MAAM,KAAK,MAAM,KAAK,EAAE,OAAO,KAAK,EAAE;GAC3H,MAAM,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAqB,WAAU;IAAkB,YAAU,WAAW,QAAQ,WAAW,KAAK,KAAK,KAAA;IAAc;IAAG,UAAS;IAAU,OAAO,EAAE,MAAM,QAAQ,EAAE,EAAE;IAAG,sBAAsB,MAAM,EAAE;GAAI,GAA5L,IAAI,IAAwL,CAAC;EACrN;EACA,QAAQ;CACV,CAAC;CACD,OAAO;EAAE;EAAO,QAAQ;EAAM;EAAM;EAAQ;EAAO;EAAQ,MAAM,CAAC;CAAE;AACtE;AACA,SAAS,SAAS,KAA6C,SAAiB;CAC9E,MAAM,CAAC,OAAO,aAAA,GAAYC,MAAAA,SAAAA,CAAS,OAAO;CAC1C,CAAA,GAAA,MAAA,gBAAA,OAAsB;EACpB,MAAM,OAAO,IAAI;EACjB,IAAI,CAAC,QAAQ,OAAO,mBAAmB,YAAY,OAAO,KAAA;EAC1D,MAAM,gBAAgB;GAAE,MAAM,OAAO,KAAK,MAAM,KAAK,WAAW;GAAG,IAAI,OAAO,GAAG,SAAS,IAAI;EAAE;EAChG,QAAQ;EACR,MAAM,WAAW,IAAI,eAAe,OAAO;EAC3C,SAAS,QAAQ,IAAI;EACrB,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,GAAG,CAAC;CACR,OAAO;AACT;AAGA,SAAgB,WAAW,EAAE,MAAM,IAAI,WAA2C;CAChF,MAAM,EAAE,YAAY,QAAQ,SAAS;CACrC,MAAM,QAAQ,OAAO,KAAK,MAAM,UAAU,KAAK,SAAS,OAAO,WAAW,IAAI,QAAQ,EAAE,OAAO,IAAI,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ,IAAI;CACjI,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAa,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD,EAAA,UAAA,CAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAI,OAAM,MAAO,CAAA,GAAE,MAAM,KAAK,MAAM,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAgB,OAAM;GAAM,WAAU;GAAY,UAAA;EAAS,GAAlD,KAAkD,CAAC,CAAM,EAAA,CAAA,EAAQ,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAQ,WAAW,KAAK,OAAO,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,MAAD,EAAA,UAAA,CAA2B,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAI,OAAM;GAAO,UAAA;EAAU,CAAA,GAAE,OAAO,KAAK,MAAM,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAAgB,WAAU;GAAYD,UAAAA,WAAS,KAAK,OAAO,KAAK,OAAO,WAAW,KAAK,CAAC,KAAK,OAAO,KAAK,IAAI;EAAM,GAA1G,KAA0G,CAAC,CAAM,EAAA,GAArM,GAAG,GAAG,GAAG,OAA4L,CAAC,EAAS,CAAA,CAAQ,EAAA,CAAA;CAAM,CAAA;AAC5b;AACA,SAAgB,YAAY,EAAE,MAAM,QAAQ,eAAe,eAAe,IAAI,WAAoL;CAChQ,MAAM,OAAO,UAAU,MAAM,MAAM;CACnC,MAAM,EAAE,MAAM,YAAY,QAAQ,SAAS;CAC3C,MAAM,OAAA,GAAME,MAAAA,OAAAA,CAAoB,IAAI;CACpC,MAAM,QAAQ,SAAS,KAA+C,GAAG;CACzE,MAAM,CAAC,QAAQ,cAAA,GAAaD,MAAAA,SAAAA,CAAwB,IAAI;CACxD,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAmB,CAAC,CAAC;CACjD,MAAM,CAAC,SAAS,eAAA,GAAcA,MAAAA,SAAAA,CAAS,KAAK;CAC5C,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;CAC1C,MAAM,WAAA,GAAUE,MAAAA,MAAAA,CAAM;CACtB,MAAM,WAAA,GAAUA,MAAAA,MAAAA,CAAM;CACtB,MAAM,SAAA,GAAQD,MAAAA,OAAAA,CAAO,OAAO;CAC5B,MAAM,UAAU;CAChB,MAAM,QAAQ,OAAO,KAAK,GAAG,UAAU,CAAC,OAAO,SAAS,KAAK,CAAC;CAC9D,MAAM,QAAQ,OAAO,KAAK,YAAY,YAAY,KAAK,YAAY,KAAK,KAAK,UAAU,EAAE,OAAO;CAChG,MAAM,UAAU,SAAS;CACzB,MAAM,eAAe,WAAW,SAAS;CACzC,MAAM,QAAQ,UAAU,MAAM,MAAM,eAAe,QAAQ,MAAM,OAAO,QAAQ,SAAS,IAAI,SAAS,SAAS,KAAK,MAAM,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO,QAAQ,KAAK;CACpL,MAAM,WAAW,UAAU,MAAM,OAAQ;CACzC,MAAM,QAAQ,UAAwC;EACpD,MAAM,OAA+B;GAAE,YAAY;GAAG,WAAW;GAAG,WAAW;GAAI,SAAS;EAAG;EAC/F,IAAI,MAAM,QAAQ,UAAU;GAAE,UAAU,IAAI;GAAG;EAAO;EACtD,IAAI,KAAK,MAAM,SAAS,KAAA,GAAW;EACnC,MAAM,eAAe;EACrB,WAAU,YAAW,YAAY,OAAO,KAAK,UAAU,KAAK,MAAM,OAAO,WAAW,UAAU,WAAW,MAAM;CACjH;CACA,MAAM,QAAQ,WAAW,OAAO,OAAO,MAAM,OAAO;CACpD,MAAM,SAAS,OAAe,SAAS,MAAMF,WAAS,MAAM,OAAQ,KAAK,IAAI,IAAI,GAAGA,WAAS,MAAM,OAAQ,KAAK,IAAI,EAAE,KAAK,MAAM,QAAS,IAAI,KAAK,MAAO,MAAM,OAAQ,MAAM,MAAM,QAAU,GAAG,IAAI,EAAE;CACvM,MAAM,UAAU,WAAW,QAAQ,UAAU,CAAC,IAAI,OAAO,QAAQ,GAAG,UAAU,MAAM,MAAM,CAAC,CAAC,KAAI,UAAS;EAAE,OAAO,KAAK;EAAO,MAAM,KAAK;EAAM,OAAOA,WAAS,KAAK,OAAO,SAAS,IAAI;CAAE,EAAE;CAC5L,MAAM,aAAa;EACjB,UAAe,WAAW,UAAU,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW;GAAE,UAAU,IAAI;GAAG,iBAAiB,UAAU,KAAK,GAAG,IAAI;EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;CACjJ;CACA,MAAM,oBAAoB;EAAE,MAAM,UAAU,CAAC,MAAM;EAAS,WAAW,MAAM,OAAO;CAAE;CACtF,MAAM,UAAA,GAASE,MAAAA,OAAAA,CAAoB;EAAE,OAAO;EAAM,SAAS;EAAO;EAAa;CAAK,CAAC;CACrF,OAAO,UAAU;EAAE,OAAO,OAAO,KAAK,YAAY,YAAY,KAAK,YAAY,KAAK,KAAK,UAAU;EAAM,IAAI,UAAU;GAAE,OAAO,MAAM;EAAQ;EAAG;EAAa;CAAK;CACnK,CAAA,GAAA,MAAA,gBAAA,OAAsB,gBAAgB,SAAS;EAAE,IAAI,QAAQ;GAAE,OAAO,OAAO,QAAQ;EAAM;EAAG,IAAI,UAAU;GAAE,OAAO,OAAO,QAAQ;EAAQ;EAAG,mBAAmB,OAAO,QAAQ,YAAY;EAAG,YAAY,OAAO,QAAQ,KAAK;CAAE,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC;CAC9P,CAAA,GAAA,MAAA,gBAAA,OAAsB;EAAE,gBAAgB;CAAE,GAAG;EAAC;EAAe;EAAS;CAAK,CAAC;CAC5E,MAAM,SAAS,UACX,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAA4C,UAAA,WAAW,KAAK,MAAM,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAA2B,WAAU;GAAiB,YAAU,WAAW,QAAQ,WAAW,KAAK,KAAK,KAAA;GAAW,sBAAsB,UAAU,EAAE;GAAG,sBAAsB,UAAU,IAAI;GAA5L,UAAA;IAA+L,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAG,OAAO,EAAE,YAAY,QAAQ,EAAE,EAAE,EAAI,CAAA;IAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAuB,UAAA;IAAW,CAAA;IAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAwB,UAAA,MAAM,EAAE;IAAQ,CAAA;GAAM;EAA/U,GAAA,GAAG,GAAG,GAAG,MAAsU,CAAC;CAAO,CAAA,IACzb,OAAO,SAAS,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAqB,UAAA,OAAO,KAAK,MAAM,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;GAAsC,MAAK;GAAS,WAAU;GAAiB,gBAAc,MAAM;GAAQ,eAAe,WAAU,WAAU,OAAO,SAAS,KAAK,IAAI,OAAO,QAAO,SAAQ,SAAS,KAAK,IAAI,MAAM,OAAO,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,GAAG,QAAQ,KAAK,IAAI,MAAM;GAA7Q,UAAA,CAAgR,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAG,OAAO,EAAE,YAAY,KAAK,MAAM,EAAI,CAAA,GAAE,KAAK,QAAQ,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ,GAAY;EAA/V,GAAA,GAAG,MAAM,GAAG,KAAK,MAA8U,CAAC;CAAO,CAAA,IAAI;CAChd,MAAM,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAkB,OAAO,UAAU,EAAE,OAAO,SAAS,IAAI,KAAA;EAAxE,UAAA,CACX,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAiB,OAAO;GAAU,QAAQ,MAAM;GAAQ,SAAS,OAAO,SAAS,GAAG,MAAM;GAAU,MAAK;GAAM,mBAAiB;GAAS,UAAU;GAAG,WAAW;GAAM,cAAc,UAAU,IAAI;GAAG,sBAAsB,UAAU,IAAI;GAAzP,UAAA,CACG,MAAM,OACN,UAAW,WAAW,OACnB,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoB,GAAG,WAAW;IAAG,GAAG,MAAM,SAAS,IAAI;IAAG,YAAW;IAAU,UAAA,SAAS,MAAM,KAAKF,WAAS,MAAM,OAAQ,IAAI;GAAQ,CAAA,IAC1J,iBAAA,GAAA,kBAAA,KAAA,CAACI,MAAAA,UAAD,EAAA,UAAA,CAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAyB,GAAG,WAAW;IAAG,GAAG,MAAM,SAAS,IAAI;IAAG,YAAW;IAAU,UAAA,IAAI,WAAW,SAAS,MAAM,OAAQ,KAAM,KAAK;GAAQ,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoB,GAAG,WAAW;IAAG,GAAG,MAAM,SAAS,IAAI;IAAI,YAAW;IAAU,UAAA,MAAM,MAAM;GAAQ,CAAA,CAAW,EAAA,CAAA,IAC/S,MAAM,KAAK,KAAK,KAAK,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAqB,WAAU;IAAiB,GAAG,IAAI;IAAG,GAAG,IAAI;IAAG,OAAO,IAAI;IAAG,QAAQ,IAAI;IAAG,sBAAsB,UAAU,EAAE;GAAI,GAA5H,IAAI,IAAwH,CAAC,CACrK;EACJ,CAAA,GAAA,SAAS,CAAC,WAAW,CAAC,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAiB,MAAK;GAAS,OAAO;IAAE,MAAM,MAAM;IAAG,KAAK,MAAM;GAAE;GAAnF,UAAA,CAAuG,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAA,UAAI,WAAW,QAAY,CAAA,GAAE,QAAQ,KAAK,KAAK,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD,EAAA,UAAA;IAAkB,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD,EAAG,OAAO,EAAE,YAAY,IAAI,MAAM,EAAI,CAAA;IAAE,IAAI,OAAO,GAAG,IAAI,KAAK,MAAM;IAAI,IAAI;GAAY,EAAA,GAAhG,KAAgG,CAAC,CAAO;EAAI,CAAA,IAAA,IACrT;;CACL,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;EAAQ,KAAK;EAAK,WAAU;EAAa,aAAW;EAApD,UAAA;GACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,IAAI;IAAS,QAAA;IAAQ,UAAA;GAAY,CAAA;GACtC,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;IAAkB;IAAS;GAAI,CAAA,IAAI,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAW,eAAe,6CAA6C;IAAoB,sBAAsB,UAAU,IAAI;IAApI,UAAA,CAAwI,MAAM,MAAY;GAAI,CAAA,IAAA,iBAAA,GAAA,kBAAA,KAAA,CAACA,MAAAA,UAAD,EAAA,UAAA,CAAW,QAAQ,IAAe,EAAA,CAAA;GACvP,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoB,MAAK;IAAU,UAAA,EAAE,QAAQ;GAAQ,CAAA,IAAI;GAClF,OAAO,KAAK,YAAY,YAAY,KAAK,YAAY,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;IAAY,WAAU;IAAgB,UAAA,KAAK;GAAoB,CAAA,IAAI;EACxH;;AACV;;;ACrOA,MAAM,QAAQ;CAAC;CAAQ;CAAQ;AAAK;AACpC,MAAM,gBAAgB;CAAC;CAAQ;CAAQ;CAAQ;AAAK;AACpD,MAAM,aAAa,SAAoB,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC;AACrF,MAAM,YAAY,SAAoB,MAAM,QAAQ,KAAK,MAAM,IAAI,KAAK,SAAS,CAAC;AAClF,MAAM,YAAY,UAAmB,UAAU,QAAQ,UAAU,KAAA,IAAY,KAAK,OAAO,UAAU,WAAW,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AAClJ,MAAM,eAAe;AACrB,SAAS,QAAQ,MAAgB,OAA6B;CAC5D,OAAO,MAAM,IAAI,KAAK,IAAI,KAAM,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,SAAS,MAAK,UAAS,QAAQ,OAAO,KAAK,CAAC;AACnH;AACA,MAAM,gBAAgB,QAAmC,SAAmB,UAAU,QAAQ,OAAO,WAAW,KAAK,KAAK,OAAO,SAAS,KAAA;AAC1I,MAAM,YAAY,OAAgB,SAAkB,GAAG,OAAO,KAAK,IAAI,OAAO,IAAI,SAAS;AAC3F,MAAM,WAAW,UAAmB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,MAAM,eAAe,SAAS,EAAE,uBAAuB,EAAE,CAAC,IAAI,OAAO,KAAK;AACpK,SAAS,iBAAiB,EAAE,QAAuB;CAAE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,KAAW,CAAA;AAAE;AAEhF,SAAS,aAAa,EAAE,MAAM,KAAK,KAA6C;CAC9E,MAAM,CAAC,QAAQ,cAAA,GAAaC,MAAAA,SAAAA,CAAmB,CAAC,CAAC;CACjD,MAAM,UAAU,UAAU,IAAI;CAC9B,MAAM,QAAQ,KAAK,UAAU;CAC7B,MAAM,UAAU,UAAkB;EAChC,IAAI,IAAI,cAAc;EACtB,IAAI,OAAO,WAAU,YAAW,QAAQ,SAAS,KAAK,IAAI,QAAQ,QAAO,SAAQ,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,KAAK,CAAC;OACjH,IAAI,WAAW,KAAK,IAAK,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC;CACrD;CACA,MAAM,SAAS,UAA+C;EAC5D,MAAM,QAAQ,MAAM,IAAI,YAAY,CAAC,CAAC,WAAW,CAAC,IAAI;EACtD,IAAI,SAAS,KAAK,QAAQ,QAAQ,UAAU,CAAC,MAAM,WAAW,CAAC,MAAM,WAAW,CAAC,MAAM,QAAQ;GAAE,MAAM,eAAe;GAAG,OAAO,QAAQ,MAAM,CAAC,KAAK;EAAE;CACxJ;CACA,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAACC,MAAAA,UAAD,EAAA,UAAA,CACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAe,MAAK;EAAQ,cAAY,EAAE,SAAS;EAAG,WAAW;EAAQ,UAAA,QAAQ,KAAK,QAAQ,UAAU;GACrH,MAAM,WAAW,SAAS,OAAO,SAAS,OAAO,KAAK;GACtD,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;IAA2B,MAAK;IAAS,WAAU;IAAc,UAAU,IAAI;IAAc,gBAAc,QAAQ,WAAW,KAAA;IAAW,qBAAmB,UAAU,KAAK,CAAC,CAAC,YAAY;IAAG,eAAe,OAAO,OAAO,KAAK;IAA9N,UAAA;KACL,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAW,eAAY;MAAQ,UAAA,UAAU,KAAK;KAAQ,CAAA;KACtE,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;MAAM,WAAU;MAAhB,UAAA,CAAmC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAqB,UAAA,OAAO;MAAY,CAAA,GAAE,OAAO,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;OAAM,WAAU;OAAoB,UAAA,OAAO;MAAkB,CAAA,IAAI,IAAW;;KAC7L,WAAW,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;MAAM,WAAU;MAAa,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;KAAO,CAAA,IAAI;IAC1D;GAJY,GAAA,OAAO,KAInB;EACV,CAAC;CAAO,CAAA,GACP,QAAQ,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAe,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,MAAK;GAAS,WAAU;GAAc,UAAU,IAAI,gBAAgB,OAAO,WAAW;GAAG,eAAe,IAAI,WAAW,KAAK,IAAK,EAAE,UAAU,OAAO,CAAC;GAAI,UAAA,EAAE,QAAQ;EAAU,CAAA;CAAM,CAAA,IAAI,IAC9N,EAAA,CAAA;AACZ;AACA,SAAS,eAAe,EAAE,MAAM,QAAQ,KAA2D;CACjG,MAAM,WAAW,aAAa,QAAQ,IAAI,CAAC,EAAE;CAC7C,MAAM,SAAS,MAAM,QAAQ,QAAQ,IAAI,WAAW,CAAC;CACrD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAe,MAAK;EAAQ,cAAY,EAAE,aAAa;EAAI,UAAA,UAAU,IAAI,CAAC,CAAC,KAAI,WAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAwB,WAAU;GAAlC,UAAA,CAAgD,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;IAAM,WAAU;IAAhB,UAAA,CAAmC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAqB,UAAA,OAAO;IAAY,CAAA,GAAE,OAAO,cAAc,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAoB,UAAA,OAAO;IAAkB,CAAA,IAAI,IAAW;GAAE,CAAA,GAAA,OAAO,SAAS,OAAO,KAAK,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAa,MAAK;IAAM,cAAY,EAAE,UAAU;IAAG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA;GAAO,CAAA,IAAI,IAAU;EAA1W,GAAA,OAAO,KAAmW,CAAC;CAAO,CAAA;AAC7e;AACA,SAAS,aAAa,EAAE,MAAM,KAAK,KAA6C;CAC9E,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAA8B,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,MAAK;GAAS,WAAU;GAAc,UAAU,IAAI;GAAc,eAAe,IAAI,WAAW,KAAK,IAAK,EAAE,WAAW,MAAM,CAAC;GAAI,UAAA,KAAK,eAAe,EAAE,QAAQ;EAAU,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,MAAK;GAAS,WAAU;GAAc,UAAU,IAAI;GAAc,eAAe,IAAI,WAAW,KAAK,IAAK,EAAE,WAAW,KAAK,CAAC;GAAI,UAAA,KAAK,gBAAgB,EAAE,SAAS;EAAU,CAAA,CAAM;;AACnZ;AACA,SAAS,eAAe,EAAE,MAAM,QAAQ,KAA2D;CACjG,MAAM,YAAY,aAAa,QAAQ,IAAI,CAAC,EAAE;CAC9C,IAAI,OAAO,cAAc,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;EAAoB;EAAM,KAAK,EAAE,cAAc,KAAK;EAAa;CAAI,CAAA;CAChH,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;EAAM,WAAU;EAAc,UAAA,YAAY,KAAK,gBAAgB,EAAE,SAAS,IAAI,KAAK,eAAe,EAAE,QAAQ;CAAQ,CAAA;AAC7H;AACA,SAAS,UAAU,EAAE,MAAM,KAAK,KAA6C;CAC3E,MAAM,SAAS,SAAS,IAAI;CAC5B,MAAM,CAAC,OAAO,aAAA,GAAYD,MAAAA,SAAAA,CAAiC,CAAC,CAAC;CAC7D,MAAM,eAAe;EAAE,IAAI,CAAC,IAAI,cAAc,IAAI,WAAW,KAAK,IAAK,EAAE,QAAQ,OAAO,YAAY,OAAO,KAAI,UAAS,CAAC,MAAM,IAAI,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC;CAAE;CAC/J,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;EAAM,WAAU;EAAY,WAAU,UAAS;GAAE,MAAM,eAAe;GAAG,OAAO;EAAE;EAAlF,UAAA,CAAsF,OAAO,KAAI,UAAS,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAsB,WAAU;GAAhC,UAAA,CAA6C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoB,UAAA,MAAM;GAAY,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAU;IAAa,MAAK;IAAO,OAAO,MAAM,MAAM,OAAO;IAAI,cAAa;IAAM,YAAY;IAAO,UAAU,IAAI;IAAc,cAAY,MAAM;IAAO,aAAa,MAAM;IAAa,WAAU,UAAS,UAAS,aAAY;KAAE,GAAG;MAAU,MAAM,KAAK,MAAM,OAAO;IAAM,EAAE;GAAI,CAAA,CAAQ;EAA9X,GAAA,MAAM,EAAwX,CAAC,GAAE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAe,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,MAAK;IAAS,WAAU;IAAc,UAAU,IAAI;IAAe,UAAA,KAAK,eAAe,EAAE,QAAQ;GAAU,CAAA;EAAM,CAAA,CAAO;;AAC9pB;AACA,SAAS,YAAY,EAAE,MAAM,UAAsD;CACjF,MAAM,SAAS,aAAa,QAAQ,IAAI,CAAC,EAAE;CAC3C,MAAM,SAAS,WAAW,QAAQ,OAAO,WAAW,WAAW,SAAoC,CAAC;CACpG,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAa,UAAA,SAAS,IAAI,CAAC,CAAC,KAAI,UAAS,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD;GAAsB,WAAU;GAAhC,UAAA,CAA6C,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAoB,UAAA,MAAM;GAAY,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAO,WAAU;IAAa,OAAO,OAAO,OAAO,MAAM,OAAO,EAAE;IAAG,UAAA;IAAS,UAAA;IAAS,cAAY,MAAM;GAAQ,CAAA,CAAQ;EAAjN,GAAA,MAAM,EAA2M,CAAC;CAAO,CAAA;AACtS;AACA,SAAS,YAAY,EAAE,MAAM,UAAiE;CAC5F,MAAM,UAAU,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK,UAAU,CAAC;CAC9D,MAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,IAAI,KAAK,OAAO,CAAC,EAAA,CAAG,KAAI,SAAQ,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,EAAA,CAAG,KAAI,SAAQ,QAAQ,MAAM,QAAQ,EAAE,CAAC,CAAC;CAC1I,MAAM,UAAU,QAAQ,KAAK,GAAG,UAAU;EACxC,MAAM,QAAQ,KAAK,KAAI,QAAO,IAAI,MAAM,CAAC,CAAC,QAAO,SAAQ,SAAS,KAAA,KAAa,SAAS,EAAE;EAC1F,OAAO,MAAM,SAAS,KAAK,MAAM,OAAM,SAAQ,OAAO,SAAS,YAAa,OAAO,SAAS,YAAY,aAAa,KAAK,KAAK,KAAK,CAAC,CAAE;CACzI,CAAC;CACD,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAa,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAC,SAAD,EAAA,UAAA,CAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAK,QAAQ,KAAK,QAAQ,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAA8B,OAAM;GAAM,WAAW,QAAQ,SAAS,aAAa,KAAA;GAAY,UAAA,OAAO;EAAU,GAAvG,OAAO,OAAO,KAAyF,CAAC,EAAM,CAAA,EAAQ,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD,EAAA,UAAQ,KAAK,KAAK,KAAK,aAAa,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD,EAAA,UAAoB,QAAQ,KAAK,QAAQ,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,MAAD;GAA8B,WAAW,QAAQ,SAAS,aAAa,KAAA;GAAY,UAAA,SAAS,IAAI,MAAM;EAAM,GAAnG,OAAO,OAAO,KAAqF,CAAC,EAAM,GAA7J,QAA6J,CAAC,EAAS,CAAA,CAAQ,EAAA,CAAA;CAAM,CAAA;AACzb;AACA,SAAS,eAAe,EAAE,MAAM,QAAQ,KAAsE;CAC5G,IAAI;CACJ,IAAI,KAAK,YAAY,KAAA,GAAW,UAAU,OAAO,QAAQ,KAAK,SAAS,QAAQ,CAAC,CAAC;MAC5E;EACH,MAAM,MAAM,OAAO,QAAQ,KAAK,KAAK,QAAQ,CAAC,CAAC;EAC/C,UAAU,MAAM,IAAK,OAAO,QAAQ,KAAK,OAAO,QAAQ,CAAC,CAAC,IAAI,MAAO,MAAM;CAC7E;CACA,UAAU,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,OAAO,SAAS,OAAO,IAAI,UAAU,CAAC,CAAC;CAC3E,MAAM,OAAO,QAAQ,KAAK,MAAM,MAAM;CACtC,MAAM,QAAQ,KAAK,eAAe,KAAA,IAAY,OAAO,QAAQ,KAAK,YAAY,QAAQ,EAAE,CAAC,IAAI,GAAG,KAAK,MAAM,OAAO,EAAE;CACpH,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAgB,aAAW,MAAM,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,IAAI,KAAA;EAAxF,UAAA,CAAmG,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CAAsC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,KAAK,MAAY,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD,EAAA,UAAO,MAAY,CAAA,CAAO;EAAC,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAsB,MAAK;GAAc,iBAAe,KAAK,MAAM,OAAO;GAAG,iBAAe;GAAG,iBAAe;GAAK,cAAY,KAAK,SAAS,EAAE,UAAU;GAAG,kBAAgB;GAAO,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAqB,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG;GAAI,CAAA;EAAM,CAAA,CAAM;;AAC1d;AACA,SAAS,aAAa,EAAE,MAAM,UAAiE;CAC7F,MAAM,OAAO,QAAQ,KAAK,MAAM,MAAM;CACtC,MAAM,UAAU,KAAK,YAAY,KAAA,IAAY,KAAK,OAAO,QAAQ,KAAK,SAAS,QAAQ,EAAE,CAAC;CAC1F,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAc,aAAW,MAAM,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,IAAI,KAAA;EAAtF,UAAA;GAAiG,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAqB,UAAA,KAAK;GAAY,CAAA;GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAqB,UAAA,OAAO,QAAQ,KAAK,OAAO,QAAQ,GAAG,CAAC;GAAQ,CAAA;GAAE,YAAY,KAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAgB,UAAA;GAAc,CAAA,IAAI;EAAU;;AACpU;AACA,SAAS,cAAc,EAAE,MAAM,QAAQ,UAAU,UAA6H;CAC5K,MAAM,OAAO,QAAQ,KAAK,MAAM,MAAM;CACtC,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAe,aAAW,cAAc,SAAS,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,IAAI;EAA/F,UAAA,CAAuG,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,eAAY;GAAO,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA;EAAO,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD,EAAA,UAAK,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAU,MAAM,OAAO,QAAQ,KAAK,MAAM,QAAQ,EAAE,CAAC;GAAW;GAAQ,SAAQ;EAAW,CAAA,EAAM,CAAA,CAAM;;AACtS;AACA,SAAS,cAAc,EAAE,MAAM,KAAmC;CAChE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAe,MAAK;EAAO,cAAY,EAAE,SAAS;EAAK,WAAA,KAAK,SAAS,CAAC,EAAA,CAAG,KAAK,MAAM,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;GAAgC,MAAK;GAAW,WAAU;GAAc,MAAM,KAAK;GAAK,QAAO;GAAS,KAAI;GAAsB,OAAO,KAAK;GAA9I,UAAA,CAAmJ,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA,GAAE,KAAK,KAAS;EAAtK,GAAA,GAAG,KAAK,IAAI,GAAG,OAAuJ,CAAC;CAAO,CAAA;AAC5S;AACA,SAAS,UAAU,EAAE,IAAI,OAAO,SAAyD;CACvF,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAAiC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAAO,SAAS;GAAI,WAAU;GAAoB,UAAA;EAAa,CAAA,GAAE,UAAU,KAAA,IAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,SAAS;GAAI,WAAU;GAAoB,UAAA;EAAc,CAAA,IAAI,IAAU;;AAChN;AACA,MAAM,gBAAgB,UAAmB,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK,IAAI,QAAQ,OAAO,UAAU,YAAY,MAAM,KAAK,MAAM,MAAM,OAAO,SAAS,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,IAAI,KAAA;AAC5M,SAAS,YAAY,EAAE,MAAM,OAAqC;CAChE,MAAM,MAAA,GAAKE,MAAAA,MAAAA,CAAM;CACjB,MAAM,QAAQ,OAAO,IAAI,OAAO,KAAK,GAAI;CAEzC,MAAM,MAAM,aAAa,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAA,CAAS,CAAC;CACjE,MAAM,MAAM,aAAa,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAA,CAAS,CAAC;CACjE,MAAM,UAAU,QAAQ,KAAA,KAAa,QAAQ,KAAA,KAAa,MAAM,OAAQ,QAAQ,QAAQ,MAAM,OAAQ,MAAM;CAC5G,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAAgC,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GAAe;GAAI,OAAO,KAAK;GAAO,OAAO,SAAS,QAAQ,KAAK,GAAG,KAAK,IAAI;EAAI,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;GAAW;GAAI,MAAK;GAAQ,WAAU;GAAkB;GAAU;GAAK,MAAM,KAAK,QAAQ;GAAc;GAAO,UAAU,IAAI;GAAQ,OAAO,EAAE,gBAAgB,GAAG,QAAQ,GAAG;GAA0B,WAAU,UAAS,IAAI,SAAS,KAAK,IAAK,OAAO,MAAM,OAAO,KAAK,CAAC;EAAI,CAAA,CAAM;;AACjZ;AACA,SAAS,YAAY,EAAE,MAAM,OAAqC;CAChE,MAAM,MAAA,GAAKA,MAAAA,MAAAA,CAAM;CACjB,MAAM,CAAC,OAAO,aAAA,GAAYF,MAAAA,SAAAA,CAAwB,IAAI;CACtD,MAAM,QAAQ,IAAI,OAAO,KAAK;CAC9B,MAAM,MAAM,aAAa,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAA,CAAS,CAAC;CACjE,MAAM,MAAM,aAAa,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAA,CAAS,CAAC;CACjE,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAAgC,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GAAe;GAAI,OAAO,KAAK;EAAQ,CAAA,GAAC,iBAAA,GAAA,kBAAA,KAAA,CAAC,QAAD;GAAM,WAAU;GAAhB,UAAA,CAA8B,iBAAA,GAAA,kBAAA,IAAA,CAAC,SAAD;IAAW;IAAI,WAAU;IAAa,MAAK;IAAS,WAAU;IAAU,OAAO,SAAS,OAAO,KAAK;IAAQ;IAAU;IAAK,MAAM,KAAK,QAAQ;IAAO,UAAU,IAAI;IAAQ,WAAU,UAAS;KACzS,MAAM,MAAM,MAAM,OAAO;KACzB,SAAS,GAAG;KACZ,MAAM,OAAO,OAAO,GAAG;KACvB,IAAI,IAAI,KAAK,MAAM,MAAM,CAAC,OAAO,SAAS,IAAI,KAAM,QAAQ,KAAA,KAAa,OAAO,OAAS,QAAQ,KAAA,KAAa,OAAO,KAAM;KAC3H,IAAI,SAAS,KAAK,IAAK,IAAI;IAC7B;IAAG,cAAc,SAAS,IAAI;GAAI,CAAA,GAAE,KAAK,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAa,UAAA,KAAK;GAAW,CAAA,IAAI,IAAW;EAAM,CAAA,CAAA;;AACpH;AACA,SAAS,YAAY,EAAE,MAAM,OAAqC;CAChE,MAAM,WAAA,GAAUE,MAAAA,MAAAA,CAAM;CACtB,MAAM,UAAU,UAAU,IAAI;CAC9B,MAAM,UAAU,IAAI,OAAO,KAAK;CAChC,MAAM,OAAO,QAAQ,UAAU,KAAK,QAAQ,OAAM,WAAU,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,UAAU,EAAE;CAC1F,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAAgC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAmB,IAAI;GAAU,UAAA,KAAK;EAAY,CAAA,GAAE,OACvG,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GAAW,OAAO,KAAK,SAAS;GAAI,OAAO,QAAQ,WAAU,WAAU,YAAY,MAAM,MAAM,OAAO;GAAG,WAAU;GAAmB,UAAA,QAAQ,KAAI,WAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAA2B,MAAK;IAAS,gBAAc,YAAY,MAAM,MAAM;IAAS,UAAU,IAAI;IAAQ,eAAe,IAAI,SAAS,KAAK,IAAK,YAAY,MAAM,CAAC;IAAI,UAAA,OAAO;GAAc,GAAnL,OAAO,KAA4K,CAAC;EAAa,CAAA,IAC1W,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAc,MAAK;GAAa,mBAAiB;GAAU,UAAA,QAAQ,KAAI,WAAU,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;IAA2B,MAAK;IAAS,MAAK;IAAQ,WAAU;IAAa,gBAAc,YAAY,MAAM,MAAM;IAAS,UAAU,IAAI;IAAQ,eAAe,IAAI,SAAS,KAAK,IAAK,YAAY,MAAM,CAAC;IAA3M,UAAA,CAA8M,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;KAAM,WAAU;KAAiB,eAAY;IAAQ,CAAA,GAAE,OAAO,KAAc;GAA7Q,GAAA,OAAO,KAAsQ,CAAC;EAAO,CAAA,CAAO;;AAC/Y;AACA,SAAS,YAAY,EAAE,MAAM,OAAqC;CAChE,MAAM,KAAK,IAAI,OAAO,KAAK,QAAS;CACpC,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAA6B,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,UAAA,KAAK;EAAY,CAAA,GAAC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,MAAK;GAAS,MAAK;GAAS,WAAU;GAAc,gBAAc;GAAI,cAAY,KAAK;GAAO,UAAU,IAAI;GAAQ,eAAe,IAAI,SAAS,KAAK,IAAK,CAAC,EAAE;GAAG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;IAAM,WAAU;IAAmB,eAAY;GAAQ,CAAA;EAAS,CAAA,CAAM;;AAC1U;AACA,SAAS,WAAW,EAAE,MAAM,KAAK,UAAU,QAAQ,KAAyG;CAC1J,MAAM,EAAE,WAAW;CACnB,QAAQ,KAAK,MAAb;EACE,KAAK;EAAS,KAAK,OAAO,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAW,KAAK,SAAS,QAAQ,aAAa;GAAgB,WAAA,KAAK,YAAY,CAAC,EAAA,CAAG,KAAK,OAAO,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;IAAuD,MAAM;IAAY;IAAe;IAAkB;IAAW;GAAI,GAAxG,MAAM,MAAM,GAAG,MAAM,KAAK,GAAG,OAA2E,CAAC;EAAO,CAAA;EAChR,KAAK,QAAQ;GACX,MAAM,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAU,MAAM,OAAO,QAAQ,KAAK,MAAM,QAAQ,EAAE,CAAC;IAAW;IAAQ,SAAQ;GAAW,CAAA;GACxG,OAAO,KAAK,SAAS,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAc,UAAA;GAAU,CAAA,IAAI;EAC5E;EACA,KAAK,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAoB;GAAc;EAAS,CAAA;EACjE,KAAK,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAc;EAAS,CAAA;EAC/D,KAAK,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAc;GAAQ,eAAe,IAAI;GAAe,eAAe,IAAI;GAAkB;EAAI,CAAA;EACzI,KAAK,YAAY,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;GAAsB;GAAc;GAAW;EAAI,CAAA;EAC3E,KAAK,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;GAAqB;GAAc;GAAkB;GAAkB;EAAS,CAAA;EACvG,KAAK,WAAW,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;GAAqB;GAAS;EAAI,CAAA;EACzD,KAAK,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAW;EAAM,CAAA;EAC1D,KAAK,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAW;EAAM,CAAA;EAC1D,KAAK,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAW;EAAM,CAAA;EAC1D,KAAK,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAW;EAAM,CAAA;EAC1D,KAAK,UAAU,OAAO,IAAI,UAAU,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAe,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;IAAQ,MAAK;IAAS,WAAU;IAAc,UAAU,IAAI;IAAc,eAAe,IAAI,WAAW,KAAK,IAAK,CAAC,CAAC;IAAI,UAAA,KAAK,SAAS,EAAE,MAAM;GAAU,CAAA;EAAM,CAAA;EACvO,KAAK,WAAW,OAAO,IAAI,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;GAAsB;GAAM,QAAQ,IAAI;GAAW;EAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAoB;GAAW;GAAQ;EAAI,CAAA;EAC3I,KAAK,WAAW,OAAO,IAAI,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,gBAAD;GAAsB;GAAM,QAAQ,IAAI;GAAW;EAAI,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAoB;GAAW;GAAQ;EAAI,CAAA;EAC3I,KAAK,QAAQ,OAAO,IAAI,UAAU,iBAAA,GAAA,kBAAA,IAAA,CAAC,aAAD;GAAmB;GAAM,QAAQ,IAAI;EAAS,CAAA,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;GAAiB;GAAW;GAAQ;EAAI,CAAA;EAC5H,SAAS,OAAO;CAClB;AACF;AACA,SAAgB,WAAW,EAAE,MAAM,UAAU,UAAU,OAAO,SAAS,MAAM,OAAO,OAAO,eAAe,eAAe,IAAI,SAAS,SAAS;CAAE,MAAM;EAAE,WAAW;EAAQ,aAAa;CAAS;CAAG,WAAW;AAAY,GAAG,WAAW,oBAAyH;CACjW,MAAM,SAAS,WAAW,IAAI;CAC9B,MAAM,CAAC,QAAQ,cAAA,GAAaF,MAAAA,SAAAA,OAAwC,OAAO,YAAY,OAAO,KAAI,SAAQ,CAAC,KAAK,IAAI,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;CACzI,MAAM,OAAO,QAAQ,QAAQ;CAC7B,MAAM,UAAU,WAAW,SAAS,QAAQ,OAAO,SAAS,WAAW;EAAE,GAAG;EAAQ,GAAG;CAAK,IAAI;CAChG,MAAM,UAAU,QAAgB,UAAmC,WAAW,QAAQ,OAAO,SAAS,IAAI;EAAE,GAAG;EAAO,QAAQ;CAAQ,IAAI,KAAK;CAC/I,MAAM,MAAW;EACf,UAAU;EAAQ;EAAS;EAAQ;EAAM,QAAQ,UAAU,MAAM,OAAO;EAAG,QAAQ;EAAS,QAAQ,WAAW;EAAM,cAAc,WAAW,QAAQ,aAAa,KAAA;EACnK,WAAW,IAAI,UAAU,WAAU,YAAW;GAAE,GAAG;IAAS,KAAK;EAAM,EAAE;EAAG;EAAe;CAC7F;CACA,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;EAAY,MAAM;EAAW;EAAe;EAAkB;EAAW;CAAI,CAAA;AACtF;AACA,SAAS,kBAAkB;CACzB,MAAM,GAAG,SAAA,GAAQA,MAAAA,SAAAA,CAAS,CAAC;CAC3B,MAAM,UAAA,GAASG,MAAAA,OAAAA,iBAAO,IAAI,IAAyB,CAAC;CACpD,MAAM,iBAAA,GAAgBC,MAAAA,YAAAA,OAAkB,MAAK,UAAS,QAAQ,CAAC,GAAG,CAAC,CAAC;CACpE,MAAM,iBAAA,GAAgBA,MAAAA,YAAAA,EAAa,KAAa,WAAwB;EACtE,OAAO,QAAQ,IAAI,KAAK,MAAM;EAC9B,cAAc;EACd,aAAa;GAAE,OAAO,QAAQ,OAAO,GAAG;GAAG,cAAc;EAAE;CAC7D,GAAG,CAAC,aAAa,CAAC;CAClB,OAAO;EAAE,QAAQ,CAAC,GAAG,OAAO,QAAQ,OAAO,CAAC;EAAG;EAAe;CAAc;AAC9E;AACA,SAAS,SAAS,EAAE,QAAQ,KAA0C;CACpE,MAAM,CAAC,MAAM,YAAA,GAAWJ,MAAAA,SAAAA,CAAS,KAAK;CACtC,MAAM,QAAA,GAAOG,MAAAA,OAAAA,CAAuB,IAAI;CACxC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,IAAI,CAAC,MAAM,OAAO,KAAA;EAClB,MAAM,QAAQ,UAAwB;GAAE,IAAI,CAAC,KAAK,SAAS,SAAS,MAAM,MAAc,GAAG,QAAQ,KAAK;EAAE;EAC1G,MAAM,OAAO,UAAyB;GAAE,IAAI,MAAM,QAAQ,UAAU,QAAQ,KAAK;EAAE;EACnF,SAAS,iBAAiB,eAAe,MAAM,IAAI;EACnD,SAAS,iBAAiB,WAAW,GAAG;EACxC,aAAa;GAAE,SAAS,oBAAoB,eAAe,MAAM,IAAI;GAAG,SAAS,oBAAoB,WAAW,GAAG;EAAE;CACvH,GAAG,CAAC,IAAI,CAAC;CACT,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,KAAK;EAAM,WAAU;EAAa,aAAW,OAAO,KAAK,KAAA;EAA9D,UAAA,CAAyE,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GAAQ,MAAK;GAAS,WAAU;GAAY,cAAY,EAAE,eAAe;GAAG,iBAAc;GAAO,iBAAe;GAAM,eAAe,SAAQ,UAAS,CAAC,KAAK;GAAG,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA;EAAS,CAAA,GAAE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAAY,MAAK;GAAQ,UAAA,OAAO,KAAK,OAAO,UAAU,iBAAA,GAAA,kBAAA,KAAA,CAACF,MAAAA,UAAD,EAAA,UAAA;IAA2C,OAAO,SAAS,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;KAAK,WAAU;KAAmB,UAAA,MAAM,SAAS,EAAE,aAAa,EAAE,GAAG,QAAQ,EAAE,CAAC;IAAO,CAAA,IAAI;IAAK,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,MAAK;KAAS,MAAK;KAAW,eAAe;MAAE,QAAQ,KAAK;MAAG,MAAM,YAAY;KAAE;KAA3F,UAAA,CAA8F,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD,CAAY,CAAA,GAAE,MAAM,UAAU,EAAE,eAAe,IAAI,EAAE,eAAe,CAAU;;IAAC,iBAAA,GAAA,kBAAA,KAAA,CAAC,UAAD;KAAQ,MAAK;KAAS,MAAK;KAAW,eAAe;MAAE,QAAQ,KAAK;MAAG,MAAM,KAAK;KAAE;KAApF,UAAA,CAAuF,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD,CAAW,CAAA,GAAE,EAAE,WAAW,CAAU;;GAAW,EAAA,GAAnc,GAAG,MAAM,MAAM,GAAG,OAAib,CAAC;EAAO,CAAA,IAAI,IAAU;;AAC3zB;AACA,SAAgB,WAAW,EAAE,QAAQ,IAAI,MAAM,UAAU,WAAW,OAAO,OAAO,UAAU,OAAO,SAAS,MAAM,IAAI,SAAS,QAAQ,UAAU,YAAY,SAA0B;CACrL,MAAM,WAAA,GAAUC,MAAAA,MAAAA,CAAM;CACtB,MAAM,EAAE,QAAQ,eAAe,kBAAkB,gBAAgB;CACjE,MAAM,SAAS,QAAQ,sBAAM,IAAI,IAAI;EAAC;EAAU;EAAU;EAAU;EAAU;EAAW;EAAW;EAAQ;CAAQ,CAAC,CAAC;CACtH,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAW,aAAa,SAAS,gBAAgB,cAAc,UAAU,kBAAkB;EAAM,MAAK;EAAQ,mBAAiB,QAAQ,UAAU,KAAA;EAAW,cAAY,QAAQ,KAAA,IAAY,EAAE,MAAM;EAAG,aAAW,QAAQ,KAAA;EAA/N,UAAA;GACJ,SAAS,aAAa,OAAO,SAAS,IAAI,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA;KAA2B,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;MAAG,WAAU;MAAa,IAAI;MAAU,UAAA;KAAS,CAAA;KAAE,OAAO,SAAS,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAkB;MAAW;KAAI,CAAA,IAAI;KAAM,YAAY,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;MAAQ,MAAK;MAAS,WAAU;MAAe,cAAY,EAAE,cAAc;MAAG,SAAS;MAAW,UAAU;MAAM,UAAA;KAAS,CAAA,IAAI;IAAU;GAAI,CAAA,IAAA;GACjV,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IAAY,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;KAAkB;KAAgB;KAAmB;KAAiB;KAAc;KAAqB;KAA8B;KAAkB;KAAW;KAAkB;IAAW,CAAA;GAAM,CAAA;GACjO,aAAa,QAAQ,sBAAM,IAAI,IAAI;IAAC;IAAW;IAAW;IAAQ;GAAQ,CAAC,CAAC,IAAI,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;IAAG,WAAU;IAAkB,MAAK;IAAQ,UAAA,EAAE,wDAAwD;GAAK,CAAA,IAAI;EAC7L;;AACP;;;ACzPA,MAAa,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACE1B,SAAS,SAAS,MAA4B;CAC5C,OAAO;EAAC;EAAW;EAAW;EAAQ;CAAQ,CAAC,CAAC,SAAS,KAAK,IAAI,IAC9D,CAAC,IAAI,KAAK,KAAK,YAAY,CAAC,EAAA,CAAG,QAAQ,QAAQ;AACrD;AAEA,SAAgB,WAAW,MAAoC,QAAgB,QAAyC;CACtH,MAAM,OAAO,SAAS,KAAK,IAAI,CAAC,CAAC,MAAK,SAAQ,KAAK,OAAO,MAAM;CAChE,MAAM,QAAQ,CAAC,KAAK,SAAS,WAAW;CACxC,IAAI,MAAM,QAAQ,OAAO,QAAQ,GAAG,MAAM,KAAK,OAAO,SAAS,IAAI,MAAM,CAAC,CAAC,KAAK,IAAI,CAAC;CACrF,IAAI,OAAO,OAAO,cAAc,WAAW,MAAM,KAAK,OAAO,YACzD,MAAM,gBAAgB,YAAY,MAAM,eAAe,QAAQ;CACnE,IAAI,SAAS,OAAO,MAAM,GACxB,KAAK,MAAM,SAAS,MAAM,UAAU,CAAC,GAAG,MAAM,KAAK,GAAG,MAAM,MAAM,IAAI,OAAO,OAAO,OAAO,MAAM,OAAO,EAAE,GAAG;CAE/G,MAAM,SAAS,cAAc,KAAK,MAAM,OAAO,MAAM;CACrD,IAAI,QAAQ,MAAM,KAAK,MAAM;CAC7B,IAAI,MAAM,SAAS,UAAU,MAAM,KAAK,KAAK,SAAS,QAAQ;CAC9D,OAAO,MAAM,KAAK,IAAI;AACxB;;;;AAKA,SAAgB,aAAa,MAAY,MAAiC;CACxE,IAAI,KAAK,WAAW,GAAG,GACrB,IAAI;EACF,MAAM,OAAgB,KAAK,MAAM,IAAI;EACrC,IAAI,CAAC,SAAS,IAAI,KAAK,KAAK,SAAS,4BAA4B,KAAK,SAAS,eAAe,CAAC,MAAM,QAAQ,KAAK,OAAO,GAAG,OAAO;EACnI,MAAM,SAAS,KAAK,QAAQ,MAAK,UAAS,SAAS,KAAK,KAAK,MAAM,OAAO,KAAK,EAAE;EACjF,IAAI,CAAC,SAAS,MAAM,KAAK,OAAO,OAAO,WAAW,UAAU,OAAO;EACnE,MAAM,SAAS,mBAAmB,KAAK,MAAM,OAAO,QAAQ,OAAO,MAAM;EACzE,OAAO,OAAO,UAAU,KAAA,IAAY;GAAE,IAAI,KAAK;GAAI,QAAQ,OAAO;GAAQ;EAAO,IAAI;CACvF,QAAQ;EAAE,OAAO;CAAK;CAExB,MAAM,QAAQ,KAAK,MAAM,IAAI;CAC7B,IAAI,MAAM,MAAM,OAAO,KAAK,SAAS,cAAc,OAAO;CAC1D,MAAM,aAA2B,CAAC;CAClC,KAAK,MAAM,QAAQ,SAAS,KAAK,IAAI,GAAG;EACtC,MAAM,OAAO,CAAC,GAAG,KAAK;EACtB,MAAM,SAAkC,CAAC;EACzC,IAAI,KAAK,SAAS,WAAW;GAC3B,MAAM,OAAO,KAAK,MAAM;GACxB,IAAI,SAAS,KAAA,GAAW;GACxB,MAAM,SAAS,KAAK,SAAS,KAAI,WAAU,OAAO,KAAK,KAAK,CAAC;GAC7D,IAAI,KAAK,SAAS,OAAO,MAAK,UAAS,MAAM,SAAS,IAAI,CAAC,GAAG;GAC9D,OAAO,WAAW,KAAK,QAAQ,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI;EACzD,OAAO,IAAI,KAAK,SAAS,WAAW;GAClC,MAAM,OAAO,KAAK,MAAM,GAAG,MAAM,KAAK,gBAAgB,WAAW,KAAK,KAAK,eAAe;GAC1F,IAAI,QAAQ,MAAM,SAAS,OAAO,SAAS,IAAI;GAC/C,OAAO,YAAY,SAAS;EAC9B,OAAO,IAAI,KAAK,SAAS,QAAQ;GAC/B,MAAM,SAAiC,CAAC;GACxC,IAAI,QAAQ;GACZ,KAAK,MAAM,SAAS,KAAK,UAAU,CAAC,GAAG;IACrC,MAAM,OAAO,KAAK,MAAM,GAAG,SAAS,GAAG,MAAM,MAAM;IACnD,IAAI,SAAS,KAAA,KAAa,CAAC,KAAK,WAAW,MAAM,GAAG;KAAE,QAAQ;KAAO;IAAM;IAC3E,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO,MAAM;GAC7C;GACA,IAAI,CAAC,OAAO;GACZ,OAAO,SAAS;EAClB;EACA,MAAM,SAAS,WAAW,KAAK,IAAI;EACnC,IAAI,OAAO,QAAQ;GACjB,MAAM,QAAQ,KAAK,MAAM,CAAC,EAAE,MAAM,IAAI;GACtC,IAAI,CAAC,SAAS,MAAM,WAAW,OAAO,QAAQ;GAC9C,MAAM,OAAgC,CAAC;GACvC,IAAI,QAAQ;GACZ,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;IACtC,MAAM,QAAQ,OAAO,IAAI,SAAS,GAAG,MAAM,SAAS,MAAM,GAAG;IAC7D,IAAI,CAAC,MAAM,EAAE,CAAC,WAAW,MAAM,GAAG;KAAE,QAAQ;KAAO;IAAM;IACzD,MAAM,QAAQ,MAAM,EAAE,CAAC,MAAM,OAAO,MAAM;IAC1C,IAAI,MAAM,SAAS,UAAU,KAAK,MAAM,MAAO,UAAU,OAAO,OAAO,UAAU,QAAQ,QAAQ,KAAA;SAC5F,IAAI,MAAM,SAAS,UAAU;KAChC,MAAM,UAAU,MAAM,SAAS,QAAO,WAAU,OAAO,UAAU,KAAK,KAAK,CAAC;KAC5E,KAAK,MAAM,MAAO,QAAQ,WAAW,IAAI,YAAY,QAAQ,EAAE,IAAI,KAAA;IACrE,OAAO;KACL,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM,SAAS;KAC7C,KAAK,MAAM,MAAO,CAAC,QAAQ,MAAM,SAAS,IAAI,IAAI,OAAO,OAAO,MAAM,MAAM,GAAG,CAAC,KAAK,MAAM,IAAI,KAAK,IAAI,KAAA;IAC1G;GACF;GACA,IAAI,CAAC,OAAO;GACZ,OAAO,SAAS;EAClB;EACA,IAAI,KAAK,SAAS,YAAY,KAAK,MAAM,OAAO,KAAK,SAAS,WAAW;EACzE,IAAI,KAAK,UAAU,CAAC,KAAK,IAAI;EAC7B,MAAM,UAAU,mBAAmB,KAAK,MAAM,KAAK,IAAI,MAAM;EAC7D,IAAI,QAAQ,UAAU,KAAA,KAAa,WAAW,MAAM,KAAK,IAAI,OAAO,MAAM,MACxE,WAAW,KAAK;GAAE,IAAI,KAAK;GAAI,QAAQ,KAAK;GAAI,QAAQ;EAAQ,CAAC;CAErE;CACA,OAAO,WAAW,WAAW,IAAI,WAAW,KAAK;AACnD;;;;ACzFA,SAAgB,aAAa,UAA0D;CACrF,MAAM,0BAAU,IAAI,IAAwB;CAC5C,IAAI,QAAyD,CAAC;CAC9D,MAAM,WAAW,UAAyB;EACxC,MAAM,OAAO,MAAM;EACnB,IAAI,MAAM,SAAS,iBAAiB,CAAC,MAAM,WAAW,SAAS,IAAI,KAAK,KAAK,UAAA,mBAAwB,KAAK,eAAe,QAAQ,OAAO,KAAK,WAAW,UAAU;GAChK,MAAM,QAAQ,eAAe,KAAK,OAAO,KAAK,IAAI;GAClD,IAAI,EAAE,WAAW,QAAQ,MAAM,KAAK;IAAE,IAAI,KAAK;IAAQ,OAAO,MAAM;IAAO,MAAM,MAAM;GAAK,CAAC;EAC/F;EACA,KAAK,MAAM,SAAS,MAAM,YAAY,CAAC,GAAG,QAAQ,KAAK;CACzD;CACA,KAAK,MAAM,OAAO,SAAS,OAAO;EAChC,MAAM,OAAO,SAAS,MAAM,IAAI,GAAG;EACnC,IAAI,MAAM,SAAS,eAAe,KAAK,MAAM,MAAM,QAAQ,KAAK,KAAK,IAAI;EACzE,IAAI,MAAM,SAAS,UAAU,MAAM,SAAS,YAAY;EACxD,MAAM,SAAS,KAAK,MAAM;EAC1B,IAAI,CAAC,SAAS,MAAM,KAAK,OAAO,SAAS,QAAQ;EAGjD,IAAI,OAAO,aAAa,KAAA,GAAW;GACjC,MAAM,OAAO,KAAK,MAAM,SAAS,OAAO,QAAQ,CAAC,CAAC,QAAO,UAAS,MAAM,SAAS,MAAM,CAAC,CAAC,KAAI,UAAS,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK;GAC9H,MAAM,aAAa,MAAM,KAAI,SAAQ,aAAa,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,WAAiC,WAAW,IAAI;GACvH,IAAI,WAAW,WAAW,KAAK,CAAC,QAAQ,IAAI,WAAW,EAAE,CAAC,EAAE,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC,IAAI,WAAW,EAAE;EAC5G;EACA,QAAQ,CAAC;EACT,IAAI,CAAC,SAAS,OAAO,QAAQ,GAAG;EAChC,MAAM,OAAO,OAAO;EACpB,IAAI,KAAK,UAAA,mBAAwB,KAAK,YAAY,KAAK,CAAC,SAAS,KAAK,MAAM,GAAG;EAC/E,MAAM,SAAS,KAAK;EACpB,IAAI,OAAO,OAAO,OAAO,YAAY,OAAO,OAAO,WAAW,YAAY,CAAC,SAAS,OAAO,MAAM,GAAG;EAEpG,IAAI,CAAC,QAAQ,IAAI,OAAO,EAAE,GAAG,QAAQ,IAAI,OAAO,IAAI,MAAoB;CAC1E;CACA,OAAO;AACT;AAEA,SAAgB,cAAc,QAAgC,IAAwB,MAAmC;CACvH,IAAI,CAAC,UAAU,CAAC,MAAM,OAAO,OAAO,IAAI,OAAO;CAC/C,MAAM,SAAS,mBAAmB,MAAM,OAAO,QAAQ,OAAO,MAAM;CACpE,OAAO,OAAO,UAAU,KAAA,IAAY;EAAE;EAAI,QAAQ,OAAO;EAAQ;CAAO,IAAI;AAC9E;AAEA,SAAgB,YAAY,MAAuC,OAAiD;CAClH,OAAO,KAAK,SAAS,MAAM,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,YAAY;EACnE,MAAM,OAAO,MAAM,IAAI,EAAE;EACzB,OAAO,SAAS,UAAU,MAAM,WAAW,OAAO,UAAU,KAAK,UAAU,KAAK,MAAM,MAAM,KAAK,UAAU,OAAO,MAAM;CAC1H,CAAC;AACH;;;AC3CA,MAAa,OAAO;AACpB,MAAa,SAAS;CAAC;CAAS;CAAc;AAAQ;AACtD,MAAa,SAAS;AAEtB,MAAa,OAAO;CAClB,MAAM;CAAM,QAAQ;CAAO,WAAW;CAAM,MAAM;CAAM,MAAM;CAAQ,QAAQ;CAC9E,UAAU;CAAe,WAAW;CAAW,OAAO;CAAU,SAAS;CACzE,OAAO;CAAoB,cAAc;CACzC,OAAO;CAAM,cAAc;CAAQ,aAAa;CAAQ,aAAa;CAAQ,UAAU;CACvF,aAAa;CAAU,OAAO;CAAK,QAAQ;CAAM,MAAM;CAAM,SAAS;CAAM,UAAU;CAAM,YAAY;CACxG,SAAS;CAAM,QAAQ;CAAM,QAAQ;CAAM,SAAS;CAAM,MAAM;CAAM,UAAU;AAClF;AACA,MAAa,OAA0C;CACrD,MAAM;CAAQ,QAAQ;CAAU,WAAW;CAAa,MAAM;CAAQ,MAAM;CAAc,QAAQ;CAClG,UAAU;CAA2C,WAAW;CAAmB,OAAO;CAA+B,SAAS;CAClI,OAAO;CAA0D,cAAc;CAC/E,OAAO;CAAS,cAAc;CAAiB,aAAa;CAAiB,aAAa;CAAiB,UAAU;CACrH,aAAa;CAAa,OAAO;CAAS,QAAQ;CAAU,MAAM;CAAQ,SAAS;CAAW,UAAU;CAAY,YAAY;CAChI,SAAS;CAAW,QAAQ;CAAU,QAAQ;CAAU,SAAS;CAAW,MAAM;CAAQ,UAAU;AACtG;AAGA,MAAM,SAAS,OAAyE,KAAK,WAAW;CACtG,MAAM,OAA8B;EAClC,MAAM;EAAQ,QAAQ;EAAU,WAAW;EAAa,OAAO;EAAS,iBAAiB;EACzF,iBAAiB;EAAe,iBAAiB;EAAe,aAAa;EAAY,aAAa;EACtG,OAAO;EAAS,QAAQ;EAAU,MAAM;EAAQ,SAAS;EAAW,UAAU;EAAY,eAAe;EACzG,0DAA0D;EAC1D,SAAS;EAAW,QAAQ;EAAU,QAAQ;EAAU,SAAS;EAAW,MAAM;EAAQ,UAAU;CACtG;CACA,OAAO,KAAK,OAAO,EAAE,KAAK,MAAM,MAAM,IAAI,IAAI,QAAQ,eAAe,GAAG,SAAS,OAAO,SAAS,SAAS,IAAI,KAAK,EAAE,CAAC;AACxH;AAIA,SAAS,aAAa,OAA2C;CAC/D,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAACG,sCAAAA,cAAD,EAAc,GAAI,MAAQ,CAAA;AACnC;AACA,SAAgB,kBAAkB,GAAwB;CACxD,QAAA,GAAOC,MAAAA,QAAAA,QAAe;EAAE,MAAM;GAAE,WAAW,EAAE,MAAM;GAAG,aAAa,EAAE,QAAQ;GAAG,eAAe;IAAE,WAAW,EAAE,MAAM;IAAG,WAAW,EAAE,MAAM;IAAG,aAAa,EAAE,QAAQ;GAAE;EAAE;EAAG,WAAW,EAAE,WAAW;CAAE,IAAI,CAAC,CAAC,CAAC;AAC9M;AAOA,SAAS,WAAW,OAAuC;CACzD,OAAO,SAAS,KAAK,KAAK,OAAO,MAAM,SAAS,cAAc,OAAO,MAAM,UAAU;AACvF;AACA,SAAS,SAAS,MAAgC,KAAsB;CACtE,IAAI,CAAC,WAAW,IAAI,GAAG,OAAO,KAAA;CAC9B,MAAM,QAAQ,KAAK,MAAM,GAAG;CAC5B,OAAO,UAAU,KAAA,IAAY,QAAQ,KAAK,KAAK,GAAG;AACpD;AACA,SAAgB,aAAa,OAAwK;CACnM,MAAM,QAAQ,MAAM;CACpB,MAAM,QAAQ,MAAM,UAAU,MAAM,SAAS,gBAAgB,WAAW;CACxE,MAAM,UAAU,UAAU,YAAY,MAAM,YAAY;CACxD,MAAM,OAAO,UAAU,WAAW,MAAM,OAAO,KAAA;CAC/C,IAAI,SAAS,IAAI,KAAK,KAAK,UAAA,iBAAsB;EAC/C,MAAM,QAAQ,eAAe,KAAK,OAAO,KAAK,IAAI;EAClD,IAAI,WAAW,OAAO,OAAO;GAAE,OAAO,KAAK;GAAO,MAAM,KAAK;GAAM,WAAW;GAAM;GAAO,SAAS;EAAK;EACzG,OAAO;GAAE,cAAc;IAAE,OAAO;IAAY,GAAG;IAAO,GAAI,OAAO,KAAK,WAAW,WAAW,EAAE,QAAQ,KAAK,OAAO,IAAI,CAAC;IAAI,YAAY,KAAK,eAAe;GAAK;GAAG,OAAO,KAAK;GAAO,MAAM,KAAK;GAAM,WAAW;GAAM;GAAO;EAAQ;CACzO;CACA,MAAM,OAAO,MAAM;CACnB,MAAM,QAAQ,SAAS,MAAM,OAAO;CACpC,MAAM,YAAY,UAAU,eAAe,WAAW,IAAI,KAAK,KAAK,SAAS,MAAM;CAEnF,OAAO;EAAE;EAAO,MADH,YAAY,SAAS,MAAM,MAAM,IAAI,KAAA;EAC5B;EAAW;EAAO;CAAQ;AAClD;AACA,SAAgB,aAAa,OAAgH;CAC3I,MAAM,IAAI,MAAM;CAChB,MAAM,SAAS,kBAAkB,CAAC;CAClC,MAAM,QAAA,GAAOA,MAAAA,QAAAA,OAAc,aAAa,KAAK,GAAG,CAAC,MAAM,OAAO,MAAM,KAAK,CAAC;CAC1E,MAAM,SAAA,GAAQA,MAAAA,QAAAA,OAAc;EAC1B,IAAI,KAAK,cAAc,OAAO,KAAK;EACnC,IAAI,CAAC,KAAK,aAAa,KAAK,UAAU,aAAa,OAAO,KAAA;EAC1D,MAAM,UAAU,eAAe,KAAK,OAAO,KAAK,IAAI;EACpD,OAAO,WAAW,UAAU,KAAA,IAAY;GAAE,GAAG;GAAS,YAAY,QAAQ;EAAY;CACxF,GAAG;EAAC,KAAK;EAAc,KAAK;EAAW,KAAK;EAAO,KAAK;EAAO,KAAK;CAAI,CAAC;CACzE,MAAM,CAAC,SAAS,eAAA,GAAcC,MAAAA,SAAAA,CAA6B,IAAI;CAC/D,MAAM,CAAC,MAAM,YAAA,GAAWA,MAAAA,SAAAA,CAAS,KAAK;CACtC,MAAM,CAAC,QAAQ,cAAA,GAAaA,MAAAA,SAAAA,CAAS,KAAK;CAC1C,MAAM,CAAC,aAAa,cAAA,GAAaA,MAAAA,SAAAA,CAAwB,IAAI;CAC7D,MAAM,YAAA,GAAWD,MAAAA,QAAAA,OAAc,QAC3B,cAAc,MAAM,gBAAgB,KAAK,cAAc,QAAQ,MAAM,IAAI,IAAI,MACjF;EAAC,MAAM;EAAgB,KAAK,cAAc;EAAQ;CAAK,CAAC;CACxD,MAAM,SAAS,YAAY;CAC3B,MAAM,YAAA,GAAWE,MAAAA,OAAAA,CAAO,CAAC;CACzB,MAAM,SAAS,MAAM;CACrB,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,MAAM,EAAE,SAAS;EACvB,WAAW,IAAI;EACf,UAAU,KAAK;EACf,IAAI,YAAY,CAAC,KAAK,cAAc,cAAc,CAAC,QAAQ;EAC3D,MAAW,KAAK,WAAW;GAAE,WAAW,MAAM;GAAW;EAAO,CAAC,CAAC,CAAC,MAAK,WAAU;GAChF,IAAI,SAAS,YAAY,KAAK;GAC9B,MAAM,WAAW;GACjB,IAAI,UAAU,IAAI,WAAW,SAAS,KAAK;EAC7C,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;EACjB,aAAa;GAAE,SAAS,WAAW;EAAE;CACvC,GAAG;EAAC,MAAM;EAAM,MAAM;EAAW;EAAQ,KAAK,cAAc;EAAY,KAAK,cAAc;EAAQ;CAAQ,CAAC;CAC5G,MAAM,UAAA,GAASC,MAAAA,YAAAA,EAAa,QAAgB,WAAoC;EAC9E,IAAI,CAAC,WAAW,MAAM;EACtB,QAAQ,IAAI;EACZ,UAAU,KAAK;EACf,MAAW,KAAK,SAAS;GAAE,WAAW,MAAM;GAAW,QAAQ,QAAQ;GAAI;GAAQ;EAAO,CAAC,CAAC,CAAC,MAAK,WAAU;GAE1G,IAAIC,QAAU,IAAI;IAAE,UAAU;KAAE,IAAI,QAAQ;KAAI;KAAQ;IAAO,CAAC;IAAG,WAAW,IAAI;GAAE,OAC/E,UAAU,IAAI;EACrB,CAAC,CAAC,CAAC,YAAY,UAAU,IAAI,CAAC,CAAC,CAAC,cAAc,QAAQ,KAAK,CAAC;CAC9D,GAAG;EAAC,MAAM;EAAM,MAAM;EAAW;EAAS;CAAI,CAAC;CAC/C,IAAI,KAAK,UAAU,aAAa,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAA8B,MAAK;EAAU,UAAA,EAAE,WAAW;CAAO,CAAA;CACvH,IAAI,KAAK,WAAW,CAAC,OAAO;EAG1B,IAAI,KAAK,UAAU,YAAY,CAAC,KAAK,SAAS,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAA8B,MAAK;GAAU,UAAA,EAAE,WAAW;EAAO,CAAA;EACrI,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GAA4B,MAAK;GAAU,UAAA,EAAE,KAAK,UAAU,UAAU,SAAS;EAAO,CAAA;CAC9G;CACA,MAAM,YAAY,MAAM,cAAc,YAAY,QAAQ,WAAW;CACrE,OAAO,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EAAK,WAAU;EAAf,UAAA,CAA2B,iBAAA,GAAA,kBAAA,IAAA,CAAC,YAAD;GAAY,OAAO,MAAM;GAAO,MAAM,MAAM;GAAM,UAAU,YAAY,SAAS,KAAA;GAAiB;GAAM,SAAS,WAAW,QAAQ,CAAC;GAAmB;GAAQ,GAAG,MAAM,CAAC;GAAW;GAAQ,UAAU;GAAc,WAAW,WAAW,QAAQ,CAAC,aAAa,MAAM;EAAc,CAAA,GAAE,SAAS,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;GAAG,WAAU;GAAkB,MAAK;GAAS,UAAA,EAAE,cAAc;EAAK,CAAA,IAAI,IAAU;;AACpZ;;;;;AAMA,SAAgB,WAAW,UAAyB,MAAwC;CAC1F,MAAM,QAAkC,CAAC;CACzC,MAAM,uBAAO,IAAI,IAAY;CAC7B,MAAM,SAAS,UAAkC;EAC/C,IAAI,MAAM,SAAS,iBAAiB,CAAC,MAAM,WAAW,CAAC,KAAK,IAAI,MAAM,MAAM,KACvE,SAAS,MAAM,IAAI,KAAK,MAAM,KAAK,UAAA,iBAAsB;GAC5D,MAAM,OAAO,aAAa;IAAE,OAAO;IAAU;GAAM,CAAC;GACpD,IAAI,KAAK,gBAAgB,CAAC,KAAK,SAAS;IAAE,KAAK,IAAI,MAAM,MAAM;IAAG,MAAM,KAAK,KAAK;GAAE;EACtF;EACA,KAAK,MAAM,SAAS,MAAM,YAAY,CAAC,GAAG,MAAM,KAAK;CACvD;CACA,KAAK,MAAM,OAAO,SAAS,UAAU,QAAQ,IAAI,GAAG;EAClD,MAAM,OAAO,SAAS,MAAM,IAAI,GAAG;EACnC,IAAI,MAAM,SAAS,eAAe,KAAK,MAAM,MAAM,MAAM,KAAK,KAAK,IAAI;CACzE;CACA,OAAO;AACT;AAEA,MAAM,aAAa,MAAgC,UACjD,KAAK,WAAW,MAAM,UAAU,KAAK,OAAO,OAAO,UAAU,UAAU,MAAM,MAAM;;AAGrF,SAAgB,UAAU,OAAuB;CAC/C,MAAM,QAAQ,MAAM,SAAQ,aAAY,WAAW,UAAU,MAAM,KAAK,IAAI,GAAG,SAAS;CACxF,MAAM,UAAU,MAAM,QAAQ,cAAc,WAAW;CACvD,IAAI,MAAM,KAAK,WAAW,YAAY,MAAM,WAAW,GAAG,OAAO;CACjE,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAY,wBAAA;EAAsB,UAAA,MAAM,KAAI,UAChE,iBAAA,GAAA,kBAAA,IAAA,CAAC,cAAD;GAAyD,WAAW,MAAM;GAAW,QAAQ,MAAM;GACjG,OAAM;GAAgB;GAAO,GAAG,MAAM;GAAG,MAAM,MAAM;GACrD,gBAAgB,SAAS,MAAM,IAAI,KAAK,OAAO,MAAM,KAAK,WAAW,WAAW,QAAQ,IAAI,MAAM,KAAK,MAAM,IAAI,KAAA;EAAY,GAF5G,GAAG,MAAM,UAAU,GAAG,MAAM,QAEgF,CAAC;CAAO,CAAA;AAC3I;;AAGA,SAAgB,eAAe,OAAsB;CACnD,MAAM,OAAO,aAAa,KAAK;CAC/B,OAAO,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EAAK,WAAU;EAAY,MAAK;EAAU,UAAA,MAAM,EAAE,KAAK,UAAU,UACpE,KAAK,UAAU,YAAY,CAAC,KAAK,eAAe,YAChD,KAAK,UAAU,WAAW,aAAa,WAAW;CAAO,CAAA;AAC/D;AAUA,SAAgB,MAAM,KAAoB;CACxC,MAAM,SAAS;CACf,IAAI,aAAa,OAAO,OAAO,SAAS,QAAQ;EAAE,IAAI,EAAE,GAAG,KAAK;EAAG,IAAI,EAAE,GAAG,KAAK;CAAE,CAAC,GAAG,kBAAkB;CACzG,IAAI,aAAa;EACf,IAAI,OAAO,aAAa,aAAa,aAAa,CAAC;EACnD,MAAM,QAAQ,SAAS,cAAc,OAAO;EAC5C,MAAM,aAAa,eAAe,WAAW;EAC7C,MAAM,cAAc;EACpB,SAAS,KAAK,YAAY,KAAK;EAC/B,aAAa,MAAM,OAAO;CAC5B,GAAG,kBAAkB;CACrB,IAAI,aAAa,OAAO,MAAM,OAAO,4BAA4B,OAAO,MAAM,SAAS;EACrF,MAAM;EAAsB,KAAK;EAAa,QAAQ;CACxD,GAAG,cAAc,CAAC,GAAG,gBAAgB;CACrC,IAAI,aAAa,OAAO,MAAM,OAAO,oCAAoC,OAAO,MAAM,SAAS;EAC7F,MAAM;EAA8B,IAAI;EAAa,OAAO;EAAI,QAAQ;EACxE,eAAe,EAAE,OAAO,UAAkB,YAAqB,OAAO,WAAW,IAAI,KAAK,aAAa,UAAU,OAAO,EAAE;CAC5H,GAAG,SAAS,CAAC,GAAG,iBAAiB;AACnC"}
1
+ {"version":3,"file":"client.inner.cjs","names":["grouped","TONES","CALLOUT_TONES","isRecord","cellText","withUnit","useState","useRef","useId","Fragment","useState","Fragment","useId","useRef","useCallback","MarkdownText","useMemo","useState","useRef","useCallback","useSyncExternalStore"],"sources":["../src/core/formula.js","../src/core/views.js","../../dsh-plugin-kit/src/log-shared.ts","../../dsh-plugin-kit/src/client-logger.ts","../src/contracts.ts","../src/ui.tsx","../src/chart.tsx","../src/widget.tsx","../src/styles.ts","../src/answer-text.ts","../src/answers.ts","../src/copy.ts","../src/client.tsx"],"sourcesContent":["// Adapted from deep-view/src/core/formula.js (deep-view 0.1.0, Apache-2.0).\n// Kept as the same bounded expression interpreter: no eval, property access,\n// assignment or loops. The DSH migration preserves its grammar and error model.\n// It reads names and calls a fixed set of functions without reaching the page.\n\nconst FUNCTIONS = {\n min: { args: [1, Infinity], run: (...values) => Math.min(...values.map(num)) },\n max: { args: [1, Infinity], run: (...values) => Math.max(...values.map(num)) },\n abs: { args: [1, 1], run: value => Math.abs(num(value)) },\n floor: { args: [1, 1], run: value => Math.floor(num(value)) },\n ceil: { args: [1, 1], run: value => Math.ceil(num(value)) },\n sqrt: { args: [1, 1], run: value => Math.sqrt(num(value)) },\n pow: { args: [2, 2], run: (base, power) => num(base) ** num(power) },\n round: { args: [1, 2], run: (value, digits = 0) => roundTo(num(value), digitsOf(digits)) },\n clamp: { args: [3, 3], run: (value, low, high) => Math.min(Math.max(num(value), num(low)), num(high)) },\n fixed: { args: [1, 2], run: (value, digits = 0) => roundTo(num(value), digitsOf(digits)).toFixed(digitsOf(digits)) },\n format: { args: [1, 2], run: (value, digits = 0) => grouped(num(value), digitsOf(digits)) },\n percent: { args: [1, 2], run: (value, digits = 0) => `${grouped(num(value) * 100, digitsOf(digits))}%` },\n}\nexport const FORMULA_FUNCTIONS = Object.keys(FUNCTIONS)\nconst CONSTANTS = new Map([['true', true], ['false', false]])\n// Nesting deeper than this is no calculation a view needs; the parser recurses per level.\nconst MAX_NESTING = 64\n\nclass FormulaError extends Error {}\nconst fail = (message) => { throw new FormulaError(message) }\n\nfunction num(value) {\n if (typeof value === 'number') return value\n if (typeof value === 'boolean') return value ? 1 : 0\n const parsed = Number(value)\n if (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(parsed)) return parsed\n return fail(`${JSON.stringify(value)} is not a number`)\n}\nconst digitsOf = (digits) => {\n const value = num(digits)\n if (!Number.isInteger(value) || value < 0 || value > 10) fail('digits must be a whole number from 0 to 10')\n return value\n}\nconst roundTo = (value, digits) => {\n const scale = 10 ** digits\n return Math.round(value * scale) / scale\n}\nfunction grouped(value, digits) {\n if (!Number.isFinite(value)) return String(value)\n const [whole, part] = Math.abs(roundTo(value, digits)).toFixed(digits).split('.')\n const sign = value < 0 && Number(whole + (part ?? '')) !== 0 ? '-' : ''\n return `${sign}${whole.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')}${part ? `.${part}` : ''}`\n}\n\n// -------------------------------------------------------------------------\n// Tokens and parsing\n\nconst IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/\nexport const isName = value => typeof value === 'string' && IDENT.test(value)\nconst OPERATORS = ['==', '!=', '<=', '>=', '&&', '||', '+', '-', '*', '/', '%', '<', '>', '!', '?', ':', '(', ')', ',']\n\nfunction tokenize(source) {\n const tokens = []\n let at = 0\n while (at < source.length) {\n const char = source[at]\n if (/\\s/.test(char)) { at += 1; continue }\n const number = /^(?:\\d+\\.?\\d*|\\.\\d+)(?:[eE][+-]?\\d+)?/.exec(source.slice(at))\n if (number) { tokens.push({ kind: 'number', value: Number(number[0]), at }); at += number[0].length; continue }\n const name = /^[A-Za-z_][A-Za-z0-9_]*/.exec(source.slice(at))\n if (name) { tokens.push({ kind: 'name', value: name[0], at }); at += name[0].length; continue }\n if (char === '\"' || char === '\\'') {\n let end = at + 1\n let text = ''\n while (end < source.length && source[end] !== char) {\n if (source[end] === '\\\\' && end + 1 < source.length) { text += source[end + 1]; end += 2; continue }\n text += source[end]\n end += 1\n }\n if (end >= source.length) fail(`unclosed string at ${at + 1}`)\n tokens.push({ kind: 'string', value: text, at })\n at = end + 1\n continue\n }\n const operator = OPERATORS.find(op => source.startsWith(op, at))\n if (operator === undefined) fail(`unexpected ${JSON.stringify(char)} at ${at + 1}`)\n tokens.push({ kind: 'op', value: operator, at })\n at += operator.length\n }\n return tokens\n}\n\nconst BINARY = [['||'], ['&&'], ['==', '!='], ['<', '<=', '>', '>='], ['+', '-'], ['*', '/', '%']]\n\nfunction parse(source) {\n const tokens = tokenize(source)\n let index = 0\n let depth = 0\n const peek = () => tokens[index]\n const isOp = value => peek()?.kind === 'op' && peek().value === value\n const expect = (value) => {\n if (!isOp(value)) fail(peek() ? `expected \"${value}\" at ${peek().at + 1}` : `expected \"${value}\" at the end`)\n index += 1\n }\n const nest = (read) => {\n depth += 1\n if (depth > MAX_NESTING) fail(`nested more than ${MAX_NESTING} levels`)\n const node = read()\n depth -= 1\n return node\n }\n const ternary = () => nest(() => {\n const test = binary(0)\n if (!isOp('?')) return test\n index += 1\n const yes = ternary()\n expect(':')\n return { type: 'if', test, yes, no: ternary() }\n })\n const binary = (level) => {\n if (level === BINARY.length) return unary()\n let left = binary(level + 1)\n while (peek()?.kind === 'op' && BINARY[level].includes(peek().value)) {\n const op = peek().value\n index += 1\n left = { type: 'binary', op, left, right: binary(level + 1) }\n }\n return left\n }\n const unary = () => {\n if (isOp('-') || isOp('!') || isOp('+')) {\n const op = peek().value\n index += 1\n return nest(() => ({ type: 'unary', op, value: unary() }))\n }\n return primary()\n }\n const primary = () => {\n const token = peek()\n if (token === undefined) fail('the formula ends too early')\n index += 1\n if (token.kind === 'number' || token.kind === 'string') return { type: 'value', value: token.value }\n if (token.kind === 'op' && token.value === '(') {\n const inner = ternary()\n expect(')')\n return inner\n }\n if (token.kind !== 'name') fail(`unexpected \"${token.value}\" at ${token.at + 1}`)\n if (!isOp('(')) return CONSTANTS.has(token.value) ? { type: 'value', value: CONSTANTS.get(token.value) } : { type: 'name', name: token.value }\n const fn = Object.hasOwn(FUNCTIONS, token.value) ? FUNCTIONS[token.value] : undefined\n if (fn === undefined) fail(`unknown function \"${token.value}\"; allowed: ${FORMULA_FUNCTIONS.join(', ')}`)\n index += 1\n const args = []\n if (!isOp(')')) {\n args.push(ternary())\n while (isOp(',')) { index += 1; args.push(ternary()) }\n }\n expect(')')\n if (args.length < fn.args[0] || args.length > fn.args[1]) {\n fail(`${token.value}() takes ${fn.args[0] === fn.args[1] ? fn.args[0] : fn.args[1] === Infinity ? `at least ${fn.args[0]}` : `${fn.args[0]} or ${fn.args[1]}`} argument${fn.args[1] === 1 ? '' : 's'}; got ${args.length}`)\n }\n return { type: 'call', name: token.value, args }\n }\n if (tokens.length === 0) fail('the formula is empty')\n const tree = ternary()\n if (index < tokens.length) fail(`unexpected \"${peek().value}\" at ${peek().at + 1}`)\n return tree\n}\n\nfunction namesIn(node, found = new Set()) {\n if (node.type === 'name') found.add(node.name)\n else if (node.type === 'unary') namesIn(node.value, found)\n else if (node.type === 'binary') { namesIn(node.left, found); namesIn(node.right, found) }\n else if (node.type === 'if') { namesIn(node.test, found); namesIn(node.yes, found); namesIn(node.no, found) }\n else if (node.type === 'call') for (const arg of node.args) namesIn(arg, found)\n return found\n}\n\n// { tree, names } or { error }. `names` are the names the formula reads.\nexport function compileFormula(source) {\n if (typeof source !== 'string') return { error: 'expected a formula string' }\n try {\n const tree = parse(source)\n return { tree, names: [...namesIn(tree)] }\n } catch (error) {\n if (error instanceof FormulaError) return { error: error.message }\n throw error\n }\n}\n\n// -------------------------------------------------------------------------\n// Evaluation. `lookup(name)` returns a name's value or throws.\n\nfunction run(node, lookup) {\n switch (node.type) {\n case 'value': return node.value\n case 'name': return lookup(node.name)\n case 'unary': {\n const value = run(node.value, lookup)\n if (node.op === '!') return !truthy(value)\n return node.op === '-' ? -num(value) : num(value)\n }\n case 'if': return truthy(run(node.test, lookup)) ? run(node.yes, lookup) : run(node.no, lookup)\n case 'call': return FUNCTIONS[node.name].run(...node.args.map(arg => run(arg, lookup)))\n default: return binary(node, lookup)\n }\n}\nconst truthy = value => (typeof value === 'string' ? value !== '' : Boolean(value))\n\nfunction binary(node, lookup) {\n if (node.op === '&&') return truthy(run(node.left, lookup)) ? run(node.right, lookup) : false\n if (node.op === '||') { const left = run(node.left, lookup); return truthy(left) ? left : run(node.right, lookup) }\n const left = run(node.left, lookup)\n const right = run(node.right, lookup)\n switch (node.op) {\n case '+': return typeof left === 'string' || typeof right === 'string' ? `${show(left)}${show(right)}` : num(left) + num(right)\n case '-': return num(left) - num(right)\n case '*': return num(left) * num(right)\n case '/': return num(left) / num(right)\n case '%': return num(left) % num(right)\n case '==': return left === right\n case '!=': return left !== right\n case '<': return num(left) < num(right)\n case '<=': return num(left) <= num(right)\n case '>': return num(left) > num(right)\n default: return num(left) >= num(right)\n }\n}\n\n// A value as text: numbers lose float noise (0.1 + 0.2 shows 0.3).\nexport function show(value) {\n if (typeof value === 'number') return Number.isFinite(value) ? String(Number(value.toPrecision(12))) : String(value)\n return String(value)\n}\n\n// A scope for one view: input values, plus `let` names worked out on demand. A cycle\n// or a missing name fails the formula that reads it.\nexport function createScope(inputs, lets) {\n const done = new Map()\n const busy = new Set()\n const lookup = (name) => {\n if (inputs.has(name)) return inputs.get(name)\n if (done.has(name)) return done.get(name)\n const tree = lets.get(name)\n if (tree === undefined) fail(`unknown name \"${name}\"`)\n if (busy.has(name)) fail(`\"${name}\" refers to itself`)\n busy.add(name)\n try {\n const value = run(tree, lookup)\n done.set(name, value)\n return value\n } finally { busy.delete(name) }\n }\n return lookup\n}\n\n// { value } or { error }.\nexport function evaluate(tree, lookup) {\n try {\n return { value: run(tree, lookup) }\n } catch (error) {\n if (error instanceof FormulaError) return { error: error.message }\n if (error instanceof RangeError) return { error: 'the formula is too deep to work out' }\n throw error\n }\n}\n","// Adapted from deep-view/src/core/views.js (deep-view 0.1.0, Apache-2.0).\n// DSH migration: html is deliberately rejected rather than migrating its frame;\n// validation, formulas and answers retain the original bounded JSON semantics.\n// Pure validation and evaluation of a declarative card, on Host and Client.\n// Formulas use formula.js; model-authored code never enters the DOM.\n\nimport { compileFormula, createScope, evaluate, isName, show } from './formula.js'\n\nconst LAYOUT = ['stack', 'row']\nconst DISPLAY = ['text', 'metric', 'table', 'chart', 'progress', 'callout', 'sources']\nconst INPUT_TYPES = ['slider', 'choice', 'toggle', 'number']\nconst ANSWERS = ['options', 'confirm', 'form', 'submit']\nconst COMPONENTS = [...LAYOUT, ...DISPLAY, ...INPUT_TYPES, ...ANSWERS]\nconst TONES = ['good', 'warn', 'bad']\nconst TEXT_TONES = ['muted']\nconst CALLOUT_TONES = ['info', 'good', 'warn', 'bad']\nexport const CHART_KINDS = ['bar', 'hbar', 'line', 'area', 'donut']\nconst INTERACTIVE = new Set(ANSWERS)\nconst INPUTS = new Set(INPUT_TYPES)\nconst PROPS = {\n stack: ['children', 'let'],\n row: ['children', 'let'],\n text: ['text', 'tone'],\n metric: ['label', 'value', 'tone', 'caption'],\n table: ['columns', 'rows'],\n chart: ['kind', 'categories', 'series', 'unit', 'caption'],\n progress: ['label', 'percent', 'value', 'max', 'valueLabel', 'tone'],\n callout: ['text', 'tone'],\n sources: ['items'],\n slider: ['id', 'label', 'min', 'max', 'step', 'value', 'unit'],\n choice: ['id', 'label', 'options', 'value'],\n toggle: ['id', 'label', 'value'],\n number: ['id', 'label', 'min', 'max', 'step', 'value', 'unit'],\n options: ['id', 'options', 'multi'],\n confirm: ['id', 'confirmLabel', 'cancelLabel'],\n form: ['id', 'fields', 'submitLabel'],\n submit: ['id', 'label'],\n}\nconst MAX_DEPTH = 8\nconst MAX_NODES = 64\nconst MAX_CHILDREN = 16\nconst MAX_TEXT = 2000\nconst MAX_CELL = 200\nconst MAX_COLUMNS = 8\nconst MAX_ROWS = 50\nconst MAX_OPTIONS = 8\nconst MAX_FIELDS = 6\nconst SUMMARY_PART = 40\nconst SUMMARY_COUNT = 8\nconst RESERVED = new Set(['true', 'false'])\n// UTF-8 bytes of the blueprint JSON plus the title. Not a wrapped document:\n// the tool rejects a show_view whose viewBytes() is over this before it\n// normalizes or validates, so the number has to be the bytes the model sent.\nexport const VIEW_BYTE_LIMIT = 8192\n\nconst isRecord = value => value !== null && typeof value === 'object' && !Array.isArray(value)\nconst quoted = value => JSON.stringify(value)\nconst allowed = list => list.join(', ')\nconst isNumber = value => typeof value === 'number' && Number.isFinite(value)\nconst isScalar = value => typeof value === 'string' || typeof value === 'boolean' || isNumber(value)\n\n// `{ \"=\": \"a * b\" }`: a value worked out from the view's inputs.\nexport const isFormula = value => isRecord(value) && Object.keys(value).length === 1 && Object.hasOwn(value, '=')\n\nexport function viewBytes(title, view) {\n return new TextEncoder().encode(`${JSON.stringify(view) ?? ''}${title ?? ''}`).length\n}\n\nconst NUMERIC = ['value', 'percent', 'min', 'max', 'step', 'height']\nconst numeric = value => (typeof value === 'string' && value.trim() !== '' && !Number.isNaN(Number(value)) ? Number(value) : value)\n\n// Some providers serialize nested arrays as `{ item: [...] }` (XML-style) and\n// numbers as strings. Normalize the blueprint before validation so a model is\n// not asked to retry a call whose only fault is the provider's encoding.\n// Arrays are unwrapped; numeric fields and chart values accept a numeric string.\n// Returns a new object; the input is not mutated.\nexport function normalizeView(value) {\n if (Array.isArray(value)) return value.map(normalizeView)\n if (!isRecord(value)) return value\n const keys = Object.keys(value)\n // Unwrap recursively: a provider may nest the wrapper, as { item: { item: [...] } }.\n if (keys.length === 1 && keys[0] === 'item') {\n const inner = normalizeView(value.item)\n if (Array.isArray(inner)) return inner\n }\n // Define own properties: an incoming \"__proto__\" key must become data the\n // validator can reject, not hit the prototype setter and vanish from the JSON.\n const out = {}\n for (const key of keys) Object.defineProperty(out, key, { value: normalizeView(value[key]), writable: true, enumerable: true, configurable: true })\n for (const field of NUMERIC) if (Object.hasOwn(out, field)) out[field] = numeric(out[field])\n if (Array.isArray(out.values)) out.values = out.values.map(numeric)\n return out\n}\n\nexport function validateView(view) {\n const ctx = { ids: new Set(), nodes: 0, interactive: false, inputs: new Map(), lets: new Map(), formulas: [] }\n const error = checkNode(view, 'view', 1, ctx) ?? checkFormulas(ctx)\n return error === undefined ? { ok: true, interactive: ctx.interactive } : { ok: false, error }\n}\n\n// What show_view checks before it shows a view: the same answer on the host and\n// in the client. The bytes are measured as sent, before normalizeView unwraps the\n// provider's encoding, or a wrapped view could shrink under the byte limit. The\n// normalized view and the trimmed title come back; the title may be empty.\nexport function checkShownView(title, sent) {\n let bytes\n try { bytes = viewBytes(title, sent) } catch { return { error: 'The view is not JSON data.' } }\n if (bytes > VIEW_BYTE_LIMIT) return { error: `The view is ${bytes} bytes; the limit is ${VIEW_BYTE_LIMIT}.` }\n if (title !== undefined && title !== null && typeof title !== 'string') return { error: 'title: expected a string' }\n const named = String(title ?? '').trim()\n const view = normalizeView(sent)\n const checked = validateView(view)\n if (!checked.ok) return { error: checked.error }\n return { title: named, view, interactive: checked.interactive }\n}\n\nfunction checkNode(node, path, depth, ctx) {\n if (!isRecord(node)) return `${path}: expected a component object`\n if (depth > MAX_DEPTH) return `${path}: ${depth} levels exceeds the limit of ${MAX_DEPTH}`\n ctx.nodes += 1\n if (ctx.nodes > MAX_NODES) return `${path}: ${ctx.nodes} components exceeds the limit of ${MAX_NODES}`\n const type = node.type\n if (!COMPONENTS.includes(type)) return `${path}.type: unknown component ${quoted(type)}; allowed: ${allowed(COMPONENTS)}`\n const props = PROPS[type]\n for (const key of Object.keys(node)) {\n if (key === 'type' || props.includes(key)) continue\n return `${path}.${key}: unknown property ${quoted(key)}; allowed: ${allowed(props)}`\n }\n if (INTERACTIVE.has(type)) ctx.interactive = true\n switch (type) {\n case 'stack': case 'row': return checkLayout(node, path, depth, ctx)\n case 'text': return checkText(node, path, ctx)\n case 'metric': return checkMetric(node, path, ctx)\n case 'table': return checkTable(node, path, ctx)\n case 'chart': return checkChart(node, path, ctx)\n case 'progress': return checkProgress(node, path, ctx)\n case 'callout': return checkCallout(node, path, ctx)\n case 'sources': return checkSources(node, path)\n case 'slider': case 'number': return checkNumberInput(node, path, ctx)\n case 'choice': return checkChoice(node, path, ctx)\n case 'toggle': return checkToggle(node, path, ctx)\n case 'options': return checkOptions(node, path, ctx)\n case 'confirm': return checkConfirm(node, path, ctx)\n case 'form': return checkForm(node, path, ctx)\n default: return checkSubmit(node, path, ctx)\n }\n}\n\nfunction checkLayout(node, path, depth, ctx) {\n if (node.let !== undefined) {\n if (depth !== 1) return `${path}.let: only the outermost component can define names`\n if (!isRecord(node.let)) return `${path}.let: expected an object of names to formulas`\n for (const [name, source] of Object.entries(node.let)) {\n if (!isName(name) || RESERVED.has(name)) return `${path}.let.${name}: a name is letters, digits and _, and starts with a letter or _`\n if (typeof source !== 'string') return `${path}.let.${name}: expected a formula string`\n ctx.lets.set(name, { source, path: `${path}.let.${name}` })\n }\n }\n if (!Array.isArray(node.children)) return `${path}.children: expected an array of 1 to ${MAX_CHILDREN} components`\n if (node.children.length < 1 || node.children.length > MAX_CHILDREN) return `${path}.children: expected 1 to ${MAX_CHILDREN} children; got ${node.children.length}`\n for (let index = 0; index < node.children.length; index += 1) {\n const error = checkNode(node.children[index], `${path}.children[${index}]`, depth + 1, ctx)\n if (error !== undefined) return error\n }\n return undefined\n}\n\n// A property that may be a literal of `kind` or a formula giving one. Formulas are\n// checked once the whole tree, with every input and name, is known.\nfunction checkValue(node, key, path, ctx, kind, { required = false, max = MAX_TEXT } = {}) {\n const value = node[key]\n const at = `${path}.${key}`\n if (value === undefined) return required ? `${at}: ${expected(kind)}` : undefined\n if (isFormula(value)) {\n ctx.formulas.push({ source: value['='], path: at, kind })\n return undefined\n }\n if (kind === 'number') return isNumber(value) ? undefined : `${at}: ${expected(kind)}`\n if (Array.isArray(kind)) return kind.includes(value) ? undefined : `${at}: unknown tone ${quoted(value)}; allowed: ${allowed(kind)}`\n if (kind === 'string') {\n if (typeof value !== 'string') return `${at}: ${expected(kind)}`\n return value.length > max ? `${at}: ${value.length} characters exceeds the limit of ${max}` : undefined\n }\n if (!isScalar(value)) return `${at}: ${expected(kind)}`\n return undefined\n}\nconst expected = kind => (kind === 'number' ? 'expected a number' : kind === 'string' ? 'expected a string' : Array.isArray(kind) ? `expected one of ${allowed(kind)}` : 'expected a string or a number')\n\nfunction checkText(node, path, ctx) {\n return checkValue(node, 'text', path, ctx, 'string', { required: true })\n ?? checkValue(node, 'tone', path, ctx, TEXT_TONES)\n}\n\nfunction checkMetric(node, path, ctx) {\n if (typeof node.label !== 'string') return `${path}.label: expected a string`\n if (node.value === undefined) return `${path}.value: expected a string or a number`\n if (typeof node.value === 'number' && !Number.isFinite(node.value)) return `${path}.value: expected a finite number`\n return checkValue(node, 'value', path, ctx, 'scalar')\n ?? checkValue(node, 'tone', path, ctx, TONES)\n ?? checkValue(node, 'caption', path, ctx, 'string')\n}\n\nfunction checkTable(node, path, ctx) {\n if (!Array.isArray(node.columns)) return `${path}.columns: expected an array of at most ${MAX_COLUMNS} columns`\n if (node.columns.length > MAX_COLUMNS) return `${path}.columns: ${node.columns.length} columns exceeds the limit of ${MAX_COLUMNS}`\n for (let index = 0; index < node.columns.length; index += 1) {\n const column = node.columns[index]\n const at = `${path}.columns[${index}]`\n if (!isRecord(column)) return `${at}: expected a column object`\n for (const key of Object.keys(column)) {\n if (key !== 'key' && key !== 'label') return `${at}.${key}: unknown property ${quoted(key)}; allowed: key, label`\n }\n if (typeof column.key !== 'string' || column.key === '') return `${at}.key: expected a non-empty string`\n if (typeof column.label !== 'string') return `${at}.label: expected a string`\n }\n if (!Array.isArray(node.rows)) return `${path}.rows: expected an array of at most ${MAX_ROWS} rows`\n if (node.rows.length > MAX_ROWS) return `${path}.rows: ${node.rows.length} rows exceeds the limit of ${MAX_ROWS}`\n for (let row = 0; row < node.rows.length; row += 1) {\n const cells = node.rows[row]\n if (!Array.isArray(cells)) return `${path}.rows[${row}]: expected an array of cells`\n for (let column = 0; column < cells.length; column += 1) {\n const at = `${path}.rows[${row}][${column}]`\n if (isFormula(cells[column])) { ctx.formulas.push({ source: cells[column]['='], path: at, kind: 'scalar' }); continue }\n const text = cellText(cells[column])\n if (text.length > MAX_CELL) return `${at}: ${text.length} characters exceeds the limit of ${MAX_CELL}`\n }\n }\n return undefined\n}\n\nfunction checkChart(node, path, ctx) {\n if (node.kind !== undefined && !CHART_KINDS.includes(node.kind)) return `${path}.kind: unknown chart ${quoted(node.kind)}; allowed: ${allowed(CHART_KINDS)}`\n if (!Array.isArray(node.categories) || node.categories.length === 0) return `${path}.categories: expected a non-empty array of labels`\n for (let index = 0; index < node.categories.length; index += 1) {\n const label = node.categories[index]\n if (typeof label !== 'string' && !isNumber(label)) return `${path}.categories[${index}]: expected a string`\n }\n if (!Array.isArray(node.series) || node.series.length === 0) return `${path}.series: expected a non-empty array of { name?, values }`\n if (node.kind === 'donut' && node.series.length > 1) return `${path}.series: a donut takes one series; got ${node.series.length}`\n for (let index = 0; index < node.series.length; index += 1) {\n const series = node.series[index]\n const at = `${path}.series[${index}]`\n if (!isRecord(series)) return `${at}: expected a series object`\n for (const key of Object.keys(series)) {\n if (key !== 'name' && key !== 'values') return `${at}.${key}: unknown property ${quoted(key)}; allowed: name, values`\n }\n if (series.name !== undefined && typeof series.name !== 'string') return `${at}.name: expected a string`\n if (!Array.isArray(series.values)) return `${at}.values: expected an array of numbers`\n if (series.values.length !== node.categories.length) return `${at}.values: ${series.values.length} values for ${node.categories.length} categories`\n for (let item = 0; item < series.values.length; item += 1) {\n const value = series.values[item]\n if (isFormula(value)) ctx.formulas.push({ source: value['='], path: `${at}.values[${item}]`, kind: 'number' })\n else if (!isNumber(value)) return `${at}.values[${item}]: expected a number`\n }\n }\n if (node.unit !== undefined && typeof node.unit !== 'string') return `${path}.unit: expected a string`\n if (node.caption !== undefined && typeof node.caption !== 'string') return `${path}.caption: expected a string`\n return undefined\n}\n\nfunction checkProgress(node, path, ctx) {\n if (node.label !== undefined && typeof node.label !== 'string') return `${path}.label: expected a string`\n if ((node.percent === undefined) === (node.value === undefined)) return `${path}: give percent (0 to 100), or value with max`\n if (node.percent !== undefined && !isFormula(node.percent)) {\n if (typeof node.percent !== 'number' || !Number.isFinite(node.percent) || node.percent < 0 || node.percent > 100) return `${path}.percent: expected a number from 0 to 100`\n }\n if (node.value !== undefined && node.max === undefined) return `${path}.max: expected a number with value`\n if (node.value === undefined && node.max !== undefined) return `${path}.value: expected a number with max`\n return checkValue(node, 'percent', path, ctx, 'number')\n ?? checkValue(node, 'value', path, ctx, 'number')\n ?? checkValue(node, 'max', path, ctx, 'number')\n ?? checkValue(node, 'valueLabel', path, ctx, 'scalar')\n ?? checkValue(node, 'tone', path, ctx, TONES)\n}\n\nfunction checkCallout(node, path, ctx) {\n return checkValue(node, 'text', path, ctx, 'string', { required: true })\n ?? checkValue(node, 'tone', path, ctx, CALLOUT_TONES)\n}\n\nfunction checkSources(node, path) {\n if (!Array.isArray(node.items) || node.items.length === 0) return `${path}.items: expected a non-empty array of { label, url }`\n for (let index = 0; index < node.items.length; index += 1) {\n const item = node.items[index]\n const at = `${path}.items[${index}]`\n if (!isRecord(item)) return `${at}: expected a { label, url } object`\n for (const key of Object.keys(item)) {\n if (key !== 'label' && key !== 'url') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, url`\n }\n if (typeof item.label !== 'string' || item.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (typeof item.url !== 'string' || !/^https?:\\/\\/[^\\s]+$/i.test(item.url)) return `${at}.url: expected an http(s) address`\n }\n return undefined\n}\n\nfunction checkInputId(node, path, ctx) {\n if (!isName(node.id) || RESERVED.has(node.id)) return `${path}.id: an input id is letters, digits and _, and starts with a letter or _, so formulas can use it`\n if (ctx.ids.has(node.id)) return `${path}.id: duplicate id ${quoted(node.id)}`\n ctx.ids.add(node.id)\n if (typeof node.label !== 'string') return `${path}.label: expected a string`\n return undefined\n}\n\nfunction checkNumberInput(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n for (const key of ['min', 'max', 'step']) {\n if (node[key] !== undefined && !isNumber(node[key])) return `${path}.${key}: expected a number`\n }\n if (node.type === 'slider' && (node.min === undefined || node.max === undefined)) return `${path}: a slider needs min and max`\n if (node.min !== undefined && node.max !== undefined && node.max <= node.min) return `${path}.max: expected more than min (${node.min})`\n if (node.step !== undefined && node.step <= 0) return `${path}.step: expected more than 0`\n if (!isNumber(node.value)) return `${path}.value: expected a number`\n if ((node.min !== undefined && node.value < node.min) || (node.max !== undefined && node.value > node.max)) return `${path}.value: expected a number from ${node.min ?? '-∞'} to ${node.max ?? '∞'}`\n if (node.unit !== undefined && typeof node.unit !== 'string') return `${path}.unit: expected a string`\n ctx.inputs.set(node.id, node.value)\n return undefined\n}\n\nfunction checkChoice(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n if (!Array.isArray(node.options) || node.options.length === 0) return `${path}.options: expected a non-empty array of { label, value }`\n const labels = new Set()\n const values = new Set()\n for (let index = 0; index < node.options.length; index += 1) {\n const option = node.options[index]\n const at = `${path}.options[${index}]`\n if (!isRecord(option)) return `${at}: expected a { label, value } object`\n for (const key of Object.keys(option)) {\n if (key !== 'label' && key !== 'value') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, value`\n }\n if (typeof option.label !== 'string' || option.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (labels.has(option.label)) return `${at}.label: duplicate label ${quoted(option.label)}`\n labels.add(option.label)\n const value = option.value ?? option.label\n if (!isScalar(value)) return `${at}.value: expected a string, a number or true/false`\n if (values.has(value)) return `${at}.value: duplicate value ${quoted(value)}`\n values.add(value)\n }\n const chosen = node.value ?? choiceValue(node.options[0])\n if (!values.has(chosen)) return `${path}.value: expected one of the options' values`\n ctx.inputs.set(node.id, chosen)\n return undefined\n}\n\nfunction checkToggle(node, path, ctx) {\n const idError = checkInputId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.value !== undefined && typeof node.value !== 'boolean') return `${path}.value: expected true or false`\n ctx.inputs.set(node.id, node.value === true)\n return undefined\n}\n\nfunction checkOptions(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.multi !== undefined && typeof node.multi !== 'boolean') return `${path}.multi: expected a boolean`\n if (!Array.isArray(node.options)) return `${path}.options: expected an array of 1 to ${MAX_OPTIONS} options`\n if (node.options.length < 1 || node.options.length > MAX_OPTIONS) return `${path}.options: expected 1 to ${MAX_OPTIONS} options; got ${node.options.length}`\n const labels = new Set()\n for (let index = 0; index < node.options.length; index += 1) {\n const option = node.options[index]\n const at = `${path}.options[${index}]`\n if (!isRecord(option)) return `${at}: expected an option object`\n for (const key of Object.keys(option)) {\n if (key !== 'label' && key !== 'description') return `${at}.${key}: unknown property ${quoted(key)}; allowed: label, description`\n }\n if (typeof option.label !== 'string' || option.label.trim() === '') return `${at}.label: expected a non-empty string`\n if (labels.has(option.label)) return `${at}.label: duplicate label ${quoted(option.label)}`\n labels.add(option.label)\n if (option.description !== undefined && typeof option.description !== 'string') return `${at}.description: expected a string`\n }\n return undefined\n}\n\nfunction checkConfirm(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.confirmLabel !== undefined && typeof node.confirmLabel !== 'string') return `${path}.confirmLabel: expected a string`\n if (node.cancelLabel !== undefined && typeof node.cancelLabel !== 'string') return `${path}.cancelLabel: expected a string`\n return undefined\n}\n\nfunction checkForm(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.submitLabel !== undefined && typeof node.submitLabel !== 'string') return `${path}.submitLabel: expected a string`\n if (!Array.isArray(node.fields)) return `${path}.fields: expected an array of at most ${MAX_FIELDS} fields`\n if (node.fields.length > MAX_FIELDS) return `${path}.fields: ${node.fields.length} fields exceeds the limit of ${MAX_FIELDS}`\n const seen = new Set()\n for (let index = 0; index < node.fields.length; index += 1) {\n const field = node.fields[index]\n const at = `${path}.fields[${index}]`\n if (!isRecord(field)) return `${at}: expected a field object`\n for (const key of Object.keys(field)) {\n if (key !== 'id' && key !== 'label' && key !== 'placeholder') return `${at}.${key}: unknown property ${quoted(key)}; allowed: id, label, placeholder`\n }\n if (typeof field.id !== 'string' || field.id === '') return `${at}.id: expected a non-empty string`\n if (field.id === '__proto__') return `${at}.id: \"__proto__\" cannot be an id`\n if (seen.has(field.id)) return `${at}.id: duplicate field id ${quoted(field.id)}`\n seen.add(field.id)\n if (typeof field.label !== 'string') return `${at}.label: expected a string`\n if (field.placeholder !== undefined && typeof field.placeholder !== 'string') return `${at}.placeholder: expected a string`\n }\n return undefined\n}\n\nfunction checkSubmit(node, path, ctx) {\n const idError = checkId(node, path, ctx)\n if (idError !== undefined) return idError\n if (node.label !== undefined && typeof node.label !== 'string') return `${path}.label: expected a string`\n return undefined\n}\n\nfunction checkId(node, path, ctx) {\n if (typeof node.id !== 'string' || node.id === '') return `${path}.id: expected a non-empty string`\n // A `__proto__` id would write through to a plain object's prototype where the\n // answer is kept, losing it silently.\n if (node.id === '__proto__') return `${path}.id: \"__proto__\" cannot be an id`\n if (ctx.ids.has(node.id)) return `${path}.id: duplicate id ${quoted(node.id)}`\n ctx.ids.add(node.id)\n return undefined\n}\n\n// Every formula parses, reads only inputs and names the view defines, and gives the\n// right kind of value with the inputs as the Bot set them.\nfunction checkFormulas(ctx) {\n const known = new Set([...ctx.inputs.keys(), ...ctx.lets.keys()])\n const lets = new Map()\n for (const [name, entry] of ctx.lets) {\n if (ctx.inputs.has(name)) return `${entry.path}: ${quoted(name)} is already an input id`\n const compiled = compileFormula(entry.source)\n if (compiled.error !== undefined) return `${entry.path}: ${compiled.error}`\n const unknown = compiled.names.find(item => !known.has(item))\n if (unknown !== undefined) return `${entry.path}: unknown name ${quoted(unknown)}; known: ${allowed([...known]) || '(none)'}`\n lets.set(name, compiled.tree)\n }\n const lookup = createScope(ctx.inputs, lets)\n for (const [name, entry] of ctx.lets) {\n const result = evaluate(lets.get(name), lookup)\n if (result.error !== undefined) return `${entry.path}: ${result.error}`\n }\n for (const formula of ctx.formulas) {\n const compiled = compileFormula(formula.source)\n if (compiled.error !== undefined) return `${formula.path}: ${compiled.error}`\n const unknown = compiled.names.find(item => !known.has(item))\n if (unknown !== undefined) return `${formula.path}: unknown name ${quoted(unknown)}; known: ${allowed([...known]) || '(none)'}`\n const result = evaluate(compiled.tree, lookup)\n if (result.error !== undefined) return `${formula.path}: ${result.error}`\n const problem = kindProblem(result.value, formula.kind)\n if (problem !== undefined) return `${formula.path}: the formula gives ${quoted(result.value)}; ${problem}`\n }\n return undefined\n}\n\nfunction kindProblem(value, kind) {\n if (kind === 'number') return isNumber(value) ? undefined : 'expected a number'\n if (Array.isArray(kind)) return kind.includes(value) ? undefined : `expected one of ${allowed(kind)}`\n if (kind === 'string') return isScalar(value) ? undefined : 'expected text'\n return isScalar(value) ? undefined : 'expected a string or a number'\n}\n\nfunction cellText(value) {\n if (typeof value === 'string') return value\n const text = JSON.stringify(value)\n return typeof text === 'string' ? text : ''\n}\n\n// -------------------------------------------------------------------------\n// Working a blueprint out: the client draws with these, the summary reads them.\n\nconst compiled = new WeakMap()\nconst treeOf = (formula) => {\n let entry = compiled.get(formula)\n if (entry === undefined) {\n entry = compileFormula(formula['='])\n compiled.set(formula, entry)\n }\n return entry\n}\n\nexport const choiceValue = option => option?.value ?? option?.label\n\nfunction walk(node, visit) {\n if (!isRecord(node)) return\n visit(node)\n if (LAYOUT.includes(node.type) && Array.isArray(node.children)) for (const child of node.children) walk(child, visit)\n}\n\nexport function viewInputs(view) {\n const found = []\n walk(view, (node) => { if (INPUTS.has(node.type)) found.push(node) })\n return found\n}\n\nexport function inputDefault(node) {\n if (node.type === 'toggle') return node.value === true\n if (node.type === 'choice') return node.value ?? choiceValue(Array.isArray(node.options) ? node.options[0] : undefined)\n return node.value\n}\n\nexport const hasInputs = view => viewInputs(view).length > 0\n\n// The values a view's formulas read: each input's default unless `values` sets it.\nexport function viewScope(view, values = {}) {\n const inputs = new Map()\n for (const node of viewInputs(view)) inputs.set(node.id, Object.hasOwn(values, node.id) ? values[node.id] : inputDefault(node))\n const lets = new Map()\n for (const [name, source] of Object.entries(isRecord(view?.let) ? view.let : {})) {\n const entry = compileFormula(source)\n if (entry.tree !== undefined) lets.set(name, entry.tree)\n }\n return createScope(inputs, lets)\n}\n\n// A property's value: the literal, or the formula worked out. A formula that fails\n// with these inputs gives `fallback`.\nexport function resolve(value, lookup, fallback = undefined) {\n if (!isFormula(value)) return value\n const entry = treeOf(value)\n if (entry.tree === undefined) return fallback\n const result = evaluate(entry.tree, lookup)\n return result.error === undefined ? result.value : fallback\n}\n\nexport const asText = value => (value === undefined || value === null ? '' : show(value))\n\n// -------------------------------------------------------------------------\n// Summaries\n\nfunction clip(text) {\n const flat = String(text).replace(/\\s+/g, ' ').trim()\n return flat.length <= SUMMARY_PART ? flat : flat.slice(0, SUMMARY_PART)\n}\n\nconst choiceLabel = (node, value) => (Array.isArray(node.options) ? node.options : []).find(option => choiceValue(option) === value)?.label ?? asText(value)\n\nfunction inputText(node, value) {\n if (node.type === 'toggle') return value === true ? 'on' : 'off'\n if (node.type === 'choice') return choiceLabel(node, value)\n return `${asText(value)}${node.unit ? ` ${node.unit}` : ''}`\n}\n\nfunction progressPercent(node, lookup) {\n if (node.percent !== undefined) return Number(resolve(node.percent, lookup, 0))\n const max = Number(resolve(node.max, lookup, 0))\n return max > 0 ? (Number(resolve(node.value, lookup, 0)) / max) * 100 : 0\n}\n\nfunction componentSummary(node, lookup) {\n const value = item => asText(resolve(item, lookup, ''))\n switch (node.type) {\n case 'text': return `text: ${value(node.text)}`\n case 'metric': return `metric: ${node.label}=${value(node.value)}`\n case 'table': return `table: ${(Array.isArray(node.columns) ? node.columns : []).map(column => column?.label ?? column?.key ?? '').filter(Boolean).join('/')}`\n case 'chart': {\n const series = Array.isArray(node.series) ? node.series[0] : undefined\n const values = Array.isArray(series?.values) ? series.values : []\n const unit = node.unit ? ` ${node.unit}` : ''\n return `chart: ${(Array.isArray(node.categories) ? node.categories : []).map((label, index) => `${label}=${value(values[index])}${unit}`).join(', ')}`\n }\n case 'progress': return `progress: ${node.label ? `${node.label} ` : ''}${Math.round(progressPercent(node, lookup))}%`\n case 'callout': return `callout: ${value(node.text)}`\n case 'sources': return `sources: ${(Array.isArray(node.items) ? node.items : []).map(item => item?.label).filter(Boolean).join('/')}`\n case 'slider': case 'number': case 'choice': case 'toggle': return `${node.type}: ${node.label}=${inputText(node, inputDefault(node))}`\n case 'options': return `options: ${(Array.isArray(node.options) ? node.options : []).map(option => option?.label).filter(Boolean).join('/')}`\n case 'confirm': return 'confirm'\n case 'form': return `form: ${(Array.isArray(node.fields) ? node.fields : []).map(field => field?.label ?? field?.id).filter(Boolean).join('/')}`\n case 'submit': return `submit: ${node.label ?? 'Send'}`\n default: return undefined\n }\n}\n\n// One line for a handoff or a checkpoint. Containers add nothing of their own;\n// each component keeps one short phrase, and the line stops after a few. Formulas\n// show what they give with the inputs as the Bot set them.\nexport function viewSummary(view) {\n const parts = []\n const lookup = viewScope(view)\n const visit = (node) => {\n if (parts.length >= SUMMARY_COUNT || !isRecord(node)) return\n const line = componentSummary(node, lookup)\n if (line !== undefined) parts.push(clip(line))\n if (parts.length >= SUMMARY_COUNT || !LAYOUT.includes(node.type) || !Array.isArray(node.children)) return\n for (const child of node.children) visit(child)\n }\n visit(view)\n return parts.join('; ')\n}\n\n// The inputs of an answer as `Label=value` pairs, for the Bot's history.\nexport function inputsSummary(view, inputs) {\n if (!isRecord(inputs)) return ''\n return viewInputs(view)\n .filter(node => Object.hasOwn(inputs, node.id))\n .map(node => `${node.label || node.id}=${inputText(node, inputs[node.id])}`)\n .join('; ')\n}\n\n// -------------------------------------------------------------------------\n// Answers\n\nfunction interactiveNodes(node, found = []) {\n walk(node, (item) => { if (INTERACTIVE.has(item.type)) found.push(item) })\n return found\n}\n\n// `action` is the id of the component the user submitted. One submit settles\n// the whole card, so only that component's values are kept, plus the inputs'\n// values when the view has inputs.\nexport function validateViewAnswer(view, action, values) {\n const nodes = interactiveNodes(view)\n if (typeof action !== 'string' || action === '') return { error: `action: expected an interactive component id; allowed: ${allowed(nodes.map(node => node.id))}` }\n const node = nodes.find(item => item.id === action)\n if (node === undefined) return { error: `action: no interactive component with id ${quoted(action)}; allowed: ${allowed(nodes.map(item => item.id))}` }\n if (!isRecord(values)) return { error: 'values: expected an object' }\n const inputs = validateInputs(view, values.inputs)\n if (inputs.error !== undefined) return inputs\n const extra = inputs.inputs === undefined ? {} : { inputs: inputs.inputs }\n if (node.type === 'submit') return { ...extra }\n const own = node.type === 'options' ? validateOptions(node, values) : node.type === 'confirm' ? validateConfirm(values) : validateForm(node, values)\n return own.error === undefined ? { ...own, ...extra } : own\n}\n\n// Every input of the view, as sent or else as the Bot set it.\nfunction validateInputs(view, sent) {\n const nodes = viewInputs(view)\n if (nodes.length === 0) return sent === undefined ? {} : { error: 'values.inputs: this view has no inputs' }\n if (sent !== undefined && !isRecord(sent)) return { error: 'values.inputs: expected an object of input ids to values' }\n const given = sent ?? {}\n const ids = nodes.map(node => node.id)\n const unknown = Object.keys(given).find(key => !ids.includes(key))\n if (unknown !== undefined) return { error: `values.inputs.${unknown}: unknown input; allowed: ${allowed(ids)}` }\n const inputs = {}\n for (const node of nodes) {\n const value = Object.hasOwn(given, node.id) ? given[node.id] : inputDefault(node)\n const at = `values.inputs.${node.id}`\n if (node.type === 'toggle' && typeof value !== 'boolean') return { error: `${at}: expected true or false` }\n if (node.type === 'choice' && !(Array.isArray(node.options) ? node.options : []).some(option => choiceValue(option) === value)) return { error: `${at}: expected one of the options' values` }\n if (node.type === 'slider' || node.type === 'number') {\n if (!isNumber(value)) return { error: `${at}: expected a number` }\n if ((node.min !== undefined && value < node.min) || (node.max !== undefined && value > node.max)) return { error: `${at}: expected a number from ${node.min ?? '-∞'} to ${node.max ?? '∞'}` }\n }\n inputs[node.id] = value\n }\n return { inputs }\n}\n\nfunction validateOptions(node, values) {\n if (!Array.isArray(values.selected)) return { error: 'values.selected: expected an array of option labels' }\n const labels = new Set((node.options ?? []).map(option => option?.label))\n const picked = values.selected.filter(label => typeof label === 'string' && labels.has(label))\n const selected = node.multi === true ? [...new Set(picked)] : picked.slice(0, 1)\n if (selected.length === 0) return { error: 'values.selected: select at least one option' }\n return { selected }\n}\n\nfunction validateConfirm(values) {\n if (typeof values.confirmed !== 'boolean') return { error: 'values.confirmed: expected a boolean' }\n return { confirmed: values.confirmed }\n}\n\nfunction validateForm(node, values) {\n if (!isRecord(values.fields)) return { error: 'values.fields: expected an object of field ids to strings' }\n const declared = (node.fields ?? []).map(field => field?.id).filter(id => typeof id === 'string')\n const allowedIds = new Set(declared)\n const fields = {}\n for (const [key, value] of Object.entries(values.fields)) {\n if (!allowedIds.has(key)) return { error: `values.fields.${key}: unknown field; allowed: ${allowed(declared)}` }\n if (typeof value !== 'string') return { error: `values.fields.${key}: expected a string` }\n if (value.length > MAX_TEXT) return { error: `values.fields.${key}: ${value.length} characters exceeds the limit of ${MAX_TEXT}` }\n fields[key] = value\n }\n return { fields }\n}\n","export type PluginLogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fault'\n\nexport const PLUGIN_LOG_LEVELS: readonly PluginLogLevel[] = ['debug', 'info', 'warn', 'error', 'fault']\nexport const DEFAULT_PLUGIN_LOG_LEVEL: PluginLogLevel = 'info'\nexport const PLUGIN_LOG_MAX_MESSAGE_CHARS = 16_000\nexport const PLUGIN_LOG_MAX_CONTEXT_CHARS = 8_000\n\nexport type PluginLogScalar = string | number | boolean | null\nexport type PluginLogContext = Record<string, PluginLogScalar | undefined>\n\nexport interface PluginLogInput {\n level: PluginLogLevel\n event: string\n message: string\n context?: PluginLogContext\n error?: unknown\n}\n\nexport interface PluginLogError {\n name: string\n message: string\n stack?: string\n code?: string\n}\n\nexport interface PluginLogEntry {\n version: 1\n at: string\n level: PluginLogLevel\n source: string\n surface: 'host' | 'client'\n profile?: string\n event: string\n message: string\n pid?: number\n context?: Record<string, PluginLogScalar>\n error?: PluginLogError\n}\n\nexport interface PluginLogger {\n readonly source: string\n readonly file: string | null\n readonly lastWriteError: string | null\n debug(event: string, message: string, context?: PluginLogContext): boolean\n info(event: string, message: string, context?: PluginLogContext): boolean\n warn(event: string, message: string, error?: unknown, context?: PluginLogContext): boolean\n error(event: string, message: string, error?: unknown, context?: PluginLogContext): boolean\n fault(event: string, message: string, error?: unknown, context?: PluginLogContext): boolean\n write(input: PluginLogInput): boolean\n child(context: PluginLogContext): PluginLogger\n}\n\nconst SOURCE_RE = /^[a-z][a-z0-9-]{0,63}$/\nconst EVENT_RE = /^[a-z][a-z0-9._-]{0,127}$/\nconst CONTEXT_KEY_RE = /^[a-zA-Z][a-zA-Z0-9._-]{0,63}$/\nconst SECRET_KEY_RE = /(?:api[_-]?key|access[_-]?token|refresh[_-]?token|bearer|authorization|cookie|set[_-]?cookie|nonce|credential|private[_-]?key|password|secret|app[_-]?secret|client[_-]?secret|z_c0|d_c0)$/i\n\nconst CHAT_PAYLOAD_RE =\n /\"role\"\\s*:\\s*\"(?:system|user|assistant|tool)\"|\"(?:messages|content|prompt|input_text|input_image|image_url)\"\\s*:\\s*[\\[{\"']/i\nconst CREDENTIAL_BODY_RE =\n /-----BEGIN (?:RSA |EC |OPENSSH |PRIVATE )?PRIVATE KEY-----|\"type\"\\s*:\\s*\"service_account\"|credentials\\.json|\\.dsh[/\\\\](?:credentials|auth)/i\nconst AUTH_HEADER_RE = /\\b(Authorization|Proxy-Authorization|Cookie|Set-Cookie)\\s*:\\s*[^\\r\\n]*/gi\nconst BEARER_RE = /\\bBearer\\s+[A-Za-z0-9._\\-+=/]{8,}/g\nconst SECRET_FIELD_RE =\n /([\"']?(?:api[_-]?key|access[_-]?token|refresh[_-]?token|token|bearer|authorization|cookie|set-cookie|nonce|credential|private[_-]?key|password|secret|app[_-]?secret|client[_-]?secret|password|z_c0|d_c0)[\"']?\\s*[:=]\\s*)(?:\"(?:\\\\.|[^\"\\\\])*\"|'(?:\\\\.|[^'\\\\])*'|[^\\s,&;}]+)/gi\nconst SECRET_QUERY_RE =\n /([?&](?:token|api[_-]?key|key|secret|password|bootstrap|code|sig|signature|credential|password)=)[^\\s&#\"']+/gi\nconst URL_CREDENTIAL_RE = /\\b(https?:\\/\\/)[^\\s/:@]+:[^\\s/@]+@/gi\nconst BOOTSTRAP_RE = /\\/bootstrap\\/[^\\s\"'?&#]+/gi\nconst KNOWN_TOKEN_RE = /\\b(?:sk-[A-Za-z0-9_-]{10,}|gh[pousr]_[A-Za-z0-9_]{16,}|github_pat_[A-Za-z0-9_]{20,}|tvly-[A-Za-z0-9_-]{10,}|AKIA[0-9A-Z]{16})\\b/g\nconst PATH_RE = /(?:[A-Za-z]:\\\\|\\\\\\\\)[^\\s\"'`<>|]+|(?:\\/(?:home|Users|tmp|var|root)\\/|~\\/)[^\\s\"'`<>|]+/g\n\nexport function isPluginLogLevel(value: unknown): value is PluginLogLevel {\n return typeof value === 'string' && (PLUGIN_LOG_LEVELS as readonly string[]).includes(value)\n}\n\nexport function pluginLogLevelEnabled(level: PluginLogLevel, minimum: PluginLogLevel): boolean {\n return PLUGIN_LOG_LEVELS.indexOf(level) >= PLUGIN_LOG_LEVELS.indexOf(minimum)\n}\n\nexport function normalizePluginLogSource(raw: string): string {\n const stripped = String(raw || '').trim().replace(/^@[^/]+\\//, '').toLowerCase()\n .replace(/[^a-z0-9-]+/g, '-').replace(/^-+|-+$/g, '')\n const prefixed = /^[a-z]/.test(stripped) ? stripped : `p-${stripped}`\n const bounded = prefixed.slice(0, 64).replace(/-+$/g, '')\n return SOURCE_RE.test(bounded) ? bounded : 'dsh-plugin'\n}\n\nexport function normalizePluginLogEvent(raw: string): string {\n const cleaned = String(raw || '').trim().toLowerCase()\n .replace(/[^a-z0-9._-]+/g, '-').replace(/^[^a-z]+/, '').slice(0, 128)\n return EVENT_RE.test(cleaned) ? cleaned : 'plugin.event'\n}\n\n/**\n * Parse a level specification like `debug` or `dsh-zhihu=debug,dsh-dot:warn,info`.\n * Source-specific rules win over a bare fallback level.\n */\nexport function parsePluginLogLevel(\n spec: string | undefined | null,\n source?: string,\n fallback: PluginLogLevel = DEFAULT_PLUGIN_LOG_LEVEL,\n): PluginLogLevel {\n if (!spec || typeof spec !== 'string') return fallback\n const normalizedSource = source ? normalizePluginLogSource(source) : undefined\n let wildcard: PluginLogLevel | undefined\n for (const token of spec.split(',').map(part => part.trim()).filter(Boolean)) {\n const lowered = token.toLowerCase()\n if (isPluginLogLevel(lowered)) {\n wildcard = lowered\n continue\n }\n const match = /^([^=:]+)[=:]([a-z]+)$/i.exec(token)\n if (!match) continue\n const target = match[1]!.trim()\n const candidate = match[2]!.trim().toLowerCase()\n if (!isPluginLogLevel(candidate)) continue\n if (target === '*') {\n wildcard = candidate\n continue\n }\n if (normalizedSource && normalizePluginLogSource(target) === normalizedSource) {\n return candidate\n }\n }\n return wildcard ?? fallback\n}\n\nexport function sanitizePluginLogText(text: string, maxChars = PLUGIN_LOG_MAX_MESSAGE_CHARS): string {\n if (!text) return ''\n if (CREDENTIAL_BODY_RE.test(text)) return '[omitted credential material]'\n if (CHAT_PAYLOAD_RE.test(text)) return '[omitted chat payload]'\n const redacted = text\n .replace(AUTH_HEADER_RE, '$1: [redacted]')\n .replace(BEARER_RE, 'Bearer [redacted]')\n .replace(SECRET_FIELD_RE, (full, prefix: string) => {\n const value = full.slice(prefix.length)\n if (value.startsWith('\"')) return `${prefix}\"[redacted]\"`\n if (value.startsWith(\"'\")) return `${prefix}'[redacted]'`\n return `${prefix}[redacted]`\n })\n .replace(SECRET_QUERY_RE, '$1[redacted]')\n .replace(URL_CREDENTIAL_RE, '$1[redacted]@')\n .replace(BOOTSTRAP_RE, '/bootstrap/[redacted]')\n .replace(KNOWN_TOKEN_RE, '[redacted]')\n .replace(PATH_RE, '[path]')\n return truncateLogText(redacted, maxChars)\n}\n\nexport function sanitizePluginLogContext(\n input: PluginLogContext | undefined,\n): Record<string, PluginLogScalar> | undefined {\n if (!input) return undefined\n const output: Record<string, PluginLogScalar> = {}\n for (const [key, value] of Object.entries(input).slice(0, 32)) {\n if (value === undefined || !CONTEXT_KEY_RE.test(key)) continue\n if (typeof value === 'number' && !Number.isFinite(value)) continue\n if (SECRET_KEY_RE.test(key)) {\n output[key] = '[redacted]'\n continue\n }\n output[key] = typeof value === 'string' ? sanitizePluginLogText(value, 1_000) : value\n }\n if (!Object.keys(output).length) return undefined\n const encoded = JSON.stringify(output)\n if (encoded.length <= PLUGIN_LOG_MAX_CONTEXT_CHARS) return output\n return { omitted: true, reason: 'Diagnostic context exceeded its size limit.' }\n}\n\nexport function sanitizePluginLogError(error: unknown): PluginLogError | undefined {\n if (error === undefined) return undefined\n const row = error && typeof error === 'object'\n ? error as { name?: unknown; message?: unknown; stack?: unknown; code?: unknown }\n : {}\n const rawMessage = typeof row.message === 'string' ? row.message : String(error)\n const result: PluginLogError = {\n name: typeof row.name === 'string' && row.name.trim() ? truncateLogText(row.name.trim(), 100) : 'Error',\n message: sanitizePluginLogText(rawMessage) || 'Unknown error',\n }\n if (typeof row.stack === 'string' && row.stack.trim()) {\n result.stack = sanitizePluginLogText(row.stack, 24_000)\n }\n if (typeof row.code === 'string' && /^[A-Za-z0-9_./:-]{1,100}$/.test(row.code)) {\n result.code = row.code\n } else if (typeof row.code === 'number' && Number.isFinite(row.code)) {\n result.code = String(row.code)\n }\n return result\n}\n\nexport function mergePluginLogContext(\n base: PluginLogContext | undefined,\n extra: PluginLogContext | undefined,\n): PluginLogContext | undefined {\n if (!base) return extra\n if (!extra) return base\n return { ...base, ...extra }\n}\n\nexport function buildPluginLogEntry(\n input: PluginLogInput,\n meta: {\n at: Date\n source: string\n surface: 'host' | 'client'\n profile?: string\n pid?: number\n correlation?: PluginLogContext\n },\n): PluginLogEntry {\n const entry: PluginLogEntry = {\n version: 1,\n at: meta.at.toISOString(),\n level: isPluginLogLevel(input.level) ? input.level : 'info',\n source: normalizePluginLogSource(meta.source),\n surface: meta.surface,\n ...(meta.profile ? { profile: meta.profile } : {}),\n event: normalizePluginLogEvent(input.event),\n message: sanitizePluginLogText(input.message || 'No diagnostic message was provided.', PLUGIN_LOG_MAX_MESSAGE_CHARS),\n ...(meta.pid !== undefined ? { pid: meta.pid } : {}),\n }\n const context = sanitizePluginLogContext(mergePluginLogContext(meta.correlation, input.context))\n if (context) entry.context = context\n const error = sanitizePluginLogError(input.error)\n if (error) entry.error = error\n return entry\n}\n\nexport function createChildPluginLogger(parent: PluginLogger, bound: PluginLogContext): PluginLogger {\n return {\n get source() { return parent.source },\n get file() { return parent.file },\n get lastWriteError() { return parent.lastWriteError },\n debug: (event, message, context) => parent.debug(event, message, mergePluginLogContext(bound, context)),\n info: (event, message, context) => parent.info(event, message, mergePluginLogContext(bound, context)),\n warn: (event, message, error, context) => parent.warn(event, message, error, mergePluginLogContext(bound, context)),\n error: (event, message, error, context) => parent.error(event, message, error, mergePluginLogContext(bound, context)),\n fault: (event, message, error, context) => parent.fault(event, message, error, mergePluginLogContext(bound, context)),\n write: input => parent.write({ ...input, context: mergePluginLogContext(bound, input.context) }),\n child: next => createChildPluginLogger(parent, mergePluginLogContext(bound, next) ?? {}),\n }\n}\n\nexport function truncateLogText(text: string, maxChars: number): string {\n if (text.length <= maxChars) return text\n const marker = '[truncated]\\n'\n if (maxChars <= marker.length) return text.slice(0, Math.max(0, maxChars))\n return `${marker}${text.slice(-(maxChars - marker.length))}`\n}\n","import {\n DEFAULT_PLUGIN_LOG_LEVEL, buildPluginLogEntry, createChildPluginLogger,\n normalizePluginLogSource, parsePluginLogLevel, pluginLogLevelEnabled,\n sanitizePluginLogText,\n type PluginLogContext, type PluginLogEntry, type PluginLogInput,\n type PluginLogLevel, type PluginLogger,\n} from './log-shared.ts'\n\nexport * from './log-shared.ts'\n\nexport const CLIENT_PLUGIN_LOG_GLOBAL = '__KLARKXY_PLUGIN_LOGS__'\nexport const CLIENT_PLUGIN_LOG_LIMIT = 500\n\nexport interface ClientPluginLoggerOptions {\n minimumLevel?: PluginLogLevel\n now?: () => Date\n bufferLimit?: number\n forwardToHostLogger?: boolean\n loadedContext?: PluginLogContext\n}\n\ntype BrowserContextLike = {\n effect?: (callback: () => () => void, label?: string) => unknown\n logger?: {\n warn?: (...args: unknown[]) => void\n error?: (...args: unknown[]) => void\n }\n}\n\ntype GlobalLogCarrier = {\n [CLIENT_PLUGIN_LOG_GLOBAL]?: PluginLogEntry[]\n window?: { localStorage?: { getItem?: (key: string) => string | null } }\n console?: {\n debug?: (...args: unknown[]) => void\n info?: (...args: unknown[]) => void\n warn?: (...args: unknown[]) => void\n error?: (...args: unknown[]) => void\n }\n}\n\nfunction readStorageFlag(key: string): string | undefined {\n try {\n const win = (globalThis as unknown as GlobalLogCarrier).window\n const storage = win?.localStorage\n const value = storage?.getItem?.(key)\n return typeof value === 'string' && value.trim() ? value.trim() : undefined\n } catch {\n return undefined\n }\n}\n\nfunction sharedClientBuffer(limit: number): PluginLogEntry[] {\n const carrier = globalThis as unknown as GlobalLogCarrier\n if (!Array.isArray(carrier[CLIENT_PLUGIN_LOG_GLOBAL])) {\n try {\n carrier[CLIENT_PLUGIN_LOG_GLOBAL] = []\n } catch {\n return []\n }\n }\n const list = carrier[CLIENT_PLUGIN_LOG_GLOBAL]!\n const overflow = list.length - limit\n if (overflow > 0) list.splice(0, overflow)\n return list\n}\n\nexport function readClientPluginLogs(source?: string): PluginLogEntry[] {\n const carrier = globalThis as unknown as GlobalLogCarrier\n const list = Array.isArray(carrier[CLIENT_PLUGIN_LOG_GLOBAL]) ? carrier[CLIENT_PLUGIN_LOG_GLOBAL]! : []\n if (!source) return list.slice()\n const normalized = normalizePluginLogSource(source)\n return list.filter(entry => entry.source === normalized)\n}\n\nexport function clearClientPluginLogs(): void {\n const carrier = globalThis as unknown as GlobalLogCarrier\n if (Array.isArray(carrier[CLIENT_PLUGIN_LOG_GLOBAL])) {\n carrier[CLIENT_PLUGIN_LOG_GLOBAL]!.length = 0\n }\n}\n\nexport function createClientPluginLogger(\n source: string,\n ctx?: unknown,\n options: ClientPluginLoggerOptions = {},\n): PluginLogger {\n const normalized = normalizePluginLogSource(source)\n const now = options.now ?? (() => new Date())\n const limit = Math.max(10, options.bufferLimit ?? CLIENT_PLUGIN_LOG_LIMIT)\n const browserCtx = ctx && typeof ctx === 'object' ? ctx as BrowserContextLike : undefined\n\n const resolveMinimum = (): PluginLogLevel => {\n if (options.minimumLevel) return options.minimumLevel\n return parsePluginLogLevel(readStorageFlag('dsh-plugin-log-level'), normalized, DEFAULT_PLUGIN_LOG_LEVEL)\n }\n\n const logger: PluginLogger = {\n source: normalized,\n file: null,\n lastWriteError: null,\n debug: (event, message, context) => logger.write({ level: 'debug', event, message, ...(context ? { context } : {}) }),\n info: (event, message, context) => logger.write({ level: 'info', event, message, ...(context ? { context } : {}) }),\n warn: (event, message, error, context) => logger.write({\n level: 'warn', event, message,\n ...(error !== undefined ? { error } : {}),\n ...(context ? { context } : {}),\n }),\n error: (event, message, error, context) => logger.write({\n level: 'error', event, message,\n ...(error !== undefined ? { error } : {}),\n ...(context ? { context } : {}),\n }),\n fault: (event, message, error, context) => logger.write({\n level: 'fault', event, message,\n ...(error !== undefined ? { error } : {}),\n ...(context ? { context } : {}),\n }),\n child: context => createChildPluginLogger(logger, context),\n write(input: PluginLogInput): boolean {\n try {\n if (!pluginLogLevelEnabled(input.level, resolveMinimum())) return false\n const entry = buildPluginLogEntry(input, {\n at: now(),\n source: normalized,\n surface: 'client',\n })\n const buffer = sharedClientBuffer(limit)\n buffer.push(entry)\n const overflow = buffer.length - limit\n if (overflow > 0) buffer.splice(0, overflow)\n\n if (options.forwardToHostLogger !== false && browserCtx?.logger) {\n const summary = sanitizePluginLogText(`${normalized} [${entry.event}]: ${entry.message}`, 500)\n if (entry.level === 'warn' && typeof browserCtx.logger.warn === 'function') {\n browserCtx.logger.warn(summary)\n } else if ((entry.level === 'error' || entry.level === 'fault') && typeof browserCtx.logger.error === 'function') {\n browserCtx.logger.error(summary)\n }\n }\n if (readStorageFlag('dsh-plugin-log-console') === '1') {\n const con = (globalThis as unknown as GlobalLogCarrier).console\n const fn = entry.level === 'debug' ? con?.debug\n : entry.level === 'info' ? con?.info\n : entry.level === 'warn' ? con?.warn\n : con?.error\n fn?.call(con, `[${normalized}] ${entry.event}: ${entry.message}`, entry)\n }\n return true\n } catch {\n return false\n }\n },\n }\n return logger\n}\n\nexport function installClientPluginLogger(\n ctx: unknown,\n source: string,\n options: ClientPluginLoggerOptions = {},\n): PluginLogger {\n const logger = createClientPluginLogger(source, ctx, options)\n logger.info('client.loaded', 'Client plugin initialized.', options.loadedContext)\n const browserCtx = ctx && typeof ctx === 'object' ? ctx as BrowserContextLike : undefined\n if (typeof browserCtx?.effect === 'function') {\n try {\n browserCtx.effect(() => () => {\n logger.debug('client.disposed', 'Client plugin disposed.')\n }, `${logger.source}.client-logger`)\n } catch {\n // Non-Cordis mock context.\n }\n }\n return logger\n}\n\nexport async function clientLogStep<T>(\n logger: PluginLogger,\n step: string,\n context: PluginLogContext | undefined,\n action: () => Promise<T>,\n completedLevel: PluginLogLevel = 'debug',\n): Promise<T> {\n const started = Date.now()\n const base = { ...context, step }\n logger.debug('step.started', 'Client step started.', base)\n try {\n const result = await action()\n logger.write({\n level: completedLevel,\n event: 'step.completed',\n message: 'Client step completed.',\n context: { ...base, durationMs: Date.now() - started },\n })\n return result\n } catch (error) {\n logger.error('step.failed', 'Client step failed.', error, {\n ...base,\n durationMs: Date.now() - started,\n })\n throw error\n }\n}\n","import type { RpcResult as SharedRpcResult } from '@klarkxy/dsh-plugin-kit/contracts'\nexport type RpcResult<T = unknown> = SharedRpcResult<T>\nexport const PLUGIN_NAME = '@klarkxy/dsh-deep-view'\nexport const RPC_CHANNEL = '/dsh-deep-view'\nexport const VIEW_OWNER = 'dsh-deep-view'\nexport const HOST_SERVICE = 'dshDeepView'\nexport type DeepViewHost = {\n /** Move an open card and route stale session lookups to a replacement root session. */\n handoffSession(fromSessionId: string, toSessionId: string): boolean\n}\n\nexport type Scalar = string | number | boolean\nexport type Formula = { '=': string }\nexport type Value = Scalar | Formula\nexport type ChoiceOption = { label: string; value?: Scalar }\nexport type ViewNode = {\n type: 'stack' | 'row' | 'text' | 'metric' | 'table' | 'chart' | 'progress' | 'callout' | 'sources'\n | 'slider' | 'number' | 'choice' | 'toggle' | 'options' | 'confirm' | 'form' | 'submit'\n id?: string\n children?: ViewNode[]\n let?: Record<string, string>\n text?: Value\n label?: string\n value?: Value\n tone?: Value\n caption?: Value\n columns?: { key: string; label: string }[]\n rows?: Value[][]\n kind?: 'bar' | 'hbar' | 'line' | 'area' | 'donut'\n categories?: Scalar[]\n series?: { name?: string; values: (number | Formula)[] }[]\n unit?: string\n percent?: Value\n max?: Value\n valueLabel?: Value\n items?: { label: string; url: string }[]\n min?: number\n step?: number\n options?: ChoiceOption[] | { label: string; description?: string }[]\n multi?: boolean\n confirmLabel?: string\n cancelLabel?: string\n fields?: { id: string; label: string; placeholder?: string }[]\n submitLabel?: string\n}\nexport type ShownView = { title: string; view: ViewNode; interactive: boolean }\nexport type ViewFailure = { error: string }\nexport type PendingView = { id: string; sessionId: string; callId?: string; title: string; view: ViewNode }\nexport type ViewAnswer = { id: string; action: string; values: Record<string, unknown> }\n/** Stored on the same user message as its readable answer, outside model text. */\nexport type ViewAnswerMetadata = { owner: typeof VIEW_OWNER; version: 1; answer: ViewAnswer }\nexport type ViewPresentation = {\n owner: typeof VIEW_OWNER\n viewId?: string\n title: string\n view: ViewNode\n interactive: boolean\n awaitReply: boolean\n}\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","// Migrated from deep-view/src/react/ui.js (Apache-2.0).\n// Small, host-neutral labels and SVG controls; no private color tokens.\nimport type { ReactNode } from 'react'\nexport type ViewT = (key: string, params?: Record<string, unknown>) => string\nexport const english: ViewT = (key, params) => key.replace(/\\{(\\w+)\\}/g, (_, name) => String(params?.[name] ?? `{${name}}`))\n\nexport function LineIcon({ paths }: { paths: string[] }) {\n return <svg width=\"15\" height=\"15\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">{paths.map((d, index) => <path key={index} d={d} />)}</svg>\n}\nexport const DotsIcon = () => <LineIcon paths={['M5 10h.01M10 10h.01M15 10h.01']} />\nexport const CheckIcon = () => <LineIcon paths={['M4.5 10.5l3.5 3.5 7.5-8']} />\nexport const CopyIcon = () => <LineIcon paths={['M8.5 7h6A1.5 1.5 0 0 1 16 8.5v6a1.5 1.5 0 0 1-1.5 1.5h-6A1.5 1.5 0 0 1 7 14.5v-6A1.5 1.5 0 0 1 8.5 7z', 'M4 12.5V5.5A1.5 1.5 0 0 1 5.5 4H13']} />\nexport const TableIcon = () => <LineIcon paths={['M4.5 4h11A1.5 1.5 0 0 1 17 5.5v9a1.5 1.5 0 0 1-1.5 1.5h-11A1.5 1.5 0 0 1 3 14.5v-9A1.5 1.5 0 0 1 4.5 4z', 'M3 8.5h14M8 8.5V16']} />\nexport const InfoIcon = () => <LineIcon paths={['M10 3.5a6.5 6.5 0 1 1 0 13 6.5 6.5 0 0 1 0-13z', 'M10 9.25v4', 'M10 6.6h.01']} />\nexport const LinkIcon = () => <svg width=\"12\" height=\"12\" viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\"><path d=\"M8.5 11.5l3-3\" /><path d=\"M7 9.5L5.5 11a2.5 2.5 0 0 0 3.5 3.5L10.5 13\" /><path d=\"M13 10.5l1.5-1.5A2.5 2.5 0 0 0 11 5.5L9.5 7\" /></svg>\nexport const keyLetter = (index: number) => String.fromCharCode(65 + index)\nexport function Segmented({ label, value, className, children }: { label: string; value: number; className?: string; children: ReactNode }) {\n return <div className={className ? `dvui-seg ${className}` : 'dvui-seg'} role=\"group\" aria-label={label} data-active={value}>{children}</div>\n}\n","// Chart layout and interaction adapted from deep-view/src/react/chart.js (Apache-2.0).\n// SVG is responsive, keyboard navigable, and uses only official --dsw-* theme tokens.\nimport { Fragment, useId, useLayoutEffect, useRef, useState } from 'react'\nimport type { CSSProperties, KeyboardEvent } from 'react'\nimport { asText, resolve } from './core/index.js'\nimport type { ViewNode } from './contracts.ts'\nimport { english, type ViewT } from './ui.tsx'\n\nexport const PALETTE = [\n 'var(--dsw-alias-state-business-primary)', 'var(--dsw-alias-brand-primary)',\n 'var(--dsw-alias-state-success-primary)', 'var(--dsw-alias-state-warn-primary)',\n 'var(--dsw-alias-state-error-primary)',\n]\nconst colorAt = (index: number) => PALETTE[index % PALETTE.length]\nconst TICK = 10\nconst LABEL = 11\nconst textWidth = (text: unknown, size: number) => [...String(text)].reduce((sum, char) => sum + (char.charCodeAt(0) > 0x2e80 ? size : size * 0.58), 0)\nconst fit = (text: unknown, room: number, size: number) => {\n if (textWidth(text, size) <= room) return String(text)\n let out = ''\n for (const char of String(text)) {\n if (textWidth(`${out}${char}…`, size) > room) break\n out += char\n }\n return out === '' ? '' : `${out}…`\n}\nexport function formatNumber(value: number) {\n if (!Number.isFinite(value)) return asText(value)\n const abs = Math.abs(value)\n const digits = abs >= 100 ? 0 : abs >= 10 ? 1 : 2\n return Number(value.toFixed(digits)).toLocaleString('en-US', { maximumFractionDigits: digits })\n}\nconst withUnit = (value: number, unit: string) => unit ? (unit === '%' ? `${formatNumber(value)}%` : `${formatNumber(value)} ${unit}`) : formatNumber(value)\n\nexport function niceTicks(low: number, high: number) {\n let lo = low\n let hi = high\n if (lo === hi) { lo = Math.min(0, lo); hi = hi === 0 ? 1 : Math.max(0, hi) }\n if (lo === hi) hi = lo + 1\n const raw = (hi - lo) / 4\n const magnitude = 10 ** Math.floor(Math.log10(raw))\n const step = [1, 2, 2.5, 5, 10].map(scale => scale * magnitude).find(candidate => candidate >= raw)!\n const start = Math.floor(lo / step + 1e-9) * step\n const end = Math.ceil(hi / step - 1e-9) * step\n const ticks = []\n for (let value = start; value <= end + step / 2; value += step) ticks.push(Number(value.toPrecision(12)))\n return ticks\n}\n\nexport type ChartSeries = { name: string; color: string; values: number[] }\nexport type ChartData = { kind: string; categories: string[]; series: ChartSeries[]; unit: string }\nexport function chartData(node: ViewNode, lookup: (name: string) => unknown): ChartData {\n const categories = (Array.isArray(node.categories) ? node.categories : []).map(asText)\n const series = (Array.isArray(node.series) ? node.series : []).map((item, index) => ({\n name: typeof item?.name === 'string' ? item.name : '', color: colorAt(index),\n values: categories.map((_, at) => {\n const value = Number(resolve(Array.isArray(item?.values) ? item.values[at] : undefined, lookup, 0))\n return Number.isFinite(value) ? value : 0\n }),\n }))\n return { kind: node.kind ?? 'bar', categories, series, unit: typeof node.unit === 'string' ? node.unit : '' }\n}\nconst csvCell = (value: string) => /[\",\\n]/.test(value) ? `\"${value.replace(/\"/g, '\"\"')}\"` : value\nexport function chartCsv({ categories, series, unit }: ChartData, t: ViewT = english) {\n const head = ['', ...series.map((item, index) => item.name || (series.length === 1 ? unit || t('Value') : `${t('Series')} ${index + 1}`))]\n const rows = categories.map((label, at) => [label, ...series.map(item => String(item.values[at]))])\n return [head, ...rows].map(row => row.map(cell => csvCell(String(cell))).join(',')).join('\\n')\n}\n\ntype Point = { x: number; y: number }\ntype Hit = { x: number; y: number; w: number; h: number }\ntype Drawn = { parts: React.ReactNode[]; height: number; points: Point[]; hits: Hit[]; size?: number; values?: number[]; total?: number }\nfunction valueAxis(values: number[], zero: boolean) {\n const finite = values.length > 0 ? values : [0]\n const low = Math.min(...finite)\n const high = Math.max(...finite)\n if (zero) return niceTicks(Math.min(0, low), Math.max(0, high))\n const pad = (high - low) * 0.1 || Math.abs(high) * 0.1 || 1\n return niceTicks(low - pad, high + pad)\n}\nfunction columns({ categories, series, unit, kind }: ChartData, width: number, active: number | null, shown: boolean[]): Drawn {\n const visible = series.filter((_, index) => shown[index])\n const ticks = valueAxis(visible.flatMap(item => item.values), kind !== 'line')\n const lo = ticks[0]\n const hi = ticks.at(-1)!\n const left = Math.ceil(Math.max(...ticks.map(tick => textWidth(withUnit(tick, unit), TICK)))) + 10\n const top = 8\n const height = 220\n const bottom = 24\n const plot = { x: left, y: top, w: Math.max(40, width - left - 4), h: height - top - bottom }\n const y = (value: number) => plot.y + plot.h - ((value - lo) / (hi - lo)) * plot.h\n const band = plot.w / categories.length\n const parts: React.ReactNode[] = []\n for (const tick of ticks) {\n parts.push(<line key={`g${tick}`} className=\"dvui-chart-grid\" x1={plot.x} x2={plot.x + plot.w} y1={y(tick)} y2={y(tick)} />)\n parts.push(<text key={`t${tick}`} className=\"dvui-chart-tick\" x={plot.x - 8} y={y(tick) + 3} textAnchor=\"end\">{withUnit(tick, unit)}</text>)\n }\n const points: Point[] = []\n categories.forEach((label, at) => {\n const cx = plot.x + band * at + band / 2\n parts.push(<text key={`c${at}`} className=\"dvui-chart-label\" x={cx} y={height - 7} textAnchor=\"middle\">{fit(label, band - 4, LABEL)}</text>)\n points.push({ x: cx, y: y(Math.max(...visible.map(item => item.values[at]), lo)) })\n })\n if (kind === 'bar') {\n const group = band * 0.72\n const gap = visible.length > 1 ? 2 : 0\n const barW = Math.max(2, (group - gap * (visible.length - 1)) / visible.length)\n const zero = y(Math.max(lo, Math.min(0, hi)))\n categories.forEach((_, at) => visible.forEach((item, row) => {\n const value = item.values[at]\n const x = plot.x + band * at + (band - group) / 2 + row * (barW + gap)\n const top2 = Math.min(y(value), zero)\n const tall = Math.max(1, Math.abs(y(value) - zero))\n const r = Math.min(4, barW / 2, tall)\n const d = value >= 0\n ? `M${x},${top2 + tall}V${top2 + r}q0,-${r} ${r},-${r}h${barW - 2 * r}q${r},0 ${r},${r}V${top2 + tall}z`\n : `M${x},${top2}V${top2 + tall - r}q0,${r} ${r},${r}h${barW - 2 * r}q${r},0 ${r},-${r}V${top2}z`\n parts.push(<path key={`b${at}-${row}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} d={d} style={{ fill: item.color }} />)\n }))\n } else {\n const xs = categories.map((_, at) => plot.x + band * at + band / 2)\n visible.forEach((item, row) => {\n const line = item.values.map((value, at) => `${at === 0 ? 'M' : 'L'}${xs[at]},${y(value)}`).join('')\n if (kind === 'area') {\n const base = y(Math.max(lo, Math.min(0, hi)))\n parts.push(<path key={`a${row}`} className=\"dvui-chart-area\" d={`${line}L${xs.at(-1)},${base}L${xs[0]},${base}z`} style={{ fill: item.color }} />)\n }\n parts.push(<path key={`l${row}`} className=\"dvui-chart-line\" d={line} style={{ stroke: item.color }} />)\n item.values.forEach((value, at) => parts.push(<circle key={`p${row}-${at}`} className=\"dvui-chart-dot\" cx={xs[at]} cy={y(value)} r={active === at ? 4 : 2.5} style={{ fill: item.color }} />))\n })\n if (active !== null) parts.unshift(<line key=\"guide\" className=\"dvui-chart-guide\" x1={xs[active]} x2={xs[active]} y1={plot.y} y2={plot.y + plot.h} />)\n }\n return { parts, height, points, hits: categories.map((_, at) => ({ x: plot.x + band * at, y: plot.y, w: band, h: plot.h })) }\n}\nfunction rows({ categories, series, unit }: ChartData, width: number, active: number | null, shown: boolean[]): Drawn {\n const visible = series.filter((_, index) => shown[index])\n const ticks = valueAxis(visible.flatMap(item => item.values), true)\n const lo = ticks[0]\n const hi = ticks.at(-1)!\n const labelW = Math.min(width * 0.38, Math.ceil(Math.max(...categories.map(label => textWidth(label, LABEL)))) + 10)\n const valueW = Math.ceil(Math.max(...visible.flatMap(item => item.values).map(value => textWidth(withUnit(value, unit), LABEL)))) + 10\n const barH = 14\n const rowH = 10 + visible.length * barH + (visible.length - 1) * 2\n const top = 4\n const height = top + rowH * categories.length + 22\n const plot = { x: labelW, y: top, w: Math.max(40, width - labelW - valueW), h: rowH * categories.length }\n const x = (value: number) => plot.x + ((value - lo) / (hi - lo)) * plot.w\n const parts: React.ReactNode[] = []\n for (const tick of ticks) {\n parts.push(<line key={`g${tick}`} className=\"dvui-chart-grid\" x1={x(tick)} x2={x(tick)} y1={plot.y} y2={plot.y + plot.h} />)\n parts.push(<text key={`t${tick}`} className=\"dvui-chart-tick\" x={x(tick)} y={height - 6} textAnchor=\"middle\">{withUnit(tick, unit)}</text>)\n }\n const points: Point[] = []\n const zero = x(Math.max(lo, Math.min(0, hi)))\n categories.forEach((label, at) => {\n const rowY = plot.y + rowH * at + 5\n parts.push(<text key={`c${at}`} className=\"dvui-chart-label\" x={labelW - 10} y={rowY + (rowH - 10) / 2 + 4} textAnchor=\"end\">{fit(label, labelW - 12, LABEL)}</text>)\n visible.forEach((item, row) => {\n const value = item.values[at]\n const by = rowY + row * (barH + 2)\n const left = Math.min(x(value), zero)\n const long = Math.max(1, Math.abs(x(value) - zero))\n parts.push(<rect key={`b${at}-${row}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} x={left} y={by} width={long} height={barH} rx={Math.min(4, long / 2)} style={{ fill: item.color }} />)\n parts.push(<text key={`v${at}-${row}`} className=\"dvui-chart-value\" x={left + long + 6} y={by + barH - 3}>{withUnit(value, unit)}</text>)\n })\n points.push({ x: Math.max(...visible.map(item => x(item.values[at])), zero), y: rowY })\n })\n return { parts, height, points, hits: categories.map((_, at) => ({ x: 0, y: plot.y + rowH * at, w: width, h: rowH })) }\n}\nfunction donut({ categories, series }: ChartData, width: number, active: number | null, hover: (at: number) => void): Drawn {\n const values = (series[0]?.values ?? []).map(value => Math.max(0, value))\n const total = values.reduce((sum, value) => sum + value, 0)\n const size = Math.min(180, Math.max(120, width * 0.42))\n const r = size / 2\n const inner = r * 0.62\n const cx = r\n const cy = r\n const parts: React.ReactNode[] = []\n const points: Point[] = []\n let angle = -Math.PI / 2\n values.forEach((value, at) => {\n const sweep = total > 0 ? (value / total) * Math.PI * 2 : 0\n const end = angle + sweep\n const mid = angle + sweep / 2\n points.push({ x: cx + Math.cos(mid) * (r - (r - inner) / 2), y: cy + Math.sin(mid) * (r - (r - inner) / 2) })\n if (sweep > 0) {\n const large = sweep > Math.PI ? 1 : 0\n const full = sweep >= Math.PI * 2 - 1e-6\n const p = (radius: number, theta: number) => `${cx + Math.cos(theta) * radius},${cy + Math.sin(theta) * radius}`\n const d = full\n ? `M${p(r, angle)}A${r},${r} 0 1 1 ${p(r, angle + Math.PI)}A${r},${r} 0 1 1 ${p(r, angle)}M${p(inner, angle)}A${inner},${inner} 0 1 0 ${p(inner, angle + Math.PI)}A${inner},${inner} 0 1 0 ${p(inner, angle)}z`\n : `M${p(r, angle)}A${r},${r} 0 ${large} 1 ${p(r, end)}L${p(inner, end)}A${inner},${inner} 0 ${large} 0 ${p(inner, angle)}z`\n parts.push(<path key={`s${at}`} className=\"dvui-chart-mark\" data-dim={active !== null && active !== at ? '' : undefined} d={d} fillRule=\"evenodd\" style={{ fill: colorAt(at) }} onPointerEnter={() => hover(at)} />)\n }\n angle = end\n })\n return { parts, height: size, size, points, total, values, hits: [] }\n}\nfunction useWidth(box: React.RefObject<HTMLDivElement | null>, initial: number) {\n const [width, setWidth] = useState(initial)\n useLayoutEffect(() => {\n const node = box.current\n if (!node || typeof ResizeObserver !== 'function') return undefined\n const measure = () => { const next = Math.round(node.clientWidth); if (next > 0) setWidth(next) }\n measure()\n const observer = new ResizeObserver(measure)\n observer.observe(node)\n return () => observer.disconnect()\n }, [box])\n return width\n}\n\nexport type ChartHandle = { label: string | null; asTable: boolean; toggleTable(): void; copy(): void }\nexport function ChartTable({ data, t = english }: { data: ChartData; t?: ViewT }) {\n const { categories, series, unit } = data\n const heads = series.map((item, index) => item.name || (series.length === 1 ? unit || t('Value') : `${t('Series')} ${index + 1}`))\n return <div className=\"dvui-table\"><table><thead><tr><th scope=\"col\" />{heads.map((head, index) => <th key={index} scope=\"col\" className=\"dvui-num\">{head}</th>)}</tr></thead><tbody>{categories.map((label, at) => <tr key={`${at}-${label}`}><th scope=\"row\">{label}</th>{series.map((item, index) => <td key={index} className=\"dvui-num\">{withUnit(item.values[at], series.length === 1 && !item.name ? '' : unit)}</td>)}</tr>)}</tbody></table></div>\n}\nexport function WidgetChart({ node, lookup, registerChart, refreshCharts, t = english }: { node: ViewNode; lookup: (name: string) => unknown; registerChart?: (key: string, handle: ChartHandle) => (() => void) | void; refreshCharts?: () => void; t?: ViewT }) {\n const data = chartData(node, lookup)\n const { kind, categories, series, unit } = data\n const box = useRef<HTMLElement>(null)\n const width = useWidth(box as React.RefObject<HTMLDivElement | null>, 520)\n const [active, setActive] = useState<number | null>(null)\n const [hidden, setHidden] = useState<number[]>([])\n const [asTable, setAsTable] = useState(false)\n const [copied, setCopied] = useState(false)\n const labelId = useId()\n const menuKey = useId()\n const table = useRef(asTable)\n table.current = asTable\n const shown = series.map((_, index) => !hidden.includes(index))\n const label = typeof node.caption === 'string' && node.caption !== '' ? node.caption : t('Chart')\n const isDonut = kind === 'donut'\n const legendBeside = isDonut && width >= 360\n const drawn = isDonut ? donut(data, legendBeside ? width - 200 : width, active, setActive) : kind === 'hbar' ? rows(data, width, active, shown) : columns(data, width, active, shown)\n const svgWidth = isDonut ? drawn.size! : width\n const move = (event: KeyboardEvent<SVGSVGElement>) => {\n const keys: Record<string, number> = { ArrowRight: 1, ArrowDown: 1, ArrowLeft: -1, ArrowUp: -1 }\n if (event.key === 'Escape') { setActive(null); return }\n if (keys[event.key] === undefined) return\n event.preventDefault()\n setActive(current => current === null ? 0 : (current + keys[event.key] + categories.length) % categories.length)\n }\n const point = active === null ? null : drawn.points[active]\n const share = (at: number) => unit === '%' ? withUnit(drawn.values![at], unit) : `${withUnit(drawn.values![at], unit)} · ${drawn.total! > 0 ? Math.round((drawn.values![at] / drawn.total!) * 100) : 0}%`\n const tipRows = active === null || isDonut ? [] : series.filter((_, index) => shown[index]).map(item => ({ color: item.color, name: item.name, value: withUnit(item.values[active], unit) }))\n const copy = () => {\n void navigator.clipboard?.writeText(chartCsv(data, t)).then(() => { setCopied(true); setTimeout(() => setCopied(false), 1200) }).catch(() => {})\n }\n const toggleTable = () => { table.current = !table.current; setAsTable(table.current) }\n const action = useRef<ChartHandle>({ label: null, asTable: false, toggleTable, copy })\n action.current = { label: typeof node.caption === 'string' && node.caption !== '' ? node.caption : null, get asTable() { return table.current }, toggleTable, copy }\n useLayoutEffect(() => registerChart?.(menuKey, { get label() { return action.current.label }, get asTable() { return action.current.asTable }, toggleTable: () => action.current.toggleTable(), copy: () => action.current.copy() }), [registerChart, menuKey])\n useLayoutEffect(() => { refreshCharts?.() }, [refreshCharts, asTable, label])\n const legend = isDonut\n ? <div className=\"dvui-chart-legend dvui-chart-legend-list\">{categories.map((name, at) => <div key={`${at}-${name}`} className=\"dvui-chart-key\" data-dim={active !== null && active !== at ? '' : undefined} onPointerEnter={() => setActive(at)} onPointerLeave={() => setActive(null)}><i style={{ background: colorAt(at) }} /><span className=\"dvui-chart-key-name\">{name}</span><span className=\"dvui-chart-key-value\">{share(at)}</span></div>)}</div>\n : series.length > 1 ? <div className=\"dvui-chart-legend\">{series.map((item, index) => <button key={`${index}-${item.name}`} type=\"button\" className=\"dvui-chart-key\" aria-pressed={shown[index]} onClick={() => setHidden(before => before.includes(index) ? before.filter(item => item !== index) : shown.filter(Boolean).length > 1 ? [...before, index] : before)}><i style={{ background: item.color }} />{item.name || `${t('Series')} ${index + 1}`}</button>)}</div> : null\n const plot = <div className=\"dvui-chart-plot\" style={isDonut ? { width: svgWidth } : undefined}>\n <svg className=\"dvui-chart-svg\" width={svgWidth} height={drawn.height} viewBox={`0 0 ${svgWidth} ${drawn.height}`} role=\"img\" aria-labelledby={labelId} tabIndex={0} onKeyDown={move} onBlur={() => setActive(null)} onPointerLeave={() => setActive(null)}>\n {drawn.parts}\n {isDonut ? (active === null\n ? <text className=\"dvui-chart-center\" x={svgWidth / 2} y={drawn.height / 2 + 5} textAnchor=\"middle\">{unit === '%' ? '' : withUnit(drawn.total!, unit)}</text>\n : <Fragment><text className=\"dvui-chart-center-name\" x={svgWidth / 2} y={drawn.height / 2 - 4} textAnchor=\"middle\">{fit(categories[active], drawn.size! * 0.56, LABEL)}</text><text className=\"dvui-chart-center\" x={svgWidth / 2} y={drawn.height / 2 + 14} textAnchor=\"middle\">{share(active)}</text></Fragment>)\n : drawn.hits.map((hit, at) => <rect key={`h${at}`} className=\"dvui-chart-hit\" x={hit.x} y={hit.y} width={hit.w} height={hit.h} onPointerEnter={() => setActive(at)} />)}\n </svg>\n {point && !asTable && !isDonut ? <div className=\"dvui-chart-tip\" role=\"status\" style={{ left: point.x, top: point.y } as CSSProperties}><b>{categories[active!]}</b>{tipRows.map((row, index) => <span key={index}><i style={{ background: row.color }} />{row.name ? `${row.name} ` : ''}{row.value}</span>)}</div> : null}\n </div>\n return <figure ref={box} className=\"dvui-chart\" data-kind={kind}>\n <span id={labelId} hidden>{label}</span>\n {asTable ? <ChartTable data={data} t={t} /> : isDonut ? <div className={legendBeside ? 'dvui-chart-donut dvui-chart-donut-beside' : 'dvui-chart-donut'} onPointerLeave={() => setActive(null)}>{plot}{legend}</div> : <Fragment>{legend}{plot}</Fragment>}\n {copied ? <span className=\"dvui-chart-copied\" role=\"status\">{t('Copied')}</span> : null}\n {typeof node.caption === 'string' && node.caption !== '' ? <figcaption className=\"dvui-caption\">{node.caption}</figcaption> : null}\n </figure>\n}\n","// Widget composition adapted from deep-view/src/react/card.js (Apache-2.0).\n// DSH migration: html/PNG export/Bot persistence are excluded. Local controls\n// remain live; only a supplied onSubmit callback may deliver an answer.\nimport { Fragment, useCallback, useEffect, useId, useRef, useState } from 'react'\nimport type { ComponentType } from 'react'\nimport { asText, choiceValue, inputDefault, resolve, viewInputs, viewScope } from './core/index.js'\nimport type { ViewNode } from './contracts.ts'\nimport { WidgetChart, type ChartHandle } from './chart.tsx'\nimport { CheckIcon, CopyIcon, DotsIcon, InfoIcon, LinkIcon, Segmented, TableIcon, english, keyLetter, type ViewT } from './ui.tsx'\n\n// Structural twin of the official MarkdownLabels: the widget layer stays\n// runtime-neutral, and any component accepting this shape (the official\n// MarkdownText included) is assignable.\nexport type MarkdownProps = { text: string; streaming?: boolean; labels: ViewLabels; variant?: 'body' | 'compact' }\nexport type ViewLabels = {\n code: { copyLabel: string; copiedLabel: string; toolbarLabels?: { codeLabel: string; wrapLabel: string; unwrapLabel: string } }\n footnotes: string\n}\nexport type Answer = { id: string; action: string; values: Record<string, unknown> }\nexport type WidgetCardProps = {\n title?: string\n view: ViewNode\n onSubmit?: (action: string, values: Record<string, unknown>) => void\n onDismiss?: () => void\n busy?: boolean\n settled?: boolean\n answer?: Answer | null\n t?: ViewT\n labels?: ViewLabels\n Markdown?: ComponentType<MarkdownProps>\n localOnly?: boolean\n}\ntype Ctx = {\n values: Record<string, unknown>\n setInput(id: string, value: unknown): void\n lookup(name: string): unknown\n locked: boolean\n answerLocked: boolean\n busy: boolean\n settled: boolean\n answer?: Answer | null\n onSubmit?: (action: string, values: Record<string, unknown>) => void\n registerChart(key: string, handle: ChartHandle): (() => void) | void\n refreshCharts(): void\n}\nconst TONES = ['good', 'warn', 'bad']\nconst CALLOUT_TONES = ['info', 'good', 'warn', 'bad']\nconst optionsOf = (node: ViewNode) => (Array.isArray(node.options) ? node.options : []) as { label: string; value?: string | number | boolean; description?: string }[]\nconst fieldsOf = (node: ViewNode) => (Array.isArray(node.fields) ? node.fields : [])\nconst cellText = (value: unknown) => value === null || value === undefined ? '' : typeof value === 'object' ? JSON.stringify(value) : asText(value)\nconst NUMERIC_CELL = /^[-+]?[\\d.,]+\\s?(%|[a-zA-Z]{1,4})?$/\nfunction hasType(node: ViewNode, types: Set<string>): boolean {\n return types.has(node.type) || (Array.isArray(node.children) && node.children.some(child => hasType(child, types)))\n}\nconst answerValues = (answer: Answer | null | undefined, node: ViewNode) => answer != null && answer.action === node.id ? answer.values : undefined\nconst withUnit = (value: unknown, unit?: string) => `${asText(value)}${unit ? ` ${unit}` : ''}`\nconst grouped = (value: unknown) => typeof value === 'number' && Number.isFinite(value) ? value.toLocaleString('en-US', { maximumFractionDigits: 6 }) : asText(value)\nfunction FallbackMarkdown({ text }: MarkdownProps) { return <span>{text}</span> }\n\nfunction OptionsInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n const [picked, setPicked] = useState<string[]>([])\n const options = optionsOf(node)\n const multi = node.multi === true\n const choose = (label: string) => {\n if (ctx.answerLocked) return\n if (multi) setPicked(current => current.includes(label) ? current.filter(item => item !== label) : [...current, label])\n else ctx.onSubmit?.(node.id!, { selected: [label] })\n }\n const onKey = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const index = event.key.toUpperCase().charCodeAt(0) - 65\n if (index >= 0 && index < options.length && !event.ctrlKey && !event.metaKey && !event.altKey) { event.preventDefault(); choose(options[index].label) }\n }\n return <Fragment>\n <div className=\"dvui-options\" role=\"group\" aria-label={t('Options')} onKeyDown={onKey}>{options.map((option, index) => {\n const selected = multi && picked.includes(option.label)\n return <button key={option.label} type=\"button\" className=\"dvui-option\" disabled={ctx.answerLocked} aria-pressed={multi ? selected : undefined} aria-keyshortcuts={keyLetter(index).toLowerCase()} onClick={() => choose(option.label)}>\n <span className=\"dvui-key\" aria-hidden=\"true\">{keyLetter(index)}</span>\n <span className=\"dvui-option-body\"><span className=\"dvui-option-label\">{option.label}</span>{option.description ? <span className=\"dvui-option-desc\">{option.description}</span> : null}</span>\n {selected ? <span className=\"dvui-check\"><CheckIcon /></span> : null}\n </button>\n })}</div>\n {multi ? <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked || picked.length === 0} onClick={() => ctx.onSubmit?.(node.id!, { selected: picked })}>{t('Submit')}</button></div> : null}\n </Fragment>\n}\nfunction SettledOptions({ node, answer, t }: { node: ViewNode; answer?: Answer | null; t: ViewT }) {\n const selected = answerValues(answer, node)?.selected\n const chosen = Array.isArray(selected) ? selected : []\n return <div className=\"dvui-options\" role=\"group\" aria-label={t('Your answer')}>{optionsOf(node).map(option => <div key={option.label} className=\"dvui-option\"><span className=\"dvui-option-body\"><span className=\"dvui-option-label\">{option.label}</span>{option.description ? <span className=\"dvui-option-desc\">{option.description}</span> : null}</span>{chosen.includes(option.label) ? <span className=\"dvui-check\" role=\"img\" aria-label={t('Selected')}><CheckIcon /></span> : null}</div>)}</div>\n}\nfunction ConfirmInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n return <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-button\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, { confirmed: false })}>{node.cancelLabel ?? t('Cancel')}</button><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, { confirmed: true })}>{node.confirmLabel ?? t('Confirm')}</button></div>\n}\nfunction SettledConfirm({ node, answer, t }: { node: ViewNode; answer?: Answer | null; t: ViewT }) {\n const confirmed = answerValues(answer, node)?.confirmed\n if (typeof confirmed !== 'boolean') return <ConfirmInput node={node} ctx={{ answerLocked: true } as Ctx} t={t} />\n return <span className=\"dvui-badge\">{confirmed ? node.confirmLabel ?? t('Confirm') : node.cancelLabel ?? t('Cancel')}</span>\n}\nfunction FormInput({ node, ctx, t }: { node: ViewNode; ctx: Ctx; t: ViewT }) {\n const fields = fieldsOf(node)\n const [draft, setDraft] = useState<Record<string, string>>({})\n const submit = () => { if (!ctx.answerLocked) ctx.onSubmit?.(node.id!, { fields: Object.fromEntries(fields.map(field => [field.id, draft[field.id] ?? ''])) }) }\n return <form className=\"dvui-form\" onSubmit={event => { event.preventDefault(); submit() }}>{fields.map(field => <label key={field.id} className=\"dvui-field\"><span className=\"dvui-field-label\">{field.label}</span><input className=\"dvui-input\" type=\"text\" value={draft[field.id] ?? ''} autoComplete=\"off\" spellCheck={false} readOnly={ctx.answerLocked} aria-label={field.label} placeholder={field.placeholder} onChange={event => setDraft(current => ({ ...current, [field.id]: event.target.value }))} /></label>)}<div className=\"dvui-actions\"><button type=\"submit\" className=\"dvui-submit\" disabled={ctx.answerLocked}>{node.submitLabel ?? t('Submit')}</button></div></form>\n}\nfunction SettledForm({ node, answer }: { node: ViewNode; answer?: Answer | null }) {\n const fields = answerValues(answer, node)?.fields\n const values = fields !== null && typeof fields === 'object' ? fields as Record<string, unknown> : {}\n return <div className=\"dvui-form\">{fieldsOf(node).map(field => <label key={field.id} className=\"dvui-field\"><span className=\"dvui-field-label\">{field.label}</span><input className=\"dvui-input\" value={String(values[field.id] ?? '')} disabled readOnly aria-label={field.label} /></label>)}</div>\n}\nfunction WidgetTable({ node, lookup }: { node: ViewNode; lookup: (name: string) => unknown }) {\n const columns = Array.isArray(node.columns) ? node.columns : []\n const rows = (Array.isArray(node.rows) ? node.rows : []).map(row => (Array.isArray(row) ? row : []).map(cell => resolve(cell, lookup, '')))\n const numeric = columns.map((_, index) => {\n const cells = rows.map(row => row[index]).filter(cell => cell !== undefined && cell !== '')\n return cells.length > 0 && cells.every(cell => typeof cell === 'number' || (typeof cell === 'string' && NUMERIC_CELL.test(cell.trim())))\n })\n return <div className=\"dvui-table\"><table><thead><tr>{columns.map((column, index) => <th key={column.key ?? index} scope=\"col\" className={numeric[index] ? 'dvui-num' : undefined}>{column.label}</th>)}</tr></thead><tbody>{rows.map((row, rowIndex) => <tr key={rowIndex}>{columns.map((column, index) => <td key={column.key ?? index} className={numeric[index] ? 'dvui-num' : undefined}>{cellText(row[index])}</td>)}</tr>)}</tbody></table></div>\n}\nfunction WidgetProgress({ node, lookup, t }: { node: ViewNode; lookup: (name: string) => unknown; t: ViewT }) {\n let percent: number\n if (node.percent !== undefined) percent = Number(resolve(node.percent, lookup, 0))\n else {\n const max = Number(resolve(node.max, lookup, 0))\n percent = max > 0 ? (Number(resolve(node.value, lookup, 0)) / max) * 100 : 0\n }\n percent = Math.max(0, Math.min(100, Number.isFinite(percent) ? percent : 0))\n const tone = resolve(node.tone, lookup)\n const right = node.valueLabel !== undefined ? asText(resolve(node.valueLabel, lookup, '')) : `${Math.round(percent)}%`\n return <div className=\"dvui-progress\" data-tone={TONES.includes(String(tone)) ? String(tone) : undefined}><span className=\"dvui-progress-label\"><span>{node.label}</span><span>{right}</span></span><div className=\"dvui-progress-track\" role=\"progressbar\" aria-valuenow={Math.round(percent)} aria-valuemin={0} aria-valuemax={100} aria-label={node.label ?? t('Progress')} aria-valuetext={right}><div className=\"dvui-progress-fill\" style={{ width: `${percent}%` }} /></div></div>\n}\nfunction WidgetMetric({ node, lookup }: { node: ViewNode; lookup: (name: string) => unknown }) {\n const tone = resolve(node.tone, lookup)\n const caption = node.caption === undefined ? '' : asText(resolve(node.caption, lookup, ''))\n return <div className=\"dvui-metric\" data-tone={TONES.includes(String(tone)) ? String(tone) : undefined}><span className=\"dvui-metric-label\">{node.label}</span><span className=\"dvui-metric-value\">{asText(resolve(node.value, lookup, '—'))}</span>{caption !== '' ? <span className=\"dvui-caption\">{caption}</span> : null}</div>\n}\nfunction WidgetCallout({ node, lookup, Markdown, labels }: { node: ViewNode; lookup: (name: string) => unknown; Markdown: ComponentType<MarkdownProps>; labels: ViewLabels }) {\n const tone = resolve(node.tone, lookup)\n return <div className=\"dvui-callout\" data-tone={CALLOUT_TONES.includes(String(tone)) ? String(tone) : 'info'}><span className=\"dvui-callout-icon\" aria-hidden=\"true\"><InfoIcon /></span><div><Markdown text={asText(resolve(node.text, lookup, ''))} labels={labels} variant=\"compact\" /></div></div>\n}\nfunction WidgetSources({ node, t }: { node: ViewNode; t: ViewT }) {\n return <div className=\"dvui-sources\" role=\"list\" aria-label={t('Sources')}>{(node.items ?? []).map((item, index) => <a key={`${item.url}-${index}`} role=\"listitem\" className=\"dvui-source\" href={item.url} target=\"_blank\" rel=\"noopener noreferrer\" title={item.url}><LinkIcon />{item.label}</a>)}</div>\n}\nfunction InputHead({ id, label, value }: { id: string; label?: string; value?: string }) {\n return <div className=\"dvui-input-head\"><label htmlFor={id} className=\"dvui-input-label\">{label}</label>{value !== undefined ? <output htmlFor={id} className=\"dvui-input-value\">{value}</output> : null}</div>\n}\nconst numericBound = (bound: unknown) => typeof bound === 'number' && Number.isFinite(bound) ? bound : typeof bound === 'string' && bound.trim() !== '' && Number.isFinite(Number(bound)) ? Number(bound) : undefined\nfunction SliderInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const id = useId()\n const value = Number(ctx.values[node.id!])\n // Validation guarantees numeric min/max; resolve any stray non-numeric bound defensively.\n const min = numericBound(resolve(node.min, ctx.lookup, undefined))\n const max = numericBound(resolve(node.max, ctx.lookup, undefined))\n const percent = min !== undefined && max !== undefined && max > min ? ((value - min) / (max - min)) * 100 : 0\n return <div className=\"dvui-input-row\"><InputHead id={id} label={node.label} value={withUnit(grouped(value), node.unit)} /><input id={id} type=\"range\" className=\"dvui-range\" min={min} max={max} step={node.step ?? 'any'} value={value} disabled={ctx.locked} style={{ '--_dvui-fill': `${percent}%` } as React.CSSProperties} onChange={event => ctx.setInput(node.id!, Number(event.target.value))} /></div>\n}\nfunction NumberInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const id = useId()\n const [draft, setDraft] = useState<string | null>(null)\n const value = ctx.values[node.id!]\n const min = numericBound(resolve(node.min, ctx.lookup, undefined))\n const max = numericBound(resolve(node.max, ctx.lookup, undefined))\n return <div className=\"dvui-input-row\"><InputHead id={id} label={node.label} /><span className=\"dvui-number\"><input id={id} className=\"dvui-input\" type=\"number\" inputMode=\"decimal\" value={draft ?? asText(value)} min={min} max={max} step={node.step ?? 'any'} disabled={ctx.locked} onChange={event => {\n const raw = event.target.value\n setDraft(raw)\n const next = Number(raw)\n if (raw.trim() === '' || !Number.isFinite(next) || (min !== undefined && next < min) || (max !== undefined && next > max)) return\n ctx.setInput(node.id!, next)\n }} onBlur={() => setDraft(null)} />{node.unit ? <span className=\"dvui-unit\">{node.unit}</span> : null}</span></div>\n}\nfunction ChoiceInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const labelId = useId()\n const options = optionsOf(node)\n const current = ctx.values[node.id!]\n const side = options.length <= 4 && options.every(option => [...option.label].length <= 14)\n return <div className=\"dvui-input-row\"><span className=\"dvui-input-label\" id={labelId}>{node.label}</span>{side\n ? <Segmented label={node.label ?? ''} value={options.findIndex(option => choiceValue(option) === current)} className=\"dvui-choice-seg\">{options.map(option => <button key={option.label} type=\"button\" aria-pressed={choiceValue(option) === current} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, choiceValue(option))}>{option.label}</button>)}</Segmented>\n : <div className=\"dvui-radios\" role=\"radiogroup\" aria-labelledby={labelId}>{options.map(option => <button key={option.label} type=\"button\" role=\"radio\" className=\"dvui-radio\" aria-checked={choiceValue(option) === current} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, choiceValue(option))}><span className=\"dvui-radio-dot\" aria-hidden=\"true\" />{option.label}</button>)}</div>}</div>\n}\nfunction ToggleInput({ node, ctx }: { node: ViewNode; ctx: Ctx }) {\n const on = ctx.values[node.id!] === true\n return <div className=\"dvui-toggle\"><span className=\"dvui-input-label\">{node.label}</span><button type=\"button\" role=\"switch\" className=\"dvui-switch\" aria-checked={on} aria-label={node.label} disabled={ctx.locked} onClick={() => ctx.setInput(node.id!, !on)}><span className=\"dvui-switch-knob\" aria-hidden=\"true\" /></button></div>\n}\nfunction WidgetNode({ node, ctx, Markdown, labels, t }: { node: ViewNode; ctx: Ctx; Markdown: ComponentType<MarkdownProps>; labels: ViewLabels; t: ViewT }) {\n const { lookup } = ctx\n switch (node.type) {\n case 'stack': case 'row': return <div className={node.type === 'row' ? 'dvui-row' : 'dvui-stack'}>{(node.children ?? []).map((child, index) => <WidgetNode key={child.id ?? `${child.type}-${index}`} node={child} ctx={ctx} Markdown={Markdown} labels={labels} t={t} />)}</div>\n case 'text': {\n const text = <Markdown text={asText(resolve(node.text, lookup, ''))} labels={labels} variant=\"compact\" />\n return node.tone === 'muted' ? <div className=\"dvui-muted\">{text}</div> : text\n }\n case 'metric': return <WidgetMetric node={node} lookup={lookup} />\n case 'table': return <WidgetTable node={node} lookup={lookup} />\n case 'chart': return <WidgetChart node={node} lookup={lookup} registerChart={ctx.registerChart} refreshCharts={ctx.refreshCharts} t={t} />\n case 'progress': return <WidgetProgress node={node} lookup={lookup} t={t} />\n case 'callout': return <WidgetCallout node={node} lookup={lookup} Markdown={Markdown} labels={labels} />\n case 'sources': return <WidgetSources node={node} t={t} />\n case 'slider': return <SliderInput node={node} ctx={ctx} />\n case 'number': return <NumberInput node={node} ctx={ctx} />\n case 'choice': return <ChoiceInput node={node} ctx={ctx} />\n case 'toggle': return <ToggleInput node={node} ctx={ctx} />\n case 'submit': return ctx.settled ? null : <div className=\"dvui-actions\"><button type=\"button\" className=\"dvui-submit\" disabled={ctx.answerLocked} onClick={() => ctx.onSubmit?.(node.id!, {})}>{node.label || t('Send')}</button></div>\n case 'options': return ctx.settled ? <SettledOptions node={node} answer={ctx.answer} t={t} /> : <OptionsInput node={node} ctx={ctx} t={t} />\n case 'confirm': return ctx.settled ? <SettledConfirm node={node} answer={ctx.answer} t={t} /> : <ConfirmInput node={node} ctx={ctx} t={t} />\n case 'form': return ctx.settled ? <SettledForm node={node} answer={ctx.answer} /> : <FormInput node={node} ctx={ctx} t={t} />\n default: return null\n }\n}\nexport function WidgetView({ view, onSubmit, settled = false, answer = null, busy = false, registerChart, refreshCharts, t = english, labels = { code: { copyLabel: 'Copy', copiedLabel: 'Copied' }, footnotes: 'Footnotes' }, Markdown = FallbackMarkdown }: Omit<WidgetCardProps, 'title'> & { registerChart: Ctx['registerChart']; refreshCharts: () => void }) {\n const inputs = viewInputs(view) as ViewNode[]\n const [values, setValues] = useState<Record<string, unknown>>(() => Object.fromEntries(inputs.map(node => [node.id, inputDefault(node)])))\n const sent = answer?.values?.inputs\n const current = settled && sent !== null && typeof sent === 'object' ? { ...values, ...sent } : values\n const submit = (action: string, extra: Record<string, unknown>) => onSubmit?.(action, inputs.length > 0 ? { ...extra, inputs: current } : extra)\n const ctx: Ctx = {\n onSubmit: submit, settled, answer, busy, lookup: viewScope(view, current), values: current, locked: settled || busy, answerLocked: settled || busy || onSubmit === undefined,\n setInput: (id, value) => setValues(before => ({ ...before, [id]: value })), registerChart, refreshCharts,\n }\n return <WidgetNode node={view} ctx={ctx} Markdown={Markdown} labels={labels} t={t} />\n}\nfunction useChartHandles() {\n const [, bump] = useState(0)\n const charts = useRef(new Map<string, ChartHandle>())\n const refreshCharts = useCallback(() => bump(value => value + 1), [])\n const registerChart = useCallback((key: string, handle: ChartHandle) => {\n charts.current.set(key, handle)\n refreshCharts()\n return () => { charts.current.delete(key); refreshCharts() }\n }, [refreshCharts])\n return { charts: [...charts.current.values()], registerChart, refreshCharts }\n}\nfunction ViewMenu({ charts, t }: { charts: ChartHandle[]; t: ViewT }) {\n const [open, setOpen] = useState(false)\n const root = useRef<HTMLDivElement>(null)\n useEffect(() => {\n if (!open) return undefined\n const away = (event: PointerEvent) => { if (!root.current?.contains(event.target as Node)) setOpen(false) }\n const key = (event: KeyboardEvent) => { if (event.key === 'Escape') setOpen(false) }\n document.addEventListener('pointerdown', away, true)\n document.addEventListener('keydown', key)\n return () => { document.removeEventListener('pointerdown', away, true); document.removeEventListener('keydown', key) }\n }, [open])\n return <div ref={root} className=\"dvui-tools\" data-open={open ? '' : undefined}><button type=\"button\" className=\"dvui-more\" aria-label={t('Chart options')} aria-haspopup=\"menu\" aria-expanded={open} onClick={() => setOpen(value => !value)}><DotsIcon /></button>{open ? <div className=\"dvui-menu\" role=\"menu\">{charts.map((chart, index) => <Fragment key={`${chart.label}-${index}`}>{charts.length > 1 ? <div className=\"dvui-menu-label\">{chart.label ?? t('Chart {n}', { n: index + 1 })}</div> : null}<button type=\"button\" role=\"menuitem\" onClick={() => { setOpen(false); chart.toggleTable() }}><TableIcon />{chart.asTable ? t('View as chart') : t('View as table')}</button><button type=\"button\" role=\"menuitem\" onClick={() => { setOpen(false); chart.copy() }}><CopyIcon />{t('Copy data')}</button></Fragment>)}</div> : null}</div>\n}\nexport function WidgetCard({ title = '', view, onSubmit, onDismiss, busy = false, settled = false, answer = null, t = english, labels, Markdown, localOnly = false }: WidgetCardProps) {\n const titleId = useId()\n const { charts, registerChart, refreshCharts } = useChartHandles()\n const framed = hasType(view, new Set(['slider', 'number', 'choice', 'toggle', 'options', 'confirm', 'form', 'submit']))\n return <div className={`dvui-view ${framed ? 'dvui-framed' : 'dvui-bare'}${settled ? ' dvui-settled' : ''}`} role=\"group\" aria-labelledby={title ? titleId : undefined} aria-label={title ? undefined : t('View')} aria-busy={busy || undefined}>\n {title || onDismiss || charts.length > 0 ? <div className=\"dvui-head\"><p className=\"dvui-title\" id={titleId}>{title}</p>{charts.length > 0 ? <ViewMenu charts={charts} t={t} /> : null}{onDismiss ? <button type=\"button\" className=\"dvui-dismiss\" aria-label={t('Dismiss view')} onClick={onDismiss} disabled={busy}>×</button> : null}</div> : null}\n <div className=\"dvui-body\"><WidgetView view={view} onSubmit={onSubmit} settled={settled} answer={answer} busy={busy} registerChart={registerChart} refreshCharts={refreshCharts} t={t} labels={labels} Markdown={Markdown} /></div>\n {localOnly && hasType(view, new Set(['options', 'confirm', 'form', 'submit'])) ? <p className=\"dvui-local-note\" role=\"note\">{t('Local preview only; this card does not send an answer.')}</p> : null}\n </div>\n}\n","// All colour values come from the repository's official host token contract.\n// The root is scoped to the plugin's cells; no body or global element rules.\nexport const viewStyles = `\n.dvui-root { min-width: 0; color: var(--dsw-alias-label-primary); font-family: inherit; font-size: 14px; line-height: 22px; }\n.dvui-root * { box-sizing: border-box; }\n.dvui-root .dvui-view { min-width: 0; display: flex; flex-direction: column; gap: 10px; margin: 10px 0; }\n.dvui-root .dvui-bare { gap: 8px; }\n.dvui-root .dvui-framed { width: min(100%, 560px); padding: 14px 16px; border-radius: var(--dsw-radius-lg); background: var(--dsw-alias-bg-layer-1); box-shadow: var(--dsw-elevation-stroke); }\n.dvui-root .dvui-settled { color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-head { display: flex; align-items: flex-start; gap: 8px; min-width: 0; }\n.dvui-root .dvui-title { flex: 1 1 0; min-width: 0; margin: 0; font-size: 13px; line-height: 18px; font-weight: 500; overflow-wrap: anywhere; }\n.dvui-root .dvui-body { min-width: 0; }\n.dvui-root .dvui-stack { display: flex; flex-direction: column; gap: 12px; min-width: 0; }\n.dvui-root .dvui-row { display: flex; flex-wrap: wrap; gap: 12px 24px; min-width: 0; }\n.dvui-root .dvui-row > * { flex: 1 1 160px; min-width: 0; }\n.dvui-root .dvui-metric { display: flex; flex-direction: column; gap: 1px; min-width: 0; }\n.dvui-root .dvui-metric-label,.dvui-root .dvui-caption,.dvui-root .dvui-field-label,.dvui-root .dvui-input-label { font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); overflow-wrap: anywhere; }\n.dvui-root .dvui-metric-value { font-size: 22px; line-height: 28px; font-weight: 600; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }\n.dvui-root .dvui-metric[data-tone=good] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=good] .dvui-progress-fill { color: var(--dsw-alias-state-success-primary); background: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-metric[data-tone=warn] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=warn] .dvui-progress-fill { color: var(--dsw-alias-state-warn-primary); background: var(--dsw-alias-state-warn-primary); }\n.dvui-root .dvui-metric[data-tone=bad] .dvui-metric-value,.dvui-root .dvui-progress[data-tone=bad] .dvui-progress-fill { color: var(--dsw-alias-state-error-primary); background: var(--dsw-alias-state-error-primary); }\n.dvui-root .dvui-muted { font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-muted * { font-size: inherit !important; line-height: inherit !important; color: inherit !important; }\n.dvui-root .dvui-table { max-width: 100%; overflow-x: auto; border: .5px solid var(--dsw-alias-border-l2); border-radius: var(--dsw-radius-md); }\n.dvui-root .dvui-table table { border-collapse: collapse; min-width: 100%; font-size: 13px; line-height: 18px; }\n.dvui-root .dvui-table th { padding: 6px 10px; font-weight: 500; text-align: start; white-space: nowrap; color: var(--dsw-alias-label-secondary); border-bottom: .5px solid var(--dsw-alias-border-l2); }\n.dvui-root .dvui-table td { padding: 6px 10px; max-width: 280px; overflow-wrap: anywhere; }\n.dvui-root .dvui-table tbody tr + tr > * { border-top: .5px solid var(--dsw-alias-border-l1); }\n.dvui-root .dvui-table tbody th { font-weight: 400; border-bottom: 0; color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-num { text-align: end; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-progress { display: flex; flex-direction: column; gap: 5px; min-width: 0; }\n.dvui-root .dvui-progress-label { display: flex; justify-content: space-between; gap: 8px; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-progress-label > span:first-child { color: var(--dsw-alias-label-primary); font-weight: 500; }\n.dvui-root .dvui-progress-track { height: 6px; border-radius: 999px; background: var(--dsw-alias-interactive-bg-hover); overflow: hidden; }\n.dvui-root .dvui-progress-fill { height: 100%; border-radius: inherit; background: var(--dsw-alias-state-business-primary); transition: width .12s ease; }\n.dvui-root .dvui-callout { display: flex; gap: 8px; padding: 8px 12px; border-radius: var(--dsw-radius-md); background: color-mix(in srgb, var(--dsw-alias-state-business-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=good] { background: color-mix(in srgb, var(--dsw-alias-state-success-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=warn] { background: color-mix(in srgb, var(--dsw-alias-state-warn-primary) 8%, transparent); }\n.dvui-root .dvui-callout[data-tone=bad] { background: color-mix(in srgb, var(--dsw-alias-state-error-primary) 8%, transparent); }\n.dvui-root .dvui-callout-icon { flex: none; display: flex; padding-top: 3px; color: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-callout[data-tone=good] .dvui-callout-icon { color: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-callout[data-tone=warn] .dvui-callout-icon { color: var(--dsw-alias-state-warn-primary); }\n.dvui-root .dvui-callout[data-tone=bad] .dvui-callout-icon { color: var(--dsw-alias-state-error-primary); }\n.dvui-root .dvui-callout > div { flex: 1 1 auto; min-width: 0; }\n.dvui-root .dvui-sources { display: flex; flex-wrap: wrap; gap: 6px; }\n.dvui-root .dvui-source { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; height: 22px; padding: 0 6px; border-radius: var(--dsw-radius-sm); background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-secondary); font-size: 11px; line-height: 16px; text-decoration: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }\n.dvui-root .dvui-source:hover { color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-input-row { display: flex; flex-direction: column; gap: 6px; min-width: 0; }\n.dvui-root .dvui-input-head { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; }\n.dvui-root .dvui-input-value { font-size: 15px; line-height: 20px; font-weight: 600; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-range { appearance: none; width: 100%; height: 20px; margin: 0; background: transparent; cursor: pointer; }\n.dvui-root .dvui-range:disabled { cursor: default; opacity: .6; }\n.dvui-root .dvui-range::-webkit-slider-runnable-track { height: 6px; border-radius: 999px; background: linear-gradient(to right, var(--dsw-alias-state-business-primary) var(--_dvui-fill, 0%), var(--dsw-alias-interactive-bg-hover) var(--_dvui-fill, 0%)); }\n.dvui-root .dvui-range::-moz-range-track { height: 6px; border-radius: 999px; background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-range::-moz-range-progress { height: 6px; border-radius: 999px; background: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-range::-webkit-slider-thumb { appearance: none; width: 16px; height: 16px; margin-top: -5px; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-range::-moz-range-thumb { width: 16px; height: 16px; border: 0; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-number { display: flex; align-items: center; gap: 6px; max-width: 200px; }\n.dvui-root .dvui-unit { flex: none; font-size: 13px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-seg { display: flex; flex-wrap: wrap; gap: 2px; padding: 2px; border-radius: var(--dsw-radius-md); background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-choice-seg { align-self: flex-start; max-width: 100%; }\n.dvui-root .dvui-seg button { flex: 0 1 auto; min-height: 30px; padding: 4px 12px; border: 0; border-radius: var(--dsw-radius-sm); background: none; font: inherit; font-size: 13px; color: var(--dsw-alias-label-secondary); cursor: pointer; overflow-wrap: anywhere; }\n.dvui-root .dvui-seg button[aria-pressed=true] { background: var(--dsw-alias-bg-layer-1); color: var(--dsw-alias-label-primary); box-shadow: var(--dsw-elevation-soft); }\n.dvui-root .dvui-radios { display: flex; flex-direction: column; gap: 2px; }\n.dvui-root .dvui-radio { display: flex; align-items: center; gap: 8px; min-height: 30px; padding: 4px 8px; margin: 0 -8px; border: 0; border-radius: var(--dsw-radius-sm); background: none; font: inherit; text-align: start; color: inherit; cursor: pointer; }\n.dvui-root .dvui-radio:hover:not(:disabled),.dvui-root .dvui-option:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-radio-dot { flex: none; width: 16px; height: 16px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--dsw-alias-border-l3); }\n.dvui-root .dvui-radio[aria-checked=true] .dvui-radio-dot { box-shadow: inset 0 0 0 5px var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-toggle { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 28px; }\n.dvui-root .dvui-switch { position: relative; flex: none; width: 36px; height: 20px; padding: 0; border: 0; border-radius: 999px; background: var(--dsw-alias-border-l3); cursor: pointer; }\n.dvui-root .dvui-switch[aria-checked=true] { background: var(--dsw-alias-button-primary-fill); }\n.dvui-root .dvui-switch-knob { position: absolute; top: 2px; left: 2px; width: 16px; height: 16px; border-radius: 50%; background: var(--dsw-alias-label-primary-foreground); box-shadow: var(--dsw-elevation-soft); transition: transform .15s ease; }\n.dvui-root .dvui-switch[aria-checked=true] .dvui-switch-knob { transform: translateX(16px); }\n.dvui-root .dvui-options { display: flex; flex-direction: column; gap: 1px; min-width: 0; margin: 0 -8px; }\n.dvui-root .dvui-option { position: relative; display: flex; align-items: flex-start; gap: 12px; width: 100%; min-width: 0; margin: 0; border: 0; border-radius: var(--dsw-radius-md); background: transparent; padding: 10px 8px; font: inherit; color: inherit; text-align: start; cursor: pointer; }\n.dvui-root .dvui-key { flex: none; width: 24px; height: 24px; border-radius: var(--dsw-radius-sm); background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 24px; text-align: center; }\n.dvui-root .dvui-option-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 1px; padding-top: 2px; }\n.dvui-root .dvui-option-label { font-size: 14px; line-height: 20px; font-weight: 500; overflow-wrap: anywhere; }\n.dvui-root .dvui-option-desc { font-size: 12px; line-height: 17px; color: var(--dsw-alias-label-secondary); overflow-wrap: anywhere; }\n.dvui-root .dvui-check { flex: none; display: inline-flex; align-items: center; color: var(--dsw-alias-state-success-primary); }\n.dvui-root .dvui-form { display: flex; flex-direction: column; gap: 8px; margin: 0; }\n.dvui-root .dvui-field { display: flex; flex-direction: column; gap: 4px; min-width: 0; }\n.dvui-root .dvui-input { width: 100%; min-width: 0; min-height: 32px; padding: 5px 11px; border: .5px solid var(--dsw-alias-border-l3); border-radius: var(--dsw-radius-sm); outline: none; background: transparent; color: var(--dsw-alias-label-primary); font: inherit; font-size: 14px; line-height: 20px; }\n.dvui-root .dvui-input::placeholder { color: var(--dsw-alias-label-dimmed); }\n.dvui-root .dvui-input:focus-visible { border-color: var(--dsw-alias-state-business-primary); }\n.dvui-root .dvui-actions { display: flex; justify-content: flex-end; gap: 8px; }\n.dvui-root .dvui-submit,.dvui-root .dvui-button { flex: none; min-height: 34px; padding: 0 14px; border: 0; border-radius: 999px; font: inherit; font-size: 14px; font-weight: 500; cursor: pointer; }\n.dvui-root .dvui-submit { background: var(--dsw-alias-button-primary-fill); color: var(--dsw-alias-label-primary-foreground); }\n.dvui-root .dvui-submit:hover:not(:disabled) { background: var(--dsw-alias-button-primary-hover); }\n.dvui-root .dvui-button { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-button:hover:not(:disabled) { background: var(--dsw-alias-interactive-bg-active); }\n.dvui-root button:disabled { opacity: .45; cursor: default; }\n.dvui-root .dvui-badge { height: 22px; padding: 0 7px; border-radius: 999px; border: 1px dotted var(--dsw-alias-border-l3); color: var(--dsw-alias-label-secondary); font-size: 12px; line-height: 20px; }\n.dvui-root .dvui-tools { position: relative; flex: none; align-self: flex-start; }\n.dvui-root .dvui-more,.dvui-root .dvui-dismiss { width: 28px; height: 28px; padding: 0; border: 0; border-radius: 50%; background: none; color: var(--dsw-alias-label-secondary); display: flex; align-items: center; justify-content: center; cursor: pointer; }\n.dvui-root .dvui-more:hover,.dvui-root .dvui-dismiss:hover { background: var(--dsw-alias-interactive-bg-hover); color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-menu { position: absolute; top: 32px; right: 0; z-index: 4; min-width: 180px; padding: 6px; border-radius: var(--dsw-radius-md); background: var(--dsw-menu-surface-fill); box-shadow: var(--dsw-elevation-panel); display: flex; flex-direction: column; gap: 2px; }\n.dvui-root .dvui-menu button { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 30px; text-align: left; border: 0; background: none; border-radius: var(--dsw-radius-sm); padding: 6px 8px; font: inherit; font-size: 13px; line-height: 18px; color: var(--dsw-alias-label-primary); cursor: pointer; }\n.dvui-root .dvui-menu button:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.dvui-root .dvui-menu-label { padding: 2px 8px; font-size: 11px; line-height: 14px; color: var(--dsw-alias-label-tertiary); }\n.dvui-root .dvui-local-note { margin: 0; font-size: 12px; line-height: 18px; color: var(--dsw-alias-label-tertiary); }\n.dvui-root .dvui-chart { position: relative; margin: 0; min-width: 0; display: flex; flex-direction: column; gap: 8px; }\n.dvui-root .dvui-chart-plot { position: relative; min-width: 0; }\n.dvui-root .dvui-chart-svg { display: block; overflow: visible; outline: none; font-family: inherit; }\n.dvui-root .dvui-chart-svg text { pointer-events: none; }\n.dvui-root .dvui-chart-grid { stroke: var(--dsw-alias-border-l1); stroke-width: 1; stroke-dasharray: 3 3; }\n.dvui-root .dvui-chart-tick { font-size: 10px; fill: var(--dsw-alias-label-tertiary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-label,.dvui-root .dvui-chart-value { font-size: 11px; fill: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-value { font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-center { font-size: 15px; font-weight: 600; fill: var(--dsw-alias-label-primary); font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-center-name { font-size: 11px; fill: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-mark[data-dim] { opacity: .28; }\n.dvui-root .dvui-chart-line { fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n.dvui-root .dvui-chart-area { opacity: .14; }\n.dvui-root .dvui-chart-guide { stroke: var(--dsw-alias-border-l3); stroke-width: 1; }\n.dvui-root .dvui-chart-hit { fill: transparent; }\n.dvui-root .dvui-chart-tip { position: absolute; z-index: 4; pointer-events: none; transform: translate(-50%, calc(-100% - 8px)); display: flex; flex-direction: column; gap: 2px; padding: 6px 10px; border-radius: var(--dsw-radius-md); background: var(--dsw-menu-surface-fill); box-shadow: var(--dsw-elevation-panel); font-size: 12px; line-height: 16px; white-space: nowrap; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-tip span { display: flex; align-items: center; gap: 6px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-chart-tip i,.dvui-root .dvui-chart-key i { flex: none; width: 8px; height: 8px; border-radius: 50%; }\n.dvui-root .dvui-chart-legend { display: flex; flex-wrap: wrap; gap: 4px 12px; padding-right: 32px; }\n.dvui-root .dvui-chart-key { display: inline-flex; align-items: center; gap: 6px; min-height: 20px; padding: 0; border: 0; background: none; font: inherit; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); cursor: pointer; }\n.dvui-root .dvui-chart-key[aria-pressed=false],.dvui-root .dvui-chart-key[data-dim] { opacity: .4; }\n.dvui-root .dvui-chart-legend-list { flex-direction: column; flex-wrap: nowrap; gap: 6px; padding: 0; min-width: 0; }\n.dvui-root .dvui-chart-legend-list .dvui-chart-key { cursor: default; width: 100%; }\n.dvui-root .dvui-chart-key-name { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--dsw-alias-label-primary); }\n.dvui-root .dvui-chart-key-value { flex: none; font-variant-numeric: tabular-nums; }\n.dvui-root .dvui-chart-donut { display: flex; flex-direction: column; align-items: center; gap: 12px; }\n.dvui-root .dvui-chart-donut-beside { flex-direction: row; align-items: center; gap: 24px; }\n.dvui-root .dvui-chart-donut-beside .dvui-chart-legend-list { flex: 1 1 auto; max-width: 280px; }\n.dvui-root .dvui-chart-copied { position: absolute; top: 2px; right: 36px; font-size: 12px; line-height: 16px; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-reasoning { margin: 6px 0; color: var(--dsw-alias-label-secondary); }\n.dvui-root .dvui-reasoning > summary { cursor: pointer; font-size: 12px; line-height: 20px; }\n.dvui-root .dvui-reasoning-body { padding: 4px 0 4px 12px; border-left: 1px solid var(--dsw-alias-border-l2); }\n.dvui-root .dvui-unknown { white-space: pre-wrap; overflow-wrap: anywhere; color: var(--dsw-alias-label-secondary); font-size: 12px; }\n.dvui-root .dvui-tool-loading, .dvui-root.dvui-tool-loading { padding: 8px 0; color: var(--dsw-alias-label-secondary); font-size: 13px; }\n.dvui-root .dvui-tool-error, .dvui-root.dvui-tool-error { margin: 8px 0; color: var(--dsw-alias-label-error); font-size: 13px; }\n.dvui-root button:focus-visible,.dvui-root a:focus-visible,.dvui-root input:focus-visible,.dvui-root .dvui-chart-svg:focus-visible { outline: var(--dsw-focus-ring-width) solid var(--dsw-focus-ring-color, var(--dsw-alias-state-business-primary)); outline-offset: 2px; }\n@media (hover: hover) { .dvui-root .dvui-tools:not(:focus-within):not([data-open]) { opacity: 0; } .dvui-root .dvui-view:hover .dvui-tools { opacity: 1; } }\n@media (prefers-reduced-motion: reduce) { .dvui-root * { transition: none !important; } }\n`\n","import { choiceValue, inputsSummary, validateViewAnswer, viewInputs } from './core/index.js'\nimport { isRecord, type ViewAnswer, type ViewNode } from './contracts.ts'\n\ntype Card = { id: string; title: string; view: ViewNode }\nfunction controls(view: ViewNode): ViewNode[] {\n return ['options', 'confirm', 'form', 'submit'].includes(view.type)\n ? [view] : (view.children ?? []).flatMap(controls)\n}\n\nexport function answerText(card: Pick<Card, 'title' | 'view'>, action: string, values: Record<string, unknown>): string {\n const node = controls(card.view).find(node => node.id === action)\n const lines = [card.title || 'Deep View']\n if (Array.isArray(values.selected)) lines.push(values.selected.map(String).join(', '))\n if (typeof values.confirmed === 'boolean') lines.push(values.confirmed\n ? node?.confirmLabel ?? 'Confirm' : node?.cancelLabel ?? 'Cancel')\n if (isRecord(values.fields)) {\n for (const field of node?.fields ?? []) lines.push(`${field.label}: ${String(values.fields[field.id] ?? '')}`)\n }\n const inputs = inputsSummary(card.view, values.inputs)\n if (inputs) lines.push(inputs)\n if (node?.type === 'submit') lines.push(node.label ?? 'Submit')\n return lines.join('\\n')\n}\n\n/** Legacy messages have no metadata. Restore only unambiguous, fully validated\n * answers that reproduce the exact text written by this plugin. Never guess\n * from ordinary prose, and never modify the stored message. */\nexport function legacyAnswer(card: Card, text: string): ViewAnswer | null {\n if (text.startsWith('{')) {\n try {\n const data: unknown = JSON.parse(text)\n if (!isRecord(data) || data.kind !== 'answer_to_pending_view' || data.tool !== 'show_view' || !Array.isArray(data.answers)) return null\n const answer = data.answers.find(value => isRecord(value) && value.id === card.id)\n if (!isRecord(answer) || typeof answer.action !== 'string') return null\n const values = validateViewAnswer(card.view, answer.action, answer.values)\n return values.error === undefined ? { id: card.id, action: answer.action, values } : null\n } catch { return null }\n }\n const lines = text.split('\\n')\n if (lines.shift() !== (card.title || 'Deep View')) return null\n const candidates: ViewAnswer[] = []\n for (const node of controls(card.view)) {\n const rest = [...lines]\n const values: Record<string, unknown> = {}\n if (node.type === 'options') {\n const line = rest.shift()\n if (line === undefined) continue\n const labels = node.options?.map(option => option.label) ?? []\n if (node.multi && labels.some(label => label.includes(', '))) continue\n values.selected = node.multi ? line.split(', ') : [line]\n } else if (node.type === 'confirm') {\n const line = rest.shift(), yes = node.confirmLabel ?? 'Confirm', no = node.cancelLabel ?? 'Cancel'\n if (yes === no || line !== yes && line !== no) continue\n values.confirmed = line === yes\n } else if (node.type === 'form') {\n const fields: Record<string, string> = {}\n let valid = true\n for (const field of node.fields ?? []) {\n const line = rest.shift(), prefix = `${field.label}: `\n if (line === undefined || !line.startsWith(prefix)) { valid = false; break }\n fields[field.id] = line.slice(prefix.length)\n }\n if (!valid) continue\n values.fields = fields\n }\n const inputs = viewInputs(card.view) as ViewNode[]\n if (inputs.length) {\n const pairs = rest.shift()?.split('; ')\n if (!pairs || pairs.length !== inputs.length) continue\n const sent: Record<string, unknown> = {}\n let valid = true\n for (let i = 0; i < inputs.length; i++) {\n const input = inputs[i], prefix = `${input.label || input.id}=`\n if (!pairs[i].startsWith(prefix)) { valid = false; break }\n const value = pairs[i].slice(prefix.length)\n if (input.type === 'toggle') sent[input.id!] = value === 'on' ? true : value === 'off' ? false : undefined\n else if (input.type === 'choice') {\n const choices = input.options?.filter(option => option.label === value) ?? []\n sent[input.id!] = choices.length === 1 ? choiceValue(choices[0]) : undefined\n } else {\n const unit = input.unit ? ` ${input.unit}` : ''\n sent[input.id!] = !unit || value.endsWith(unit) ? Number(unit ? value.slice(0, -unit.length) : value) : undefined\n }\n }\n if (!valid) continue\n values.inputs = sent\n }\n if (node.type === 'submit' && rest.shift() !== (node.label ?? 'Submit')) continue\n if (rest.length || !node.id) continue\n const checked = validateViewAnswer(card.view, node.id, values)\n if (checked.error === undefined && answerText(card, node.id, checked) === text) {\n candidates.push({ id: card.id, action: node.id, values: checked })\n }\n }\n return candidates.length === 1 ? candidates[0] : null\n}\n","import { checkShownView, validateViewAnswer } from './core/index.js'\nimport { isRecord, VIEW_OWNER, type ViewAnswer, type ViewNode } from './contracts.ts'\nimport type { ReplySnapshot, ToolViewBlock } from './runtime.ts'\nimport { legacyAnswer } from './answer-text.ts'\n\n/** Read visible, durable user/steering messages only, including inherited history. */\nexport function replyAnswers(snapshot: ReplySnapshot): ReadonlyMap<string, ViewAnswer> {\n const answers = new Map<string, ViewAnswer>()\n let cards: { id: string; title: string; view: ViewNode }[] = []\n const collect = (block: ToolViewBlock) => {\n const meta = block.meta\n if (block.kind === 'tool-result' && !block.isError && isRecord(meta) && meta.owner === VIEW_OWNER && meta.awaitReply === true && typeof meta.viewId === 'string') {\n const shown = checkShownView(meta.title, meta.view)\n if (!('error' in shown)) cards.push({ id: meta.viewId, title: shown.title, view: shown.view })\n }\n for (const child of block.subCalls ?? []) collect(child)\n }\n for (const key of snapshot.order) {\n const node = snapshot.nodes.get(key)\n if (node?.kind === 'tool-call' && node.data?.root) collect(node.data.root)\n if (node?.kind !== 'user' && node?.kind !== 'steering') continue\n const source = node.data?.source\n if (!isRecord(source) || source.kind !== 'user') continue\n // Only the very next human message can answer an old card, and it must\n // match exactly one card. Ambiguous/edited legacy text remains a preview.\n if (source.deepView === undefined) {\n const text = node.data?.content?.filter(isRecord).filter(block => block.type === 'text').map(block => block.text).join('') ?? ''\n const candidates = cards.map(card => legacyAnswer(card, text)).filter((answer): answer is ViewAnswer => answer !== null)\n if (candidates.length === 1 && !answers.has(candidates[0].id)) answers.set(candidates[0].id, candidates[0])\n }\n cards = []\n if (!isRecord(source.deepView)) continue\n const meta = source.deepView\n if (meta.owner !== VIEW_OWNER || meta.version !== 1 || !isRecord(meta.answer)) continue\n const answer = meta.answer\n if (typeof answer.id !== 'string' || typeof answer.action !== 'string' || !isRecord(answer.values)) continue\n // The first accepted reply settles a card; later inputs cannot change it.\n if (!answers.has(answer.id)) answers.set(answer.id, answer as ViewAnswer)\n }\n return answers\n}\n\nexport function checkedAnswer(answer: ViewAnswer | undefined, id: string | undefined, view: ViewNode): ViewAnswer | null {\n if (!answer || !id || answer.id !== id) return null\n const values = validateViewAnswer(view, answer.action, answer.values)\n return values.error === undefined ? { id, action: answer.action, values } : null\n}\n\nexport function sameAnswers(left: ReadonlyMap<string, ViewAnswer>, right: ReadonlyMap<string, ViewAnswer>): boolean {\n return left.size === right.size && [...left].every(([id, answer]) => {\n const next = right.get(id)\n return next === answer || next?.action === answer.action && JSON.stringify(next.values) === JSON.stringify(answer.values)\n })\n}\n","export const uiZh = {\n copy: '复制', copied: '已复制', footnotes: '脚注', code: '代码', wrap: '自动换行', unwrap: '不换行',\n prepared: '卡片将在最终回复中显示', preparing: '正在准备视图…', error: '视图未能显示', invalid: '视图数据无效',\n local: '仅本地预览;此卡片不会发送回答。', answerFailed: '回答未能发送,请重试。',\n chart: '图表', chartOptions: '图表选项', viewAsChart: '查看图表', viewAsTable: '查看表格', copyData: '复制数据',\n chartNumber: '图表 {n}', value: '值', series: '系列', view: '视图', sources: '来源', progress: '进度', yourAnswer: '你的回答',\n options: '选项', submit: '提交', cancel: '取消', confirm: '确认', send: '发送', selected: '已选择',\n}\n\nexport const uiEn: Record<keyof typeof uiZh, string> = {\n copy: 'Copy', copied: 'Copied', footnotes: 'Footnotes', code: 'Code', wrap: 'Wrap lines', unwrap: 'Do not wrap lines',\n prepared: 'The card will appear in the final reply', preparing: 'Preparing view…', error: 'The view could not be shown', invalid: 'Invalid view data',\n local: 'Local preview only; this card does not send an answer.', answerFailed: 'The answer could not be sent; try again.',\n chart: 'Chart', chartOptions: 'Chart options', viewAsChart: 'View as chart', viewAsTable: 'View as table', copyData: 'Copy data',\n chartNumber: 'Chart {n}', value: 'Value', series: 'Series', view: 'View', sources: 'Sources', progress: 'Progress', yourAnswer: 'Your answer',\n options: 'Options', submit: 'Submit', cancel: 'Cancel', confirm: 'Confirm', send: 'Send', selected: 'Selected',\n}\n","import type { Context } from '@deepseek-ai/cordis'\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore, type ReactElement } from 'react'\nimport { MarkdownText, type MarkdownLabels } from '@deepseek-ai/dsh-client-ui-primitives'\nimport { checkShownView } from './core/index.js'\nimport { createClientPluginLogger, installClientPluginLogger } from '@klarkxy/dsh-plugin-kit/client-logger'\nimport { PLUGIN_NAME, RPC_CHANNEL, VIEW_OWNER, isRecord, type PendingView, type RpcResult, type ShownView, type ViewPresentation } from './contracts.ts'\nimport type { ToolViewProps, ToolArgsView, ReplyViewProps, ReplySnapshot } from './runtime.ts'\nimport { WidgetCard, type Answer } from './widget.tsx'\nimport { viewStyles } from './styles.ts'\nimport { checkedAnswer, replyAnswers, sameAnswers } from './answers.ts'\nimport { uiEn, uiZh } from './copy.ts'\n\nexport const name = 'dsh-deep-view-client'\nexport const inject = ['slots', 'connection', 'locale'] as const\nexport const LOCALE = 'deep-view'\n\nexport { uiEn, uiZh } from './copy.ts'\ntype UiKey = keyof typeof uiZh\nexport type UiT = (key: UiKey, params?: Record<string, unknown>) => string\nconst viewT = (t: UiT): ((key: string, params?: Record<string, unknown>) => string) => (key, params) => {\n const keys: Record<string, UiKey> = {\n Copy: 'copy', Copied: 'copied', Footnotes: 'footnotes', Chart: 'chart', 'Chart options': 'chartOptions',\n 'View as chart': 'viewAsChart', 'View as table': 'viewAsTable', 'Copy data': 'copyData', 'Chart {n}': 'chartNumber',\n Value: 'value', Series: 'series', View: 'view', Sources: 'sources', Progress: 'progress', 'Your answer': 'yourAnswer',\n 'Local preview only; this card does not send an answer.': 'local',\n Options: 'options', Submit: 'submit', Cancel: 'cancel', Confirm: 'confirm', Send: 'send', Selected: 'selected',\n }\n return keys[key] ? t(keys[key], params) : key.replace(/\\{(\\w+)\\}/g, (_, name) => String(params?.[name] ?? `{${name}}`))\n}\n\n// WidgetCard's Markdown prop is runtime-neutral (labels: unknown); adapt the\n// official component once here instead of weakening the widget contract.\nfunction ViewMarkdown(props: Parameters<typeof MarkdownText>[0]) {\n return <MarkdownText {...props} />\n}\nexport function useMarkdownLabels(t: UiT): MarkdownLabels {\n return useMemo(() => ({ code: { copyLabel: t('copy'), copiedLabel: t('copied'), toolbarLabels: { codeLabel: t('code'), wrapLabel: t('wrap'), unwrapLabel: t('unwrap') } }, footnotes: t('footnotes') }), [t])\n}\n\n// 'tool.call.toolview' owner contract (dsh-client-ui-tool 0.2.2 slots.d.ts):\n// phase 'preparing'|'start' carry a call block whose args is a lazy\n// PartialArguments view; 'result' carries a ToolResultNode whose `meta` is the\n// persisted output.presentationMeta and whose args may be empty when the call\n// left the loaded window.\nfunction isArgsView(value: unknown): value is ToolArgsView {\n return isRecord(value) && typeof value.text === 'function' && typeof value.value === 'function'\n}\nfunction argField(args: ToolArgsView | undefined, key: string): unknown {\n if (!isArgsView(args)) return undefined\n const value = args.value(key)\n return value !== undefined ? value : args.text(key)\n}\nexport function readToolCall(props: Pick<ToolViewProps, 'phase' | 'block'>): { presentation?: ViewPresentation; title: unknown; view: unknown; viewReady: boolean; phase: string; isError: boolean } {\n const block = props.block\n const phase = props.phase ?? (block.kind === 'tool-result' ? 'result' : 'start')\n const isError = phase === 'result' && block.isError === true\n const meta = phase === 'result' ? block.meta : undefined\n if (isRecord(meta) && meta.owner === VIEW_OWNER) {\n const shown = checkShownView(meta.title, meta.view) as ShownView | { error: string }\n if ('error' in shown) return { title: meta.title, view: meta.view, viewReady: true, phase, isError: true }\n return { presentation: { owner: VIEW_OWNER, ...shown, ...(typeof meta.viewId === 'string' ? { viewId: meta.viewId } : {}), awaitReply: meta.awaitReply === true }, title: meta.title, view: meta.view, viewReady: true, phase, isError }\n }\n const args = block.args\n const title = argField(args, 'title')\n const viewReady = phase !== 'preparing' || isArgsView(args) && args.complete('view')\n const view = viewReady ? argField(args, 'view') : undefined\n return { title, view, viewReady, phase, isError }\n}\nexport function ToolCallView(props: ToolViewProps & { restoredAnswer?: Answer; call(endpoint: string, payload: unknown): Promise<unknown> }) {\n const t = props.t as UiT\n const labels = useMarkdownLabels(t)\n const read = useMemo(() => readToolCall(props), [props.block, props.phase])\n const shown = useMemo(() => {\n if (read.presentation) return read.presentation\n if (!read.viewReady || read.phase === 'preparing') return undefined\n const checked = checkShownView(read.title, read.view) as ShownView | { error: string }\n return 'error' in checked ? undefined : { ...checked, awaitReply: checked.interactive }\n }, [read.presentation, read.viewReady, read.phase, read.title, read.view])\n const [pending, setPending] = useState<PendingView | null>(null)\n const [busy, setBusy] = useState(false)\n const [failed, setFailed] = useState(false)\n const [localAnswer, setAnswer] = useState<Answer | null>(null)\n const restored = useMemo(() => shown\n ? checkedAnswer(props.restoredAnswer, read.presentation?.viewId, shown.view) : null,\n [props.restoredAnswer, read.presentation?.viewId, shown])\n const answer = restored ?? localAnswer\n const sequence = useRef(0)\n const callId = props.callId\n useEffect(() => {\n const seq = ++sequence.current\n setPending(null)\n setFailed(false)\n if (restored || !read.presentation?.awaitReply || !callId) return\n void props.call('pending', { sessionId: props.sessionId, callId }).then(result => {\n if (sequence.current !== seq) return\n const envelope = result as RpcResult<PendingView | null> | undefined\n if (envelope?.ok) setPending(envelope.value)\n }).catch(() => {})\n return () => { sequence.current += 1 }\n }, [props.call, props.sessionId, callId, read.presentation?.awaitReply, read.presentation?.viewId, restored])\n const submit = useCallback((action: string, values: Record<string, unknown>) => {\n if (!pending || busy) return\n setBusy(true)\n setFailed(false)\n void props.call('reply', { sessionId: props.sessionId, viewId: pending.id, action, values }).then(result => {\n const envelope = result as RpcResult | undefined\n if (envelope?.ok) { setAnswer({ id: pending.id, action, values }); setPending(null) }\n else {\n createClientPluginLogger(PLUGIN_NAME).warn('reply.rejected', 'Deep View reply was rejected by host.', undefined, {\n sessionId: props.sessionId,\n viewId: pending.id,\n code: envelope && !envelope.ok ? envelope.error.code : null,\n })\n setFailed(true)\n }\n }).catch(error => {\n createClientPluginLogger(PLUGIN_NAME).error('reply.transport-error', 'Deep View reply RPC failed.', error, {\n sessionId: props.sessionId,\n viewId: pending.id,\n })\n setFailed(true)\n }).finally(() => setBusy(false))\n }, [props.call, props.sessionId, pending, busy])\n if (read.phase === 'preparing') return <div className=\"dvui-root dvui-tool-loading\" role=\"status\">{t('preparing')}</div>\n if (read.isError || !shown) {\n // A settled error or a call without a valid view argument renders the\n // honest fallback; an in-flight call still argues a loading state.\n if (read.phase !== 'result' && !read.isError) return <div className=\"dvui-root dvui-tool-loading\" role=\"status\">{t('preparing')}</div>\n return <div className=\"dvui-root dvui-tool-error\" role=\"status\">{t(read.isError ? 'error' : 'invalid')}</div>\n }\n const canAnswer = shown.awaitReply && pending !== null && answer === null\n // Display cards never settle their local inputs; only answer cards lock after their reply window closes.\n return <div className=\"dvui-root\"><WidgetCard title={shown.title} view={shown.view} onSubmit={canAnswer ? submit : undefined} busy={busy} settled={answer !== null || (shown.awaitReply && !canAnswer)} answer={answer} t={viewT(t)} labels={labels} Markdown={ViewMarkdown} localOnly={answer === null && !canAnswer && shown.interactive} />{failed ? <p className=\"dvui-tool-error\" role=\"alert\">{t('answerFailed')}</p> : null}</div>\n}\n\n/** Collect only this turn's successfully persisted cards, including PTC children.\n * The turn index also covers hidden process rows; no all-history scan or DOM\n * relocation is needed. Result metadata works even when arguments were evicted.\n */\nexport function replyCards(snapshot: ReplySnapshot, turn: number): ToolViewProps['block'][] {\n const cards: ToolViewProps['block'][] = []\n const seen = new Set<string>()\n const visit = (block: ToolViewProps['block']) => {\n if (block.kind === 'tool-result' && !block.isError && !seen.has(block.callId)\n && isRecord(block.meta) && block.meta.owner === VIEW_OWNER) {\n const read = readToolCall({ phase: 'result', block })\n if (read.presentation && !read.isError) { seen.add(block.callId); cards.push(block) }\n }\n for (const child of block.subCalls ?? []) visit(child)\n }\n for (const key of snapshot.locations.getTurn(turn)) {\n const node = snapshot.nodes.get(key)\n if (node?.kind === 'tool-call' && node.data?.root) visit(node.data.root)\n }\n return cards\n}\n\nconst sameCards = (left: ToolViewProps['block'][], right: ToolViewProps['block'][]) =>\n left.length === right.length && left.every((block, index) => block === right[index])\n\n/** Native completed-turn surface: always outside the process disclosure. */\nexport function ReplyView(props: ReplyViewProps) {\n const cards = props.useChat(snapshot => replyCards(snapshot, props.turn.turn), sameCards)\n const answers = props.useChat(replyAnswers, sameAnswers)\n if (props.turn.status !== 'closed' || cards.length === 0) return null\n return <div className=\"dvui-root\" data-deep-view-reply>{cards.map(block =>\n <ToolCallView key={`${props.sessionId}:${block.callId}`} sessionId={props.sessionId} callId={block.callId}\n phase=\"result\" block={block} t={props.t} call={props.call}\n restoredAnswer={isRecord(block.meta) && typeof block.meta.viewId === 'string' ? answers.get(block.meta.viewId) : undefined} />)}</div>\n}\n\n/** Tool activity contains status only, never the user's interactive card. */\nexport function ToolCallStatus(props: ToolViewProps) {\n const read = readToolCall(props)\n return <div className=\"dvui-root\" role=\"status\">{props.t(read.isError ? 'error'\n : read.phase === 'result' && !read.presentation ? 'invalid'\n : read.phase === 'result' ? 'prepared' : 'preparing')}</div>\n}\n\n/** Client service name other plugins read to draw show_view cards in their own surfaces. */\nexport const CARDS_SERVICE = 'dshDeepView'\n\nexport type CardProps = {\n sessionId: string\n callId: string\n /** The committed result's presentation metadata, when the call has finished. */\n presentation?: unknown\n /** Raw call arguments while the result is pending. */\n title?: unknown\n view?: unknown\n failed?: boolean\n /** The human's committed answer, restored from history. */\n answer?: Answer\n}\nexport type DeepViewCards = { Card(props: CardProps): ReactElement }\n\nfunction staticArgs(values: Record<string, unknown>): ToolArgsView {\n return {\n has: key => values[key] !== undefined,\n complete: key => values[key] !== undefined,\n text: key => typeof values[key] === 'string' ? values[key] as string : undefined,\n value: key => values[key],\n }\n}\n\n/** One show_view card for a plugin-drawn chat: same card, same answer channel as the host chat. */\nexport function createCards(call: (endpoint: string, payload: unknown) => Promise<unknown>, locale: { getSnapshot?(): { active?: string }; subscribe?(listener: () => void): () => void } | undefined): DeepViewCards {\n const subscribe = (listener: () => void) => locale?.subscribe?.(listener) ?? (() => {})\n const active = () => locale?.getSnapshot?.().active ?? 'en'\n function Card(props: CardProps) {\n const language = useSyncExternalStore(subscribe, active)\n const t = useMemo<UiT>(() => {\n const table: Record<string, string> = language.toLowerCase().startsWith('zh') ? uiZh : uiEn\n return (key, params) => (table[key] ?? key).replace(/\\{(\\w+)\\}/g, (_, name) => String(params?.[name] ?? `{${name}}`))\n }, [language])\n const block = useMemo(() => props.presentation !== undefined\n ? { callId: props.callId, kind: 'tool-result' as const, meta: props.presentation, isError: false }\n : props.failed\n ? { callId: props.callId, kind: 'tool-result' as const, isError: true }\n : { callId: props.callId, args: staticArgs({ title: props.title, view: props.view }) },\n [props.callId, props.presentation, props.failed, props.title, props.view])\n const phase = props.presentation !== undefined || props.failed ? 'result' : 'start'\n return <ToolCallView sessionId={props.sessionId} callId={props.callId} phase={phase} block={block} t={t as ToolViewProps['t']} call={call} {...props.answer ? { restoredAnswer: props.answer } : {}} />\n }\n return { Card }\n}\n\ntype Client = Context & {\n connection: { rpc: { call(channel: string, endpoint: string, payload: unknown): Promise<unknown> } }\n slots: {\n inject(key: string, callback: () => unknown): () => void\n register(spec: Record<string, unknown>, render: unknown): () => void\n }\n locale: { register(namespace: string, dictionaries: { zh: Record<string, string>; en: Record<string, string> }): () => void; getSnapshot?(): { active?: string }; subscribe?(listener: () => void): () => void }\n provide(name: string, value: unknown): void\n}\nexport function apply(ctx: Context): void {\n const client = ctx as unknown as Client\n installClientPluginLogger(ctx, PLUGIN_NAME)\n client.provide(CARDS_SERVICE, createCards((endpoint, payload) => client.connection.rpc.call(RPC_CHANNEL, endpoint, payload), client.locale))\n ctx.effect(() => client.locale.register(LOCALE, { zh: { ...uiZh }, en: { ...uiEn } }), 'deep-view.locale')\n ctx.effect(() => {\n if (typeof document === 'undefined') return () => {}\n const style = document.createElement('style')\n style.setAttribute('data-plugin', PLUGIN_NAME)\n style.textContent = viewStyles\n document.head.appendChild(style)\n return () => style.remove()\n }, 'deep-view.styles')\n ctx.effect(() => client.slots.inject('tool.call.toolview', () => client.slots.register({\n name: 'tool.call.toolview', key: 'show_view', locale: LOCALE,\n }, ToolCallStatus)), 'deep-view.tool')\n ctx.effect(() => client.slots.inject('conversation.chat.turnTail', () => client.slots.register({\n name: 'conversation.chat.turnTail', id: 'deep-view', order: 20, locale: LOCALE,\n inject: () => ({ call: (endpoint: string, payload: unknown) => client.connection.rpc.call(RPC_CHANNEL, endpoint, payload) }),\n }, ReplyView)), 'deep-view.reply')\n}\n"],"mappings":"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"}