@office-kit/pptx-dev 0.14.0 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/editor-chunks/{agent-tools-EU7Eb-FV-IILR6JNI.js → agent-tools-D8sCxM9t-DNFUWEBC.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{A,Ad as te,B as k,C as v,Cd as ie,D as V,Dd as re,Ea as z,F as I,Gf as ne,Ib as _,Ka as L,Mf as T,N as B,O as S,P as q,S as F,T as W,Wa as U,ac as X,ad as Y,fd as K,nd as J,qd as Z,ra as H,sa as N,u as
|
|
1
|
+
import{A,Ad as te,B as k,C as v,Cd as ie,D as V,Dd as re,Ea as z,F as I,Gf as ne,Ib as _,Ka as L,Mf as T,N as B,O as S,P as q,S as F,T as W,Wa as U,ac as X,ad as Y,fd as K,nd as J,qd as Z,ra as H,sa as N,u as x,ue as se,wd as Q,we as ae,xa as M,xe as $,ya as w,yd as ee,ye as oe}from"./chunk-V5NA7C6E.js";var le=Object.defineProperty,ke=(t,e)=>{let i={};for(var r in t)le(i,r,{get:t[r],enumerable:!0});return e||le(i,Symbol.toStringTag,{value:"Module"}),i},fe={notTools:{createPresentation:"returns a new presentation instead of editing the open one",importSlide:"copies a slide from another presentation, which a model cannot pass",mergePresentations:"merges another presentation, which a model cannot pass",sortSlides:"takes a comparison function"},refs:{SlideRef:{type:"string",pattern:"^/ppt/slides/[^/]+\\.xml$",description:'A slide, by its part name as `listSlides` reports it, e.g. "/ppt/slides/slide1.xml".'},ShapeRef:{type:"object",description:"A shape, by its slide and id, as `listShapes` or the user's selection reports it. `slideIndex` and `name` are informational.",properties:{slide:{$ref:"#/$defs/SlideRef"},shapeId:{type:"integer",minimum:0},slideIndex:{type:"integer",minimum:0},name:{type:"string"}},required:["slide","shapeId"],additionalProperties:!1},ChartRef:{$ref:"#/$defs/ShapeRef",description:"A chart, by the ShapeRef of the graphic frame that holds it."},CellRef:{type:"object",description:"A table cell: the table's ShapeRef with the cell's 0-based `row` and `col` added.",properties:{slide:{$ref:"#/$defs/SlideRef"},shapeId:{type:"integer",minimum:0},row:{type:"integer",minimum:0},col:{type:"integer",minimum:0},slideIndex:{type:"integer",minimum:0},name:{type:"string"}},required:["slide","shapeId","row","col"],additionalProperties:!1},LayoutRef:{type:"string",pattern:"^/ppt/slideLayouts/[^/]+\\.xml$",description:'A slide layout, by its part name as `listLayouts` reports it, e.g. "/ppt/slideLayouts/slideLayout1.xml".'},CommentRef:{type:"object",description:"A comment, by its slide and its 0-based position in `listComments` for that slide.",properties:{slide:{$ref:"#/$defs/SlideRef"},index:{type:"integer",minimum:0}},required:["slide","index"],additionalProperties:!1},Bytes:{type:"string",contentEncoding:"base64",description:"File bytes, base64-encoded."},DateTime:{type:"string",format:"date-time",description:"An RFC 3339 date-time."}},tools:[{name:"addBlankSlide",description:`Convenience over \`addSlide\` that picks a layout automatically:
|
|
2
2
|
|
|
3
3
|
1. The layout with \`<p:sldLayout type="blank">\`, if present.
|
|
4
4
|
2. Otherwise, the first available layout (alphabetical by
|
|
@@ -25,7 +25,7 @@ and use these as horizontal guide lines per category band.`},CategoryAxisMajorTi
|
|
|
25
25
|
Width of the category-axis minor gridlines.`},CategoryAxisMinorGridlines:{type:"boolean",description:"Companion `<c:minorGridlines/>` on the category axis."},CategoryAxisMinorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Minor-tick mark mode on the category axis (`<c:catAx><c:minorTickMark>`); default `'none'`."},CategoryAxisNoMultiLevelLabel:{type:"boolean",description:'Toggle multi-level (hierarchical) category labels \u2014\n`<c:catAx><c:noMultiLvlLbl val="0|1"/>`. The reference desktop app defaults to\n`0` (multi-level labels stack). Set to `true` to flatten\nhierarchical categories into a single row.'},CategoryAxisNumberFormat:{type:"string",description:'Number-format code for the category-axis tick labels \u2014\n`<c:catAx><c:numFmt formatCode="\u2026"/>`. Most useful on date-style\ncategories (`"mm/dd/yyyy"`, `"mmm"`, etc.) but accepts any spreadsheet\nformat string. Independent of `valueAxis.numberFormat` (which\ntargets the value axis).'},CategoryAxisOrientation:{type:"string",enum:["minMax","maxMin"],description:"Category-axis order \u2014 `'minMax'` (the data's natural order) or\n`'maxMin'` (reversed). For bar charts the reference desktop app typically emits\n`maxMin` so the first category sits at the top instead of the\nbottom; honour the authored value when present."},CategoryAxisScaling:{$ref:"#/$defs/ChartAxisScaling",description:"Scaling of the horizontal axis where it is numeric: the x value axis\nof `scatter` / `bubble` charts (every field applies) and a date axis\n(`min` / `max` only, as date serials). Rejected on a text category\naxis, which has no scale to set.\nDate-serial range of the axis; only `min` / `max` apply."},CategoryAxisScaling2:{$ref:"#/$defs/ChartAxisScaling",description:"Scaling of the horizontal axis where it is numeric: the x value axis\nof `scatter` / `bubble` charts (every field applies) and a date axis\n(`min` / `max` only, as date serials). Rejected on a text category\naxis, which has no scale to set."},CategoryAxisTickLabelPos:{type:"string",enum:["none","low","high","nextTo"],description:'Category-axis tick label position (`<c:catAx><c:tickLblPos val="\u2026"/>`):\n - `none` hides labels but keeps the axis line\n - `low` / `high` puts them at the start / end (rare)\n - `nextTo` (default) is the standard position next to the axis'},CategoryAxisTickLabelSkip:{type:"number",description:'Category-axis tick label skip step (`<c:catAx><c:tickLblSkip val="N"/>`):\nrender every Nth category label. Commonly 2 / 5 / 10 on dense\ntime-series charts to keep labels from overlapping.'},CategoryAxisTickMarkSkip:{type:"number",description:`Category-axis tick *mark* skip (\`<c:catAx><c:tickMarkSkip val="N"/>\`):
|
|
26
26
|
draw every Nth tick mark independently of the label-skip stride.
|
|
27
27
|
Useful when you want fewer label collisions but the same dense
|
|
28
|
-
tick lattice; defaults to 1 (every tick).`},CategoryAxisTitle:{type:"string",description:"Optional axis title text (`<c:catAx><c:title>` / `<c:valAx><c:title>`)."},CategoryAxisTitleRotationDeg:{type:"number",description:'Rotation of the category-axis title, in degrees clockwise. Maps\nto `<c:catAx><c:title><c:tx><c:rich><a:bodyPr rot="N"/>` (the OOXML\nvalue is in 60000ths of a degree, but the API surface uses plain\ndegrees). Omit to inherit the default (`0`).'},CategoryAxisTitleStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the category-axis title (same `<a:rPr>` shape as `titleStyle`)."},CategoryGroupLevels:{type:"array",items:{type:"array",items:{type:"string"}},description:"Outer levels of a multi-level category axis (`<c:multiLvlStrRef>`),\nordered from the level next to `categories` outward. Each level has\none entry per category; an empty string continues the previous\ngroup, so `['2024', '', '', '', '2025', '', '', '']` groups eight\nquarters into two years."},ChartAreaFill:{type:"string",description:'Chart-area background fill \u2014 `<c:chartSpace><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. Renderers can use this as the outer card\ncolor instead of the hard-coded white.'},ChartAreaStrokeColor:{type:"string",description:"Chart-area outline color from `<c:chartSpace><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. Overrides the renderer's default\n`#E5E7EB` card border."},ChartAxisScaling:{type:"object",properties:{min:{type:"number"},max:{type:"number"},majorUnit:{
|
|
28
|
+
tick lattice; defaults to 1 (every tick).`},CategoryAxisTitle:{type:"string",description:"Optional axis title text (`<c:catAx><c:title>` / `<c:valAx><c:title>`)."},CategoryAxisTitleRotationDeg:{type:"number",description:'Rotation of the category-axis title, in degrees clockwise. Maps\nto `<c:catAx><c:title><c:tx><c:rich><a:bodyPr rot="N"/>` (the OOXML\nvalue is in 60000ths of a degree, but the API surface uses plain\ndegrees). Omit to inherit the default (`0`).'},CategoryAxisTitleStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the category-axis title (same `<a:rPr>` shape as `titleStyle`)."},CategoryGroupLevels:{type:"array",items:{type:"array",items:{type:"string"}},description:"Outer levels of a multi-level category axis (`<c:multiLvlStrRef>`),\nordered from the level next to `categories` outward. Each level has\none entry per category; an empty string continues the previous\ngroup, so `['2024', '', '', '', '2025', '', '', '']` groups eight\nquarters into two years."},ChartAreaFill:{type:"string",description:'Chart-area background fill \u2014 `<c:chartSpace><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. Renderers can use this as the outer card\ncolor instead of the hard-coded white.'},ChartAreaStrokeColor:{type:"string",description:"Chart-area outline color from `<c:chartSpace><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. Overrides the renderer's default\n`#E5E7EB` card border."},ChartAxisScaling:{type:"object",properties:{min:{type:"number"},max:{type:"number"},majorUnit:{$ref:"#/$defs/MajorUnit"},minorUnit:{$ref:"#/$defs/MinorUnit"},numberFormat:{$ref:"#/$defs/NumberFormat"},logBase:{$ref:"#/$defs/LogBase"},displayUnits:{$ref:"#/$defs/DisplayUnits"},displayUnitsLabel:{$ref:"#/$defs/DisplayUnitsLabel"}},additionalProperties:!1},ChartDataLabels:{type:"object",properties:{showValue:{type:"boolean",description:"Numeric value of each data point."},showCategory:{type:"boolean",description:"Category label of each data point."},showSeriesName:{type:"boolean",description:"Series name on each data point."},showPercent:{type:"boolean",description:"Percentage of total (for pie / doughnut)."},numberFormat:{type:"string",description:'Number-format code from `<c:dLbls><c:numFmt formatCode="\u2026"/>`. When\nset, value labels are projected through this spreadsheet-style format\n(same subset the value axis honors: `"0%"`, `"#,##0"`, `"$#,##0"`,\n`"0.00"`). Independent of `ChartAxisScaling.numberFormat`.'},position:{type:"string",enum:["ctr","inEnd","outEnd","inBase","t","b","l","r","bestFit"],description:'Position of the label relative to its data point \u2014 from\n`<c:dLbls><c:dLblPos val="\u2026"/>`.'},separator:{type:"string",description:'Separator between concatenated label parts when more than one of\n`showValue` / `showCategory` / `showSeriesName` / `showPercent` is\nset. Read from `<c:dLbls><c:separator>\u2026</c:separator>` (a\nleaf-text-only element). Common values: `" "` (default), `", "`,\n`"\\n"`, `"; "`.'},textStyle:{$ref:"#/$defs/ChartTextStyle",description:"Default-run text style for the labels \u2014 projected from\n`<c:dLbls><c:txPr>\u2026<a:defRPr/>\u2026</c:txPr>`. Applies to whichever\nlabel parts are turned on by the `show*` toggles. Independent of\nthe chart-title style and the axis-label style."},showLeaderLines:{type:"boolean",description:'Leader lines between a label and its data point\n(`<c:dLbls><c:showLeaderLines val="\u2026"/>`). Omitted = the\napplication default (shown). Series- and chart-level only: a\nper-point `<c:dLbl>` has no such element, so `pointDataLabels`\nignores it on write and never reads it.'},showBubbleSize:{type:"boolean",description:"Bubble size of each data point (`<c:showBubbleSize>`); bubble charts only."},showLegendKey:{type:"boolean",description:"Legend key swatch next to each label (`<c:showLegendKey>`)."},fillColor:{type:"string",description:"Label background fill as `#RRGGBB` (`<c:spPr><a:solidFill>`)."},text:{type:"string",description:"Literal label text replacing the generated one (`<c:dLbl><c:tx>\n<c:rich>`) \u2014 how a scatter point gets a name. Per-point only: the\nseries- and chart-level `<c:dLbls>` have no `<c:tx>`, so it is ignored\nthere on write and never read."}},required:["showValue","showCategory","showSeriesName","showPercent"],additionalProperties:!1},ChartDataTable:{type:"object",properties:{showHorizontalBorder:{type:"boolean"},showVerticalBorder:{type:"boolean"},showOutline:{type:"boolean"},showKeys:{type:"boolean",description:"Legend keys next to the series names."},textStyle:{$ref:"#/$defs/ChartTextStyle"}},additionalProperties:!1},ChartDateAxis:{type:"object",properties:{baseTimeUnit:{$ref:"#/$defs/ChartTimeUnit"},majorUnit:{type:"number"},majorTimeUnit:{$ref:"#/$defs/ChartTimeUnit"},minorUnit:{type:"number"},minorTimeUnit:{$ref:"#/$defs/ChartTimeUnit"}},additionalProperties:!1},ChartErrorBars:{type:"object",properties:{barType:{type:"string",enum:["both","plus","minus"],description:"Which side of the point gets a bar (`<c:errBarType>`)."},amount:{anyOf:[{type:"object",properties:{type:{type:"string",enum:["fixedVal","percentage","stdDev"]},value:{type:"number"}},required:["type","value"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"stdErr"}},required:["type"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"cust"},plus:{type:"array",items:{type:["null","number"]},description:"Per-point positive amounts (`<c:plus><c:numLit>`)."},minus:{type:"array",items:{type:["null","number"]},description:"Per-point negative amounts (`<c:minus><c:numLit>`)."}},required:["type"],additionalProperties:!1}]},noEndCap:{type:"boolean",description:'Drop the T-shaped end caps (`<c:noEndCap val="1"/>`).'},color:{type:"string",description:"Bar stroke color as `#RRGGBB`."},lineWidthEmu:{type:"number",description:"Bar stroke width in EMU."}},required:["barType","amount"],additionalProperties:!1},ChartGrouping:{type:"string",enum:["clustered","stacked","percentStacked","standard"]},ChartManualLayout:{type:"object",properties:{x:{type:"number"},y:{type:"number"},w:{type:"number"},h:{type:"number"},target:{type:"string",enum:["inner","outer"],description:"Plot area only: whether the box bounds the plot alone (`inner`) or the\nplot plus its tick labels and axis titles (`outer`, the default)."}},required:["x","y","w","h"],additionalProperties:!1},ChartSecondaryValueAxis:{type:"object",properties:{scaling:{$ref:"#/$defs/ChartAxisScaling"},title:{type:"string"},titleStyle:{$ref:"#/$defs/ChartTextStyle"},labelStyle:{$ref:"#/$defs/ChartTextStyle"},majorGridlines:{type:"boolean"},majorGridlineColor:{type:"string"},majorGridlineWidthEmu:{type:"number",description:"Major gridline width in EMU, the mirror of `ChartSpec.valueAxisMajorGridlineWidthEmu`."},lineColor:{type:"string"},lineWidthEmu:{type:"number",description:"Axis line width in EMU, the mirror of `ChartSpec.valueAxisLineWidthEmu`."},majorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Major tick marks; default `'out'`."},minorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Minor tick marks; default `'none'`."},tickLabelPos:{type:"string",enum:["none","low","high","nextTo"],description:"Tick-label position, the mirror of `ChartSpec.valueAxisTickLabelPos`."},crossBetween:{type:"string",enum:["between","midCat"]},min:{type:"number"},max:{type:"number"},majorUnit:{$ref:"#/$defs/MajorUnit"},minorUnit:{$ref:"#/$defs/MinorUnit"},numberFormat:{$ref:"#/$defs/NumberFormat"},logBase:{$ref:"#/$defs/LogBase"},displayUnits:{$ref:"#/$defs/DisplayUnits"},displayUnitsLabel:{$ref:"#/$defs/DisplayUnitsLabel"}},additionalProperties:!1},ChartSeriesAxis:{type:"object",properties:{hidden:{type:"boolean"},title:{type:"string"},titleStyle:{$ref:"#/$defs/ChartTextStyle"},labelStyle:{$ref:"#/$defs/ChartTextStyle"},majorGridlines:{type:"boolean"},orientation:{type:"string",enum:["minMax","maxMin"]},tickLabelPos:{type:"string",enum:["none","low","high","nextTo"]},tickLabelSkip:{type:"number"},lineColor:{type:"string"}},additionalProperties:!1},ChartStyle:{type:"number",description:`The reference desktop app's built-in chart-style preset
|
|
29
29
|
(\`<c:chartSpace><c:style val="N"/>\`), 1\u201348. Encodes a curated combo
|
|
30
30
|
of theme accent colors, gradients, effects, and font sizes that
|
|
31
31
|
the reference desktop app applies when the user picks a chart style from the
|
|
@@ -35,7 +35,7 @@ set alongside latin so a Japanese / CJK family (e.g. \`'Yu Gothic'\`)
|
|
|
35
35
|
renders the labels instead of the renderer's latin-only fallback.
|
|
36
36
|
Mirrors the latin/ea pairing the reference desktop app emits for CJK chart fonts.`},fontComplexScript:{type:"string",description:'Complex-script font face \u2014 `<a:rPr><a:cs typeface="\u2026"/>`. Written only\nwhen set: `font` fills the latin and east-asian slots and never the\ncomplex-script one, so a chart that mixes Arabic / Hebrew / Thai labels\nhas to name the face here as well.'},sizePt:{type:"number",description:'Font size in points. From `<a:rPr sz="N"/>` where N is in 100ths of a pt.'},bold:{type:"boolean",description:'Bold flag from `<a:rPr b="1"/>`.'},italic:{type:"boolean",description:'Italic flag from `<a:rPr i="1"/>`.'},color:{type:"string",description:"Fill color as `#RRGGBB` from `<a:rPr><a:solidFill><a:srgbClr/></a:solidFill>`."}},additionalProperties:!1},ChartTimeUnit:{type:"string",enum:["days","months","years"]},ChartTrendline:{type:"object",properties:{name:{type:"string",description:`Optional custom label for the trendline (\`<c:trendline><c:name>\u2026\`).
|
|
37
37
|
Defaults to the reference desktop app's auto-generated label
|
|
38
|
-
(e.g. "Linear (X)" / "MA(5) (X)") when omitted.`},type:{type:"string",enum:["linear","exp","log","poly","power","movingAvg"],description:"Regression type \u2014 linear / exp / log / poly / power / movingAvg."},forward:{type:"number",description:'Forward extension (`<c:forward val="N"/>`) \u2014 the trendline runs N\ndata-point periods past the last point. Used to project future\nvalues from the regression line.'},backward:{type:"number",description:'Backward extension (`<c:backward val="N"/>`) \u2014 the trendline runs N\ndata-point periods before the first point.'},period:{type:"number",description:"Optional moving-average period (only meaningful for type='movingAvg')."},order:{type:"number",description:"Polynomial order (only meaningful for type='poly')."},color:{type:"string",description:"Override stroke color; defaults to the series color."},displayEquation:{type:"boolean",description:'Show the regression equation next to the trendline\n(`<c:dispEq val="1"/>`). Defaults to `false`.'},displayRSquared:{type:"boolean",description:'Show the R\xB2 coefficient next to the trendline\n(`<c:dispRSqr val="1"/>`). Defaults to `false`.'}},required:["type"],additionalProperties:!1},ChartUpDownBars:{type:"object",properties:{gapWidthPct:{type:"number",description:"Bar width gap, 0..500 percent (`<c:gapWidth>`); the reference desktop app's default is 150."},upColor:{type:"string",description:"Fill of the rising bars as `#RRGGBB` (`<c:upBars>`)."},downColor:{type:"string",description:"Fill of the falling bars as `#RRGGBB` (`<c:downBars>`)."}},additionalProperties:!1},ChartView3D:{type:"object",properties:{rotX:{type:"number",description:"Elevation in degrees, -90..90 (`<c:rotX>`)."},rotY:{type:"number",description:"Rotation about the vertical axis in degrees, 0..360 (`<c:rotY>`)."},rightAngleAxes:{type:"boolean",description:"Right-angle axes (`<c:rAngAx>`): an oblique projection that ignores\n`perspective`. The reference desktop app's default for bar / column / line / area."},perspective:{type:"number",description:"Field of view, 0..240 (`<c:perspective>`); the reference desktop app's default is 30."},depthPercent:{type:"number",description:"Depth as a percent of the chart width, 20..2000 (`<c:depthPercent>`)."},heightPercent:{type:"number",description:"Height as a percent of the chart width, 5..500 (`<c:hPercent>`)."}},additionalProperties:!1},Color:{type:"string",description:"Optional `#RRGGBB` fill override. Defaults to the theme's accent palette."},ComboChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"},chartKind:{type:"string",enum:["bar","column","line","area"]},secondaryAxis:{type:"boolean"}},required:["name","values"],additionalProperties:!1},DataLabels:{$ref:"#/$defs/ChartDataLabels",description:"Optional chart-level data-label toggles."},DataLabels2:{$ref:"#/$defs/ChartDataLabels",description:"Per-series data-label toggle overrides. Same shape as the chart-level\n`ChartSpec.dataLabels`; overrides win when present. Read from\n`<c:ser><c:dLbls>`."},DataTable:{$ref:"#/$defs/ChartDataTable",description:"Data table under the plot area. Rejected for the axis-less kinds."},Date1904:{type:"boolean",description:'`<c:chartSpace><c:date1904 val="\u2026"/>` \u2014 the spreadsheet date-system flag.\n`false` (the default) uses the 1900-epoch; `true` uses 1904.\nSurface for parity; renderers don\'t act on it yet.'},DispBlanksAs:{type:"string",enum:["gap","zero","span"],description:"`<c:dispBlanksAs val=\"\u2026\"/>` \u2014 how line / area renderers should\ntreat `null` values in series:\n\n - `'gap'` \u2014 leave a gap (the default)\n - `'zero'` \u2014 substitute zero\n - `'span'` \u2014 connect the surrounding points across the gap"},DropLines:{type:"boolean",description:"Drop lines (`<c:dropLines>`) \u2014 vertical guide lines from each data\npoint down to the value axis. Common on line / area charts."},Emu:{type:"integer",description:"A length in EMU: 914400 per inch, 360000 per cm, 12700 per point."},ErrorBars:{$ref:"#/$defs/ChartErrorBars",description:'Error bars along the value direction (`<c:errBars>`; `<c:errDir\nval="y"/>` on scatter / bubble). Valid on bar / column / line / area /\nscatter / bubble series; rejected elsewhere, where CT_*Ser has no\n`errBars` child.'},FillOpacity:{type:"number",description:'Opacity of the series fill, `0` (transparent) to `1` (opaque) \u2014\n`<a:srgbClr><a:alpha val="\u2026"/>` on the series\' `<a:solidFill>`. Applies\nto `color` and to every `pointColors` override. Overlapping area,\nradar and bubble series are the usual reason to set it.'},FirstSliceAngleDeg:{type:"number",description:`Pie / doughnut: angle (in degrees, 0\u2013360) at which the first slice
|
|
38
|
+
(e.g. "Linear (X)" / "MA(5) (X)") when omitted.`},type:{type:"string",enum:["linear","exp","log","poly","power","movingAvg"],description:"Regression type \u2014 linear / exp / log / poly / power / movingAvg."},forward:{type:"number",description:'Forward extension (`<c:forward val="N"/>`) \u2014 the trendline runs N\ndata-point periods past the last point. Used to project future\nvalues from the regression line.'},backward:{type:"number",description:'Backward extension (`<c:backward val="N"/>`) \u2014 the trendline runs N\ndata-point periods before the first point.'},period:{type:"number",description:"Optional moving-average period (only meaningful for type='movingAvg')."},order:{type:"number",description:"Polynomial order (only meaningful for type='poly')."},color:{type:"string",description:"Override stroke color; defaults to the series color."},displayEquation:{type:"boolean",description:'Show the regression equation next to the trendline\n(`<c:dispEq val="1"/>`). Defaults to `false`.'},displayRSquared:{type:"boolean",description:'Show the R\xB2 coefficient next to the trendline\n(`<c:dispRSqr val="1"/>`). Defaults to `false`.'}},required:["type"],additionalProperties:!1},ChartUpDownBars:{type:"object",properties:{gapWidthPct:{type:"number",description:"Bar width gap, 0..500 percent (`<c:gapWidth>`); the reference desktop app's default is 150."},upColor:{type:"string",description:"Fill of the rising bars as `#RRGGBB` (`<c:upBars>`)."},downColor:{type:"string",description:"Fill of the falling bars as `#RRGGBB` (`<c:downBars>`)."}},additionalProperties:!1},ChartView3D:{type:"object",properties:{rotX:{type:"number",description:"Elevation in degrees, -90..90 (`<c:rotX>`)."},rotY:{type:"number",description:"Rotation about the vertical axis in degrees, 0..360 (`<c:rotY>`)."},rightAngleAxes:{type:"boolean",description:"Right-angle axes (`<c:rAngAx>`): an oblique projection that ignores\n`perspective`. The reference desktop app's default for bar / column / line / area."},perspective:{type:"number",description:"Field of view, 0..240 (`<c:perspective>`); the reference desktop app's default is 30."},depthPercent:{type:"number",description:"Depth as a percent of the chart width, 20..2000 (`<c:depthPercent>`)."},heightPercent:{type:"number",description:"Height as a percent of the chart width, 5..500 (`<c:hPercent>`)."}},additionalProperties:!1},Color:{type:"string",description:"Optional `#RRGGBB` fill override. Defaults to the theme's accent palette."},ComboChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"},chartKind:{type:"string",enum:["bar","column","line","area"]},secondaryAxis:{type:"boolean"}},required:["name","values"],additionalProperties:!1},DataLabels:{$ref:"#/$defs/ChartDataLabels",description:"Optional chart-level data-label toggles."},DataLabels2:{$ref:"#/$defs/ChartDataLabels",description:"Per-series data-label toggle overrides. Same shape as the chart-level\n`ChartSpec.dataLabels`; overrides win when present. Read from\n`<c:ser><c:dLbls>`."},DataTable:{$ref:"#/$defs/ChartDataTable",description:"Data table under the plot area. Rejected for the axis-less kinds."},Date1904:{type:"boolean",description:'`<c:chartSpace><c:date1904 val="\u2026"/>` \u2014 the spreadsheet date-system flag.\n`false` (the default) uses the 1900-epoch; `true` uses 1904.\nSurface for parity; renderers don\'t act on it yet.'},DispBlanksAs:{type:"string",enum:["gap","zero","span"],description:"`<c:dispBlanksAs val=\"\u2026\"/>` \u2014 how line / area renderers should\ntreat `null` values in series:\n\n - `'gap'` \u2014 leave a gap (the default)\n - `'zero'` \u2014 substitute zero\n - `'span'` \u2014 connect the surrounding points across the gap"},DisplayUnits:{type:"string",enum:["hundreds","thousands","tenThousands","hundredThousands","millions","tenMillions","hundredMillions","billions","trillions"],description:"Authored display-units scale from `<c:dispUnits><c:builtInUnit val=\"\u2026\"/>`.\nToken values map to divisors:\n\n - `'hundreds'` (100), `'thousands'` (1e3), `'tenThousands'` (1e4),\n `'hundredThousands'` (1e5), `'millions'` (1e6),\n `'tenMillions'` (1e7), `'hundredMillions'` (1e8),\n `'billions'` (1e9), `'trillions'` (1e12)\n\nRenderers divide axis labels by the divisor and may append a unit\nsuffix (\"K\", \"M\", \"B\") for readability."},DisplayUnitsLabel:{type:"boolean",description:'Show the display-units caption next to the axis ("Thousands",\n"Millions", \u2026) \u2014 an empty `<c:dispUnitsLbl/>` under `<c:dispUnits>`.\nOnly meaningful together with `displayUnits`.'},DropLines:{type:"boolean",description:"Drop lines (`<c:dropLines>`) \u2014 vertical guide lines from each data\npoint down to the value axis. Common on line / area charts."},Emu:{type:"integer",description:"A length in EMU: 914400 per inch, 360000 per cm, 12700 per point."},ErrorBars:{$ref:"#/$defs/ChartErrorBars",description:'Error bars along the value direction (`<c:errBars>`; `<c:errDir\nval="y"/>` on scatter / bubble). Valid on bar / column / line / area /\nscatter / bubble series; rejected elsewhere, where CT_*Ser has no\n`errBars` child.'},FillOpacity:{type:"number",description:'Opacity of the series fill, `0` (transparent) to `1` (opaque) \u2014\n`<a:srgbClr><a:alpha val="\u2026"/>` on the series\' `<a:solidFill>`. Applies\nto `color` and to every `pointColors` override. Overlapping area,\nradar and bubble series are the usual reason to set it.'},FirstSliceAngleDeg:{type:"number",description:`Pie / doughnut: angle (in degrees, 0\u2013360) at which the first slice
|
|
39
39
|
starts, measured clockwise from 12 o'clock. Mirrors
|
|
40
40
|
\`<c:firstSliceAng val="\u2026"/>\`. Default 0 = start at the top.`},GapDepthPct:{type:"number",description:"Depth gap between the series rows of a 3-D bar / column / line / area\nchart, 0..500 percent (`<c:gapDepth>`). Requires `view3D`."},GapWidthPct:{type:"number",description:'Gap between adjacent bar groups in `<c:gapWidth val="N"/>` units\n(0..500, percent of bar width). Default 150 (= 1.5\xD7) in the reference desktop app.'},Grouping:{$ref:"#/$defs/ChartGrouping",description:"Bar / column / area grouping mode. Absent for line / pie."},HiLowLines:{type:"boolean",description:"High-low lines (`<c:hiLowLines>`) \u2014 vertical lines spanning the\nhighest and lowest series value at each category. Used by stock\ncharts and side-by-side line charts."},InvertIfNegative:{type:"boolean",description:'Invert the series color for negative values (bar / column charts).\nMirrors `<c:ser><c:invertIfNegative val="1"/>`. Renderers typically\npaint the negative bars in the inverted shade of the series color.'},Language:{type:"string",description:"Language code for the chart's number / date formatters\n(`<c:chartSpace><c:lang val=\"\u2026\"/>`). The reference desktop app emits the user's\nAuthoring app UI language (e.g. `'en-US'`, `'ja-JP'`). Carried for\nround-trip parity; renderers in"},Legend:{type:"object",properties:{position:{anyOf:[{type:"string",enum:["t","b","l","r","tr"]},{type:"null"}]},overlay:{type:"boolean",description:"When `true`, legend overlays the plot area instead of taking a strip."},layout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the legend box; `target` does not apply."},textStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the legend's text. From `<c:legend><c:txPr>`'s\nfirst `<a:p><a:pPr><a:defRPr>` (or `<a:r><a:rPr>` as fallback). Same\nshape as `titleStyle`."},hiddenIndices:{type:"array",items:{type:"number"},description:`Series indices that the legend hides via \`<c:legend><c:legendEntry>
|
|
41
41
|
<c:idx val="N"/><c:delete val="1"/></c:legendEntry>\`. Renderers
|
|
@@ -43,7 +43,7 @@ filter them from the legend list while still plotting them.
|
|
|
43
43
|
Common use: keep a trendline series in the data but drop its
|
|
44
44
|
legend entry.`}},required:["position"],additionalProperties:!1,description:"Optional legend configuration. `position` mirrors\n`<c:legend><c:legendPos val=\"\u2026\"/>` \u2014 `'r'` (right) is the default,\n`'t'`, `'b'`, `'l'`, `'tr'` (top-right) the other tokens. `null`\nfor `position` means no legend at all (the chart explicitly hides\nit). `undefined` overall means the chart didn't author a legend\nelement \u2014 renderers should fall back to their own default."},LineColor:{type:"string",description:"Optional stroke color of the series outline / line\n(`<c:ser><c:spPr><a:ln><a:solidFill>`), as an sRGB hex. Defaults to\n`color`; on a pie / doughnut series it is the border between slices."},LineDash:{type:"string",description:"Optional line dash style token (`<c:ser><c:spPr><a:ln><a:prstDash\nval=\"\u2026\"/>`), e.g. `'dash'`, `'dot'`, `'sysDash'`. Only\nmeaningful for line / area / scatter series."},LineMarkers:{type:"boolean",description:'Whether a line chart draws point markers (`<c:lineChart><c:marker\nval="1"/>`). `true` is the reference desktop app\'s "Line with Markers" subtype;\nabsent / `false` is the plain "Line" subtype (no markers). Only\nmeaningful for `kind: \'line\'`.'},LineWidthEmu:{type:"number",description:`Optional line stroke width in EMU (\`<c:ser><c:spPr><a:ln w="\u2026"/>\`).
|
|
45
45
|
Only meaningful for line / area / scatter series. Default falls
|
|
46
|
-
back to the renderer's own pick.`},MarkerColor:{type:"string",description:"Optional marker fill + outline color (`<c:marker><c:spPr>`), as an sRGB\nhex. Defaults to `color`. The builder always writes it for line /\nscatter / radar series, because the reference desktop app paints a marker without\n`<c:spPr>` in the theme's automatic color instead of the series color."},MarkerLineColor:{type:"string",description:"Optional marker outline color (`<c:marker><c:spPr><a:ln>`), as an sRGB\nhex. Defaults to `markerColor`, then `color`."},MarkerSizePt:{type:"number",description:'Marker size in points (`<c:marker><c:size val="N"/>`). The reference desktop app\ndefault ~5. Only meaningful when `markerSymbol` isn\'t `none`.'},MarkerSymbol:{anyOf:[{$ref:"#/$defs/TextWrap"},{type:"string",enum:["circle","diamond","plus","x","dot","dash","triangle","picture","auto","star"]}],description:"Optional marker style for line / scatter series (`<c:ser><c:marker>`).\n`none` hides the markers; the others render the matching glyph at\neach data point. Defaults to `auto`, which renderers map to a small\nfilled circle."},Name:{type:"string",description:"Series label rendered in the legend."},OverlapPct:{type:"number",description:'Overlap of adjacent bars within a category in `<c:overlap val="N"/>`\npercent (-100..100). Negative pulls bars apart, positive overlaps.\nDefaults to 0 (clustered) / 100 (stacked).'},PlainChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"}},required:["name","values"],additionalProperties:!1},PlotAreaFill:{type:"string",description:'Plot-area background fill \u2014 `<c:plotArea><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. `null` for no fill / unsupported fill kind.'},PlotAreaLayout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the plot area."},PlotAreaStrokeColor:{type:"string",description:"Plot-area outline color from `<c:plotArea><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. `undefined` means no outline."},PlotVisibleCellsOnly:{type:"boolean",description:'When `false`, plot data from hidden cells in the embedded workbook\n\u2014 maps to `<c:plotVisOnly val="0"/>`. The reference desktop app\'s default is\n`true` (only plot visible cells), so omitting this field emits\n`val="1"` to stay round-trip-safe with files the reference desktop app authored.'},PointColors:{type:"array",items:{type:["null","string"]},description:`Optional per-data-point color overrides, indexed by point index
|
|
46
|
+
back to the renderer's own pick.`},LogBase:{type:"number",description:'Logarithmic base for the axis from `<c:scaling><c:logBase val="N"/>`.\nTypical values are `2`, `10`, `Math.E`. When set, the renderer\nprojects values through `Math.log(v) / Math.log(logBase)` before\nmapping to plot coordinates. Linear when omitted.'},MajorUnit:{type:"number",description:'Major tick spacing (`<c:majorUnit val="N"/>`).'},MarkerColor:{type:"string",description:"Optional marker fill + outline color (`<c:marker><c:spPr>`), as an sRGB\nhex. Defaults to `color`. The builder always writes it for line /\nscatter / radar series, because the reference desktop app paints a marker without\n`<c:spPr>` in the theme's automatic color instead of the series color."},MarkerLineColor:{type:"string",description:"Optional marker outline color (`<c:marker><c:spPr><a:ln>`), as an sRGB\nhex. Defaults to `markerColor`, then `color`."},MarkerSizePt:{type:"number",description:'Marker size in points (`<c:marker><c:size val="N"/>`). The reference desktop app\ndefault ~5. Only meaningful when `markerSymbol` isn\'t `none`.'},MarkerSymbol:{anyOf:[{$ref:"#/$defs/TextWrap"},{type:"string",enum:["circle","diamond","plus","x","dot","dash","triangle","picture","auto","star"]}],description:"Optional marker style for line / scatter series (`<c:ser><c:marker>`).\n`none` hides the markers; the others render the matching glyph at\neach data point. Defaults to `auto`, which renderers map to a small\nfilled circle."},MinorUnit:{type:"number",description:'Minor tick spacing (`<c:minorUnit val="N"/>`).'},Name:{type:"string",description:"Series label rendered in the legend."},NumberFormat:{type:"string",description:'Number-format code from `<c:numFmt formatCode="\u2026"/>`. Common\nvalues: `"0%"`, `"0.0%"`, `"#,##0"`, `"$#,##0"`, `"yyyy-mm-dd"`.\nRenderers project a subset of spreadsheet number formats to label text.'},OverlapPct:{type:"number",description:'Overlap of adjacent bars within a category in `<c:overlap val="N"/>`\npercent (-100..100). Negative pulls bars apart, positive overlaps.\nDefaults to 0 (clustered) / 100 (stacked).'},PlainChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"}},required:["name","values"],additionalProperties:!1},PlotAreaFill:{type:"string",description:'Plot-area background fill \u2014 `<c:plotArea><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. `null` for no fill / unsupported fill kind.'},PlotAreaLayout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the plot area."},PlotAreaStrokeColor:{type:"string",description:"Plot-area outline color from `<c:plotArea><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. `undefined` means no outline."},PlotVisibleCellsOnly:{type:"boolean",description:'When `false`, plot data from hidden cells in the embedded workbook\n\u2014 maps to `<c:plotVisOnly val="0"/>`. The reference desktop app\'s default is\n`true` (only plot visible cells), so omitting this field emits\n`val="1"` to stay round-trip-safe with files the reference desktop app authored.'},PointColors:{type:"array",items:{type:["null","string"]},description:`Optional per-data-point color overrides, indexed by point index
|
|
47
47
|
(\`<c:dPt><c:idx val="N"/><c:spPr><a:solidFill>\u2026\`). Sparse \u2014 only
|
|
48
48
|
the indices that author an override appear. Pie / doughnut decks
|
|
49
49
|
almost always emit one of these per slice to break out of the
|
|
@@ -212,7 +212,7 @@ and use these as horizontal guide lines per category band.`},CategoryAxisMajorTi
|
|
|
212
212
|
Width of the category-axis minor gridlines.`},CategoryAxisMinorGridlines:{type:"boolean",description:"Companion `<c:minorGridlines/>` on the category axis."},CategoryAxisMinorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Minor-tick mark mode on the category axis (`<c:catAx><c:minorTickMark>`); default `'none'`."},CategoryAxisNoMultiLevelLabel:{type:"boolean",description:'Toggle multi-level (hierarchical) category labels \u2014\n`<c:catAx><c:noMultiLvlLbl val="0|1"/>`. The reference desktop app defaults to\n`0` (multi-level labels stack). Set to `true` to flatten\nhierarchical categories into a single row.'},CategoryAxisNumberFormat:{type:"string",description:'Number-format code for the category-axis tick labels \u2014\n`<c:catAx><c:numFmt formatCode="\u2026"/>`. Most useful on date-style\ncategories (`"mm/dd/yyyy"`, `"mmm"`, etc.) but accepts any spreadsheet\nformat string. Independent of `valueAxis.numberFormat` (which\ntargets the value axis).'},CategoryAxisOrientation:{type:"string",enum:["minMax","maxMin"],description:"Category-axis order \u2014 `'minMax'` (the data's natural order) or\n`'maxMin'` (reversed). For bar charts the reference desktop app typically emits\n`maxMin` so the first category sits at the top instead of the\nbottom; honour the authored value when present."},CategoryAxisScaling:{$ref:"#/$defs/ChartAxisScaling",description:"Scaling of the horizontal axis where it is numeric: the x value axis\nof `scatter` / `bubble` charts (every field applies) and a date axis\n(`min` / `max` only, as date serials). Rejected on a text category\naxis, which has no scale to set.\nDate-serial range of the axis; only `min` / `max` apply."},CategoryAxisScaling2:{$ref:"#/$defs/ChartAxisScaling",description:"Scaling of the horizontal axis where it is numeric: the x value axis\nof `scatter` / `bubble` charts (every field applies) and a date axis\n(`min` / `max` only, as date serials). Rejected on a text category\naxis, which has no scale to set."},CategoryAxisTickLabelPos:{type:"string",enum:["none","low","high","nextTo"],description:'Category-axis tick label position (`<c:catAx><c:tickLblPos val="\u2026"/>`):\n - `none` hides labels but keeps the axis line\n - `low` / `high` puts them at the start / end (rare)\n - `nextTo` (default) is the standard position next to the axis'},CategoryAxisTickLabelSkip:{type:"number",description:'Category-axis tick label skip step (`<c:catAx><c:tickLblSkip val="N"/>`):\nrender every Nth category label. Commonly 2 / 5 / 10 on dense\ntime-series charts to keep labels from overlapping.'},CategoryAxisTickMarkSkip:{type:"number",description:`Category-axis tick *mark* skip (\`<c:catAx><c:tickMarkSkip val="N"/>\`):
|
|
213
213
|
draw every Nth tick mark independently of the label-skip stride.
|
|
214
214
|
Useful when you want fewer label collisions but the same dense
|
|
215
|
-
tick lattice; defaults to 1 (every tick).`},CategoryAxisTitle:{type:"string",description:"Optional axis title text (`<c:catAx><c:title>` / `<c:valAx><c:title>`)."},CategoryAxisTitleRotationDeg:{type:"number",description:'Rotation of the category-axis title, in degrees clockwise. Maps\nto `<c:catAx><c:title><c:tx><c:rich><a:bodyPr rot="N"/>` (the OOXML\nvalue is in 60000ths of a degree, but the API surface uses plain\ndegrees). Omit to inherit the default (`0`).'},CategoryAxisTitleStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the category-axis title (same `<a:rPr>` shape as `titleStyle`)."},CategoryGroupLevels:{type:"array",items:{type:"array",items:{type:"string"}},description:"Outer levels of a multi-level category axis (`<c:multiLvlStrRef>`),\nordered from the level next to `categories` outward. Each level has\none entry per category; an empty string continues the previous\ngroup, so `['2024', '', '', '', '2025', '', '', '']` groups eight\nquarters into two years."},ChartAreaFill:{type:"string",description:'Chart-area background fill \u2014 `<c:chartSpace><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. Renderers can use this as the outer card\ncolor instead of the hard-coded white.'},ChartAreaStrokeColor:{type:"string",description:"Chart-area outline color from `<c:chartSpace><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. Overrides the renderer's default\n`#E5E7EB` card border."},ChartAxisScaling:{type:"object",properties:{min:{type:"number"},max:{type:"number"},majorUnit:{
|
|
215
|
+
tick lattice; defaults to 1 (every tick).`},CategoryAxisTitle:{type:"string",description:"Optional axis title text (`<c:catAx><c:title>` / `<c:valAx><c:title>`)."},CategoryAxisTitleRotationDeg:{type:"number",description:'Rotation of the category-axis title, in degrees clockwise. Maps\nto `<c:catAx><c:title><c:tx><c:rich><a:bodyPr rot="N"/>` (the OOXML\nvalue is in 60000ths of a degree, but the API surface uses plain\ndegrees). Omit to inherit the default (`0`).'},CategoryAxisTitleStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the category-axis title (same `<a:rPr>` shape as `titleStyle`)."},CategoryGroupLevels:{type:"array",items:{type:"array",items:{type:"string"}},description:"Outer levels of a multi-level category axis (`<c:multiLvlStrRef>`),\nordered from the level next to `categories` outward. Each level has\none entry per category; an empty string continues the previous\ngroup, so `['2024', '', '', '', '2025', '', '', '']` groups eight\nquarters into two years."},ChartAreaFill:{type:"string",description:'Chart-area background fill \u2014 `<c:chartSpace><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. Renderers can use this as the outer card\ncolor instead of the hard-coded white.'},ChartAreaStrokeColor:{type:"string",description:"Chart-area outline color from `<c:chartSpace><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. Overrides the renderer's default\n`#E5E7EB` card border."},ChartAxisScaling:{type:"object",properties:{min:{type:"number"},max:{type:"number"},majorUnit:{$ref:"#/$defs/MajorUnit"},minorUnit:{$ref:"#/$defs/MinorUnit"},numberFormat:{$ref:"#/$defs/NumberFormat"},logBase:{$ref:"#/$defs/LogBase"},displayUnits:{$ref:"#/$defs/DisplayUnits"},displayUnitsLabel:{$ref:"#/$defs/DisplayUnitsLabel"}},additionalProperties:!1},ChartDataLabels:{type:"object",properties:{showValue:{type:"boolean",description:"Numeric value of each data point."},showCategory:{type:"boolean",description:"Category label of each data point."},showSeriesName:{type:"boolean",description:"Series name on each data point."},showPercent:{type:"boolean",description:"Percentage of total (for pie / doughnut)."},numberFormat:{type:"string",description:'Number-format code from `<c:dLbls><c:numFmt formatCode="\u2026"/>`. When\nset, value labels are projected through this spreadsheet-style format\n(same subset the value axis honors: `"0%"`, `"#,##0"`, `"$#,##0"`,\n`"0.00"`). Independent of `ChartAxisScaling.numberFormat`.'},position:{type:"string",enum:["ctr","inEnd","outEnd","inBase","t","b","l","r","bestFit"],description:'Position of the label relative to its data point \u2014 from\n`<c:dLbls><c:dLblPos val="\u2026"/>`.'},separator:{type:"string",description:'Separator between concatenated label parts when more than one of\n`showValue` / `showCategory` / `showSeriesName` / `showPercent` is\nset. Read from `<c:dLbls><c:separator>\u2026</c:separator>` (a\nleaf-text-only element). Common values: `" "` (default), `", "`,\n`"\\n"`, `"; "`.'},textStyle:{$ref:"#/$defs/ChartTextStyle",description:"Default-run text style for the labels \u2014 projected from\n`<c:dLbls><c:txPr>\u2026<a:defRPr/>\u2026</c:txPr>`. Applies to whichever\nlabel parts are turned on by the `show*` toggles. Independent of\nthe chart-title style and the axis-label style."},showLeaderLines:{type:"boolean",description:'Leader lines between a label and its data point\n(`<c:dLbls><c:showLeaderLines val="\u2026"/>`). Omitted = the\napplication default (shown). Series- and chart-level only: a\nper-point `<c:dLbl>` has no such element, so `pointDataLabels`\nignores it on write and never reads it.'},showBubbleSize:{type:"boolean",description:"Bubble size of each data point (`<c:showBubbleSize>`); bubble charts only."},showLegendKey:{type:"boolean",description:"Legend key swatch next to each label (`<c:showLegendKey>`)."},fillColor:{type:"string",description:"Label background fill as `#RRGGBB` (`<c:spPr><a:solidFill>`)."},text:{type:"string",description:"Literal label text replacing the generated one (`<c:dLbl><c:tx>\n<c:rich>`) \u2014 how a scatter point gets a name. Per-point only: the\nseries- and chart-level `<c:dLbls>` have no `<c:tx>`, so it is ignored\nthere on write and never read."}},required:["showValue","showCategory","showSeriesName","showPercent"],additionalProperties:!1},ChartDataTable:{type:"object",properties:{showHorizontalBorder:{type:"boolean"},showVerticalBorder:{type:"boolean"},showOutline:{type:"boolean"},showKeys:{type:"boolean",description:"Legend keys next to the series names."},textStyle:{$ref:"#/$defs/ChartTextStyle"}},additionalProperties:!1},ChartDateAxis:{type:"object",properties:{baseTimeUnit:{$ref:"#/$defs/ChartTimeUnit"},majorUnit:{type:"number"},majorTimeUnit:{$ref:"#/$defs/ChartTimeUnit"},minorUnit:{type:"number"},minorTimeUnit:{$ref:"#/$defs/ChartTimeUnit"}},additionalProperties:!1},ChartErrorBars:{type:"object",properties:{barType:{type:"string",enum:["both","plus","minus"],description:"Which side of the point gets a bar (`<c:errBarType>`)."},amount:{anyOf:[{type:"object",properties:{type:{type:"string",enum:["fixedVal","percentage","stdDev"]},value:{type:"number"}},required:["type","value"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"stdErr"}},required:["type"],additionalProperties:!1},{type:"object",properties:{type:{type:"string",const:"cust"},plus:{type:"array",items:{type:["null","number"]},description:"Per-point positive amounts (`<c:plus><c:numLit>`)."},minus:{type:"array",items:{type:["null","number"]},description:"Per-point negative amounts (`<c:minus><c:numLit>`)."}},required:["type"],additionalProperties:!1}]},noEndCap:{type:"boolean",description:'Drop the T-shaped end caps (`<c:noEndCap val="1"/>`).'},color:{type:"string",description:"Bar stroke color as `#RRGGBB`."},lineWidthEmu:{type:"number",description:"Bar stroke width in EMU."}},required:["barType","amount"],additionalProperties:!1},ChartGrouping:{type:"string",enum:["clustered","stacked","percentStacked","standard"]},ChartManualLayout:{type:"object",properties:{x:{type:"number"},y:{type:"number"},w:{type:"number"},h:{type:"number"},target:{type:"string",enum:["inner","outer"],description:"Plot area only: whether the box bounds the plot alone (`inner`) or the\nplot plus its tick labels and axis titles (`outer`, the default)."}},required:["x","y","w","h"],additionalProperties:!1},ChartRef:{$ref:"#/$defs/ShapeRef",description:"A chart, by the ShapeRef of the graphic frame that holds it."},ChartSecondaryValueAxis:{type:"object",properties:{scaling:{$ref:"#/$defs/ChartAxisScaling"},title:{type:"string"},titleStyle:{$ref:"#/$defs/ChartTextStyle"},labelStyle:{$ref:"#/$defs/ChartTextStyle"},majorGridlines:{type:"boolean"},majorGridlineColor:{type:"string"},majorGridlineWidthEmu:{type:"number",description:"Major gridline width in EMU, the mirror of `ChartSpec.valueAxisMajorGridlineWidthEmu`."},lineColor:{type:"string"},lineWidthEmu:{type:"number",description:"Axis line width in EMU, the mirror of `ChartSpec.valueAxisLineWidthEmu`."},majorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Major tick marks; default `'out'`."},minorTickMark:{anyOf:[{$ref:"#/$defs/AnimationInOut"},{type:"string",enum:["none","cross"]}],description:"Minor tick marks; default `'none'`."},tickLabelPos:{type:"string",enum:["none","low","high","nextTo"],description:"Tick-label position, the mirror of `ChartSpec.valueAxisTickLabelPos`."},crossBetween:{type:"string",enum:["between","midCat"]},min:{type:"number"},max:{type:"number"},majorUnit:{$ref:"#/$defs/MajorUnit"},minorUnit:{$ref:"#/$defs/MinorUnit"},numberFormat:{$ref:"#/$defs/NumberFormat"},logBase:{$ref:"#/$defs/LogBase"},displayUnits:{$ref:"#/$defs/DisplayUnits"},displayUnitsLabel:{$ref:"#/$defs/DisplayUnitsLabel"}},additionalProperties:!1},ChartSeriesAxis:{type:"object",properties:{hidden:{type:"boolean"},title:{type:"string"},titleStyle:{$ref:"#/$defs/ChartTextStyle"},labelStyle:{$ref:"#/$defs/ChartTextStyle"},majorGridlines:{type:"boolean"},orientation:{type:"string",enum:["minMax","maxMin"]},tickLabelPos:{type:"string",enum:["none","low","high","nextTo"]},tickLabelSkip:{type:"number"},lineColor:{type:"string"}},additionalProperties:!1},ChartStyle:{type:"number",description:`The reference desktop app's built-in chart-style preset
|
|
216
216
|
(\`<c:chartSpace><c:style val="N"/>\`), 1\u201348. Encodes a curated combo
|
|
217
217
|
of theme accent colors, gradients, effects, and font sizes that
|
|
218
218
|
the reference desktop app applies when the user picks a chart style from the
|
|
@@ -222,7 +222,7 @@ set alongside latin so a Japanese / CJK family (e.g. \`'Yu Gothic'\`)
|
|
|
222
222
|
renders the labels instead of the renderer's latin-only fallback.
|
|
223
223
|
Mirrors the latin/ea pairing the reference desktop app emits for CJK chart fonts.`},fontComplexScript:{type:"string",description:'Complex-script font face \u2014 `<a:rPr><a:cs typeface="\u2026"/>`. Written only\nwhen set: `font` fills the latin and east-asian slots and never the\ncomplex-script one, so a chart that mixes Arabic / Hebrew / Thai labels\nhas to name the face here as well.'},sizePt:{type:"number",description:'Font size in points. From `<a:rPr sz="N"/>` where N is in 100ths of a pt.'},bold:{type:"boolean",description:'Bold flag from `<a:rPr b="1"/>`.'},italic:{type:"boolean",description:'Italic flag from `<a:rPr i="1"/>`.'},color:{type:"string",description:"Fill color as `#RRGGBB` from `<a:rPr><a:solidFill><a:srgbClr/></a:solidFill>`."}},additionalProperties:!1},ChartTimeUnit:{type:"string",enum:["days","months","years"]},ChartTrendline:{type:"object",properties:{name:{type:"string",description:`Optional custom label for the trendline (\`<c:trendline><c:name>\u2026\`).
|
|
224
224
|
Defaults to the reference desktop app's auto-generated label
|
|
225
|
-
(e.g. "Linear (X)" / "MA(5) (X)") when omitted.`},type:{type:"string",enum:["linear","exp","log","poly","power","movingAvg"],description:"Regression type \u2014 linear / exp / log / poly / power / movingAvg."},forward:{type:"number",description:'Forward extension (`<c:forward val="N"/>`) \u2014 the trendline runs N\ndata-point periods past the last point. Used to project future\nvalues from the regression line.'},backward:{type:"number",description:'Backward extension (`<c:backward val="N"/>`) \u2014 the trendline runs N\ndata-point periods before the first point.'},period:{type:"number",description:"Optional moving-average period (only meaningful for type='movingAvg')."},order:{type:"number",description:"Polynomial order (only meaningful for type='poly')."},color:{type:"string",description:"Override stroke color; defaults to the series color."},displayEquation:{type:"boolean",description:'Show the regression equation next to the trendline\n(`<c:dispEq val="1"/>`). Defaults to `false`.'},displayRSquared:{type:"boolean",description:'Show the R\xB2 coefficient next to the trendline\n(`<c:dispRSqr val="1"/>`). Defaults to `false`.'}},required:["type"],additionalProperties:!1},ChartUpDownBars:{type:"object",properties:{gapWidthPct:{type:"number",description:"Bar width gap, 0..500 percent (`<c:gapWidth>`); the reference desktop app's default is 150."},upColor:{type:"string",description:"Fill of the rising bars as `#RRGGBB` (`<c:upBars>`)."},downColor:{type:"string",description:"Fill of the falling bars as `#RRGGBB` (`<c:downBars>`)."}},additionalProperties:!1},ChartView3D:{type:"object",properties:{rotX:{type:"number",description:"Elevation in degrees, -90..90 (`<c:rotX>`)."},rotY:{type:"number",description:"Rotation about the vertical axis in degrees, 0..360 (`<c:rotY>`)."},rightAngleAxes:{type:"boolean",description:"Right-angle axes (`<c:rAngAx>`): an oblique projection that ignores\n`perspective`. The reference desktop app's default for bar / column / line / area."},perspective:{type:"number",description:"Field of view, 0..240 (`<c:perspective>`); the reference desktop app's default is 30."},depthPercent:{type:"number",description:"Depth as a percent of the chart width, 20..2000 (`<c:depthPercent>`)."},heightPercent:{type:"number",description:"Height as a percent of the chart width, 5..500 (`<c:hPercent>`)."}},additionalProperties:!1},Color:{type:"string",description:"Optional `#RRGGBB` fill override. Defaults to the theme's accent palette."},ComboChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"},chartKind:{type:"string",enum:["bar","column","line","area"]},secondaryAxis:{type:"boolean"}},required:["name","values"],additionalProperties:!1},DataLabels:{$ref:"#/$defs/ChartDataLabels",description:"Optional chart-level data-label toggles."},DataLabels2:{$ref:"#/$defs/ChartDataLabels",description:"Per-series data-label toggle overrides. Same shape as the chart-level\n`ChartSpec.dataLabels`; overrides win when present. Read from\n`<c:ser><c:dLbls>`."},DataTable:{$ref:"#/$defs/ChartDataTable",description:"Data table under the plot area. Rejected for the axis-less kinds."},Date1904:{type:"boolean",description:'`<c:chartSpace><c:date1904 val="\u2026"/>` \u2014 the spreadsheet date-system flag.\n`false` (the default) uses the 1900-epoch; `true` uses 1904.\nSurface for parity; renderers don\'t act on it yet.'},DispBlanksAs:{type:"string",enum:["gap","zero","span"],description:"`<c:dispBlanksAs val=\"\u2026\"/>` \u2014 how line / area renderers should\ntreat `null` values in series:\n\n - `'gap'` \u2014 leave a gap (the default)\n - `'zero'` \u2014 substitute zero\n - `'span'` \u2014 connect the surrounding points across the gap"},DropLines:{type:"boolean",description:"Drop lines (`<c:dropLines>`) \u2014 vertical guide lines from each data\npoint down to the value axis. Common on line / area charts."},ErrorBars:{$ref:"#/$defs/ChartErrorBars",description:'Error bars along the value direction (`<c:errBars>`; `<c:errDir\nval="y"/>` on scatter / bubble). Valid on bar / column / line / area /\nscatter / bubble series; rejected elsewhere, where CT_*Ser has no\n`errBars` child.'},FillOpacity:{type:"number",description:'Opacity of the series fill, `0` (transparent) to `1` (opaque) \u2014\n`<a:srgbClr><a:alpha val="\u2026"/>` on the series\' `<a:solidFill>`. Applies\nto `color` and to every `pointColors` override. Overlapping area,\nradar and bubble series are the usual reason to set it.'},FirstSliceAngleDeg:{type:"number",description:`Pie / doughnut: angle (in degrees, 0\u2013360) at which the first slice
|
|
225
|
+
(e.g. "Linear (X)" / "MA(5) (X)") when omitted.`},type:{type:"string",enum:["linear","exp","log","poly","power","movingAvg"],description:"Regression type \u2014 linear / exp / log / poly / power / movingAvg."},forward:{type:"number",description:'Forward extension (`<c:forward val="N"/>`) \u2014 the trendline runs N\ndata-point periods past the last point. Used to project future\nvalues from the regression line.'},backward:{type:"number",description:'Backward extension (`<c:backward val="N"/>`) \u2014 the trendline runs N\ndata-point periods before the first point.'},period:{type:"number",description:"Optional moving-average period (only meaningful for type='movingAvg')."},order:{type:"number",description:"Polynomial order (only meaningful for type='poly')."},color:{type:"string",description:"Override stroke color; defaults to the series color."},displayEquation:{type:"boolean",description:'Show the regression equation next to the trendline\n(`<c:dispEq val="1"/>`). Defaults to `false`.'},displayRSquared:{type:"boolean",description:'Show the R\xB2 coefficient next to the trendline\n(`<c:dispRSqr val="1"/>`). Defaults to `false`.'}},required:["type"],additionalProperties:!1},ChartUpDownBars:{type:"object",properties:{gapWidthPct:{type:"number",description:"Bar width gap, 0..500 percent (`<c:gapWidth>`); the reference desktop app's default is 150."},upColor:{type:"string",description:"Fill of the rising bars as `#RRGGBB` (`<c:upBars>`)."},downColor:{type:"string",description:"Fill of the falling bars as `#RRGGBB` (`<c:downBars>`)."}},additionalProperties:!1},ChartView3D:{type:"object",properties:{rotX:{type:"number",description:"Elevation in degrees, -90..90 (`<c:rotX>`)."},rotY:{type:"number",description:"Rotation about the vertical axis in degrees, 0..360 (`<c:rotY>`)."},rightAngleAxes:{type:"boolean",description:"Right-angle axes (`<c:rAngAx>`): an oblique projection that ignores\n`perspective`. The reference desktop app's default for bar / column / line / area."},perspective:{type:"number",description:"Field of view, 0..240 (`<c:perspective>`); the reference desktop app's default is 30."},depthPercent:{type:"number",description:"Depth as a percent of the chart width, 20..2000 (`<c:depthPercent>`)."},heightPercent:{type:"number",description:"Height as a percent of the chart width, 5..500 (`<c:hPercent>`)."}},additionalProperties:!1},Color:{type:"string",description:"Optional `#RRGGBB` fill override. Defaults to the theme's accent palette."},ComboChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"},chartKind:{type:"string",enum:["bar","column","line","area"]},secondaryAxis:{type:"boolean"}},required:["name","values"],additionalProperties:!1},DataLabels:{$ref:"#/$defs/ChartDataLabels",description:"Optional chart-level data-label toggles."},DataLabels2:{$ref:"#/$defs/ChartDataLabels",description:"Per-series data-label toggle overrides. Same shape as the chart-level\n`ChartSpec.dataLabels`; overrides win when present. Read from\n`<c:ser><c:dLbls>`."},DataTable:{$ref:"#/$defs/ChartDataTable",description:"Data table under the plot area. Rejected for the axis-less kinds."},Date1904:{type:"boolean",description:'`<c:chartSpace><c:date1904 val="\u2026"/>` \u2014 the spreadsheet date-system flag.\n`false` (the default) uses the 1900-epoch; `true` uses 1904.\nSurface for parity; renderers don\'t act on it yet.'},DispBlanksAs:{type:"string",enum:["gap","zero","span"],description:"`<c:dispBlanksAs val=\"\u2026\"/>` \u2014 how line / area renderers should\ntreat `null` values in series:\n\n - `'gap'` \u2014 leave a gap (the default)\n - `'zero'` \u2014 substitute zero\n - `'span'` \u2014 connect the surrounding points across the gap"},DisplayUnits:{type:"string",enum:["hundreds","thousands","tenThousands","hundredThousands","millions","tenMillions","hundredMillions","billions","trillions"],description:"Authored display-units scale from `<c:dispUnits><c:builtInUnit val=\"\u2026\"/>`.\nToken values map to divisors:\n\n - `'hundreds'` (100), `'thousands'` (1e3), `'tenThousands'` (1e4),\n `'hundredThousands'` (1e5), `'millions'` (1e6),\n `'tenMillions'` (1e7), `'hundredMillions'` (1e8),\n `'billions'` (1e9), `'trillions'` (1e12)\n\nRenderers divide axis labels by the divisor and may append a unit\nsuffix (\"K\", \"M\", \"B\") for readability."},DisplayUnitsLabel:{type:"boolean",description:'Show the display-units caption next to the axis ("Thousands",\n"Millions", \u2026) \u2014 an empty `<c:dispUnitsLbl/>` under `<c:dispUnits>`.\nOnly meaningful together with `displayUnits`.'},DropLines:{type:"boolean",description:"Drop lines (`<c:dropLines>`) \u2014 vertical guide lines from each data\npoint down to the value axis. Common on line / area charts."},ErrorBars:{$ref:"#/$defs/ChartErrorBars",description:'Error bars along the value direction (`<c:errBars>`; `<c:errDir\nval="y"/>` on scatter / bubble). Valid on bar / column / line / area /\nscatter / bubble series; rejected elsewhere, where CT_*Ser has no\n`errBars` child.'},FillOpacity:{type:"number",description:'Opacity of the series fill, `0` (transparent) to `1` (opaque) \u2014\n`<a:srgbClr><a:alpha val="\u2026"/>` on the series\' `<a:solidFill>`. Applies\nto `color` and to every `pointColors` override. Overlapping area,\nradar and bubble series are the usual reason to set it.'},FirstSliceAngleDeg:{type:"number",description:`Pie / doughnut: angle (in degrees, 0\u2013360) at which the first slice
|
|
226
226
|
starts, measured clockwise from 12 o'clock. Mirrors
|
|
227
227
|
\`<c:firstSliceAng val="\u2026"/>\`. Default 0 = start at the top.`},GapDepthPct:{type:"number",description:"Depth gap between the series rows of a 3-D bar / column / line / area\nchart, 0..500 percent (`<c:gapDepth>`). Requires `view3D`."},GapWidthPct:{type:"number",description:'Gap between adjacent bar groups in `<c:gapWidth val="N"/>` units\n(0..500, percent of bar width). Default 150 (= 1.5\xD7) in the reference desktop app.'},Grouping:{$ref:"#/$defs/ChartGrouping",description:"Bar / column / area grouping mode. Absent for line / pie."},HiLowLines:{type:"boolean",description:"High-low lines (`<c:hiLowLines>`) \u2014 vertical lines spanning the\nhighest and lowest series value at each category. Used by stock\ncharts and side-by-side line charts."},InvertIfNegative:{type:"boolean",description:'Invert the series color for negative values (bar / column charts).\nMirrors `<c:ser><c:invertIfNegative val="1"/>`. Renderers typically\npaint the negative bars in the inverted shade of the series color.'},Language:{type:"string",description:"Language code for the chart's number / date formatters\n(`<c:chartSpace><c:lang val=\"\u2026\"/>`). The reference desktop app emits the user's\nAuthoring app UI language (e.g. `'en-US'`, `'ja-JP'`). Carried for\nround-trip parity; renderers in"},Legend:{type:"object",properties:{position:{anyOf:[{type:"string",enum:["t","b","l","r","tr"]},{type:"null"}]},overlay:{type:"boolean",description:"When `true`, legend overlays the plot area instead of taking a strip."},layout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the legend box; `target` does not apply."},textStyle:{$ref:"#/$defs/ChartTextStyle",description:"Authored font / color on the legend's text. From `<c:legend><c:txPr>`'s\nfirst `<a:p><a:pPr><a:defRPr>` (or `<a:r><a:rPr>` as fallback). Same\nshape as `titleStyle`."},hiddenIndices:{type:"array",items:{type:"number"},description:`Series indices that the legend hides via \`<c:legend><c:legendEntry>
|
|
228
228
|
<c:idx val="N"/><c:delete val="1"/></c:legendEntry>\`. Renderers
|
|
@@ -230,7 +230,7 @@ filter them from the legend list while still plotting them.
|
|
|
230
230
|
Common use: keep a trendline series in the data but drop its
|
|
231
231
|
legend entry.`}},required:["position"],additionalProperties:!1,description:"Optional legend configuration. `position` mirrors\n`<c:legend><c:legendPos val=\"\u2026\"/>` \u2014 `'r'` (right) is the default,\n`'t'`, `'b'`, `'l'`, `'tr'` (top-right) the other tokens. `null`\nfor `position` means no legend at all (the chart explicitly hides\nit). `undefined` overall means the chart didn't author a legend\nelement \u2014 renderers should fall back to their own default."},LineColor:{type:"string",description:"Optional stroke color of the series outline / line\n(`<c:ser><c:spPr><a:ln><a:solidFill>`), as an sRGB hex. Defaults to\n`color`; on a pie / doughnut series it is the border between slices."},LineDash:{type:"string",description:"Optional line dash style token (`<c:ser><c:spPr><a:ln><a:prstDash\nval=\"\u2026\"/>`), e.g. `'dash'`, `'dot'`, `'sysDash'`. Only\nmeaningful for line / area / scatter series."},LineMarkers:{type:"boolean",description:'Whether a line chart draws point markers (`<c:lineChart><c:marker\nval="1"/>`). `true` is the reference desktop app\'s "Line with Markers" subtype;\nabsent / `false` is the plain "Line" subtype (no markers). Only\nmeaningful for `kind: \'line\'`.'},LineWidthEmu:{type:"number",description:`Optional line stroke width in EMU (\`<c:ser><c:spPr><a:ln w="\u2026"/>\`).
|
|
232
232
|
Only meaningful for line / area / scatter series. Default falls
|
|
233
|
-
back to the renderer's own pick.`},MarkerColor:{type:"string",description:"Optional marker fill + outline color (`<c:marker><c:spPr>`), as an sRGB\nhex. Defaults to `color`. The builder always writes it for line /\nscatter / radar series, because the reference desktop app paints a marker without\n`<c:spPr>` in the theme's automatic color instead of the series color."},MarkerLineColor:{type:"string",description:"Optional marker outline color (`<c:marker><c:spPr><a:ln>`), as an sRGB\nhex. Defaults to `markerColor`, then `color`."},MarkerSizePt:{type:"number",description:'Marker size in points (`<c:marker><c:size val="N"/>`). The reference desktop app\ndefault ~5. Only meaningful when `markerSymbol` isn\'t `none`.'},MarkerSymbol:{anyOf:[{$ref:"#/$defs/TextWrap"},{type:"string",enum:["circle","diamond","plus","x","dot","dash","triangle","picture","auto","star"]}],description:"Optional marker style for line / scatter series (`<c:ser><c:marker>`).\n`none` hides the markers; the others render the matching glyph at\neach data point. Defaults to `auto`, which renderers map to a small\nfilled circle."},Name:{type:"string",description:"Series label rendered in the legend."},OverlapPct:{type:"number",description:'Overlap of adjacent bars within a category in `<c:overlap val="N"/>`\npercent (-100..100). Negative pulls bars apart, positive overlaps.\nDefaults to 0 (clustered) / 100 (stacked).'},PlainChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"}},required:["name","values"],additionalProperties:!1},PlotAreaFill:{type:"string",description:'Plot-area background fill \u2014 `<c:plotArea><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. `null` for no fill / unsupported fill kind.'},PlotAreaLayout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the plot area."},PlotAreaStrokeColor:{type:"string",description:"Plot-area outline color from `<c:plotArea><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. `undefined` means no outline."},PlotVisibleCellsOnly:{type:"boolean",description:'When `false`, plot data from hidden cells in the embedded workbook\n\u2014 maps to `<c:plotVisOnly val="0"/>`. The reference desktop app\'s default is\n`true` (only plot visible cells), so omitting this field emits\n`val="1"` to stay round-trip-safe with files the reference desktop app authored.'},PointColors:{type:"array",items:{type:["null","string"]},description:`Optional per-data-point color overrides, indexed by point index
|
|
233
|
+
back to the renderer's own pick.`},LogBase:{type:"number",description:'Logarithmic base for the axis from `<c:scaling><c:logBase val="N"/>`.\nTypical values are `2`, `10`, `Math.E`. When set, the renderer\nprojects values through `Math.log(v) / Math.log(logBase)` before\nmapping to plot coordinates. Linear when omitted.'},MajorUnit:{type:"number",description:'Major tick spacing (`<c:majorUnit val="N"/>`).'},MarkerColor:{type:"string",description:"Optional marker fill + outline color (`<c:marker><c:spPr>`), as an sRGB\nhex. Defaults to `color`. The builder always writes it for line /\nscatter / radar series, because the reference desktop app paints a marker without\n`<c:spPr>` in the theme's automatic color instead of the series color."},MarkerLineColor:{type:"string",description:"Optional marker outline color (`<c:marker><c:spPr><a:ln>`), as an sRGB\nhex. Defaults to `markerColor`, then `color`."},MarkerSizePt:{type:"number",description:'Marker size in points (`<c:marker><c:size val="N"/>`). The reference desktop app\ndefault ~5. Only meaningful when `markerSymbol` isn\'t `none`.'},MarkerSymbol:{anyOf:[{$ref:"#/$defs/TextWrap"},{type:"string",enum:["circle","diamond","plus","x","dot","dash","triangle","picture","auto","star"]}],description:"Optional marker style for line / scatter series (`<c:ser><c:marker>`).\n`none` hides the markers; the others render the matching glyph at\neach data point. Defaults to `auto`, which renderers map to a small\nfilled circle."},MinorUnit:{type:"number",description:'Minor tick spacing (`<c:minorUnit val="N"/>`).'},Name:{type:"string",description:"Series label rendered in the legend."},NumberFormat:{type:"string",description:'Number-format code from `<c:numFmt formatCode="\u2026"/>`. Common\nvalues: `"0%"`, `"0.0%"`, `"#,##0"`, `"$#,##0"`, `"yyyy-mm-dd"`.\nRenderers project a subset of spreadsheet number formats to label text.'},OverlapPct:{type:"number",description:'Overlap of adjacent bars within a category in `<c:overlap val="N"/>`\npercent (-100..100). Negative pulls bars apart, positive overlaps.\nDefaults to 0 (clustered) / 100 (stacked).'},PlainChartSeries:{type:"object",properties:{name:{$ref:"#/$defs/Name"},dataLabels:{$ref:"#/$defs/DataLabels2"},values:{$ref:"#/$defs/Values"},color:{$ref:"#/$defs/Color"},lineWidthEmu:{$ref:"#/$defs/LineWidthEmu"},lineColor:{$ref:"#/$defs/LineColor"},lineDash:{$ref:"#/$defs/LineDash"},markerSymbol:{$ref:"#/$defs/MarkerSymbol"},markerSizePt:{$ref:"#/$defs/MarkerSizePt"},markerColor:{$ref:"#/$defs/MarkerColor"},markerLineColor:{$ref:"#/$defs/MarkerLineColor"},invertIfNegative:{$ref:"#/$defs/InvertIfNegative"},pointColors:{$ref:"#/$defs/PointColors"},pointExplosions:{$ref:"#/$defs/PointExplosions"},pointDataLabels:{$ref:"#/$defs/PointDataLabels"},smooth:{$ref:"#/$defs/Smooth"},trendline:{$ref:"#/$defs/Trendline"},fillOpacity:{$ref:"#/$defs/FillOpacity"},errorBars:{$ref:"#/$defs/ErrorBars"},xErrorBars:{$ref:"#/$defs/XErrorBars"}},required:["name","values"],additionalProperties:!1},PlotAreaFill:{type:"string",description:'Plot-area background fill \u2014 `<c:plotArea><c:spPr><a:solidFill>\n<a:srgbClr val="\u2026"/>`. `null` for no fill / unsupported fill kind.'},PlotAreaLayout:{$ref:"#/$defs/ChartManualLayout",description:"Manual position of the plot area."},PlotAreaStrokeColor:{type:"string",description:"Plot-area outline color from `<c:plotArea><c:spPr><a:ln>\n<a:solidFill><a:srgbClr/>`. `undefined` means no outline."},PlotVisibleCellsOnly:{type:"boolean",description:'When `false`, plot data from hidden cells in the embedded workbook\n\u2014 maps to `<c:plotVisOnly val="0"/>`. The reference desktop app\'s default is\n`true` (only plot visible cells), so omitting this field emits\n`val="1"` to stay round-trip-safe with files the reference desktop app authored.'},PointColors:{type:"array",items:{type:["null","string"]},description:`Optional per-data-point color overrides, indexed by point index
|
|
234
234
|
(\`<c:dPt><c:idx val="N"/><c:spPr><a:solidFill>\u2026\`). Sparse \u2014 only
|
|
235
235
|
the indices that author an override appear. Pie / doughnut decks
|
|
236
236
|
almost always emit one of these per slice to break out of the
|
|
@@ -431,8 +431,8 @@ four options below; \`setShapeAnimation\` documents which effects take
|
|
|
431
431
|
which.`},orientation:{$ref:"#/$defs/AnimationOrientation"},inOut:{type:"string",enum:["in","out"]},shape:{type:"string",enum:["circle","box","diamond","plus"]},spokes:{type:"number"},spinDirection:{type:"string",enum:["clockwise","counterclockwise"],description:"The emphasis effects' own options, as `setShapeAnimation` takes them:\nSpin's direction and angle, Grow/Shrink's axes and size, Transparency's\namount, and the colour of the colour effects."},spinDegrees:{type:"number"},scaleDirection:{anyOf:[{$ref:"#/$defs/AnimationOrientation"},{type:"string",const:"both"}]},scalePercent:{type:"number"},transparencyPercent:{type:"number"},color:{anyOf:[{$ref:"#/$defs/Color"},{type:"object",properties:{color:{$ref:"#/$defs/Color"},colorTransforms:{type:"array",items:{anyOf:[{type:"object",properties:{kind:{type:"string",enum:["comp","inv","gray","gamma","invGamma"]}},required:["kind"],additionalProperties:!1},{type:"object",properties:{kind:{type:"string",enum:["tint","shade","alpha","alphaOff","alphaMod","hue","hueOff","hueMod","sat","satOff","satMod","lum","lumOff","lumMod","red","redOff","redMod","green","greenOff","greenMod","blue","blueOff","blueMod"]},value:{type:"number"}},required:["kind","value"],additionalProperties:!1}]}}},required:["color"],additionalProperties:!1}]},durationMs:{type:"number",description:`How long the effect runs. Left out, a changed effect keeps the duration
|
|
432
432
|
the slide gave it, unless the patch changes the preset itself: a new
|
|
433
433
|
preset takes its own default length, as picking one from the reference desktop app's
|
|
434
|
-
gallery does.`},start:{type:"string",enum:["click","withPrevious","afterPrevious"]},delayMs:{type:"number"},build:{type:"string",enum:["asOneObject","allAtOnce","byParagraph"]}},additionalProperties:!1}},required:["slide","id","patch"],additionalProperties:!1,$defs:{AnimationOrientation:{type:"string",enum:["horizontal","vertical"]},Color:{anyOf:[{type:"string",enum:["bg1","tx1","bg2","tx2","accent1","accent2","accent3","accent4","accent5","accent6","hlink","folHlink","phClr","lt1","dk1","lt2","dk2"]},{type:"string",enum:["scheme:bg1","scheme:tx1","scheme:bg2","scheme:tx2","scheme:accent1","scheme:accent2","scheme:accent3","scheme:accent4","scheme:accent5","scheme:accent6","scheme:hlink","scheme:folHlink","scheme:phClr","scheme:lt1","scheme:dk1","scheme:lt2","scheme:dk2"]},{type:"string",pattern:"^#(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$",description:'An sRGB color, "#RRGGBB" or "#RGB".'}]},SlideRef:{type:"string",pattern:"^/ppt/slides/[^/]+\\.xml$",description:'A slide, by its part name as `listSlides` reports it, e.g. "/ppt/slides/slide1.xml".'}}},output:{type:"null"}}]},Ve=ke({editorTools:()=>De,runTool:()=>Oe,schemaErrors:()=>
|
|
435
|
-
${f.map((p,u)=>` ${u+1}. ${e[p].map(
|
|
436
|
-
`)}`)}function G(t,e){return typeof t.$ref=="string"?G(e[t.$ref.slice(8)],e):t.type!==void 0?Array.isArray(t.type)?t.type:[t.type]:[]}function y(t,e,i,r){let a=i||"(input)",s=o=>{r.errors.push(`${a}: ${o}`)};if(typeof t.$ref=="string"){let o=t.$ref.slice(8),d=r.errors.length,n=y(r.defs[o],e,i,r),l=ce[o];return r.errors.length>d||!l?n:o==="Bytes"&&!we.test(e)?s("is not valid base64"):o==="DateTime"&&!(Le.test(e)&&!Number.isNaN(Date.parse(e)))?s('is not an RFC 3339 date-time such as "2026-10-08T09:30:00Z"'):r.presentation?l(r.presentation,e):e}if(Array.isArray(t.anyOf)){let o=ye(t,r.defs),d=o.map(l=>{let f={defs:r.defs,errors:[]};return y(l,e,i,f),f.errors}),n=d.findIndex(l=>l.length===0);return n>=0?y(o[n],e,i,r):Re(o,d,e,i,r)}if(t.type!==void 0){let o=Array.isArray(t.type)?t.type:[t.type];if(!o.some(d=>O(e,d)))return s(`expected ${o.join(" or ")}, got ${C(e)} ${m(e)}`)}return"const"in t&&e!==t.const?s(`must be ${JSON.stringify(t.const)}, got ${m(e)}`):Array.isArray(t.enum)&&!t.enum.includes(e)?s(`must be one of ${he(t.enum)}; got ${m(e)}`):typeof e=="string"&&typeof t.pattern=="string"&&!new RegExp(t.pattern,"u").test(e)?s(`${m(e)} does not match the pattern ${t.pattern}`):typeof e=="number"&&typeof t.minimum=="number"&&e<t.minimum?s(`must be at least ${t.minimum}, got ${e}`):Array.isArray(e)?Pe(t,e,i,r):e!==null&&typeof e=="object"?je(t,e,i,r):e}function Pe(t,e,i,r){let a=i||"(input)";typeof t.minItems=="number"&&e.length<t.minItems&&r.errors.push(`${a}: needs at least ${t.minItems} items, got ${e.length}`),typeof t.maxItems=="number"&&e.length>t.maxItems&&r.errors.push(`${a}: takes at most ${t.maxItems} items, got ${e.length}`);let s=t.prefixItems??[];return e.map((o,d)=>{let n=s[d]??t.items;return n?y(n,o,`${i}/${d}`,r):o})}function je(t,e,i,r){let a=i||"(input)",s=t.properties??{},o=(t.required??[]).filter(n=>!(n in e));o.length>0&&r.errors.push(`${a}: missing required ${o.map(n=>JSON.stringify(n)).join(", ")}`);let d={};for(let[n,l]of Object.entries(e)){let f=`${i}/${n.replace(/~/g,"~0").replace(/\//g,"~1")}`,h=s[n];if(h)d[n]=y(h,l,f,r);else if(t.additionalProperties===!1){let c=Object.keys(s);r.errors.push(`${a}: unknown property ${JSON.stringify(n)}${c.length>0?` (allowed: ${c.join(", ")})`:""}`)}else t.additionalProperties&&typeof t.additionalProperties=="object"?d[n]=y(t.additionalProperties,l,f,r):d[n]=l}return d}function
|
|
434
|
+
gallery does.`},start:{type:"string",enum:["click","withPrevious","afterPrevious"]},delayMs:{type:"number"},build:{type:"string",enum:["asOneObject","allAtOnce","byParagraph"]}},additionalProperties:!1}},required:["slide","id","patch"],additionalProperties:!1,$defs:{AnimationOrientation:{type:"string",enum:["horizontal","vertical"]},Color:{anyOf:[{type:"string",enum:["bg1","tx1","bg2","tx2","accent1","accent2","accent3","accent4","accent5","accent6","hlink","folHlink","phClr","lt1","dk1","lt2","dk2"]},{type:"string",enum:["scheme:bg1","scheme:tx1","scheme:bg2","scheme:tx2","scheme:accent1","scheme:accent2","scheme:accent3","scheme:accent4","scheme:accent5","scheme:accent6","scheme:hlink","scheme:folHlink","scheme:phClr","scheme:lt1","scheme:dk1","scheme:lt2","scheme:dk2"]},{type:"string",pattern:"^#(?:[0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$",description:'An sRGB color, "#RRGGBB" or "#RGB".'}]},SlideRef:{type:"string",pattern:"^/ppt/slides/[^/]+\\.xml$",description:'A slide, by its part name as `listSlides` reports it, e.g. "/ppt/slides/slide1.xml".'}}},output:{type:"null"}}]},Ve=ke({editorTools:()=>De,runTool:()=>Oe,schemaErrors:()=>be,shapeSummary:()=>ge}),Se=ne,Ce="#/$defs/";function P(t,e){let i=ae(t,e);if(!i)throw new Error(`There is no slide ${e}; listSlides gives the current ones.`);return i}function R(t,{slide:e,shapeId:i}){let r=ie(P(t,e),i);if(!r)throw new Error(`There is no shape ${i} on ${e}; listShapes gives the current ones.`);return r}var ce={SlideRef:P,ShapeRef:R,ChartRef(t,e){let i=R(t,e),r=N(re(i)).find(a=>a.shape===i);if(!r)throw new Error(`Shape ${e.shapeId} on ${e.slide} is not a chart.`);return r},CellRef:(t,e)=>L(R(t,e),e.row,e.col),LayoutRef(t,e){let i=q(t,e);if(!i)throw new Error(`There is no layout ${e}; listLayouts gives the current ones.`);return i},CommentRef(t,{slide:e,index:i}){let r=x(P(t,e))[i];if(!r)throw new Error(`There is no comment ${i} on ${e}; listComments gives them.`);return r},Bytes:(t,e)=>Uint8Array.from(atob(e),i=>i.charCodeAt(0)),DateTime:(t,e)=>new Date(e)},ue={SlideRef:(t,e)=>$(e),ShapeRef:(t,e)=>({...T(t,e)}),LayoutRef:(t,e)=>S(e),CommentRef(t,e){let i=V(e);return{slide:$(i),index:x(i).findIndex(r=>ve(r,e))}}};function ve(t,e){return k(t)===k(e)&&A(t).name===A(e).name&&v(t)===v(e)}var Me=30,we=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,Le=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/i,C=t=>t===null?"null":Array.isArray(t)?"array":typeof t=="number"&&Number.isInteger(t)?"integer":typeof t,m=t=>{let e=JSON.stringify(t);return e.length>60?`${e.slice(0,57)}...`:e};function he(t){let e=t.slice(0,Me).map(r=>JSON.stringify(r)),i=t.length-e.length;return`${e.join(", ")}${i>0?`, \u2026 (${i} more in the schema)`:""}`}function O(t,e){let i=C(t);return i===e||e==="number"&&i==="integer"}function E(t,e){let i=t;for(;typeof i.$ref=="string"&&!(i.$ref.slice(8)in ce);)i=e[i.$ref.slice(8)];return i}function ye(t,e){return t.anyOf.flatMap(i=>{let r=E(i,e);return Array.isArray(r.anyOf)?ye(r,e):[i]})}function j(t,e,i){let r=t.properties?.[e];if(!r)return;let a=E(r,i);return"const"in a?[a.const]:Array.isArray(a.enum)?a.enum:void 0}function Te(t,e,i){return Object.keys(e).find(r=>{let a=t.map(s=>j(s,r,i));return a.every(s=>s!==void 0)&&new Set(a.map(s=>JSON.stringify(s))).size>1})}function Re(t,e,i,r,a){let{defs:s,errors:o}=a,d=r||"(input)",n=t.map(p=>E(p,s)),l=p=>{let u=G(p,s);return u.length===0||u.some(g=>O(i,g))},f=n.map((p,u)=>u).filter(p=>l(n[p]));if(f.length===0){let p=[...new Set(n.flatMap(u=>G(u,s)))];o.push(`${d}: expected ${p.join(" or ")}, got ${C(i)} ${m(i)}`);return}let h=C(i)==="object"?i:void 0,c=h&&Te(f.map(p=>n[p]),h,s);if(h&&c!==void 0){let p=h[c],u=f.filter(g=>j(n[g],c,s).includes(p));if(u.length===0){let g=new Set(f.flatMap(Ae=>j(n[Ae],c,s)));o.push(`${r}/${c}: must be one of ${he([...g])}; got ${m(p)}`);return}f=u}if(f.length===1){o.push(...e[f[0]]);return}let xe=p=>p.startsWith(`${d}: `)?p.slice(d.length+2):p;o.push(`${d}: matches none of the ${f.length} forms it could take:
|
|
435
|
+
${f.map((p,u)=>` ${u+1}. ${e[p].map(xe).join("; ")}`).join(`
|
|
436
|
+
`)}`)}function G(t,e){return typeof t.$ref=="string"?G(e[t.$ref.slice(8)],e):t.type!==void 0?Array.isArray(t.type)?t.type:[t.type]:[]}function y(t,e,i,r){let a=i||"(input)",s=o=>{r.errors.push(`${a}: ${o}`)};if(typeof t.$ref=="string"){let o=t.$ref.slice(8),d=r.errors.length,n=y(r.defs[o],e,i,r),l=ce[o];return r.errors.length>d||!l?n:o==="Bytes"&&!we.test(e)?s("is not valid base64"):o==="DateTime"&&!(Le.test(e)&&!Number.isNaN(Date.parse(e)))?s('is not an RFC 3339 date-time such as "2026-10-08T09:30:00Z"'):r.presentation?l(r.presentation,e):e}if(Array.isArray(t.anyOf)){let o=ye(t,r.defs),d=o.map(l=>{let f={defs:r.defs,errors:[]};return y(l,e,i,f),f.errors}),n=d.findIndex(l=>l.length===0);return n>=0?y(o[n],e,i,r):Re(o,d,e,i,r)}if(t.type!==void 0){let o=Array.isArray(t.type)?t.type:[t.type];if(!o.some(d=>O(e,d)))return s(`expected ${o.join(" or ")}, got ${C(e)} ${m(e)}`)}return"const"in t&&e!==t.const?s(`must be ${JSON.stringify(t.const)}, got ${m(e)}`):Array.isArray(t.enum)&&!t.enum.includes(e)?s(`must be one of ${he(t.enum)}; got ${m(e)}`):typeof e=="string"&&typeof t.pattern=="string"&&!new RegExp(t.pattern,"u").test(e)?s(`${m(e)} does not match the pattern ${t.pattern}`):typeof e=="number"&&typeof t.minimum=="number"&&e<t.minimum?s(`must be at least ${t.minimum}, got ${e}`):Array.isArray(e)?Pe(t,e,i,r):e!==null&&typeof e=="object"?je(t,e,i,r):e}function Pe(t,e,i,r){let a=i||"(input)";typeof t.minItems=="number"&&e.length<t.minItems&&r.errors.push(`${a}: needs at least ${t.minItems} items, got ${e.length}`),typeof t.maxItems=="number"&&e.length>t.maxItems&&r.errors.push(`${a}: takes at most ${t.maxItems} items, got ${e.length}`);let s=t.prefixItems??[];return e.map((o,d)=>{let n=s[d]??t.items;return n?y(n,o,`${i}/${d}`,r):o})}function je(t,e,i,r){let a=i||"(input)",s=t.properties??{},o=(t.required??[]).filter(n=>!(n in e));o.length>0&&r.errors.push(`${a}: missing required ${o.map(n=>JSON.stringify(n)).join(", ")}`);let d={};for(let[n,l]of Object.entries(e)){let f=`${i}/${n.replace(/~/g,"~0").replace(/\//g,"~1")}`,h=s[n];if(h)d[n]=y(h,l,f,r);else if(t.additionalProperties===!1){let c=Object.keys(s);r.errors.push(`${a}: unknown property ${JSON.stringify(n)}${c.length>0?` (allowed: ${c.join(", ")})`:""}`)}else t.additionalProperties&&typeof t.additionalProperties=="object"?d[n]=y(t.additionalProperties,l,f,r):d[n]=l}return d}function b(t,e,i,r){if(e==null)return null;if(typeof t.$ref=="string"){let a=t.$ref.slice(8),s=ue[a];return s?s(r,e):b(i[a],e,i,r)}if(Array.isArray(t.anyOf)){let a=t.anyOf.find(s=>me(s,e,i));return a?b(a,e,i,r):e}if(Array.isArray(e))return e.map(a=>b(t.items??{},a,i,r));if(typeof e=="object"){let a=t.properties??{};return Object.fromEntries(Object.entries(e).map(([s,o])=>[s,b(a[s]??{},o,i,r)]))}return e}function me(t,e,i){if(typeof t.$ref=="string"){let r=t.$ref.slice(8);return r in ue?typeof e=="object":me(i[r],e,i)}return(Array.isArray(t.type)?t.type:[t.type]).some(r=>O(e,r))}var de={type:"object",properties:{slide:{$ref:`${Ce}SlideRef`}},required:["slide"],additionalProperties:!1,$defs:{SlideRef:fe.refs.SlideRef}},pe={type:"object",properties:{},additionalProperties:!1};function ge(t,e){let i=Q(t,e),r={shape:{...T(t,e)},kind:M(e)?"table":w(e)?"chart":Y(e),placeholder:J(e),bounds:i&&{x:i.x,y:i.y,w:i.w,h:i.h}};if(M(e)){let{rows:a,cols:s}=z(e);r.cells=Array.from({length:a},(o,d)=>Array.from({length:s},(n,l)=>U(L(e,d,l))))}else if(w(e)){let a=H(e);r.chart=a&&{kind:a.kind,title:a.title??null,categories:a.categories,series:a.series.map(({name:s,values:o})=>({name:s,values:o}))}}else _(e)&&(r.text=Z(e));return r}var Ge=[{name:"listSlides",description:`Lists the slides in order: each slide's ref (its part name, which other tools take as "slide"), 0-based index, title, layout ref and whether it is hidden.`,input_schema:pe,read:t=>se(t).map((e,i)=>{let r=te(e);return{slide:$(e),index:i,title:X(e),layout:r&&S(r),hidden:oe(e)}})},{name:"listShapes",description:`Lists the shapes on a slide, back to front: each shape's ref (which other tools take as "shape", or with "row" and "col" added as a table "cell"), its kind, placeholder type, bounds and text (for a table, the text of every cell; for a chart, its kind, title, categories and series values, or null when its kind cannot be read; date-axis categories are date serial numbers). Bounds are in EMU: 914400 per inch, 360000 per cm, 12700 per point.`,input_schema:de,read:(t,e)=>ee(e.slide).map(i=>ge(t,i))},{name:"listLayouts",description:"Lists the slide layouts: each layout's ref (its part name, which other tools take as a layout), name, type and the part name of its slide master.",input_schema:pe,read:t=>W(t).map(e=>({layout:S(e),name:B(e),type:F(e),master:K(e)}))},{name:"listComments",description:`Lists the comments on a slide: each comment's ref (which other tools take as "comment"), author, text and status. Positions change when a comment is removed; list again after removing one.`,input_schema:de,read:(t,e)=>x(e.slide).map((i,r)=>({comment:{slide:$(e.slide),index:r},author:A(i).name,text:k(i),status:I(i)}))}],$e=new Map([...fe.tools,...Ge].map(t=>[t.name,t])),De=[...$e.values()].map(({name:t,description:e,input_schema:i})=>({name:t,description:e,input_schema:i})).sort((t,e)=>t.name.localeCompare(e.name));function D(t){return t.$defs??{}}function be(t,e){let i={defs:D(t),errors:[]};return y(t,e,"",i),i.errors}async function Oe(t,e,i){let r=$e.get(e);if(!r)throw new Error(`There is no tool ${JSON.stringify(e)}. Call one of the tools listed.`);let a=D(r.input_schema),s=be(r.input_schema,i);if(s.length>0)throw new Error(`Invalid input for ${e}:
|
|
437
437
|
${s.map(l=>`- ${l}`).join(`
|
|
438
|
-
`)}`);let o=l=>y(r.input_schema,i,"",{defs:a,errors:[],presentation:l});if("read"in r){let l=t.presentation();return r.read(l,o(l))}let d=Se[e];if(typeof d!="function")throw new Error(`@office-kit/pptx has no function ${e}.`);let n=null;return await t.apply(e,l=>{let f=o(l),h=d(...r.args.map(c=>c?f[c]:l));n=
|
|
438
|
+
`)}`);let o=l=>y(r.input_schema,i,"",{defs:a,errors:[],presentation:l});if("read"in r){let l=t.presentation();return r.read(l,o(l))}let d=Se[e];if(typeof d!="function")throw new Error(`@office-kit/pptx has no function ${e}.`);let n=null;return await t.apply(e,l=>{let f=o(l),h=d(...r.args.map(c=>c?f[c]:l));n=b(r.output,h,D(r.output),l)}),n}export{fe as a,ge as i,Oe as n,be as r,Ve as t};
|