{"version":3,"file":"diff.mjs","names":["OPERATOR_LABELS","AiCondition","AiDiffLine","QueryIntent","AI_DIFF_ICONS","Record","filters","sorts","grouping","columns","pageSize","describeCondition","cond","op","operator","field","lo","hi","values","join","value","describeIntent","intent","lines","undefined","conditions","groups","length","push","kind","text","joiner","toUpperCase","parts","map","group","s","direction","groupBy","aggregates","a","operation","showOnly","show","hide"],"sources":["../../src/searchIntent/diff.ts"],"sourcesContent":["import { OPERATOR_LABELS } from './operators';\nimport type { AiCondition, AiDiffLine, QueryIntent } from './types';\n\n/** Fluent icon names per diff-line kind, for AiProposalDetail rendering. */\nexport const AI_DIFF_ICONS: Record<AiDiffLine['kind'], string> = {\n  filters: 'filter',\n  sorts: 'sort',\n  grouping: 'group',\n  columns: 'table',\n  pageSize: 'page'\n};\n\nconst describeCondition = (cond: AiCondition): string => {\n  const op = OPERATOR_LABELS[cond.operator] ?? cond.operator;\n  if (cond.operator === 'is_empty' || cond.operator === 'is_not_empty') {\n    return `${cond.field} ${op}`;\n  }\n  if (cond.operator === 'between') {\n    const [lo, hi] = cond.values ?? [];\n    return `${cond.field} ${op} ${lo} and ${hi}`;\n  }\n  if (cond.values) {\n    return `${cond.field} ${op} [${cond.values.join(', ')}]`;\n  }\n  return `${cond.field} ${op} ${cond.value}`;\n};\n\n/**\n * Human-readable summary of what applying the intent will change. Because\n * sections are declarative replacements, each line describes the resulting\n * state of a changed section rather than an add/remove delta.\n */\nexport const describeIntent = (intent: QueryIntent): AiDiffLine[] => {\n  const lines: AiDiffLine[] = [];\n\n  if (intent.filters !== undefined && intent.filters !== null) {\n    const { op, conditions = [], groups = [] } = intent.filters;\n    if (conditions.length === 0 && groups.length === 0) {\n      lines.push({ kind: 'filters', text: 'Filters: cleared' });\n    } else {\n      const joiner = ` ${op.toUpperCase()} `;\n      const parts = conditions.map(describeCondition);\n      for (const group of groups) {\n        parts.push(\n          `(${group.conditions.map(describeCondition).join(` ${group.op.toUpperCase()} `)})`\n        );\n      }\n      lines.push({ kind: 'filters', text: `Filters: ${parts.join(joiner)}` });\n    }\n  }\n\n  if (intent.sorts !== undefined && intent.sorts !== null) {\n    lines.push({\n      kind: 'sorts',\n      text:\n        intent.sorts.length === 0\n          ? 'Sort: cleared'\n          : `Sort: ${intent.sorts.map((s) => `${s.field} ${s.direction}`).join(', ')}`\n    });\n  }\n\n  if (intent.grouping !== undefined && intent.grouping !== null) {\n    const { groupBy = [], aggregates = [] } = intent.grouping;\n    if (groupBy.length === 0 && aggregates.length === 0) {\n      lines.push({ kind: 'grouping', text: 'Grouping: cleared' });\n    } else {\n      const parts = [`Group by: ${groupBy.join(', ') || '—'}`];\n      if (aggregates.length > 0) {\n        parts.push(\n          `Aggregates: ${aggregates.map((a) => `${a.operation}(${a.field})`).join(', ')}`\n        );\n      }\n      lines.push({ kind: 'grouping', text: parts.join(' · ') });\n    }\n  }\n\n  if (intent.columns) {\n    const { showOnly, show = [], hide = [] } = intent.columns;\n    if (showOnly) {\n      lines.push({\n        kind: 'columns',\n        text: `Columns: show only ${showOnly.join(', ')}`\n      });\n    } else {\n      const parts: string[] = [];\n      if (show.length) parts.push(`show ${show.join(', ')}`);\n      if (hide.length) parts.push(`hide ${hide.join(', ')}`);\n      if (parts.length)\n        lines.push({ kind: 'columns', text: `Columns: ${parts.join(' · ')}` });\n    }\n  }\n\n  if (intent.pageSize !== undefined && intent.pageSize !== null) {\n    lines.push({ kind: 'pageSize', text: `Page size: ${intent.pageSize}` });\n  }\n\n  return lines;\n};\n"],"mappings":"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"}