{"version":3,"file":"chart.mjs","names":[],"sources":["../src/chart/cx/chartex.ts"],"sourcesContent":["import type { ShapeProperties } from '../../drawing/dml/shape-properties';\nimport type { TextBody } from '../../drawing/dml/text';\n\n// Chartex (cx:) data model.\n//\n// Chartex covers the eight Excel-2016 chart kinds that aren't part of ECMA-376:\n// Sunburst, Treemap, Waterfall, Histogram, Pareto, Funnel, Box-and-Whisker, and\n// Region Map. Unlike the legacy `c:` chart space where each kind has its own\n// `<c:barChart>`/`<c:lineChart>` element, chartex puts the discriminator on the\n// series — `<cx:series layoutId=\"...\">` — and stores all source data once at\n// the top of the document under `<cx:chartData>` so multiple series can share\n// the same numbers.\n\n/** Chartex layout discriminator. Lives on `<cx:series layoutId=\"...\">`. */\nexport type CxLayoutId =\n  | 'clusteredColumn'\n  | 'waterfall'\n  | 'sunburst'\n  | 'treemap'\n  | 'boxWhisker'\n  | 'pareto'\n  | 'paretoLine'\n  | 'regionMap'\n  | 'funnel';\n\n/** Numeric data point inside a chartex `<cx:numDim>` / `<cx:strDim>` level. */\nexport interface CxPoint {\n  idx: number;\n  v: string;\n}\n\n/** Numeric dimension (val / colorVal / size / x / y). */\nexport interface CxNumDim {\n  kind: 'num';\n  /** Dimension role attribute (`val`, `colorVal`, `size`, `x`, `y`). */\n  type: string;\n  /** Cell reference, e.g. `Sheet1!$A$1:$A$5`. */\n  f?: string;\n  /** Optional `dir=\"col\"|\"row\"` formula direction hint. */\n  dir?: 'col' | 'row';\n  ptCount?: number;\n  pts: CxPoint[];\n  formatCode?: string;\n}\n\n/** String dimension (cat / colorStr). */\nexport interface CxStrDim {\n  kind: 'str';\n  /** Dimension role attribute (`cat`, `colorStr`). */\n  type: string;\n  f?: string;\n  dir?: 'col' | 'row';\n  ptCount?: number;\n  pts: CxPoint[];\n  formatCode?: string;\n}\n\nexport type CxDim = CxNumDim | CxStrDim;\n\n/** Source data block, referenced by `<cx:dataId val=\"N\"/>` on series. */\nexport interface CxData {\n  id: number;\n  dims: CxDim[];\n}\n\n/** External data linkage (rare — most charts inline the cache). */\nexport interface CxExternalData {\n  rId: string;\n  autoUpdate?: boolean;\n}\n\nexport interface CxChartData {\n  externalData?: CxExternalData;\n  data: CxData[];\n}\n\n/** Layout-properties union, keyed on the series' layoutId family. */\nexport type CxLayoutPr =\n  | { kind: 'waterfall'; subtotalIdx: number[] }\n  | {\n      kind: 'binning';\n      binCountAuto?: boolean;\n      binCount?: number;\n      binSize?: number;\n      intervalClosed?: 'r' | 'l';\n      underflow?: number;\n      overflow?: number;\n    }\n  | { kind: 'parentLabel'; layout: 'overlapping' | 'banner' | 'none' }\n  | {\n      kind: 'visibility';\n      meanLine?: boolean;\n      meanMarker?: boolean;\n      nonoutliers?: boolean;\n      outliers?: boolean;\n      quartileMethod?: 'exclusive' | 'inclusive';\n    }\n  | {\n      kind: 'region';\n      cultureLanguage?: string;\n      cultureRegion?: string;\n      projectionType?: 'automatic' | 'mercator' | 'miller' | 'albers';\n      regionLabelLayout?: 'none' | 'bestFit' | 'showAll';\n    };\n\nexport type CxDataLabelPos = 'ctr' | 'b' | 'l' | 'r' | 't' | 'inEnd' | 'outEnd' | 'inBase';\n\nexport interface CxDataLabels {\n  pos?: CxDataLabelPos;\n  visibility?: {\n    seriesName?: boolean;\n    categoryName?: boolean;\n    value?: boolean;\n  };\n}\n\nexport interface CxSeries {\n  layoutId: CxLayoutId;\n  hidden?: boolean;\n  ownerIdx?: number;\n  formatIdx?: number;\n  axisIds?: number[];\n  /** Series text — typically a cell reference. */\n  tx?: { f?: string; v?: string };\n  dataLabels?: CxDataLabels;\n  /** Numeric id pointing into chartData.data. */\n  dataId?: number;\n  layoutPr?: CxLayoutPr;\n  /** Per-series shape properties (fill / line / effects). */\n  spPr?: ShapeProperties;\n  /** Per-series default text properties. */\n  txPr?: TextBody;\n}\n\nexport interface CxAxis {\n  id: number;\n  hidden?: boolean;\n  /** Continuous (value) axis bounds. */\n  valScaling?: { min?: number; max?: number };\n  /** Category-axis gap width %. */\n  catScalingGapWidth?: number;\n  majorGridlines?: boolean;\n  title?: CxTitle;\n  /** Axis-line / tick formatting. */\n  spPr?: ShapeProperties;\n  /** Tick-label text formatting. */\n  txPr?: TextBody;\n}\n\nexport interface CxTitle {\n  pos?: 't' | 'b' | 'l' | 'r';\n  align?: 'ctr' | 'l' | 'r';\n  overlay?: boolean;\n  /** Plain text (rich runs not preserved at this layer). */\n  text?: string;\n  /** Cell-reference text source. */\n  txDataRef?: string;\n  /** Title chrome (frame fill / border). */\n  spPr?: ShapeProperties;\n  /** Title text formatting. */\n  txPr?: TextBody;\n}\n\nexport interface CxLegend {\n  pos?: 't' | 'b' | 'l' | 'r' | 'tr';\n  align?: 'ctr' | 'l' | 'r';\n  overlay?: boolean;\n  /** Legend chrome (frame fill / border). */\n  spPr?: ShapeProperties;\n  /** Legend text formatting. */\n  txPr?: TextBody;\n}\n\nexport interface CxPlotArea {\n  series: CxSeries[];\n  axes: CxAxis[];\n  /** Plot-surface shape properties (background fill / border line). */\n  spPr?: ShapeProperties;\n}\n\nexport interface CxChart {\n  title?: CxTitle;\n  plotArea: CxPlotArea;\n  legend?: CxLegend;\n  plotVisOnly?: boolean;\n  dispBlanksAs?: 'span' | 'gap' | 'zero';\n}\n\n/** Root model for a chartex `xl/charts/chartN.xml` part. */\nexport interface CxChartSpace {\n  kind: 'cxChartSpace';\n  chartData: CxChartData;\n  chart: CxChart;\n  /** Chart-space level shape properties (overall frame). */\n  spPr?: ShapeProperties;\n  /** Chart-space level default text properties. */\n  txPr?: TextBody;\n}\n\n// ---- factories --------------------------------------------------------------\n\nexport const makeCxNumDim = (opts: {\n  type: string;\n  f?: string;\n  dir?: 'col' | 'row';\n  ptCount?: number;\n  pts?: CxPoint[];\n  formatCode?: string;\n}): CxNumDim => ({\n  kind: 'num',\n  type: opts.type,\n  ...(opts.f !== undefined ? { f: opts.f } : {}),\n  ...(opts.dir !== undefined ? { dir: opts.dir } : {}),\n  ...(opts.ptCount !== undefined ? { ptCount: opts.ptCount } : {}),\n  pts: opts.pts ?? [],\n  ...(opts.formatCode !== undefined ? { formatCode: opts.formatCode } : {}),\n});\n\nexport const makeCxStrDim = (opts: {\n  type: string;\n  f?: string;\n  dir?: 'col' | 'row';\n  ptCount?: number;\n  pts?: CxPoint[];\n  formatCode?: string;\n}): CxStrDim => ({\n  kind: 'str',\n  type: opts.type,\n  ...(opts.f !== undefined ? { f: opts.f } : {}),\n  ...(opts.dir !== undefined ? { dir: opts.dir } : {}),\n  ...(opts.ptCount !== undefined ? { ptCount: opts.ptCount } : {}),\n  pts: opts.pts ?? [],\n  ...(opts.formatCode !== undefined ? { formatCode: opts.formatCode } : {}),\n});\n\nexport const makeCxData = (id: number, dims: CxDim[]): CxData => ({ id, dims });\n\nexport const makeCxSeries = (opts: {\n  layoutId: CxLayoutId;\n  dataId?: number;\n  hidden?: boolean;\n  ownerIdx?: number;\n  formatIdx?: number;\n  axisIds?: number[];\n  tx?: { f?: string; v?: string };\n  dataLabels?: CxDataLabels;\n  layoutPr?: CxLayoutPr;\n  spPr?: ShapeProperties;\n  txPr?: TextBody;\n}): CxSeries => ({\n  layoutId: opts.layoutId,\n  ...(opts.hidden !== undefined ? { hidden: opts.hidden } : {}),\n  ...(opts.ownerIdx !== undefined ? { ownerIdx: opts.ownerIdx } : {}),\n  ...(opts.formatIdx !== undefined ? { formatIdx: opts.formatIdx } : {}),\n  ...(opts.axisIds !== undefined ? { axisIds: opts.axisIds } : {}),\n  ...(opts.tx ? { tx: opts.tx } : {}),\n  ...(opts.dataLabels ? { dataLabels: opts.dataLabels } : {}),\n  ...(opts.dataId !== undefined ? { dataId: opts.dataId } : {}),\n  ...(opts.layoutPr ? { layoutPr: opts.layoutPr } : {}),\n  ...(opts.spPr ? { spPr: opts.spPr } : {}),\n  ...(opts.txPr ? { txPr: opts.txPr } : {}),\n});\n\nexport const makeCxAxis = (opts: {\n  id: number;\n  hidden?: boolean;\n  valScaling?: { min?: number; max?: number };\n  catScalingGapWidth?: number;\n  majorGridlines?: boolean;\n  title?: CxTitle;\n  spPr?: ShapeProperties;\n  txPr?: TextBody;\n}): CxAxis => ({\n  id: opts.id,\n  ...(opts.hidden !== undefined ? { hidden: opts.hidden } : {}),\n  ...(opts.valScaling ? { valScaling: opts.valScaling } : {}),\n  ...(opts.catScalingGapWidth !== undefined ? { catScalingGapWidth: opts.catScalingGapWidth } : {}),\n  ...(opts.majorGridlines !== undefined ? { majorGridlines: opts.majorGridlines } : {}),\n  ...(opts.title ? { title: opts.title } : {}),\n  ...(opts.spPr ? { spPr: opts.spPr } : {}),\n  ...(opts.txPr ? { txPr: opts.txPr } : {}),\n});\n\nexport const makeCxChartSpace = (opts: {\n  series: CxSeries[];\n  data?: CxData[];\n  axes?: CxAxis[];\n  title?: CxTitle;\n  legend?: CxLegend;\n  plotVisOnly?: boolean;\n  dispBlanksAs?: CxChart['dispBlanksAs'];\n  externalData?: CxExternalData;\n  plotAreaSpPr?: ShapeProperties;\n  spPr?: ShapeProperties;\n  txPr?: TextBody;\n}): CxChartSpace => ({\n  kind: 'cxChartSpace',\n  chartData: {\n    ...(opts.externalData ? { externalData: opts.externalData } : {}),\n    data: opts.data ?? [],\n  },\n  chart: {\n    plotArea: {\n      series: opts.series,\n      axes: opts.axes ?? [],\n      ...(opts.plotAreaSpPr ? { spPr: opts.plotAreaSpPr } : {}),\n    },\n    ...(opts.title ? { title: opts.title } : {}),\n    ...(opts.legend ? { legend: opts.legend } : {}),\n    ...(opts.plotVisOnly !== undefined ? { plotVisOnly: opts.plotVisOnly } : {}),\n    ...(opts.dispBlanksAs !== undefined ? { dispBlanksAs: opts.dispBlanksAs } : {}),\n  },\n  ...(opts.spPr ? { spPr: opts.spPr } : {}),\n  ...(opts.txPr ? { txPr: opts.txPr } : {}),\n});\n\n// ---- per-kind convenience factories ----------------------------------------\n//\n// Each helper builds a CxChartSpace with one CxData block (id 0) carrying the\n// appropriate dimension shapes for the layoutId. Callers populate the dim point\n// caches directly when they have data on hand.\n\nexport const makeSunburstChart = (opts: { catRef?: string; valRef?: string; valFormatCode?: string }): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({\n          type: 'val',\n          ...(opts.valRef !== undefined ? { f: opts.valRef } : {}),\n          ...(opts.valFormatCode !== undefined ? { formatCode: opts.valFormatCode } : {}),\n        }),\n      ]),\n    ],\n    series: [makeCxSeries({ layoutId: 'sunburst', dataId: 0 })],\n  });\n\nexport const makeTreemapChart = (opts: {\n  catRef?: string;\n  valRef?: string;\n  parentLabelLayout?: 'overlapping' | 'banner' | 'none';\n}): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) }),\n      ]),\n    ],\n    series: [\n      makeCxSeries({\n        layoutId: 'treemap',\n        dataId: 0,\n        layoutPr: { kind: 'parentLabel', layout: opts.parentLabelLayout ?? 'overlapping' },\n      }),\n    ],\n  });\n\nexport const makeWaterfallChart = (opts: { catRef?: string; valRef?: string; subtotalIdx?: number[] }): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) }),\n      ]),\n    ],\n    series: [\n      makeCxSeries({\n        layoutId: 'waterfall',\n        dataId: 0,\n        axisIds: [0, 1],\n        layoutPr: { kind: 'waterfall', subtotalIdx: opts.subtotalIdx ?? [] },\n      }),\n    ],\n    axes: [makeCxAxis({ id: 0 }), makeCxAxis({ id: 1 })],\n  });\n\nexport const makeHistogramChart = (opts: {\n  valRef?: string;\n  binCountAuto?: boolean;\n  binCount?: number;\n  binSize?: number;\n  intervalClosed?: 'r' | 'l';\n  underflow?: number;\n  overflow?: number;\n}): CxChartSpace =>\n  makeCxChartSpace({\n    data: [makeCxData(0, [makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) })])],\n    series: [\n      makeCxSeries({\n        layoutId: 'clusteredColumn',\n        dataId: 0,\n        axisIds: [0, 1],\n        layoutPr: {\n          kind: 'binning',\n          ...(opts.binCountAuto !== undefined ? { binCountAuto: opts.binCountAuto } : {}),\n          ...(opts.binCount !== undefined ? { binCount: opts.binCount } : {}),\n          ...(opts.binSize !== undefined ? { binSize: opts.binSize } : {}),\n          ...(opts.intervalClosed !== undefined ? { intervalClosed: opts.intervalClosed } : {}),\n          ...(opts.underflow !== undefined ? { underflow: opts.underflow } : {}),\n          ...(opts.overflow !== undefined ? { overflow: opts.overflow } : {}),\n        },\n      }),\n    ],\n    axes: [makeCxAxis({ id: 0 }), makeCxAxis({ id: 1 })],\n  });\n\nexport const makeParetoChart = (opts: {\n  valRef?: string;\n  catRef?: string;\n  binCountAuto?: boolean;\n  binCount?: number;\n  binSize?: number;\n}): CxChartSpace => {\n  const dims: CxDim[] = [makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) })];\n  if (opts.catRef !== undefined) dims.unshift(makeCxStrDim({ type: 'cat', f: opts.catRef }));\n  return makeCxChartSpace({\n    data: [makeCxData(0, dims)],\n    series: [\n      makeCxSeries({\n        layoutId: 'clusteredColumn',\n        dataId: 0,\n        axisIds: [0, 1],\n        layoutPr: {\n          kind: 'binning',\n          ...(opts.binCountAuto !== undefined ? { binCountAuto: opts.binCountAuto } : {}),\n          ...(opts.binCount !== undefined ? { binCount: opts.binCount } : {}),\n          ...(opts.binSize !== undefined ? { binSize: opts.binSize } : {}),\n        },\n      }),\n      makeCxSeries({ layoutId: 'paretoLine', dataId: 0, ownerIdx: 0, axisIds: [0, 2] }),\n    ],\n    axes: [makeCxAxis({ id: 0 }), makeCxAxis({ id: 1 }), makeCxAxis({ id: 2 })],\n  });\n};\n\nexport const makeFunnelChart = (opts: { catRef?: string; valRef?: string }): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) }),\n      ]),\n    ],\n    series: [makeCxSeries({ layoutId: 'funnel', dataId: 0 })],\n  });\n\nexport const makeBoxWhiskerChart = (opts: {\n  catRef?: string;\n  valRef?: string;\n  meanLine?: boolean;\n  meanMarker?: boolean;\n  outliers?: boolean;\n  nonoutliers?: boolean;\n  quartileMethod?: 'exclusive' | 'inclusive';\n}): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) }),\n      ]),\n    ],\n    series: [\n      makeCxSeries({\n        layoutId: 'boxWhisker',\n        dataId: 0,\n        axisIds: [0, 1],\n        layoutPr: {\n          kind: 'visibility',\n          ...(opts.meanLine !== undefined ? { meanLine: opts.meanLine } : {}),\n          ...(opts.meanMarker !== undefined ? { meanMarker: opts.meanMarker } : {}),\n          ...(opts.outliers !== undefined ? { outliers: opts.outliers } : {}),\n          ...(opts.nonoutliers !== undefined ? { nonoutliers: opts.nonoutliers } : {}),\n          ...(opts.quartileMethod !== undefined ? { quartileMethod: opts.quartileMethod } : {}),\n        },\n      }),\n    ],\n    axes: [makeCxAxis({ id: 0 }), makeCxAxis({ id: 1 })],\n  });\n\nexport const makeRegionMapChart = (opts: {\n  catRef?: string;\n  valRef?: string;\n  cultureLanguage?: string;\n  cultureRegion?: string;\n  projectionType?: 'automatic' | 'mercator' | 'miller' | 'albers';\n  regionLabelLayout?: 'none' | 'bestFit' | 'showAll';\n}): CxChartSpace =>\n  makeCxChartSpace({\n    data: [\n      makeCxData(0, [\n        makeCxStrDim({ type: 'cat', ...(opts.catRef !== undefined ? { f: opts.catRef } : {}) }),\n        makeCxNumDim({ type: 'val', ...(opts.valRef !== undefined ? { f: opts.valRef } : {}) }),\n      ]),\n    ],\n    series: [\n      makeCxSeries({\n        layoutId: 'regionMap',\n        dataId: 0,\n        layoutPr: {\n          kind: 'region',\n          ...(opts.cultureLanguage !== undefined ? { cultureLanguage: opts.cultureLanguage } : {}),\n          ...(opts.cultureRegion !== undefined ? { cultureRegion: opts.cultureRegion } : {}),\n          ...(opts.projectionType !== undefined ? { projectionType: opts.projectionType } : {}),\n          ...(opts.regionLabelLayout !== undefined ? { regionLabelLayout: opts.regionLabelLayout } : {}),\n        },\n      }),\n    ],\n  });\n"],"mappings":"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"}