/** * Chart / chartEx internal structure check. * * Classic charts (`xl/charts/chartN.xml`) must contain both `c:chart` and * `c:plotArea`. ChartEx charts must contain `cx:chart`, `cx:plotArea` * and at least one `cx:series`; series must carry `layoutId` and their * `dataId`/`axisId` back-references must resolve inside the chart. * `cx:externalData` nodes must refer to a declared relationship. * * In addition we catch five chartEx schema-violation patterns that * cause Excel 2016+ to drop the whole chartEx part with "Removed Part: * /xl/drawings/drawingN.xml (Drawing shape)": * * - `` with more than one `` child * (`CT_Series/dataId` has `maxOccurs="1"`; multi-dim series must * use a single `` wrapper with multiple strDim/numDim). * - `N`, `N`, * `N`, `N` * emitted as text content instead of `val="N"` attribute. The * underlying types are `CT_UnsignedInteger`/`CT_Double`, which * Excel's strict loader only accepts via the attribute form. * - `` element anywhere in the chartEx. Auto binning is * expressed by the ABSENCE of `binSize`/`binCount`, not a * dedicated `` tag. The tag is schema-invalid. * - `` child of ``. Not in the * CT_SeriesLayoutProperties schema. A real pareto chart adds a * second series with `layoutId="paretoLine"`. * - `` with a direct `` child. Title layout * belongs in `extLst`-based extensions. */ import type { ValidationContext } from "./context.js"; export declare function checkChart(ctx: ValidationContext): void;