@martinomagnifico/tablechart 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- :root{--cssimported-tablechart:true}.tablechart{margin:var(--tablechart-margin,0);color:var(--tablechart-color,currentColor);font-size:var(--tablechart-font-size,1em);line-height:var(--tablechart-line-height,1.25)}:where([data-chart]){margin:var(--tablechart-margin,0);color:var(--tablechart-color,currentColor);font-size:var(--tablechart-font-size,1em);line-height:var(--tablechart-line-height,1.25)}.tablechart :where(figcaption){margin-bottom:var(--tablechart-caption-gap,.5em);text-align:var(--tablechart-caption-align,left)}:where([data-chart]) :where(figcaption){margin-bottom:var(--tablechart-caption-gap,.5em);text-align:var(--tablechart-caption-align,left)}.tablechart{position:relative}:where([data-chart]){position:relative}.tablechart :where(table){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}.tablechart :where(.chart-annotations){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}:where([data-chart]) :where(table){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}:where([data-chart]) :where(.chart-annotations){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}@media (scripting:none){.tablechart :where(table){clip-path:none;position:static}.tablechart :where(.chart-annotations){clip-path:none;position:static}:where([data-chart]) :where(table){clip-path:none;position:static}:where([data-chart]) :where(.chart-annotations){clip-path:none;position:static}}@media (scripting:enabled){.tablechart:where(:not([data-chart-empty]):not(:has(>.tablechart-plot))):after{content:"";height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);padding-bottom:1.5em;display:block}:where([data-chart]):where(:not([data-chart-empty]):not(:has(>.tablechart-plot))):after{content:"";height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);padding-bottom:1.5em;display:block}.tablechart :where(.tablechart-plot:not(.is-placed)){height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);overflow:hidden}:where([data-chart]) :where(.tablechart-plot:not(.is-placed)){height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);overflow:hidden}}:where([data-chart=donut]){--_room:.66}:where([data-chart=bar]){--_room:.5}.tablechart-plot{position:relative}.tablechart-plot :where(svg){width:100%;height:auto;display:block;overflow:visible}.tablechart-plot:not(.is-placed) :where(.tablechart-value,.tablechart-badge,.tablechart-name){visibility:hidden}.tablechart-sr{white-space:nowrap;clip-path:inset(50%);width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tablechart-value{white-space:nowrap;font-size:var(--tablechart-value-size,calc(var(--tablechart-category-size,.95em) * 1.3));position:absolute;transform:translate(-50%,-100%)}.tablechart-value[data-place=outside]{color:var(--tablechart-value-color,currentColor)}.tablechart-value:where([data-place=outside],[data-place=below]) :where(.tablechart-minus){position:absolute;right:100%}.tablechart-value[data-place=inside]{color:var(--tablechart-bar-ink,oklch(from var(--tablechart-bar-color,currentColor) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0));transform:translate(-50%,-50%)}.tablechart-value[data-place=around]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%,-50%)}.tablechart-value[data-place=below]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%)}.tablechart-value[data-place=middle]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%,-50%)}.tablechart-value[data-place=after]{color:var(--tablechart-value-color,currentColor);transform:translateY(-50%)}.tablechart-value[data-place=before]{color:var(--tablechart-value-color,currentColor);transform:translate(-100%,-50%)}.tablechart-value[data-place=none]{display:none}.tablechart-value[data-left-out]{visibility:hidden}.tablechart-value[data-active]{visibility:visible}.tablechart-value[data-place=inside][data-kind=up]{color:var(--tablechart-up-ink,oklch(from var(--tablechart-up-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0))}.tablechart-value[data-place=inside][data-kind=down]{color:var(--tablechart-down-ink,oklch(from var(--tablechart-down-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0))}.tablechart-value[data-place=inside][data-series]{color:var(--tablechart-piece-ink,oklch(from var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas))) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0))}.tablechart-value[data-place=inside][data-kind=total]{color:var(--tablechart-total-ink,oklch(from var(--tablechart-total-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0))}.tablechart-name{white-space:nowrap;font-size:var(--tablechart-name-size,var(--tablechart-category-size,.95em));color:var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas)));position:absolute;transform:translateY(-50%)}.tablechart-legend{box-sizing:border-box;width:-moz-fit-content;width:fit-content;max-width:100%;padding:var(--tablechart-legend-padding,0);border:var(--tablechart-legend-border,none);border-radius:var(--tablechart-legend-radius,0);background:var(--tablechart-legend-surface,none);margin-inline-start:auto;margin-inline-end:auto;margin-top:var(--tablechart-legend-gap,.6em);font-size:var(--tablechart-name-size,var(--tablechart-category-size,.95em));flex-wrap:wrap;justify-content:center;gap:.3em 1.2em;display:flex}.tablechart-name[data-place=legend]{color:inherit;font-size:inherit;position:static;transform:none}.tablechart-name[data-place=legend]:before{content:"";vertical-align:-.05em;background:var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas)));width:1.6em;height:.8em;-webkit-mask-image:var(--_line), var(--_mark,none);mask-image:var(--_line), var(--_mark,none);margin-right:.4em;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tablechart-name[data-place=legend]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='12' cy='6' r='3.4' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='12' cy='6' r='3.4'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Crect x='9' y='3' width='6' height='6' stroke-linecap='butt' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Crect x='9' y='3' width='6' height='6' stroke-linecap='butt'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpolygon points='12,1.9 16.1,6 12,10.1 7.9,6' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpolygon points='12,1.9 16.1,6 12,10.1 7.9,6'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-swatch=box]:before{vertical-align:-.05em;background:var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas)));border-radius:.15em;width:.7em;height:.7em;-webkit-mask:none;mask:none}.tablechart-categories :where(span[data-kind=total]){display:none}.tablechart-categories :where(span[data-kind=slice]):before{content:"";width:var(--tablechart-key-size,.6em);height:var(--tablechart-key-size,.6em);background:var(--palette,color-mix(in oklab, var(--tablechart-slice-color,currentColor) max(var(--tablechart-slice-min,20%), calc(100% - var(--n) * var(--tablechart-slice-fade,15%))), var(--tablechart-surface,Canvas)));border-radius:50%;margin-right:.4em;display:inline-block}.tablechart-categories[data-place=key]{box-sizing:border-box;width:-moz-fit-content;width:fit-content;max-width:100%;padding:var(--tablechart-legend-padding,0);border:var(--tablechart-legend-border,none);border-radius:var(--tablechart-legend-radius,0);background:var(--tablechart-legend-surface,none);flex-wrap:wrap;justify-content:center;gap:.3em 1.2em;margin-inline-start:auto;margin-inline-end:auto;display:flex}.tablechart-categories[data-place=key] :where(span){white-space:nowrap;padding:0}.tablechart-categories[data-place=beside]{pointer-events:none;margin:0;display:block;position:absolute;top:0;bottom:0;left:0;right:0}.tablechart-categories[data-place=beside] :where(span){text-align:right;width:max-content;max-width:var(--tablechart-name-max,40%);text-wrap:balance;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;padding:0;position:absolute;transform:translate(-100%,-50%)}.tablechart-categories{grid-template-columns:repeat(var(--tablechart-columns,1), minmax(0, 1fr));margin-top:var(--tablechart-categories-gap,.45em);display:grid}.tablechart-categories :where(span){text-align:center;padding:var(--tablechart-category-padding,0 .2em);font-size:calc(var(--tablechart-category-size,.95em) * var(--tablechart-name-fit,1));-webkit-hyphens:manual;hyphens:manual;overflow-wrap:normal}.tablechart-bar{fill:var(--tablechart-bar-color,currentColor)}.tablechart-bar[data-kind=up]{fill:var(--tablechart-up-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-kind=down]{fill:var(--tablechart-down-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-kind=total]{fill:var(--tablechart-total-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-series],.tablechart-piece{fill:var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas)))}.tablechart-plot[data-grouped] :where(.tablechart-value){font-size:calc(var(--tablechart-group-value-size,.95em) * var(--tablechart-fit,1))}.tablechart-rule{stroke:var(--tablechart-rule-color,currentColor);stroke-width:var(--tablechart-rule-width,1px);opacity:var(--tablechart-rule-opacity,.45);vector-effect:non-scaling-stroke}.tablechart-connector{stroke:var(--tablechart-connector-color,currentColor);stroke-width:var(--tablechart-connector-width,1px);stroke-dasharray:var(--tablechart-connector-dash,2 3);opacity:var(--tablechart-connector-opacity,.55);fill:none;vector-effect:non-scaling-stroke}.tablechart-series{stroke:var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas)));stroke-width:var(--tablechart-series-width,2px);stroke-linecap:round;fill:none;vector-effect:non-scaling-stroke}.tablechart-area{fill:var(--tablechart-area-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas))));opacity:var(--tablechart-area-opacity,.25)}.tablechart-area[data-muted]{opacity:calc(var(--tablechart-area-opacity,.25) / 2)}.tablechart-area[data-stacked]{opacity:var(--tablechart-area-opacity,.5)}.tablechart-area[data-stacked][data-muted]{opacity:calc(var(--tablechart-area-opacity,.5) / 2)}.tablechart-series[data-line=dashed]{stroke-dasharray:var(--tablechart-dash,6 4)}.tablechart-series[data-line=dotted]{stroke-dasharray:var(--tablechart-dot,0 4)}.tablechart-point{fill:var(--tablechart-point-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas))))}.tablechart-point[data-open]{fill:none;stroke:var(--tablechart-point-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--tablechart-series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-muted-share,45%))), var(--tablechart-surface,Canvas))));stroke-width:var(--tablechart-series-width,2px);vector-effect:non-scaling-stroke}.tablechart-slice{fill:none;stroke:var(--palette,color-mix(in oklab, var(--tablechart-slice-color,currentColor) max(var(--tablechart-slice-min,20%), calc(100% - var(--n) * var(--tablechart-slice-fade,15%))), var(--tablechart-surface,Canvas)))}.tablechart-divide{stroke:#000;stroke-width:var(--tablechart-slice-gap,4);fill:none}.tablechart-leader{stroke:var(--tablechart-leader-color,currentColor);stroke-width:var(--tablechart-leader-width,1px);opacity:var(--tablechart-leader-opacity,.45);fill:none;vector-effect:non-scaling-stroke}.tablechart-centre{white-space:nowrap;text-align:center;font-size:var(--tablechart-centre-size,1.6em);color:var(--tablechart-centre-color,currentColor);position:absolute;transform:translate(-50%,-50%)}.tablechart-break[data-part=edge]{fill:none;stroke:var(--tablechart-break-color,currentColor);stroke-width:var(--tablechart-break-width,1px);opacity:var(--tablechart-break-opacity,1);stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.tablechart-line{stroke:var(--tablechart-annotation-color,currentColor);stroke-width:var(--tablechart-annotation-width,1.25px);fill:none;stroke-linecap:butt;stroke-linejoin:miter;vector-effect:non-scaling-stroke}.tablechart-head{fill:var(--tablechart-annotation-color,currentColor)}.tablechart-badge{background:var(--tablechart-badge-surface,none);color:var(--tablechart-annotation-color,currentColor);border:var(--tablechart-badge-border-width,1px) solid currentColor;border-radius:var(--tablechart-badge-radius,50%);padding:var(--tablechart-badge-padding,.5em 1.25em);white-space:nowrap;line-height:1;position:absolute;transform:translate(-50%,-50%)}.tablechart-badge :where(.tablechart-caption){color:var(--tablechart-color,currentColor);background:0 0;border:0;position:absolute;bottom:calc(100% + .45em);left:50%;transform:translate(-50%)}:where([data-animate]) :where(.tablechart-bar){transform-box:fill-box;transform-origin:bottom;transition:transform var(--tablechart-duration,.5s) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985));transition-delay:calc(var(--i) * var(--tablechart-stagger,.12s));transform:scaleY(0)}:where([data-animate]) :where(.tablechart-bar[data-grow=down]){transform-origin:top}:where([data-animate]) :where(.tablechart-bar[data-grow=right]){transform-origin:0;transform:scaleX(0)}:where([data-animate]) :where(.tablechart-bar[data-grow=left]){transform-origin:100%;transform:scaleX(0)}:where([data-animate]) :where(.tablechart-series){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path calc(var(--d,1) * var(--tablechart-stagger,.12s)) linear;transition-delay:calc(max(var(--i) - 1, 0) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-area-fill){opacity:0;transition:opacity calc(max(var(--rows) - 1, 1) * var(--tablechart-stagger,.12s)) linear;transition-delay:calc(max(var(--i) - 1, 0) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-point,.tablechart-hole){opacity:0;transition:opacity var(--tablechart-duration,.5s) ease;transition-delay:calc((var(--i) + .2) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-hole[data-for=badge]){transition:opacity .3s;transition-delay:calc(var(--after) * var(--tablechart-stagger,.12s) + .35s)}:where([data-animate]) :where(.tablechart-value,.tablechart-name){opacity:0;transition:opacity var(--tablechart-duration,.5s) ease;transition-delay:calc((var(--i) + .4) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-connector){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path calc(2 * var(--tablechart-stagger,.12s)) ease-out;transition-delay:max(0s, (var(--i) - .6) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-slice){stroke-dasharray:0 var(--circ);transition:stroke-dasharray var(--tablechart-duration,.5s) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985));transition-delay:calc(var(--i) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-centre){opacity:0;transition:opacity var(--tablechart-duration,.5s) ease;transition-delay:calc((var(--i,0) + .5) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-leader){stroke-opacity:0;transition:stroke-opacity var(--tablechart-duration,.5s) ease;transition-delay:calc((var(--i,0) + .5) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-break[data-part=edge]){stroke-opacity:0;transition:stroke-opacity .2s;transition-delay:calc((var(--after) + .9) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-line){stroke-dasharray:var(--len);stroke-dashoffset:var(--len);transition:stroke-dashoffset var(--tablechart-annotation-duration,.6s) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985));transition-delay:calc(var(--after) * var(--tablechart-stagger,.12s))}:where([data-animate]) :where(.tablechart-head){opacity:0;transition:opacity .2s;transition-delay:calc(var(--after) * var(--tablechart-stagger,.12s) + .55s)}:where([data-animate]) :where(.tablechart-badge){opacity:0;transition:opacity .3s;transition-delay:calc(var(--after) * var(--tablechart-stagger,.12s) + .35s)}:where([data-animate][data-chart=waterfall]) :where(.tablechart-bar){transition-duration:calc(var(--tablechart-duration,.5s) * .8);transition-delay:calc(var(--i) * calc(var(--tablechart-duration,.5s) * 1))}:where([data-animate][data-chart=waterfall]) :where(.tablechart-connector){transition:clip-path calc(var(--tablechart-duration,.5s) * .4) linear;transition-delay:calc((var(--i) - 1) * calc(var(--tablechart-duration,.5s) * 1) + calc(var(--tablechart-duration,.5s) * .6))}:where([data-animate][data-chart=waterfall]) :where(.tablechart-value){transition-delay:calc(var(--i) * calc(var(--tablechart-duration,.5s) * 1) + calc(var(--tablechart-duration,.5s) * .8) * .5)}:where([data-animate][data-chart=waterfall]) :where(.tablechart-badge,.tablechart-hole[data-for=badge]){transition-delay:calc(var(--after) * calc(var(--tablechart-duration,.5s) * 1) + .2s)}:where([data-animate].is-shown) :where(.tablechart-bar){transform:scaleY(1)}:where([data-animate].is-shown) :where(.tablechart-bar:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(1)}:where([data-animate].is-shown) :where(.tablechart-bar:is([data-grow=right],[data-grow=left])){transform:scaleX(1)}:where([data-animate].is-shown) :where(.tablechart-series){clip-path:inset(-10px)}:where([data-animate].is-shown) :where(.tablechart-point){opacity:1}:where([data-animate].is-shown) :where(.tablechart-hole){opacity:1}:where([data-animate].is-shown) :where(.tablechart-area-fill){opacity:1}:where([data-animate].is-shown) :where(.tablechart-value){opacity:1}:where([data-animate].is-shown) :where(.tablechart-name){opacity:1}:where([data-animate].is-shown) :where(.tablechart-head){opacity:1}:where([data-animate].is-shown) :where(.tablechart-badge){opacity:1}:where([data-animate].is-shown) :where(.tablechart-centre){opacity:1}:where([data-animate].is-shown) :where(.tablechart-leader){stroke-opacity:1}:where([data-animate].is-shown) :where(.tablechart-break[data-part=edge]){stroke-opacity:1}:where([data-animate].is-shown) :where(.tablechart-slice){stroke-dasharray:var(--arc) calc(var(--circ) - var(--arc))}:where([data-animate].is-shown) :where(.tablechart-connector){clip-path:inset(-10px)}:where([data-animate].is-shown) :where(.tablechart-line){stroke-dashoffset:0}:where([data-animate=up]) :where(.tablechart-series,.tablechart-area){clip-path:none;transform-box:view-box;transform-origin:0 var(--tablechart-base);transition:transform calc(var(--tablechart-duration,.5s) * 1.6) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985));transition-delay:0s;transform:scaleY(0)}:where([data-animate=up]) :where(.tablechart-area-fill){opacity:1;transition:none}:where([data-animate=up]) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:0;transform:translateY(var(--rise,0));transition:transform calc(var(--tablechart-duration,.5s) * 1.6) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985)), opacity .15s ease;transition-delay:0s}:where([data-animate=up]) :where(.tablechart-value,.tablechart-name){transition-delay:calc(var(--tablechart-duration,.5s) * 1.6)}:where([data-animate=up].is-shown) :where(.tablechart-series,.tablechart-area){transform:scaleY(1)}:where([data-animate=up].is-shown) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:1;transform:none}:where([data-animate]){transition:opacity var(--tablechart-queue-duration,.4s) ease}:where([data-animate].tablechart-queued){opacity:0}@media (prefers-reduced-motion:reduce){:where([data-animate]) :where(*){transition-duration:1ms!important;transition-delay:0s!important}}:where([data-animate][data-steps]) :where(.tablechart-series){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path var(--tablechart-duration,.5s) ease}:where([data-animate][data-steps]) :where(.tablechart-area-fill>*){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path var(--tablechart-duration,.5s) ease}:where([data-animate][data-steps]) :where(.tablechart-area-fill){opacity:1;transition:none}:where([data-animate][data-steps]) :where(.tablechart-piece){transform-box:fill-box;transform-origin:bottom;transition:transform var(--tablechart-duration,.5s) var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985));transition-delay:calc(var(--i,0) * var(--tablechart-stagger,.12s))}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=right]){transform-origin:0}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=down]){transform-origin:top}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=left]){transform-origin:100%}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar){transform:scaleY(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar:is([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece){transform:scaleY(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece:is([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-value){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-name){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-head){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-badge){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-centre){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-point){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-hole){opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-leader){stroke-opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-break[data-part=edge]){stroke-opacity:clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-line){stroke-dashoffset:calc(var(--len) * (1 - clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)))}:where([data-animate][data-steps].is-shown) :where(.tablechart-connector){clip-path:inset(-10px calc((1 - clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-series){clip-path:inset(-10px calc((1 - var(--reveal,0)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-area-fill>*){clip-path:inset(-10px calc((1 - var(--reveal,0)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-slice){stroke-dasharray:calc(var(--arc) * clamp(0, var(--tablechart-step,0) - var(--step,-1), 1)) calc(var(--circ) - var(--arc) * clamp(0, var(--tablechart-step,0) - var(--step,-1), 1))}:where(.tablechart-controls){justify-content:var(--tablechart-controls-justify,space-between);margin-top:var(--tablechart-controls-gap,.75em);align-items:center;gap:.5em;display:flex}:where(.tablechart-controls) :where(button){padding:var(--tablechart-control-padding,.3em .7em);border:var(--tablechart-control-border,1px solid color-mix(in oklab, currentColor 30%, transparent));border-radius:var(--tablechart-control-radius,.4em);background:var(--tablechart-control-surface,none);color:inherit;font:inherit;cursor:pointer;align-items:center;gap:.35em;display:inline-flex}:where(.tablechart-controls) :where(button:disabled){opacity:.35;cursor:default}:where(.tablechart-controls) :where(.tablechart-control-icon svg){fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:.8em;height:.8em;display:block}@media print{:where([data-steps]){--tablechart-step:999!important}:where([data-steps] [data-from]){--reveal:1!important}:where(.tablechart-controls){display:none}}.tablechart-plot[data-active] .tablechart-value:not([data-active]){visibility:hidden}.tablechart-plot[data-pointed] .tablechart-value{transition-delay:0s}.tablechart-plot[data-hover]{cursor:default}.tablechart-plot[data-hover] :where(.tablechart-value){-webkit-user-select:none;user-select:none}.tablechart-pointer{background:var(--tablechart-pointer-color,color-mix(in oklab, currentColor 8%, transparent));pointer-events:none;display:none;position:absolute}.tablechart-plot[data-active]>.tablechart-pointer{display:block}@media print{:where(.tablechart,[data-chart]) :where(table,.chart-annotations){display:none}}
1
+ :root{--cssimported-tablechart:true}.tablechart{margin:var(--tablechart-margin,0);color:var(--tablechart-color,currentColor);font-size:var(--tablechart-font-size,1em);line-height:var(--tablechart-line-height,1.25)}:where([data-chart]){margin:var(--tablechart-margin,0);color:var(--tablechart-color,currentColor);font-size:var(--tablechart-font-size,1em);line-height:var(--tablechart-line-height,1.25)}.tablechart :where(figcaption){margin-bottom:var(--tablechart-caption-gap,.5em);text-align:var(--tablechart-caption-align,left)}:where([data-chart]) :where(figcaption){margin-bottom:var(--tablechart-caption-gap,.5em);text-align:var(--tablechart-caption-align,left)}.tablechart{position:relative}:where([data-chart]){position:relative}.tablechart :where(table){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}.tablechart :where(.chart-annotations){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}:where([data-chart]) :where(table){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}:where([data-chart]) :where(.chart-annotations){left:0;right:0;clip-path:inset(50%);margin:0;position:absolute;top:0}@media (scripting:none){.tablechart :where(table){clip-path:none;position:static}.tablechart :where(.chart-annotations){clip-path:none;position:static}:where([data-chart]) :where(table){clip-path:none;position:static}:where([data-chart]) :where(.chart-annotations){clip-path:none;position:static}}@media (scripting:enabled){.tablechart:where(:not([data-chart-empty]):not(:has(>.tablechart-plot))):after{content:"";height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);padding-bottom:1.5em;display:block}:where([data-chart]):where(:not([data-chart-empty]):not(:has(>.tablechart-plot))):after{content:"";height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);padding-bottom:1.5em;display:block}.tablechart :where(.tablechart-plot:not(.is-placed)){height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);overflow:hidden}:where([data-chart]) :where(.tablechart-plot:not(.is-placed)){height:0;padding-top:max(var(--tablechart-min-height,200px), var(--_room,.38) * 100%);overflow:hidden}}:where([data-chart=donut]){--_room:.66}:where([data-chart=bar]){--_room:.5}.tablechart-plot{position:relative}.tablechart-plot :where(svg){width:100%;height:auto;display:block;overflow:visible}.tablechart-plot:not(.is-placed) :where(.tablechart-value,.tablechart-badge,.tablechart-name){visibility:hidden}.tablechart-sr{white-space:nowrap;clip-path:inset(50%);width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.tablechart-value{white-space:nowrap;font-size:var(--tablechart-value-size,calc(var(--tablechart-name-size,var(--tablechart-category-size,.95em)) * 1.3));position:absolute;transform:translate(-50%,-100%)}.tablechart-value[data-place=outside]{color:var(--tablechart-value-color,currentColor)}.tablechart-value:where([data-place=outside],[data-place=below]) :where(.tablechart-minus){position:absolute;right:100%}.tablechart-value[data-place=inside]{color:var(--tablechart-bar-value-color,var(--tablechart-bar-ink,oklch(from var(--tablechart-bar-color,currentColor) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0)));transform:translate(-50%,-50%)}.tablechart-value[data-place=around]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%,-50%)}.tablechart-value[data-place=below]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%)}.tablechart-value[data-place=middle]{color:var(--tablechart-value-color,currentColor);transform:translate(-50%,-50%)}.tablechart-value[data-place=after]{color:var(--tablechart-value-color,currentColor);transform:translateY(-50%)}.tablechart-value[data-place=before]{color:var(--tablechart-value-color,currentColor);transform:translate(-100%,-50%)}.tablechart-value[data-place=none]{display:none}.tablechart-value[data-left-out]{visibility:hidden}.tablechart-value[data-active]{visibility:visible}.tablechart-value[data-place=inside][data-kind=up]{color:var(--tablechart-up-value-color,var(--tablechart-up-ink,oklch(from var(--tablechart-up-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0)))}.tablechart-value[data-place=inside][data-kind=down]{color:var(--tablechart-down-value-color,var(--tablechart-down-ink,oklch(from var(--tablechart-down-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0)))}.tablechart-value[data-place=inside][data-series]{color:var(--tablechart-piece-value-color,var(--tablechart-piece-ink,oklch(from var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas)))) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0)))}.tablechart-value[data-place=inside][data-kind=total]{color:var(--tablechart-total-value-color,var(--tablechart-total-ink,oklch(from var(--tablechart-total-color,var(--tablechart-bar-color,currentColor)) calc(.18 + .8 * clamp(0, (.68 - l) * 1000, 1)) 0 0)))}.tablechart-name{white-space:nowrap;font-size:var(--tablechart-name-size,var(--tablechart-category-size,.95em));color:var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas))));position:absolute;transform:translateY(-50%)}.tablechart-legend{box-sizing:border-box;width:-moz-fit-content;width:fit-content;max-width:100%;padding:var(--tablechart-legend-padding,0);border:var(--tablechart-legend-border,none);border-radius:var(--tablechart-legend-radius,0);background:var(--tablechart-legend-surface,none);margin-inline-start:auto;margin-inline-end:auto;margin-top:var(--tablechart-legend-gap,.6em);font-size:var(--tablechart-name-size,var(--tablechart-category-size,.95em));flex-wrap:wrap;justify-content:center;gap:.3em 1.2em;display:flex}.tablechart-name[data-place=legend]{color:inherit;font-size:inherit;position:static;transform:none}.tablechart-name[data-place=legend]:before{content:"";vertical-align:-.05em;background:var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas))));width:1.6em;height:.8em;-webkit-mask-image:var(--_line), var(--_mark,none);mask-image:var(--_line), var(--_mark,none);margin-right:.4em;display:inline-block;-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:contain;mask-size:contain;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.tablechart-name[data-place=legend]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='12' cy='6' r='3.4' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Ccircle cx='12' cy='6' r='3.4'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=circle][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H8.6 M15.4 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Crect x='9' y='3' width='6' height='6' stroke-linecap='butt' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Crect x='9' y='3' width='6' height='6' stroke-linecap='butt'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=square][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H9 M15 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpolygon points='12,1.9 16.1,6 12,10.1 7.9,6' fill='white'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open]{--_mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpolygon points='12,1.9 16.1,6 12,10.1 7.9,6'/%3E%3C/svg%3E");--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open][data-line=dashed]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24' stroke-dasharray='4 2.5' stroke-linecap='butt'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-marker=diamond][data-open][data-line=dotted]{--_line:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 12' fill='none' stroke='white' stroke-width='1.6' stroke-linecap='round'%3E%3Cpath d='M0 6H7.9 M16.1 6H24' stroke-dasharray='0 3'/%3E%3C/svg%3E")}.tablechart-name[data-place=legend][data-swatch=box]:before{vertical-align:-.05em;background:var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas))));border-radius:.15em;width:.7em;height:.7em;-webkit-mask:none;mask:none}.tablechart-categories :where(span[data-kind=total]){display:none}.tablechart-categories :where(span[data-kind=slice]):before{content:"";width:var(--tablechart-legend-key-size,var(--tablechart-key-size,.6em));height:var(--tablechart-legend-key-size,var(--tablechart-key-size,.6em));background:var(--palette,color-mix(in oklab, var(--tablechart-slice-color,currentColor) max(var(--tablechart-slice-min,20%), calc(100% - var(--n) * var(--tablechart-slice-fade,15%))), var(--tablechart-surface,Canvas)));border-radius:50%;margin-right:.4em;display:inline-block}.tablechart-categories[data-place=key]{box-sizing:border-box;width:-moz-fit-content;width:fit-content;max-width:100%;padding:var(--tablechart-legend-padding,0);border:var(--tablechart-legend-border,none);border-radius:var(--tablechart-legend-radius,0);background:var(--tablechart-legend-surface,none);flex-wrap:wrap;justify-content:center;gap:.3em 1.2em;margin-inline-start:auto;margin-inline-end:auto;display:flex}.tablechart-categories[data-place=key] :where(span){white-space:nowrap;padding:0}.tablechart-categories[data-place=beside]{pointer-events:none;margin:0;display:block;position:absolute;top:0;bottom:0;left:0;right:0}.tablechart-categories[data-place=beside] :where(span){text-align:right;width:max-content;max-width:var(--tablechart-name-max,40%);text-wrap:balance;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;padding:0;position:absolute;transform:translate(-100%,-50%)}.tablechart-categories{grid-template-columns:repeat(var(--_columns,1), minmax(0, 1fr));margin-top:var(--tablechart-name-gap,var(--tablechart-categories-gap,.45em));display:grid}.tablechart-categories :where(span){text-align:center;padding:var(--tablechart-name-padding,var(--tablechart-category-padding,0 .2em));font-size:calc(var(--tablechart-name-size,var(--tablechart-category-size,.95em)) * var(--_name-fit,1));-webkit-hyphens:manual;hyphens:manual;overflow-wrap:normal}.tablechart-bar{fill:var(--tablechart-bar-color,currentColor)}.tablechart-bar[data-kind=up]{fill:var(--tablechart-up-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-kind=down]{fill:var(--tablechart-down-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-kind=total]{fill:var(--tablechart-total-color,var(--tablechart-bar-color,currentColor))}.tablechart-bar[data-series],.tablechart-piece{fill:var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas))))}.tablechart-plot[data-grouped] :where(.tablechart-value){font-size:calc(var(--tablechart-value-group-size,.95em) * var(--_fit,1))}.tablechart-rule{stroke:var(--tablechart-baseline-color,var(--tablechart-rule-color,currentColor));stroke-width:var(--tablechart-baseline-width,var(--tablechart-rule-width,1px));opacity:var(--tablechart-baseline-opacity,var(--tablechart-rule-opacity,.45));vector-effect:non-scaling-stroke}.tablechart-connector{stroke:var(--tablechart-connector-color,currentColor);stroke-width:var(--tablechart-connector-width,1px);stroke-dasharray:var(--tablechart-connector-dash,2 3);opacity:var(--tablechart-connector-opacity,.55);fill:none;vector-effect:non-scaling-stroke}.tablechart-series{stroke:var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas))));stroke-width:var(--tablechart-series-width,2px);stroke-linecap:round;fill:none;vector-effect:non-scaling-stroke}.tablechart-area{fill:var(--tablechart-area-color,var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas)))));opacity:var(--tablechart-area-opacity,.25)}.tablechart-area[data-muted]{opacity:calc(var(--tablechart-area-opacity,.25) / 2)}.tablechart-area[data-stacked]{opacity:var(--tablechart-area-opacity,.5)}.tablechart-area[data-stacked][data-muted]{opacity:calc(var(--tablechart-area-opacity,.5) / 2)}.tablechart-series[data-line=dashed]{stroke-dasharray:var(--tablechart-series-dash,var(--tablechart-dash,6 4))}.tablechart-series[data-line=dotted]{stroke-dasharray:var(--tablechart-series-dot,var(--tablechart-dot,0 4))}.tablechart-point{fill:var(--tablechart-point-color,var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas)))))}.tablechart-point[data-open]{fill:none;stroke:var(--tablechart-point-color,var(--tablechart-series-own-color,var(--tablechart-series-ink,color-mix(in oklab, var(--palette,color-mix(in oklab, var(--tablechart-series-color,var(--tablechart-bar-color,currentColor)) max(var(--tablechart-series-min,40%), calc((100% - var(--n,0) * min(var(--tablechart-series-fade,30%), calc((100% - var(--tablechart-series-min,40%)) / max(var(--_series-count,2) - 1, 1)))) * (1 - var(--m,0)) + var(--m,0) * 100%)), var(--tablechart-surface,Canvas))) calc(100% - var(--m,0) * (100% - var(--tablechart-series-muted-share,var(--tablechart-muted-share,45%)))), var(--tablechart-surface,Canvas)))));stroke-width:var(--tablechart-series-width,2px);vector-effect:non-scaling-stroke}.tablechart-slice{fill:none;stroke:var(--palette,color-mix(in oklab, var(--tablechart-slice-color,currentColor) max(var(--tablechart-slice-min,20%), calc(100% - var(--n) * var(--tablechart-slice-fade,15%))), var(--tablechart-surface,Canvas)))}.tablechart-divide{stroke:#000;stroke-width:var(--tablechart-slice-gap,4);fill:none}.tablechart-leader{stroke:var(--tablechart-leader-color,currentColor);stroke-width:var(--tablechart-leader-width,1px);opacity:var(--tablechart-leader-opacity,.45);fill:none;vector-effect:non-scaling-stroke}.tablechart-centre{white-space:nowrap;text-align:center;font-size:var(--tablechart-centre-size,1.6em);color:var(--tablechart-centre-color,currentColor);position:absolute;transform:translate(-50%,-50%)}.tablechart-break[data-part=edge]{fill:none;stroke:var(--tablechart-break-color,currentColor);stroke-width:var(--tablechart-break-width,1px);opacity:var(--tablechart-break-opacity,1);stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.tablechart-line{stroke:var(--tablechart-annotation-color,currentColor);stroke-width:var(--tablechart-annotation-width,1.25px);fill:none;stroke-linecap:butt;stroke-linejoin:miter;vector-effect:non-scaling-stroke}.tablechart-head{fill:var(--tablechart-annotation-color,currentColor)}.tablechart-badge{background:var(--tablechart-badge-surface,none);color:var(--tablechart-annotation-color,currentColor);border:var(--tablechart-badge-border-width,1px) solid currentColor;border-radius:var(--tablechart-badge-radius,50%);padding:var(--tablechart-badge-padding,.5em 1.25em);white-space:nowrap;line-height:1;position:absolute;transform:translate(-50%,-50%)}.tablechart-badge :where(.tablechart-caption){color:var(--tablechart-color,currentColor);background:0 0;border:0;position:absolute;bottom:calc(100% + .45em);left:50%;transform:translate(-50%)}:where([data-animate],[data-animate] .tablechart-plot){--_el:var(--tablechart-animation-element-duration,var(--tablechart-duration,.5s));--_max:var(--tablechart-animation-max,calc(4 * var(--_el)));--_r:var(--tablechart-animation-stagger,var(--_ratio,.24));--_dur:min(var(--_el), calc(var(--_max) / (1 + var(--_keep,0) * (var(--count,1) - 1) * var(--_r))));--_stg:min(var(--tablechart-stagger,calc(var(--_r) * var(--_el))), max(0s, calc((var(--_max) - var(--_dur)) / max(var(--count,1) - 1, 1))));--_fade:min(var(--_dur), calc(var(--_max) / 4));--_ease:var(--tablechart-animation-ease,var(--tablechart-easing,cubic-bezier(.26, .86, .44, .985)));--_build:min(calc(.6 * var(--count,1) * var(--_dur)), calc(var(--_max) - var(--_fade)));--_steptime:min(calc(.65 * var(--_dur)), calc(var(--_max) / (var(--count,1) - .08)));--_rise:min(calc(var(--_el) * 1.6), calc(var(--_max) - var(--_fade)));--_ring:calc(var(--_dur) + (var(--count,1) - 1) * var(--_stg))}:where([data-animate]) :where(.tablechart-bar){transform-box:fill-box;transform-origin:bottom;transition:transform var(--_dur) var(--_ease);transition-delay:calc(var(--i) * var(--_stg));transform:scaleY(0)}:where([data-animate]) :where(.tablechart-bar[data-grow=down]){transform-origin:top}:where([data-animate]) :where(.tablechart-bar[data-grow=right]){transform-origin:0;transform:scaleX(0)}:where([data-animate]) :where(.tablechart-bar[data-grow=left]){transform-origin:100%;transform:scaleX(0)}:where([data-animate]) :where(.tablechart-series){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path calc(var(--d,1) * var(--_stg)) linear;transition-delay:calc(max(var(--i) - 1, 0) * var(--_stg))}:where([data-animate]) :where(.tablechart-area-fill){opacity:0;transition:opacity calc(max(var(--rows) - 1, 1) * var(--_stg)) linear;transition-delay:calc(max(var(--i) - 1, 0) * var(--_stg))}:where([data-animate]) :where(.tablechart-point,.tablechart-hole){opacity:0;transition:opacity var(--_fade) ease;transition-delay:calc(var(--i) * var(--_stg) + .048 * var(--_dur))}:where([data-animate]) :where(.tablechart-hole[data-for=badge]){transition:opacity .3s;transition-delay:calc(var(--after) * var(--_stg) + .35s)}:where([data-animate]) :where(.tablechart-value,.tablechart-name){opacity:0;transition:opacity var(--_fade) ease;transition-delay:calc(var(--i) * var(--_stg) + .096 * var(--_dur))}:where([data-animate]) :where(.tablechart-connector){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path calc(var(--_dur) / 3) linear;transition-delay:calc(var(--i) * var(--_stg))}:where([data-animate]) :where(.tablechart-slice){stroke-dasharray:0 var(--circ);transition:stroke-dasharray var(--_dur) var(--_ease);transition-delay:calc(var(--i) * var(--_stg))}:where([data-animate]) :where(.tablechart-centre){opacity:0;transition:opacity var(--_fade) ease;transition-delay:calc(var(--i,0) * var(--_stg) + .5 * var(--_dur))}:where([data-animate]) :where(.tablechart-leader){stroke-opacity:0;transition:stroke-opacity var(--_fade) ease;transition-delay:calc(var(--i,0) * var(--_stg) + .5 * var(--_dur))}:where([data-animate]) :where([data-chart=donut] .tablechart-value){transition-delay:calc(var(--i,0) * var(--_stg) + .5 * var(--_dur))}:where([data-animate]) :where(.tablechart-break[data-part=edge]){stroke-opacity:0;transition:stroke-opacity .2s;transition-delay:calc((var(--after) + .9) * var(--_stg))}:where([data-animate]) :where(.tablechart-line){stroke-dasharray:var(--len);stroke-dashoffset:var(--len);transition:stroke-dashoffset var(--tablechart-annotation-duration,.6s) var(--_ease);transition-delay:calc(var(--after) * var(--_stg))}:where([data-animate]) :where(.tablechart-head){opacity:0;transition:opacity .2s;transition-delay:calc(var(--after) * var(--_stg) + .55s)}:where([data-animate]) :where(.tablechart-badge){opacity:0;transition:opacity .3s;transition-delay:calc(var(--after) * var(--_stg) + .35s)}:where([data-chart=waterfall]:not([data-animate=sweep])){--_ratio:.6;--_keep:1}:where([data-animate=sweep][data-chart=waterfall]:not([data-steps])) :where(.tablechart-bar,.tablechart-connector){transition-duration:calc(var(--span,1) * var(--_build));transition-timing-function:var(--ease,linear);transition-delay:calc(var(--start,0) * var(--_build))}:where([data-animate=sweep][data-chart=waterfall]:not([data-steps])) :where(.tablechart-value){transition-delay:calc((var(--start,0) + .5 * var(--span,0)) * var(--_build))}:where([data-animate=sweep][data-chart=waterfall]:not([data-steps])) :where(.tablechart-badge,.tablechart-hole[data-for=badge]){transition-delay:calc(var(--_build) + .2s)}:where([data-animate=sweep][data-chart=waterfall]:not([data-steps])) :where(.tablechart-break[data-part=edge]){transition-delay:calc((var(--start,0) + var(--span,1)) * var(--_build))}:where([data-animate][data-chart=waterfall][data-steps]) :where(.tablechart-bar){transition-duration:calc(.923 * var(--_steptime));transition-delay:calc(var(--i) * var(--_steptime))}:where([data-animate][data-chart=waterfall][data-steps]) :where(.tablechart-connector){transition:clip-path calc(.308 * var(--_steptime)) linear;transition-delay:calc((var(--i) - 1) * var(--_steptime) + calc(.692 * var(--_steptime)))}:where([data-animate][data-chart=waterfall][data-steps]) :where(.tablechart-value){transition-delay:calc(var(--i) * var(--_steptime) + calc(.923 * var(--_steptime)) * .5)}:where([data-animate][data-chart=waterfall][data-steps]) :where(.tablechart-badge,.tablechart-hole[data-for=badge]){transition-delay:calc(var(--after) * var(--_steptime) + .2s)}:where([data-animate].is-shown) :where(.tablechart-bar){transform:scaleY(1)}:where([data-animate].is-shown) :where(.tablechart-bar:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(1)}:where([data-animate].is-shown) :where(.tablechart-bar:is([data-grow=right],[data-grow=left])){transform:scaleX(1)}:where([data-animate].is-shown) :where(.tablechart-series){clip-path:inset(-10px)}:where([data-animate].is-shown) :where(.tablechart-point){opacity:1}:where([data-animate].is-shown) :where(.tablechart-hole){opacity:1}:where([data-animate].is-shown) :where(.tablechart-area-fill){opacity:1}:where([data-animate].is-shown) :where(.tablechart-value){opacity:1}:where([data-animate].is-shown) :where(.tablechart-name){opacity:1}:where([data-animate].is-shown) :where(.tablechart-head){opacity:1}:where([data-animate].is-shown) :where(.tablechart-badge){opacity:1}:where([data-animate].is-shown) :where(.tablechart-centre){opacity:1}:where([data-animate].is-shown) :where(.tablechart-leader){stroke-opacity:1}:where([data-animate].is-shown) :where(.tablechart-break[data-part=edge]){stroke-opacity:1}:where([data-animate].is-shown) :where(.tablechart-slice){stroke-dasharray:var(--arc) calc(var(--circ) - var(--arc))}:where([data-animate].is-shown) :where(.tablechart-connector){clip-path:inset(-10px)}:where([data-animate].is-shown) :where(.tablechart-line){stroke-dashoffset:0}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area])) :where(.tablechart-series,.tablechart-area){clip-path:none;transform-box:view-box;transform-origin:0 var(--_base);transition:transform var(--_rise) var(--_ease);transition-delay:0s;transform:scaleY(0)}:where([data-animate=grow]:is([data-chart=line],[data-chart=area])) :where(.tablechart-series,.tablechart-area){clip-path:none;transform-box:view-box;transform-origin:0 var(--_base);transition:transform var(--_rise) var(--_ease);transition-delay:0s;transform:scaleY(0)}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area])) :where(.tablechart-area-fill){opacity:1;transition:none}:where([data-animate=grow]:is([data-chart=line],[data-chart=area])) :where(.tablechart-area-fill){opacity:1;transition:none}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area])) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:0;transform:translateY(var(--rise,0));transition:transform var(--_rise) var(--_ease), opacity .15s ease;transition-delay:0s}:where([data-animate=grow]:is([data-chart=line],[data-chart=area])) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:0;transform:translateY(var(--rise,0));transition:transform var(--_rise) var(--_ease), opacity .15s ease;transition-delay:0s}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area])) :where(.tablechart-value,.tablechart-name){transition-delay:var(--_rise)}:where([data-animate=grow]:is([data-chart=line],[data-chart=area])) :where(.tablechart-value,.tablechart-name){transition-delay:var(--_rise)}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area]).is-shown) :where(.tablechart-series,.tablechart-area){transform:scaleY(1)}:where([data-animate=grow]:is([data-chart=line],[data-chart=area]).is-shown) :where(.tablechart-series,.tablechart-area){transform:scaleY(1)}:where([data-animate=grow]:-webkit-any([data-chart=line],[data-chart=area]).is-shown) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:1;transform:none}:where([data-animate=grow]:is([data-chart=line],[data-chart=area]).is-shown) :where(.tablechart-point,.tablechart-hole:not([data-for])){opacity:1;transform:none}:where([data-animate=sweep][data-chart=donut]) :where(.tablechart-slice){transition:stroke-dasharray calc(var(--span,1) * var(--_ring)) var(--ease,linear);transition-delay:calc(var(--start,0) * var(--_ring))}:where([data-animate=sweep][data-chart=donut]) :where(.tablechart-leader,.tablechart-value){transition-delay:calc((var(--start,0) + var(--span,0)) * var(--_ring))}:where([data-animate=sweep][data-chart=donut]) :where(.tablechart-centre){transition-delay:calc(.5 * var(--_ring))}:where([data-animate]){transition:opacity var(--tablechart-queue-duration,.4s) ease}:where([data-animate].tablechart-queued){opacity:0}@media (prefers-reduced-motion:reduce){:where([data-animate]) :where(*){transition-duration:1ms!important;transition-delay:0s!important}}:where([data-animate][data-steps]) :where(.tablechart-series){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path var(--_dur) ease}:where([data-animate][data-steps]) :where(.tablechart-area-fill>*){clip-path:inset(-10px calc(100% + 10px) -10px -10px);transition:clip-path var(--_dur) ease}:where([data-animate][data-steps]) :where(.tablechart-area-fill){opacity:1;transition:none}:where([data-animate][data-steps]) :where(.tablechart-piece){transform-box:fill-box;transform-origin:bottom;transition:transform var(--_dur) var(--_ease);transition-delay:calc(var(--i,0) * var(--_stg))}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=right]){transform-origin:0}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=down]){transform-origin:top}:where([data-animate][data-steps]) :where(.tablechart-piece[data-grow=left]){transform-origin:100%}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar){transform:scaleY(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-bar:is([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece){transform:scaleY(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece:-webkit-any([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-piece:is([data-grow=right],[data-grow=left])){transform:scaleX(clamp(0, var(--_step,0) - var(--step,-1), 1))}:where([data-animate][data-steps].is-shown) :where(.tablechart-value){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-name){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-head){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-badge){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-centre){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-point){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-hole){opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-leader){stroke-opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-break[data-part=edge]){stroke-opacity:clamp(0, var(--_step,0) - var(--step,-1), 1)}:where([data-animate][data-steps].is-shown) :where(.tablechart-line){stroke-dashoffset:calc(var(--len) * (1 - clamp(0, var(--_step,0) - var(--step,-1), 1)))}:where([data-animate][data-steps].is-shown) :where(.tablechart-connector){clip-path:inset(-10px calc((1 - clamp(0, var(--_step,0) - var(--step,-1), 1)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-series){clip-path:inset(-10px calc((1 - var(--reveal,0)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-area-fill>*){clip-path:inset(-10px calc((1 - var(--reveal,0)) * (100% + 20px) - 10px) -10px -10px)}:where([data-animate][data-steps].is-shown) :where(.tablechart-slice){stroke-dasharray:calc(var(--arc) * clamp(0, var(--_step,0) - var(--step,-1), 1)) calc(var(--circ) - var(--arc) * clamp(0, var(--_step,0) - var(--step,-1), 1))}:where(.tablechart-controls){justify-content:var(--tablechart-control-justify,var(--tablechart-controls-justify,space-between));margin-top:var(--tablechart-control-gap,var(--tablechart-controls-gap,.75em));align-items:center;gap:.5em;display:flex}:where(.tablechart-controls) :where(button){padding:var(--tablechart-control-padding,.3em .7em);border:var(--tablechart-control-border,1px solid color-mix(in oklab, currentColor 30%, transparent));border-radius:var(--tablechart-control-radius,.4em);background:var(--tablechart-control-surface,none);color:inherit;font:inherit;cursor:pointer;align-items:center;gap:.35em;display:inline-flex}:where(.tablechart-controls) :where(button:disabled){opacity:.35;cursor:default}:where(.tablechart-controls) :where(.tablechart-control-icon svg){fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:.8em;height:.8em;display:block}@media print{:where([data-steps]){--_step:999!important}:where([data-steps] [data-from]){--reveal:1!important}:where(.tablechart-controls){display:none}}.tablechart-plot[data-active] .tablechart-value:not([data-active]){visibility:hidden}.tablechart-plot[data-pointed] .tablechart-value{transition-delay:0s}.tablechart-plot[data-hover]{cursor:default}.tablechart-plot[data-hover] :where(.tablechart-value){-webkit-user-select:none;user-select:none}.tablechart-pointer{background:var(--tablechart-pointer-color,color-mix(in oklab, currentColor 8%, transparent));pointer-events:none;display:none;position:absolute}.tablechart-plot[data-active]>.tablechart-pointer{display:block}@media print{:where(.tablechart,[data-chart]) :where(table,.chart-annotations){display:none}}
2
2
  /*$vite$:1*/
@@ -0,0 +1,2 @@
1
+ import { a as init, f as defaultConfig, n as TablechartInstance, r as create, s as Config, t as TablechartChart } from "./tablechart-shared.mjs";
2
+ export { type TablechartChart, type Config as TablechartConfig, type TablechartInstance, create, defaultConfig, init };
@@ -1 +1 @@
1
- !function(){var t="tablechart",e="tablechart-value",n="tablechart-bar",a="tablechart-rule",o="tablechart-line",r="tablechart-head",s="tablechart-slice",c="tablechart-legend",l="tablechart-hole",i="tablechart-centre",u="tablechart-break",d="tablechart-sr",h=1e3,f={selector:"[data-chart]",aspect:.38,barfill:.58,ringfill:.42,animate:!0,entrance:.5,labels:"outside",shape:"straight",legend:!1,hover:!0,totallabel:"Total",controls:!0,previouslabel:"Previous",nextlabel:"Next",stephint:"step of the chart",threshold:.5,replay:!1,langattribute:"data-i18n"},b=(t,e)=>`${t}:${e}`,m=t=>Math.round(100*t)/100,g=(t,e={})=>{const n=document.createElementNS("http://www.w3.org/2000/svg",t);for(const a in e){const t=e[a];n.setAttribute(a,String("number"==typeof t?m(t):t))}return n},p=(t,e)=>[t,...e.classes].join(" "),$=(t,e)=>{const n=document.createElement("span");return n.className=t,n.inert=!0,e.appendChild(n),n},w=(t,e,n,a,o)=>{t.style.left=e/a*100+"%",t.style.top=n/o*100+"%"},y=0,M=(t,e,n,a)=>{if(!e.length)return;const o="tablechart-cut-"+ ++y,r=g("mask",{id:o,maskUnits:"userSpaceOnUse"});r.appendChild(g("rect",{x:-n,y:-a,width:3*n,height:3*a,fill:"white"}));for(const l of e)l.setAttribute("fill","black"),r.appendChild(l);let s=t.querySelector(":scope > defs");s||(s=g("defs"),t.prepend(s)),s.appendChild(r);const c=g("g",{mask:`url(#${o})`});for(const l of Array.from(t.childNodes))l!==s&&c.appendChild(l);t.appendChild(c)},v=0,k={create:()=>null,draw(t,e,a){const{rows:o,y:r,svg:s,breakAt:c}=a;if(null===c)return;const l="zigzag"===t.getAttribute("data-mark"),i=(t,e)=>{const n=t.sideways?t.height:t.width,a=.09*n,o=n+2*a,r=.3*o,s=.06*o;if(t.sideways){const n=t.y-a;if(!l)return[[e-r/2,n],[e+r/2,n+o]];const c=o/3;return[[e-s,n],[e+s,n+c],[e-s,n+2*c],[e+s,n+o]]}const c=t.x-a;if(!l)return[[c,e+r/2],[c+o,e-r/2]];const i=o/3;return[[c,e+s],[c+i,e-s],[c+2*i,e+s],[c+o,e-s]]},d=(t,e=!1)=>t.map(([t,e],n)=>`${0===n?"M":"L"} ${t.toFixed(1)} ${e.toFixed(1)}`).join(" ")+(e?" Z":""),h="tablechart-break-"+ ++v,f=g("mask",{id:h,maskUnits:"userSpaceOnUse"});f.appendChild(g("rect",{x:-1e3,y:-a.height,width:3e3,height:3*a.height,fill:"white"}));const m=[],p=r(c);for(const M of(t=>Array.from(t.querySelectorAll(`.${n}`)).map(t=>{const e="rect"===t.tagName?[t]:Array.from(t.querySelectorAll("rect")),n=(t,e)=>Number(t.getAttribute(e)),a=Math.min(...e.map(t=>n(t,"x"))),o=Math.min(...e.map(t=>n(t,"y"))),r=Math.max(...e.map(t=>n(t,"x")+n(t,"width"))),s=Math.max(...e.map(t=>n(t,"y")+n(t,"height")));return{row:Number(t.dataset.row),x:a,y:o,width:r-a,height:s-o,sideways:"right"===t.dataset.grow}}))(s)){const t=M.sideways?a.breakX:p;if(void 0===t)continue;if(!(M.sideways?M.x<t&&M.x+M.width>t:M.y<p&&M.y+M.height>p))continue;const[e,n]=M.sideways?[i(M,t),i(M,t+a.breakGap)]:[i(M,p-a.breakGap),i(M,p)];f.appendChild(g("path",{d:d([...e,...n.slice().reverse()],!0),fill:"black"})),m.push(e,n);const r=b("--after",o[M.row-1]?.slot??0);for(const o of[e,n])s.appendChild(g("path",{class:u,"data-part":"edge","data-note":a.note,d:d(o),style:r}))}if(!m.length)return;const $=Array.from(s.querySelectorAll(`.${u}`)),w=g("g",{mask:`url(#${h})`});for(const n of Array.from(s.childNodes))$.includes(n)||w.appendChild(n);const y=g("defs");y.appendChild(f),s.prepend(y,w)}},x=t=>{let e=Number.NEGATIVE_INFINITY;for(const n of t)e=Math.max(e,n);return e},A=t=>(t.split(/[.,]/)[1]||"").length,N=(t,e,n)=>{const a=((t,e)=>new Intl.NumberFormat(e||document.documentElement.lang||void 0,{minimumFractionDigits:t,maximumFractionDigits:t}))(e,n).formatToParts(t),o="minusSign"===a[0]?.type?a[0].value:"";return[o,a.slice(o?1:0).map(t=>t.value).join("")]},S=(t,e)=>{const n=document.createElement("span");if(n.className="tablechart-badge",n.inert=!0,t.childElementCount>0)for(const a of Array.from(t.children))n.appendChild(a.cloneNode(!0));else{n.textContent=(t.textContent||"").trim();const e=t.getAttribute("data-i18n");e&&n.setAttribute("data-i18n",e)}return e.appendChild(n),n},H=(e,n,a,o)=>{const r=(s=e?.textContent||"",Number.parseFloat((s.match(/-?[\d.,]+/)||["NaN"])[0].replace(",",".")));var s;const c=!!Number.isNaN(r)||Math.abs(n-r)<=.5,l={label:a,computed:n,stated:r,agrees:c};o.checks.push(l),c||console.warn(`[${t}] An annotation reads ${r}%, but ${a} is ${n.toFixed(1)}%. The chart shows what you wrote; this is only a check.`)},T={create:S,draw(e,n,a){const{rows:s,cx:c,y:l,unit:i,labelHeight:u,badgeHeight:d,height:f,svg:m,after:p}=a,[$,y]=((t,e)=>{const n=(e,n)=>{const a=Number.parseInt(t.getAttribute(e)??"",10);return Number.isFinite(a)?a-1:n};return[n("data-from",0),n("data-to",e-1)]})(e,s.length),M=s[$],v=s[y];if(!M||!v)return void console.warn(`[${t}] A bracket points at a row that is not there (row ${$+1} to ${y+1}, of ${s.length}).`);const k=7*i,x=4*i,A=c($),N=c(y),S=Math.min(l(M.value),l(v.value))-u-x-.9*d,T=t=>l(t)-u-x,L=`M ${A} ${T(M.value)} L ${A} ${S} L ${N} ${S} L ${N} ${T(v.value)-k}`,z=(T(M.value)-S+Math.abs(N-A)+(T(v.value)-k-S))/i+1;m.appendChild(g("path",{class:o,"data-note":a.note,d:L,style:`--len:${z.toFixed(1)}; ${b("--after",p)}`}));const C=T(v.value);var O;m.appendChild(g("polygon",{class:r,"data-note":a.note,points:`${N},${C} ${N-.45*k},${C-k} ${N+.45*k},${C-k}`,style:b("--after",p)})),n&&(w(n,(A+N)/2,S,h,f),n.style.setProperty("--after",String(p))),H(n,(O=M.value,(v.value-O)/Math.abs(O)*100),`${M.value} to ${v.value}`,a)}},L=new WeakMap,z=t=>L.get(t)??{width:t.offsetWidth,height:t.offsetHeight},C={create:S,draw(t,e,n){const{rows:a,cx:s,y:c,unit:l,labelHeight:i,height:u,svg:d,values:f,after:m}=n,p=a[0],$=a[a.length-1];if(!p||!$)return;const y=i+18*l,M=10*l,v=10*l;let k=s(0),x=c(p.value)-y,A=s(a.length-1),N=c($.value)-y,S=0;a.forEach((t,e)=>{const n=A===k?0:(s(e)-k)/(A-k),a=x+n*(N-x)-(c(t.value)-y);a>S&&(S=a)}),x-=S,N-=S;const T=A-k,L=N-x,C=Math.hypot(T,L)||1,O=T/C,U=L/C;k-=O*M,x-=U*M,A+=O*M,N+=U*M;const B=Number.parseFloat(t.getAttribute("data-at")||"0.5");if(e){const t=k+(A-k)*B,n=x+(N-x)*B,o=z(e).width*l/2,r=n+z(e).height*l/2+8*l;let u=0;a.forEach((e,n)=>{const a=(f[n]?z(f[n]).width:0)*l/2;if(Math.abs(s(n)-t)>=o+a)return;const d=c(e.value)-7*l-i;u=Math.max(u,r-d)}),x-=u,N-=u}const E=A-O*v,F=N-U*v,P=Math.hypot(E-k,F-x)/l+1;d.appendChild(g("line",{class:o,"data-note":n.note,x1:k,y1:x,x2:E,y2:F,style:`--len:${P.toFixed(1)}; ${b("--after",m)}`}));const j=-U,q=O,V=.42*v;d.appendChild(g("polygon",{class:r,"data-note":n.note,points:[`${A},${N}`,`${E+j*V},${F+q*V}`,`${E-j*V},${F-q*V}`].join(" "),style:b("--after",m)})),e&&(w(e,k+(A-k)*B,x+(N-x)*B,h,u),e.style.setProperty("--after",String(m)));const I=Number.parseFloat(t.getAttribute("data-years")||"");!Number.isNaN(I)&&I>0&&H(e,((t,e,n)=>100*(Math.pow(e/t,1/n)-1))(p.value,$.value,I),`${p.value} to ${$.value} over ${I} years`,n)}},O=(t,e,n)=>{const a=.15,o=Math.min(.7*t/(e+(e-1)*a),n),r=e*o+(e-1)*o*a;return{size:o,gap:o*a,offset:t=>-r/2+t*o*1.15}},U=(t,e,n)=>{const a=t.series[n],o=t.series.some(t=>t.focus)&&!a.focus;return{"data-series":n+1,...o&&{"data-muted":""},style:`--n:${n}; --m:${o?1:0}; --palette:var(--tablechart-color-${n+1}); ${b("--i",e.slot)}`}},B=(t,e,n=!1)=>{let a=0,o=0;return Array.from({length:e},(e,r)=>{const s=t.cells[r]??t.cells[0],c=s.missing?0:s.value;if(n){const t=a;return a+=c,{from:t,to:a,cell:s}}if(c<0){const t=o;return o+=c,{from:t,to:o,cell:s}}const l=a;return a+=c,{from:l,to:a,cell:s}})},E=(t,e,n=!1)=>{const a=B(t,e,n);return{top:Math.max(0,...a.map(t=>t.to)),bottom:Math.min(0,...a.map(t=>t.to))}},F=(t,e)=>{const{top:n,bottom:a}=E(t,e);return n+a},P=(t,e,n)=>{const a=e.series.some(t=>t.focus);t.style.setProperty("--n",String(n)),t.style.setProperty("--m",a&&!e.series[n].focus?"1":"0"),t.style.setProperty("--palette",`var(--tablechart-color-${n+1})`)},j=(t,e,a,o={},r="")=>{const s={class:p(n,e),"data-kind":"bar","data-row":a+1,...o},c=b("--i",e.slot)+(r?`; transform-origin: ${r}`:""),l=g("g",{...s,"data-stack":"",style:c});return t.svg.appendChild(l),(n,r)=>{const s=void 0!==o["data-grow"]?{"data-grow":o["data-grow"]}:{};l.appendChild(g("rect",{...s,...r,class:p("tablechart-piece",e),"data-row":a+1,...U(t,e,n)}))}},q=(t,e,n)=>t.some(t=>z(t).width*n>e-6*n),V=(t,e,n)=>e>=z(t).height*n*1.6,I=(t,e,n)=>e>=z(t).width*n*1.5,K=(t,e,n,a,o=.7)=>{t.style.setProperty(a,"1");let r=1;for(const c of e){const{size:t,room:e}=n(c);t>e&&(r=Math.min(r,e/t))}const s=r>=o?r:0;return t.style.setProperty(a,String(s||o)),s},R={segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),series:!0,legend:"box",stackable:!0,totals:!0,breakable:!0,aspect:.5,minHeight:({labelHeight:t,nameHeight:e,rows:n,series:a,stacked:o})=>{const r=1.1*t,s=a>1&&!o?r*(a+.15*(a-1))/.7:r/.58;return n*Math.max(s,1.2*e)},categories:"beside",headroom:()=>0,draw(t){const{segments:e,height:o,unit:r,svg:s,values:c,categories:l,config:i,barMax:u}=t,d=t.series.length>1,f=Math.max(x(l.map(t=>z(t).width*r)),0),m=Math.min(f+10*r,420),$=h-4*r,y=t.stacked?Math.max(x(t.rows.map(e=>E(e,t.series.length).top)),0)||1:Math.max(x(t.rows.flatMap(e=>e.cells.slice(0,t.series.length).map(t=>Math.abs(t.value)))),0)||1,M=t.stacked?Math.max(x(t.rows.map(e=>-E(e,t.series.length).bottom)),0):Math.max(x(t.rows.flatMap(e=>e.cells.slice(0,t.series.length).map(t=>-t.value))),0),v=Math.max(y,t.squeeze?.hi??0)+M,k=(e,n)=>((t,e,n,a,o)=>{if(!a)return t/e*n;const{lo:r,hi:s,gap:c,share:l}=a,i=n*l,u=(n-i-o)/(r+(e-s)),d=i/(s-r);return t<=r?t*u:t<=c?r*u+(t-r)*d:t<=s?r*u+(t-r)*d+o:r*u+i+o+(t-s)*u})(Math.abs(e),v,n,t.squeeze,t.breakGap),A=o/e.length,N=t=>(t+.5)*A,S=Math.min(A*i.barfill,u),H=O(A,t.series.length,u),T=c[0]??t.totals[0],L=T?z(T).height*r*.56:0,C=Math.max(((d&&!t.stacked?H.size:S)-L)/2,5*r),F=t=>z(t).width*r,q=t=>t.length?x(t.map(F))+C+4*r:0,V=(e,n)=>(t.rows[n].cells[e]??t.rows[n].cells[0]).value,R=t.seriesValues.flatMap((t,e)=>t.map((t,n)=>({label:t,value:V(e,n)}))),W=e=>{const n=E(t.rows[e],t.series.length);return 0===n.top&&n.bottom<0};let D=t.stacked?q(t.totals.filter((t,e)=>!W(e))):d?q(R.filter(t=>t.value>=0).map(t=>t.label)):0,G=t.stacked?q(t.totals.filter((t,e)=>W(e))):d?q(R.filter(t=>t.value<0).map(t=>t.label)):0;if(!d&&!t.stacked)for(let n=0;n<3;n++){const t=$-m-D-G,n=e.map((t,e)=>({seg:t,label:c[e]})).filter(({seg:e,label:n})=>!I(n,k(e.value,t),r)),a=q(n.filter(({seg:t})=>t.value>=0).map(({label:t})=>t)),o=q(n.filter(({seg:t})=>t.value<0).map(({label:t})=>t));if(a<=D&&o<=G)break;D=Math.max(D,a),G=Math.max(G,o)}const Z=$-m-D-G,J=m+G+k(M,Z),Q=t=>t<0?J-k(t,Z):J+k(t,Z);if(t.squeeze&&(t.breakX=Q(t.squeeze.gap)),t.stacked)return t.rows.forEach((e,n)=>{const a=E(e,t.series.length),s=j(t,e,n,{"data-grow":"right"},a.bottom<0?J-Q(a.bottom)+"px center":""),c=N(n)-S/2;B(e,t.series.length).forEach(({from:e,to:a,cell:l},i)=>{const u=t.seriesValues[i][n];if(u.dataset.place="none",l.missing||a===e)return;const d=Math.min(Q(e),Q(a)),f=Math.max(Q(e),Q(a));s(i,{x:d,y:c,width:Math.max(f-d,1),height:S,...a<e&&{"data-grow":"left"}}),u.dataset.place="inside",u.toggleAttribute("data-left-out",!I(u,f-d,r)||z(u).height*r>S),P(u,t,i),w(u,(d+f)/2,N(n),h,o)});const i=t.totals[n];i&&(i.dataset.place=W(n)?"before":"after",w(i,W(n)?Q(a.bottom)-C:Q(a.top)+C,N(n),h,o));const u=l[n];u&&w(u,m-8*r,N(n),h,o)}),void s.appendChild(g("line",{class:a,x1:J,x2:J,y1:0,y2:o}));if(d){t.plot.dataset.grouped="";const e=t.seriesValues.flat().filter(t=>void 0===t.dataset.missing),c=K(t.plot,e,t=>({size:z(t).height*r,room:H.size+.5*H.gap}),"--tablechart-fit");return t.rows.forEach((e,a)=>{t.series.forEach((r,l)=>{const i=e.cells[l]??e.cells[0],u=t.seriesValues[l][a];if(i.missing)return void(u.dataset.place="none");const d=Q(i.value),f=i.value<0,b=N(a)+H.offset(l);s.appendChild(g("rect",{class:p(n,e),"data-kind":"bar","data-row":a+1,"data-grow":f?"left":"right",x:Math.min(d,J),y:b,width:Math.max(Math.abs(d-J),1),height:H.size,...U(t,e,l)})),u.dataset.place=f?"before":"after",u.toggleAttribute("data-left-out",!c),w(u,f?d-C:d+C,b+H.size/2,h,o)});const i=l[a];i&&w(i,m-8*r,N(a),h,o)}),void s.appendChild(g("line",{class:a,x1:J,x2:J,y1:0,y2:o}))}const X=e.map((t,e)=>I(c[e],Math.abs(Q(t.value)-J),r));e.forEach((e,a)=>{const i=Q(e.value),u=N(a),d=e.value<0,f=Math.abs(i-J);s.appendChild(g("rect",{class:p(n,e),"data-kind":e.kind,"data-row":a+1,"data-grow":d?"left":"right",x:Math.min(i,J),y:u-S/2,width:Math.max(f,1),height:S,style:b("--i",e.slot)}));const $=c[a],y=Math.max(Math.min(C,f-F($)-6*r),6*r),M=d?1:-1;$.dataset.place=X[a]?"inside":d?"before":"after",$.dataset.kind=e.kind,w($,X[a]?"center"===t.insideAlign?(J+i)/2:"start"===t.insideAlign?J-M*(y+F($)/2):i+M*(y+F($)/2):i-M*C,u,h,o);const v=l[a];v&&w(v,m-8*r,u,h,o)}),s.appendChild(g("line",{class:a,x1:J,x2:J,y1:0,y2:o}))}},W={segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),series:!0,legend:"box",stackable:!0,totals:!0,breakable:!0,headroom:({labelHeight:t,badgeHeight:e,hasAnnotations:n,unit:a})=>t+4*a+(n?1.6*e:0),draw(t){const{segments:e,cx:o,y:r,barWidth:s,height:c,unit:l,svg:i,values:u,labels:d,insideAlign:f}=t,m=r(0);if(t.stacked)return t.rows.forEach((e,n)=>{const a=E(e,t.series.length),i=j(t,e,n,{},a.bottom<0?`center ${m-r(a.top)}px`:""),u=o(n)-s/2;B(e,t.series.length).forEach(({from:e,to:a,cell:d},f)=>{const b=t.seriesValues[f][n];if(b.dataset.place="none",d.missing||a===e)return;const m=Math.min(r(a),r(e)),g=Math.max(r(a),r(e));i(f,{x:u,y:m,width:s,height:Math.max(g-m,1),...a<e&&{"data-grow":"down"}}),b.dataset.place="inside",b.toggleAttribute("data-left-out",!V(b,g-m,l)||z(b).width*l>s-4*l),P(b,t,f),w(b,o(n),(m+g)/2,h,c)});const d=t.totals[n];if(d){const t=0===a.top&&a.bottom<0;d.dataset.place=t?"below":"outside",w(d,o(n),t?r(a.bottom)+4*l:r(a.top)-4*l,h,c)}}),void i.appendChild(g("line",{class:a,x1:0,x2:h,y1:m,y2:m}));if(t.series.length>1){const e=O(o(1)-o(0)||2*o(0),t.series.length,t.barMax);t.plot.dataset.grouped="";const s=t.seriesValues.flat().filter(t=>void 0===t.dataset.missing),u=K(t.plot,s,t=>({size:z(t).width*l,room:e.size+.5*e.gap}),"--tablechart-fit");return t.rows.forEach((a,s)=>{t.series.forEach((d,f)=>{const b=a.cells[f]??a.cells[0],$=t.seriesValues[f][s],y=o(s)+e.offset(f);if(b.missing)return void($.dataset.place="none");const M=r(b.value),v=b.value<0;i.appendChild(g("rect",{class:p(n,a),"data-kind":"bar","data-row":s+1,...v&&{"data-grow":"down"},x:y,y:Math.min(M,m),width:e.size,height:Math.max(Math.abs(m-M),1),...U(t,a,f)})),$.dataset.place=v?"below":"outside",$.toggleAttribute("data-left-out",!u),w($,y+e.size/2,v?M+4*l:M-4*l,h,c)})}),void i.appendChild(g("line",{class:a,x1:0,x2:h,y1:m,y2:m}))}const $=q(u,s,l),y=e.map((t,e)=>"inside"===d&&!$&&!t.missing&&V(u[e],Math.abs(m-r(t.value)),l)),M=u[0]?z(u[0]).height*l*.56:0;let v=Number.POSITIVE_INFINITY;for(const[n,a]of u.entries())y[n]&&(v=Math.min(v,(s-z(a).width*l)/2));e.forEach((t,e)=>{const a=r(t.value),d=t.value<0;if(t.missing)return w(u[e],o(e),m-4*l,h,c),void(u[e].dataset.place="outside");i.appendChild(g("rect",{class:p(n,t),"data-kind":t.kind,"data-row":e+1,...d&&{"data-grow":"down"},x:o(e)-s/2,y:Math.min(a,m),width:s,height:Math.max(Math.abs(m-a),1),style:b("--i",t.slot)}));const $=d?-1:1,k=Math.min(v,(Math.abs(m-a)-M)/2),x="center"===f?(a+m)/2:"start"===f?m-$*(k+M/2):a+$*(k+M/2),A=d?a+4*l:a-4*l;w(u[e],o(e),y[e]?x:A,h,c),u[e].dataset.place=y[e]?"inside":d?"below":"outside"}),i.appendChild(g("line",{class:a,x1:0,x2:h,y1:m,y2:m}))}},D=0,G={aspect:.66,centre:!0,headroom:()=>0,segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),draw({rows:t,height:e,unit:n,labelHeight:a,svg:o,values:r,config:c,centre:l}){const i=500,u=e/2,d=(t=>t.filter(t=>!t.isTotal))(t).reduce((t,e)=>t+Math.abs(e.value),0);if(!d)return;const f=1.2*a+10*n,m=Math.max(Math.min(h,e)/2-f,10),$=m*c.ringfill,y=m-$/2,M=2*Math.PI*y,v=[];let k=0,x=0;if(t.forEach((t,c)=>{const l=r[c];if(t.isTotal)return void(l.dataset.place="none");const f=Math.abs(t.value)/d*M,A=k/M*2*Math.PI-Math.PI/2;v.push(A),o.appendChild(g("circle",{class:p(s,t),"data-slice":x+1,"data-row":c+1,cx:i,cy:u,r:y,"stroke-width":$,transform:`rotate(-90 500 ${u})`,"stroke-dasharray":`${f.toFixed(1)} ${(M-f).toFixed(1)}`,"stroke-dashoffset":(-k).toFixed(1),style:`--n:${x}; --palette:var(--tablechart-color-${x+1}); --arc:${f.toFixed(1)}; --circ:${M.toFixed(1)}; ${b("--i",t.slot)}`}));const N=A+f/M*Math.PI,S=Math.cos(N),H=Math.sin(N);o.appendChild(g("line",{class:"tablechart-leader",x1:i+S*(m+2*n),y1:u+H*(m+2*n),x2:i+S*(m+7*n),y2:u+H*(m+7*n),"data-row":c+1,style:b("--i",t.slot)}));const T=m+9*n,L=z(l).width*n/2;w(l,i+S*(T+Math.abs(S)*L),u+H*(T+Math.abs(H)*a*.7),h,e),l.dataset.place="around",k+=f,x+=1}),v.length>1){const t=y-$/2-1,n=y+$/2+1,a="tablechart-slices-"+ ++D,r=g("mask",{id:a,maskUnits:"userSpaceOnUse"});r.appendChild(g("rect",{x:0,y:0,width:h,height:e,fill:"white"}));for(const e of v)r.appendChild(g("line",{class:"tablechart-divide",x1:i+Math.cos(e)*t,y1:u+Math.sin(e)*t,x2:i+Math.cos(e)*n,y2:u+Math.sin(e)*n}));const c=g("g",{mask:`url(#${a})`});for(const e of Array.from(o.querySelectorAll(`.${s}`)))c.appendChild(e);const l=g("defs");l.appendChild(r),o.prepend(l,c)}l&&w(l,i,u,h,e)}},Z=["circle","square","diamond"],J=(t,e)=>{const n=t[e]?.marker?.toLowerCase().split(/\s+/)??[],a=Z.find(t=>n.includes(t));return{shape:a??Z[Math.floor(e/2)%Z.length],open:n.includes("open")||!n.includes("filled")&&!a&&e%2==1}},Q=t=>Number(t.toFixed(2));function X(t,e,n){const a=new Array(t).fill(0);let o=[];const r=()=>{(function(t,e){const n=t.length;if(n<2)return t.map(()=>0);const a=n=>(e[n+1]-e[n])/(t[n+1]-t[n]||1),o=new Array(n).fill(0);for(let s=1;s<n-1;s++){const e=a(s-1),n=a(s);if(e*n<=0)continue;const r=t[s]-t[s-1],c=t[s+1]-t[s],l=(e*c+n*r)/(r+c||1),i=Math.min(2*Math.abs(e),2*Math.abs(n),Math.abs(l));o[s]=Math.sign(e)*i||0}if(2===n)return o[0]=a(0),o[1]=a(0),o;const r=(n,a,o)=>{const r=t[a]-t[n];return r?((e[a]-e[n])/r*3-o)/2:o};return o[0]=r(0,1,o[1]),o[n-1]=r(n-2,n-1,o[n-2]),o})(o.map(t=>n(t)[0]),o.map(t=>n(t)[1])).forEach((t,e)=>{a[o[e]]=t}),o=[]};for(let s=0;s<t;s++)e(s)?r():o.push(s);return r(),a}var Y=t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),_=t=>({segments:Y,series:!0,stackable:!0,running:!0,swatch:t?"box":void 0,headroom:({labelHeight:t,unit:e})=>1.6*t+6*e,footroom:({labelHeight:e,unit:n,series:a,focused:o,stacked:r})=>t||r||2!==a||o?0:e+7*n,draw(e){const{rows:n,series:o,seriesValues:r,names:s,cx:c,y:i,height:u,unit:d,labelHeight:f,svg:b,stacked:m}=e,p="step"===e.shape,$="smooth"===e.shape,y=o.length>1,v=o.some(t=>t.focus),k=n.length-1,x=i(0),A=n.length>1?c(1)-c(0):2*c(0);b.style.setProperty("--tablechart-base",`${Q(x)}px`);const N=(t,e)=>n[e]?.cells[t]??n[e]?.cells[0],S=(t,e)=>!N(t,e)||!!N(t,e)?.missing,H=n.map(t=>m?B(t,o.length,!0):null),T=(t,e)=>H[e]?.[t].to??N(t,e)?.value??0,L=(t,e)=>H[e]?.[t].from??0,C=(t,e)=>[c(e),i(T(t,e))],O=o.map((t,e)=>{if(!y)return{attrs:{},ink:""};const n=v&&!t.focus;return{attrs:{"data-series":e+1,...n&&{"data-muted":""}},ink:`--n:${e}; --m:${n?1:0}; --palette:var(--tablechart-color-${e+1}); `}}),U=Math.min(k,6),E=k>0?U/(p?n.length:k):1,F=t=>t*E,P=t=>`--i:${Q(F(t))}`,j=t=>{const e=[];let a=-1;return n.forEach((n,o)=>{S(t,o)||(a<0&&(a=o),(o===k||S(t,o+1))&&((p||o>a)&&e.push([a,o]),a=-1))}),e},q=(t,e)=>`--i:${Q(F(t)+1)}; --d:${Q(F(p?e+1:e)-F(t))}`,V=(t,e)=>({"data-from":t+1,"data-to":e+1,...p&&{"data-flat":""}}),I=$?o.map((t,e)=>X(n.length,t=>S(e,t),t=>C(e,t))):[],K=$&&t?o.map((t,e)=>X(n.length,t=>S(e,t),t=>[c(t),i(L(e,t))])):[],R=(t,e,n)=>{const a=[];return t.forEach(([o,r],s)=>{p?(a.push(`H${Q(o+n*A/2)}`),s<t.length-1&&a.push(`V${Q(t[s+1][1])}`)):s>0&&a.push(e?function(t,e,n,a){const[o,r]=function(t,e,n,a){const o=(e[0]-t[0])/3;return[[t[0]+o,t[1]+n*o],[e[0]-o,e[1]-a*o]]}(t,e,n,a),s=([t,e])=>`${Q(t)},${Q(e)}`;return`C${s(o)} ${s(r)} ${s(e)}`}(t[s-1],[o,r],e[s-1],e[s]):`L${Q(o)},${Q(r)}`)}),a},W=(t,e,a,o)=>n.slice(e,a+1).map((n,a)=>[c(e+a),i(o(t,e+a))]),D=(t,e,n,a)=>$?t[e].slice(n,a+1):null,G=t=>c(t)-(p?A/2:0),Z=t=>c(t)+(p?A/2:0);t&&o.forEach((t,e)=>(t=>{const e=g("g",{class:"tablechart-area",...O[t].attrs,...m&&{"data-stacked":""},style:O[t].ink}),n=j(t),a=g("g",{class:"tablechart-area-fill",style:`--rows:${Q(U+1)}; ${n.length?q(...n[0]):""}`});e.appendChild(a);for(const[o,r]of n){const e=W(t,o,r,T),n=W(t,o,r,L),s=D(K,t,o,r)?.reverse()??null,c=[`M${Q(G(o))},${Q(n[0][1])}`,`L${Q(G(o))},${Q(e[0][1])}`,...R(e,D(I,t,o,r),1),`L${Q(Z(r))},${Q(n[n.length-1][1])}`,...R(n.reverse(),s,-1),"Z"].join(" ");a.appendChild(g("path",{d:c,...V(o,r),style:q(o,r)}))}b.appendChild(e)})(e)),o.forEach((t,e)=>(t=>{const e=o[t];for(const[n,a]of j(t)){const o=W(t,n,a,T),r=[`M${Q(G(n))},${Q(o[0][1])}`,...R(o,D(I,t,n,a),1)].join(" ");b.appendChild(g("path",{class:"tablechart-series",...O[t].attrs,d:r,...e.line&&{"data-line":e.line},...V(n,a),style:`${O[t].ink}${q(n,a)}`}))}})(e)),p||(()=>{const t=o.map((t,e)=>y?J(o,e):{shape:"circle",open:!1}),e=(e,n,a)=>{const[o,r]=C(e,n);return((t,e,n,a,o={})=>{if("square"===t){const t=.88*a;return g("rect",{x:e-t,y:n-t,width:2*t,height:2*t,...o})}if("diamond"===t){const t=1.2*a;return g("polygon",{points:`${e},${n-t} ${e+t},${n} ${e},${n+t} ${e-t},${n}`,...o})}return g("circle",{cx:e,cy:n,r:a,...o})})(t[e].shape,o,r,4*d,{...a,style:`${a.style??""}${s=r,`--rise:${Q(x-s)}px; `}${P(n)}`});var s},a=t=>n.map((t,e)=>e).filter(e=>!S(t,e));M(b,o.flatMap((n,o)=>t[o].open?a(o).map(t=>e(o,t,{class:l,"data-row":t+1,...y&&{"data-series":o+1}})):[]),h,u),o.forEach((n,o)=>{for(const r of a(o))b.appendChild(e(o,r,{class:"tablechart-point",...O[o].attrs,"data-marker":t[o].shape,...t[o].open&&{"data-open":""},"data-row":r+1,style:O[o].ink}))})})();const Y=(t,e)=>{let n=e;for(;n<k&&!S(t,n+1)&&N(t,n+1)?.value===N(t,e)?.value;)n++;return n};r.forEach((e,n)=>{e.forEach((e,a)=>{e.style.setProperty("--i",String(Q(p?(F(a)+F(a+1))/2:F(a))));const s=((e,n)=>{const a=N(e,n);if(!a||a.missing)return"none";if(p&&n>0&&!S(e,n-1)&&N(e,n-1)?.value===a.value)return"none";if(v&&!o[e].focus)return"none";if(m)return"middle";const r=a.value<0?"below":"above";if(!y||v||o.length>2)return r;const s=N(1-e,n);return!s||s.missing?r:a.value>s.value||a.value===s.value&&0===e||t&&a.value>=0&&C(e,n)[1]+7*d+f>x?"above":"below"})(n,a);if(e.dataset.place="above"===s?"outside":s,e.toggleAttribute("data-left-out","none"!==s&&((t,e)=>m||p?z(r[t][e]).width*d>(p?Y(t,e)-e+1:1)*A-4*d||!!(m&&t>0&&T(t,e)<L(t,e))||m&&Math.abs(i(L(t,e))-i(T(t,e)))<1.2*f:y&&!v&&o.length>2)(n,a)),p&&"none"!==s?e.dataset.rowEnd=String(Y(n,a)+1):delete e.dataset.rowEnd,"none"===s)return;const l=z(e).width*d/2+4*d;let b=c(a);p?b=(c(a)+c(Y(n,a)))/2:"middle"===s&&0===a?b+=l:"middle"===s&&a===k&&(b-=l);const g=i(T(n,a)),$={middle:(i(L(n,a))-g)/2,above:-7*d,below:7*d};w(e,b,g+$[s],h,u)})});const _=s.map((t,e)=>{let n=k;for(;n>0&&S(e,n);)n--;const[a,o]=C(e,n);return{name:t,x:(p?a+A/2:a)+10*d,y:m?(o+i(L(e,n)))/2:o}}),tt=(s[0]?z(s[0]).height:0)*d;for(const t of((t,e)=>(t.sort((t,e)=>t.y-e.y),t.forEach((n,a)=>{const o=t[a-1];o&&n.y<o.y+e&&(n.y=o.y+e)}),t))(_,tt))w(t.name,t.x,t.y,h,u);const et=n.some(t=>t.cells.some(t=>!t.missing&&t.value<0)),nt=t||m||2!==o.length||v||et?x:u-2*d;b.appendChild(g("line",{class:a,x1:0,x2:c(k)+c(0),y1:nt,y2:nt}))}}),tt=_(!1),et=_(!0),nt=new Set,at={segments:e=>{let n=0,a=!1;return e.map(e=>{if(e.isTotal)return a&&((e,n)=>{if(Math.abs(e-n)<=Math.abs(n)/100)return;const a=`[${t}] A total reads ${e}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows what you wrote; this is only a check.`;nt.has(a)||(nt.add(a),console.warn(a))})(e.value,n),a=!1,n=e.value,{...e,from:0,to:e.value,kind:"total"};const o=n;return n+=e.value,a=!0,{...e,from:o,to:n,kind:e.value>=0?"up":"down"}})},breakable:!0,headroom:({labelHeight:t,badgeHeight:e,hasAnnotations:n,unit:a})=>t+6*a+(n?1.6*e:0),draw({segments:t,cx:e,y:o,barWidth:r,height:s,unit:c,svg:l,values:i,breakAt:u,insideAlign:d}){const f=o(0),m=q(i,r,c),$=d??"center",y=t.map((e,n)=>{const a=o(Math.max(e.from,e.to)),r=Math.abs(o(e.from)-o(e.to)),s=null!==u&&Math.min(e.from,e.to)<u&&Math.max(e.from,e.to)>u,l="total"===e.kind&&n>0&&n===t.length-1;return{top:a,length:r,down:"down"===e.kind||"total"===e.kind&&(l?e.to>=0:e.to<0),inside:!s&&!m&&V(i[n],r,c)}}),M=i[0]?z(i[0]).height*c*.56:0;let v=Number.POSITIVE_INFINITY;for(const[n,a]of y.entries())a.inside&&(v=Math.min(v,(r-z(i[n]).width*c)/2));t.forEach((n,a)=>{const s=t[a+1];if(!s)return;const c=o(n.to),i=e(a)+r/2,u=e(a+1)-r/2;l.appendChild(g("line",{class:"tablechart-connector",x1:i,x2:u,y1:c,y2:c,"data-row":a+2,style:b("--i",s.slot)}))}),t.forEach((t,a)=>{const{top:o,length:u,down:d,inside:f}=y[a];l.appendChild(g("rect",{class:p(n,t),"data-kind":t.kind,"data-row":a+1,"data-grow":d?"down":"up",x:e(a)-r/2,y:o,width:r,height:Math.max(u,1),style:b("--i",t.slot)}));const m=i[a],k=Math.min(v,(u-M)/2),x="center"===$?o+u/2:"end"===$!==d?o+k+M/2:o+u-k-M/2;m.dataset.place=f?"inside":"outside",m.dataset.kind=t.kind;const A=f?x:"down"===t.kind?o+u+z(m).height*c+3*c:o-3*c;w(m,e(a),A,h,s)}),l.appendChild(g("line",{class:a,x1:0,x2:h,y1:f,y2:f}))}},ot={enabled:!1,log(...e){ot.enabled&&console.log(`[${t}]`,...e)},timed(e,n,a){if(!ot.enabled)return a();const o=performance.now(),r=a(),s=performance.now()-o,c=n.querySelectorAll("tbody tr").length;return s>50?console.warn(`[${t}] ${e} took ${s.toFixed(1)} ms for ${c} rows, more than 50 ms.`,n):ot.log(`${e} took ${s.toFixed(1)} ms for ${c} rows.`,n),r}},rt=t=>{const e=(t?.textContent||"").trim(),n=e.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);return{raw:e,number:n?.[2]??"",prefix:n?.[1]??"",suffix:n?.[3]??"",missing:!n,value:n?Number.parseFloat(n[2].replace(",",".")):0}},st=t=>Array.from(t.querySelector("thead tr:last-child")?.children??[]).slice(1),ct=["axis-break","trend","bracket"],lt=t=>{const e=t.plan;if(!e)return;const n=e=>null===e||t.step-e>=1;for(const a of t.figure.querySelectorAll("[data-from]")){const t=Number(a.dataset.from)-1,o=Number(a.dataset.to)-1,r=a.closest("[data-series]")?.dataset.series,s=r?Number(r)-1:0,c=e.series[s],l=t=>e.cells[t]?.[s]?.step??e.rows[t]?.step??null;let i=t-1;if(c&&null!==c.step)i=n(c.step)?o:t-1;else for(;i<o&&n(l(i+1));)i++;const u=a.hasAttribute("data-flat")?(i-t+1)/(o-t+1):o>t?Math.max(0,i-t)/(o-t):0;a.style.setProperty("--reveal",String(u))}},it=(t,e,n=!1)=>{const a=t.plan;if(!a)return;const o=Math.min(Math.max(Math.round(e),0),a.count),r=o!==t.step;t.step=o,t.figure.style.setProperty("--tablechart-step",String(o)),lt(t);const[s,c]=t.controls?.querySelectorAll("button")??[];s&&(s.disabled=0===o),c&&(c.disabled=o===a.count),r&&!n&&t.figure.dispatchEvent(new CustomEvent("tablechart:step",{bubbles:!0,detail:{step:o,steps:a.count}}))},ut={area:et,bar:R,column:W,donut:G,line:tt,waterfall:at},dt={"axis-break":k,trend:C,bracket:T},ht=Object.keys(dt),ft=t=>{let e="";for(let n=t.previousSibling;n&&(e=(n.textContent??"")+e,!e.trim());n=n.previousSibling);return e.trim()},bt=["straight","step","smooth"],mt=(t,e)=>{const n=t.dataset.chartShape;return n&&bt.includes(n)?n:bt.includes(e.shape)?e.shape:"straight"},gt=0,pt=(n,a,o=null)=>{const r=o??(n.getAttribute("data-chart")||"column"),s=ut[r];if(!s)return console.warn(`[${t}] Unknown chart type "${r}". Known types: ${Object.keys(ut).join(", ")}.`),n.setAttribute("data-chart-empty",""),null;const l=((t,e="data-i18n")=>Array.from(t.querySelectorAll("tbody tr")).map((t,n)=>{const a=t.querySelector("th"),o=Array.from(t.querySelectorAll("td")).map(rt);return o.length||o.push(rt(null)),{...o[0],label:(a?.textContent||"").trim(),key:e&&a?.getAttribute(e)||null,cells:o,classes:Array.from(t.classList),isTotal:"total"===t.getAttribute("data-kind"),slot:n}}))(n,a.langattribute);if(!l.length)return console.warn(`[${t}] A chart has no rows in its table, so there is nothing to draw.`),n.setAttribute("data-chart-empty",""),null;(t=>{const e=t.querySelector(":scope > figcaption");if(!e)return;(t=>{for(const e of t.querySelectorAll("br")){if(e.previousElementSibling?.classList.contains("tablechart-sr"))continue;if(/[.!?:;,…]$/.test(ft(e)))continue;const t=document.createElement("span");t.className=d,t.textContent=". ",e.before(t)}})(e);const n=t=>t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby"),a=t=>{e.id||(e.id="tablechart-caption-"+ ++gt),t.setAttribute("aria-labelledby",e.id)};"FIGURE"!==t.tagName||n(t)||a(t);const o=t.querySelector("table");!o||n(o)||o.querySelector(":scope > caption")||a(o)})(n);let u=((t,e,n="data-i18n")=>{const a=st(t),o=Math.max(1,x(e.map(t=>t.cells.length)));return Array.from({length:o},(t,e)=>{const o=a[e];return{name:(o?.textContent||"").trim(),key:n&&o?.getAttribute(n)||null,focus:"focus"===o?.getAttribute("data-kind"),marker:o?.getAttribute("data-marker")??null,line:(r=o?.getAttribute("data-line"),"dashed"===r||"dotted"===r?r:null)};var r})})(n,l,a.langattribute);u.length>1&&!s.series&&(console.warn(`[${t}] A ${r} chart draws one series; only the first of the table's ${u.length} value columns is used.`),u=u.slice(0,1));const h=u.length>1;h&&n.style.setProperty("--tablechart-series-count",String(u.length));const f=n.hasAttribute("data-chart-stack");f&&!s.stackable&&console.warn(`[${t}] A ${r} chart cannot be stacked.`);const b=f&&!!s.stackable&&h,m=document.createElement("div");m.className="tablechart-plot",m.setAttribute("aria-hidden","true");const p=g("svg",{role:"presentation",focusable:"false"});m.appendChild(p),n.appendChild(m);const w=s.centre?l.filter(t=>!t.isTotal):l,y=Math.max(0,x(w.flatMap(t=>t.cells.slice(0,u.length).map(t=>A(t.number))))),M=u.map((t,n)=>l.map((t,a)=>{const o=t.cells[n]??t.cells[0],r=$(e,m);return r.classList.add(...t.classes),r.dataset.value=String(o.value),o.prefix&&(r.dataset.prefix=o.prefix),o.suffix&&(r.dataset.suffix=o.suffix),o.missing&&(r.dataset.missing=o.raw),h&&(r.dataset.series=String(n+1)),r.dataset.row=String(a+1),r.style.setProperty("--i",String(t.slot)),r})),v=M[0],k=b&&s.totals?l.map((t,n)=>{const a=$(e,m);a.classList.add(...t.classes),a.dataset.kind="total",a.dataset.row=String(n+1),a.dataset.value=String(F(t,u.length));const o=t.cells[0];return o.prefix&&(a.dataset.prefix=o.prefix),o.suffix&&(a.dataset.suffix=o.suffix),a.style.setProperty("--i",String(t.slot)),a}):[],N=l[l.length-1],S=u.some(t=>t.focus),H=n.getAttribute("data-chart-legend"),T=h&&(null===H?a.legend||void 0!==s.legend:"false"!==H)?document.createElement("div"):null;T&&(T.className=c,T.setAttribute("aria-hidden","true"),T.inert=!0);const L=h?u.map((t,e)=>{const o=$("tablechart-name",T??m);T&&(o.dataset.place="legend");const r=s.legend??s.swatch;if(r&&(o.dataset.swatch=r),o.textContent=t.name,!r&&"step"!==mt(n,a)){const t=J(u,e);o.dataset.marker=t.shape,o.toggleAttribute("data-open",t.open)}return t.line&&!r&&(o.dataset.line=t.line),t.key&&a.langattribute&&o.setAttribute(a.langattribute,t.key),o.dataset.series=String(e+1),o.style.setProperty("--n",String(e)),o.style.setProperty("--palette",`var(--tablechart-color-${e+1})`),o.style.setProperty("--m",S&&!t.focus?"1":"0"),o.style.setProperty("--i",String(N.slot)),o}):[],z=s.centre?$(i,m):null;if(z){const t=l.find(t=>t.isTotal),e=t?t.value:l.reduce((t,e)=>t+Math.abs(e.value),0);z.dataset.value=String(e),t&&(z.dataset.decimals=String(A(t.number)))}const C=z&&!l.some(t=>t.isTotal)?((t,e,n)=>{const a=t.querySelector("table");if(!a)return null;const o=a.querySelector("tfoot [data-chart-total]");if(o)return o.dataset.value=e.dataset.value??"0",o;const r=(a.tFoot??a.createTFoot()).insertRow(),s=document.createElement("th");s.scope="row",s.textContent=n.totallabel;const c=t.getAttribute("data-chart-keys");c&&n.langattribute&&s.setAttribute(n.langattribute,`${c}-total`);const l=r.insertCell();return l.setAttribute("data-chart-total",""),l.dataset.value=e.dataset.value??"0",r.prepend(s),l})(n,z,a):null,O="beside"===s.categories,U=document.createElement("div");U.className="tablechart-categories",U.setAttribute("aria-hidden","true"),U.inert=!0,O?U.dataset.place="beside":s.centre&&(U.dataset.place="key"),U.style.setProperty("--tablechart-columns",String(l.length));let B=0;for(const[t,e]of l.entries()){const n=document.createElement("span");n.classList.add(...e.classes),n.textContent=e.label,e.key&&a.langattribute&&n.setAttribute(a.langattribute,e.key),s.centre&&(n.dataset.kind=e.isTotal?"total":"slice",e.isTotal||(n.dataset.slice=String(B+1),n.style.setProperty("--n",String(B)),n.style.setProperty("--palette",`var(--tablechart-color-${B+1})`),B+=1)),n.style.setProperty("--i",String(e.slot)),n.dataset.row=String(t+1),U.appendChild(n)}(O?m:n).appendChild(U),T&&n.appendChild(T);const E=a.animate?(t=>{const e=t.hasAttribute("data-fragment"),n=Array.from(t.querySelectorAll("tbody tr")),a=Array.from(t.querySelector("thead tr:last-child")?.children??[]).slice(1),o=Array.from(t.querySelectorAll("[data-annotation]")).filter(t=>ct.includes(t.getAttribute("data-annotation")??"")),r=t=>t.hasAttribute("data-fragment"),s=n.map(t=>Array.from(t.querySelectorAll(":scope > td")));if(!(e||n.some(r)||a.some(r)||s.flat().some(r)||o.some(r)))return null;const c=[],l=new Map,i=[],u=t=>{let e=null!==t?l.get(t):void 0;return void 0===e&&(e=c.length,c.push(t),i.push(0),null!==t&&l.set(t,e)),e};let d=0;const h="donut"===t.getAttribute("data-chart"),f=t=>h&&"total"===t.getAttribute("data-kind"),b=n.map(t=>{if(f(t))return{step:null,slot:0};if(!e&&!r(t))return{step:null,slot:d++};const n=u(t.getAttribute("data-fragment-index"));return{step:n,slot:i[n]++}}),m=Math.max(-1,...b.map(t=>t.step??-1));if(m>=0)for(const[w,y]of n.entries())f(y)&&(b[w]={step:m,slot:i[m]++});const g=a.map(t=>({step:r(t)?u(t.getAttribute("data-fragment-index")):null})),p=s.map(t=>t.map(()=>({step:null,slot:0}))),$=Math.max(0,...s.map(t=>t.length));for(let w=0;w<$;w++)for(const[t,e]of s.entries()){const n=e[w];if(!n||!r(n))continue;const a=u(n.getAttribute("data-fragment-index"));p[t][w]={step:a,slot:i[a]++}}return{rows:b,series:g,cells:p,notes:o.map(t=>{const e=(e,n)=>{const a=Number.parseInt(t.getAttribute(e)??"",10);return Number.isFinite(a)?a-1:n},[n,a]="bracket"===t.getAttribute("data-annotation")?[e("data-from",0),e("data-to",b.length-1)]:[0,b.length-1];let o=null;for(let r=Math.min(n,a);r<=Math.max(n,a);r++)for(const t of[b[r]?.step??null,...(p[r]??[]).map(t=>t.step)])null!==t&&(null===o||t>o)&&(o=t);const s=g[e("data-series",0)]?.step??null;null!==s&&(null===o||s>o)&&(o=s),r(t)&&(o=u(t.getAttribute("data-fragment-index")));const c=null===o?b.length:b.filter(t=>t.step===o).length;return{step:o,after:c}}),count:c.length,indexes:c}})(n):null;E&&(n.setAttribute("data-steps",""),n.setAttribute("data-chart-animate","across"));const P=n.getAttribute("data-chart-keys"),j=E&&a.controls?((t,e,n)=>{const a=document.createElement("div");a.className="tablechart-controls";const o=a=>{const o=document.createElement("button");o.type="button",o.className=`tablechart-${a}`,o.dataset.go=a;const r=document.createElement("span");r.className="tablechart-control-icon",r.setAttribute("aria-hidden","true");const s=g("svg",{viewBox:"0 0 16 16",focusable:"false"});s.appendChild(g("path",{d:"next"===a?"M6 3l5 5-5 5":"M10 3L5 8l5 5"})),r.appendChild(s);const c=document.createElement("span");c.className="tablechart-control-label",c.textContent=t[a];const l=e[a];l&&n&&c.setAttribute(n,l);const i=document.createElement("span");return i.className=d,i.textContent=t.hint,e.hint&&n&&i.setAttribute(n,e.hint),o.append(..."next"===a?[c,i,r]:[r,c,i]),o};return a.append(o("previous"),o("next")),a})({previous:a.previouslabel,next:a.nextlabel,hint:a.stephint},{previous:P&&`${P}-previous`,next:P&&`${P}-next`,hint:P&&`${P}-step`},a.langattribute):null;j&&n.appendChild(j);const q=Array.from(n.querySelectorAll("[data-annotation]")).map(e=>{const n=e.getAttribute("data-annotation"),a=dt[n];if(!a)return console.warn(`[${t}] Unknown annotation "${n}". Known annotations: ${Object.keys(dt).join(", ")}.`),null;const o=Number.parseInt(e.getAttribute("data-series")??"1",10),r=o>=1&&o<=u.length?o-1:0;return o!==r+1&&console.warn(`[${t}] An annotation reads line ${o}, which the chart does not have; it reads the first.`),{spec:e,type:a,badge:a.create(e,m),series:r,after:l.length}}).filter(t=>null!==t);if(a.animate){const t=n.getAttribute("data-chart-animate"),e="up"===("up"===t||"across"===t?t:a.animate)&&("line"===r||"area"===r);n.setAttribute("data-animate",e?"up":"")}const V={figure:n,plot:m,svg:p,rows:l,decimals:y,type:s,values:v,series:u,seriesValues:M,names:T?[]:L,categories:Array.from(U.children),centre:z,stacked:b,totals:k,totalCell:C,rowAt:null,rowBox:null,annotations:q,checks:[],plan:E,step:0,controls:j};return j?.addEventListener("click",t=>{const e=t.target.closest("button")?.dataset.go;e&&it(V,V.step+("next"===e?1:-1))}),it(V,0,!0),a.hover&&"false"!==n.getAttribute("data-chart-hover")&&kt(V),Mt(V,a),V},$t=t=>{const e=getComputedStyle(t).getPropertyValue("--tablechart-inside-align").trim();return"start"===e||"center"===e||"end"===e?e:null},wt=(t,e,n,a)=>{const o=getComputedStyle(t),r=(o.getPropertyValue(n).trim()||a).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);if(!r)return null;const s=Number(r[1]);return"%"===r[2]?s/100*h:s*("em"===r[2]?Number.parseFloat(o.fontSize):"rem"===r[2]?Number.parseFloat(getComputedStyle(document.documentElement).fontSize):1)*e},yt=(t,e)=>wt(t,e,"--tablechart-bar-max","60px")??Number.POSITIVE_INFINITY,Mt=(t,e)=>{const n=[...t.seriesValues.flat(),...t.totals,...t.totalCell?[t.totalCell]:[]];for(const a of t.centre?[...n,t.centre]:n){const{missing:n,prefix:o="",suffix:r=""}=a.dataset;if(void 0!==n){a.textContent=n;continue}const[s,c]=N(Number.parseFloat(a.dataset.value||"0"),a.dataset.decimals?Number(a.dataset.decimals):t.decimals,e.locale);if(a.textContent=o+(o?s:"")+c+r,s&&!o){const t=document.createElement("span");t.className="tablechart-minus",t.textContent=s,a.prepend(t)}}},vt=(t,e)=>{t.figure.classList.toggle("is-shown",e),e||t.plot.removeAttribute("data-pointed")},kt=t=>{const{plot:e}=t,n=()=>[...t.seriesValues.flat(),...t.totals];e.setAttribute("data-hover","");const a=document.createElement("div");a.className="tablechart-pointer",e.prepend(a);const o=()=>{e.removeAttribute("data-active");for(const t of n())t.removeAttribute("data-active")},r=r=>{if(!e.classList.contains("is-placed")||!t.rowAt)return;const s=e.getBoundingClientRect(),c=s.width/e.offsetWidth||1,l=t.rowAt((r.clientX-s.left)/c,(r.clientY-s.top)/c),i=null===l?null:l+1,u=t=>"none"!==t.dataset.place,d=null===i?[]:n().filter(t=>((t,e)=>{const n=Number(t.dataset.row),a=Number(t.dataset.rowEnd??n);return e>=n&&e<=a})(t,i)&&u(t));if(!n().some(t=>t.hasAttribute("data-left-out")&&u(t))||!d.length)return o();e.setAttribute("data-pointed",""),e.setAttribute("data-active",String(i));const[h,f,b,m]=t.rowBox?.(i-1)??[0,0,0,0];Object.assign(a.style,{left:`${h}%`,top:`${f}%`,width:`${b}%`,height:`${m}%`});for(const t of n())t.toggleAttribute("data-active",d.includes(t))};e.addEventListener("pointermove",r),e.addEventListener("pointerdown",r),e.addEventListener("pointerleave",t=>{"mouse"===t.pointerType&&o()}),document.addEventListener("pointerdown",t=>{e.contains(t.target)||o()})},xt=t=>"id"===t||"style"===t||t.startsWith("data-chart"),At=/^\s*(?:Table)?:\s+/,Nt=t=>"P"===t?.tagName&&At.test(t.textContent??""),St=/^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/,Ht=t=>{const e=Lt(t);return"P"===e?.tagName?e:t},Tt=t=>{if(!t||"object"!=typeof t)return;const e=Object.entries(t),n=t=>null===t||"string"==typeof t||"number"==typeof t;return e.length&&e.every(([,t])=>n(t)||Array.isArray(t)&&t.every(n))?e.map(([t,e])=>Array.isArray(e)?{label:t,values:e}:{label:t,value:e}):void 0},Lt=t=>{const e=Array.from(t.childNodes).filter(t=>t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.TEXT_NODE&&t.textContent?.trim());return 1===e.length&&e[0]instanceof HTMLElement?e[0]:null},zt="strong, b, span.total",Ct="data-chart-made",Ot=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,Ut=new Set,Bt=null,Et=["column","bar"],Ft=t=>{const e=t.getAttribute("data-chart")||"column";if(!Et.includes(e))return null;const n=getComputedStyle(t).getPropertyValue("--tablechart-type").trim();return Et.includes(n)?n:e},Pt=async(e,n)=>{const a=(t=>t.map(t=>{const e=t.closest("p"),n=Nt(e)?e:t;if("TABLE"!==n.tagName&&"P"!==n.tagName)return n;const a=document.createElement("div");((t,e)=>{for(const{name:n,value:a}of Array.from(t.attributes))("class"===n||xt(n))&&(e.setAttribute(n,a),t.removeAttribute(n))})(t,a),t.classList.length||t.removeAttribute("class");const o="TABLE"===n.tagName?n:null,r=n.previousElementSibling;let s=n.nextElementSibling;const c=o?Nt(r)?r:Nt(s)?s:null:n;o&&c===s&&(s=s?.nextElementSibling??null);const l=s?.classList.contains("chart-annotations")?s:(t=>{if("UL"!==t?.tagName&&"OL"!==t?.tagName)return null;const e=Array.from(t.children),n=e.map(t=>t.hasAttribute("data-annotation")?null:(t=>{const e=Ht(t).firstChild;if(e?.nodeType!==Node.TEXT_NODE)return null;const n=St.exec(e.textContent??"");if(!n||!ht.includes(n[1]))return null;if(!n[3]&&e.nextSibling)return null;const a=n[2].trim().split(/\s+/).filter(Boolean).map(t=>t.split("="));return{name:n[1],options:a,text:e,length:n[0].length}})(t));return!e.length||e.some((t,e)=>!n[e]&&!t.hasAttribute("data-annotation"))?null:(e.forEach((t,e)=>{const a=n[e],o=Ht(t);if(o!==t&&o.replaceWith(...o.childNodes),a){t.setAttribute("data-annotation",a.name);for(const[e,n]of a.options)t.setAttribute(`data-${e}`,n);a.text.textContent=(a.text.textContent??"").slice(a.length)}t.children.length&&Array.from(t.childNodes).filter(t=>t.nodeType===Node.ELEMENT_NODE||t.textContent?.trim()).forEach((t,e)=>{const n=document.createElement("span");0===e&&t instanceof HTMLElement&&t.matches("em, i")?(n.className="tablechart-caption",n.append(...t.childNodes),t.replaceWith(n)):t.nodeType===Node.TEXT_NODE&&(n.textContent=(t.textContent??"").trim(),t.replaceWith(n))})}),t.classList.add("chart-annotations"),t)})(s);return n.replaceWith(a),c&&a.append((t=>{const e=document.createElement("figcaption");for(const{name:r,value:s}of Array.from(t.attributes))e.setAttribute(r,s);const n=t.firstChild;n?.nodeType===Node.TEXT_NODE&&(n.textContent=(n.textContent??"").replace(At,""),n.textContent||n.remove());const a=Array.from(t.childNodes),o=a.findIndex(t=>"BR"===t.nodeName);if(e.append(...-1===o?a:a.slice(0,o+1)),-1!==o&&o<a.length-1){const t=document.createElement("span");t.append(...a.slice(o+1)),e.append(t)}return t.remove(),e})(c)),o&&a.append(o),l&&a.append(l),ot?.log?.(`A ${o?"table":"caption"} with chart attributes was wrapped in a figure of its own`),a}))(e.filter(t=>!t.hasAttribute(Ct)));return await(async e=>{await Promise.all(e.filter(t=>t.hasAttribute("data-chart-src")).map(async e=>{const n=e.getAttribute("data-chart-src"),a=Array.from(e.querySelectorAll("table")).find(t=>t.tHead)??null;for(const t of e.querySelectorAll("table"))t!==a&&t.remove();try{const t=await fetch(n);if(!t.ok)throw new Error(`${t.status} ${t.statusText}`);const o=await t.json(),r=Array.isArray(o)?o:o?.rows?Array.isArray(o.rows)?o.rows:Tt(o.rows):Tt(o);if(!Array.isArray(r))throw new Error("no rows in it: a list of rows, an object with rows, or names with their values");const s=((t,e,n,a=document.createElement("table"))=>{for(const r of a.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr"))r.remove();if(!a.tHead&&(e.length||n)){const t=a.createTHead().insertRow(),o=document.createElement("th");o.textContent=n,t.append(o);for(const n of e){const e=document.createElement("th");e.textContent=n,t.append(e)}}const o=document.createElement("tbody");a.append(o);for(const r of t){const t=o.insertRow();"total"===r.kind&&(t.dataset.kind="total");const e=document.createElement("th");e.textContent=String(r.label??""),t.append(e);for(const n of r.values??[r.value??null])t.insertCell().textContent=null===n?"":String(n)}return a})(r,Array.isArray(o?.series)?o.series.map(String):[],"string"==typeof o?.label?o.label:"",a??void 0);if(!a){const t=e.querySelector(":scope > figcaption");t?t.after(s):e.prepend(s)}s.tHead||ot?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`),ot?.log?.(`Read ${r.length} rows from "${n}"`)}catch(o){const e="file:"===window.location.protocol;console.warn(`[${t}] Could not read the chart data in "${n}": ${o.message}.`+(e?" A page opened from the file system cannot fetch files; open the page from a server instead.":""))}}))})(a),(t=>{for(const e of t){for(const n of e.querySelectorAll("tbody tr")){const t=n.cells[0];if("TD"!==t?.tagName||n.cells.length<2)continue;const e=document.createElement("th");for(const{name:n,value:a}of Array.from(t.attributes))e.setAttribute(n,a);e.append(...t.childNodes),t.replaceWith(e);for(let a=Lt(e);a?.matches(zt);a=Lt(e))n.dataset.kind="total",a.replaceWith(...a.childNodes)}const t=Array.from(e.querySelector("thead tr:last-child")?.children??[]);for(const e of t.slice(1))for(let t=Lt(e);t?.matches(zt);t=Lt(e))e.setAttribute("data-kind","focus"),t.replaceWith(...t.childNodes)}})(a),((e,n)=>{if(!n)return;const a=new Map;for(const o of e){let e=o.getAttribute("data-chart-keys")||null;if(!e)continue;if(a.has(e)){const n=a.get(e)+1;a.set(e,n),console.warn(`[${t}] Two charts on the page have data-chart-keys="${e}". If two charts use the same keys, they get the same translations. This one uses "${e}-${n}".`),e=`${e}-${n}`}else a.set(e,1);o.querySelectorAll("tbody th").forEach((t,a)=>{t.getAttribute(n)||t.setAttribute(n,`${e}-row${a+1}`)});const r=st(o);r.length>1&&r.forEach((t,a)=>{t.getAttribute(n)||t.setAttribute(n,`${e}-col${a+1}`)}),ot?.log?.(`Keys for "${e}" written onto ${o.querySelectorAll("tbody th").length} rows`)}})(a,n.langattribute),a},jt=(e,n)=>{const a=ot.timed("Building",e,()=>pt(e,n));return a?(e.setAttribute(Ct,""),((e,n)=>{let a=e,o=Ft(a.figure),r=null,s=!1,u=!1;const d=async()=>{if(!n.animate)return vt(a,!0);const t=a.figure.classList.contains("is-shown");if(!s||null===r||t||u)!s&&n.replay&&t&&vt(a,!1);else{u=!0;const t=Ot()?null:(t=>{for(let e=t;e&&e!==document.body;e=e.parentElement)if("0"===getComputedStyle(e).opacity)return e;return null})(a.figure);t&&await(e=t,new Promise(t=>{const n=["animationstart","transitionrun"],a=()=>{for(const t of n)document.removeEventListener(t,o,!0);r.disconnect(),t()},o=t=>{t.target instanceof Node&&t.target.contains(e)&&a()},r=new MutationObserver(()=>{"0"!==getComputedStyle(e).opacity&&a()});for(const e of n)document.addEventListener(e,o,!0);r.observe(e,{attributes:!0,attributeFilter:["class","style"]})})),await(async(t,e)=>{if(Ot())return;await new Promise(requestAnimationFrame);const n=t.getAnimations().filter(t=>t instanceof CSSAnimation);for(let r=t.parentElement;r&&r!==document.body;r=r.parentElement)n.push(...r.getAnimations());let a=0;for(const r of n){const t=r.effect?.getComputedTiming(),n=Number(t?.activeDuration??0);if(!t||!Number.isFinite(n))continue;const o=Number(t.delay??0)+n*e;a=Math.max(a,o-Number(r.currentTime??0))}var o;a>0&&await(o=a,new Promise(t=>setTimeout(t,o)))})(a.figure,((t,e)=>{const n=Number.parseFloat(t.dataset.chartEntrance??""),a=Number.isFinite(n)?n:e.entrance;return Math.min(Math.max(a,0),1)})(a.figure,n)),u=!1,!s&&n.replay||vt(a,!0)}var e},f=()=>{const t=Ft(a.figure);if(!t||t===o)return;const e=ot.timed("Building",a.figure,()=>pt(a.figure,n,t));e&&((t=>{t.plot.remove(),t.categories[0]?.parentElement?.remove(),t.figure.querySelector(`:scope > .${c}`)?.remove(),t.controls?.remove()})(a),it(e,a.step,!0),a=e,o=t,r=null)},b=()=>{f();const e=a.plot.clientWidth;e&&e!==r&&ot.timed("Layout",a.figure,()=>((e,n)=>{const{plot:a,svg:o,rows:r,type:s,values:c,series:u,seriesValues:d,names:f,annotations:b}=e,p=a.clientWidth;if(!p)return!1;const $=h/p,w=Number.parseFloat(e.figure.dataset.chartAspect??""),y=h*(w>0?w:s.aspect??n.aspect);a.classList.add("is-placed");for(const t of[...d.flat(),...e.totals])delete t.dataset.place;a.style.removeProperty("--tablechart-fit"),(t=>{const e=[...t].filter(t=>!!t),n=e.map(t=>({width:t.offsetWidth,height:t.offsetHeight}));e.forEach((t,e)=>L.set(t,n[e]))})([...d.flat(),...e.totals,...f,...e.categories,...b.map(t=>t.badge)]);const v=(c[0]?z(c[0]).height:0)*$,k=b[0]?.badge?z(b[0].badge).height*$:0,A=Math.max(y,wt(e.figure,$,"--tablechart-min-height","200px")??0,s.minHeight?.({labelHeight:v,nameHeight:Math.max(0,x(e.categories.map(t=>z(t).height)))*$,unit:$,rows:r.length,series:u.length,stacked:e.stacked})??0),N=e.stacked?r.map(t=>{const e=F(t,u.length);return{...t,value:e,cells:t.cells.map((t,n)=>0===n?{...t,value:e}:t)}}):r,S=(s.segments??(t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"}))))(e.stacked?N.map(t=>({...t,cells:[t.cells[0]]})):r),H={labelHeight:v,badgeHeight:k,hasAnnotations:b.length>0,unit:$,series:u.length,focused:u.some(t=>t.focus),stacked:e.stacked},T=Math.max((C=x,e.stacked?C(r.map(t=>E(t,u.length,s.running).top)):C([...S.flatMap(t=>[t.from,t.to,t.value]),...r.flatMap(t=>t.cells.slice(0,u.length).map(t=>t.value))])),0);var C;const O=S.some(t=>"up"===t.kind||"down"===t.kind)?S.flatMap(t=>[t.from,t.to]):e.stacked?r.map(t=>E(t,u.length,s.running).bottom):r.flatMap(t=>t.cells.slice(0,u.length).map(t=>t.value)),U=Math.min(-x(O.map(t=>-t)),0),B=s.headroom?.(H)??v,P=2*$+(s.footroom?.(H)??0)+(U<0?v+4*$:0),j=A-B-P,q=1.02*T,V=1.02*U,I=b.find(t=>"axis-break"===t.spec.getAttribute("data-annotation"))?.spec,R=t=>{const e=Number.parseFloat(I?.getAttribute(t)??"");return Number.isFinite(e)?e:null},W=R("data-from")??R("data-at"),D=R("data-to");let G=null;if(I&&(null!==W||null!==D)){const e=W??0,n=D??q,a=null===D?e:null===W?n:(e+n)/2,o=I.getAttribute("data-size"),r=o?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);null===o||r||console.warn(`[${t}] data-size="${o}" is not a percentage, such as 30%. Using the default.`);const c=Math.min(Math.max(r?Number(r[1])/100:null===D?.22:.3,.05),.8),l=S.filter(t=>("up"===t.kind||"down"===t.kind)&&Math.max(t.from,t.to)>e&&Math.min(t.from,t.to)<n);s.breakable?U<0?console.warn(`[${t}] A chart with values below zero cannot break its scale.`):e<0||n<=e||n>q||0===e&&n===q?console.warn(`[${t}] A break from ${e} to ${n} does not fit a scale that runs from 0 to ${T}.`):l.length?console.warn(`[${t}] A break from ${e} to ${n} would cut a step that floats. Keep it below or above the steps.`):G={lo:e,hi:n,gap:a,share:c}:console.warn(`[${t}] This kind of chart cannot break its scale.`)}const Z=G?G.gap:null,J=(G&&wt(e.figure,$,"--tablechart-break-gap",""))??13,Q=A-P,X=q-V||1;let Y=t=>Q-(t-V)/X*j;if(G){const{lo:t,hi:e,gap:n,share:a}=G,o=j*a,r=(j-o-J)/(t+(q-e)),s=o/(e-t);Y=a=>a<=t?Q-a*r:a<=n?Q-t*r-(a-t)*s:a<=e?Q-t*r-(a-t)*s-J:Q-t*r-o-J-(a-e)*r}const _=f.length?x(f.map(t=>z(t).width))*$+12*$:0,tt=e.categories[0]?.parentElement;tt&&(tt.style.paddingRight=_?_/h*100+"%":"");const et=(h-_)/r.length,nt=t=>t>=0&&t<r.length?t:null;e.rowAt=s.centre?null:"beside"===s.categories?(t,e)=>nt(Math.floor(e*$/(A/r.length))):t=>nt(Math.floor(t*$/et));const at=et/h*100,ot=100/r.length;e.rowBox="beside"===s.categories?t=>[0,t*ot,100,ot]:t=>[t*at,0,at,100],o.setAttribute("viewBox",`0 0 1000 ${m(A)}`),o.textContent="",e.checks=[];const rt={rows:r,segments:S,cx:t=>(t+.5)*et,y:Y,barWidth:Math.min(et*n.barfill,yt(e.figure,$)),barMax:yt(e.figure,$),height:A,unit:$,labelHeight:v,badgeHeight:k,after:r.length,note:0,labels:"inside"===e.figure.dataset.chartLabels||"outside"!==e.figure.dataset.chartLabels&&"inside"===n.labels?"inside":"outside",insideAlign:$t(e.figure),breakAt:Z,squeeze:G,breakGap:J,stacked:e.stacked,shape:mt(e.figure,n),totals:e.totals,svg:o,plot:a,values:c,series:u,seriesValues:d,names:f,categories:e.categories,centre:e.centre,config:n,checks:e.checks};s.draw(rt);for(const[t,l]of b.entries()){l.badge?.setAttribute("data-note",String(t+1));const n=l.series,a=t=>({...t,...t.cells[n]??t.cells[0]});l.type.draw(l.spec,l.badge,{...rt,...e.stacked&&{rows:N,...e.totals.length&&{values:e.totals}},...n>0&&!e.stacked&&{rows:r.map(a),segments:S.map(t=>{const e=a(t);return"bar"===t.kind?{...e,to:e.value}:e}),values:d[n]},after:l.after,note:t+1})}(t=>{const e=t.plan;if(!e)return;const n=e.rows.length-1,a=t=>e.series.map((n,a)=>e.cells[t]?.[a]?.step??n.step??e.rows[t]?.step??null),o=t=>{const e=a(t);return e.some(t=>null===t)?null:Math.min(...e)},r=new Set(t.totals),s=(t,e,n,a)=>{t.style.setProperty(n,String(a)),t.style.removeProperty("--d"),null===e?t.style.removeProperty("--step"):t.style.setProperty("--step",String(e))};for(const l of t.figure.querySelectorAll("[data-row], [data-series], [data-note]")){if(l.closest("table, .tablechart-controls")||l.hasAttribute("data-from"))continue;const t=Number(l.dataset.note);if(t>0){const n=e.notes[t-1];n&&s(l,n.step,"--after",n.after);continue}const c=l.dataset.row?Number(l.dataset.row)-1:n;if(l.classList.contains("tablechart-connector")){const t=e.rows[c-1],n=e.rows[c];if(t&&n){const e=(t.step??-1)>(n.step??-1);s(l,e?t.step:n.step,"--i",e?t.slot+1:n.slot)}continue}if(r.has(l)){const t=a(c).filter(t=>null!==t);s(l,t.length?Math.max(...t):null,"--i",e.rows[c]?.slot??0);continue}if(l.hasAttribute("data-stack")){s(l,o(c),"--i",e.rows[c]?.slot??0);continue}const i=l.dataset.series?Number(l.dataset.series)-1:0,u=l.dataset.series?e.series[i]:void 0;if(l.classList.contains("tablechart-piece")){const t=a(c)[i]??null,n=e.cells[c]?.[i];s(l,t===o(c)?null:t,"--i",n&&null!==n.step?n.slot:c);continue}if("legend"===l.dataset.place){const t=Math.min(...e.cells.map(t=>t[i]?.step??Number.POSITIVE_INFINITY));s(l,u?.step??(Number.isFinite(t)?t:null),"--i",0);continue}const d=e.cells[c]?.[i];d&&null!==d.step?s(l,d.step,"--i",d.slot):u&&null!==u.step?s(l,u.step,"--i",c):e.rows[c]&&s(l,e.rows[c].step,"--i",e.rows[c].slot)}const c=t.figure.querySelector(`.${i}`);if(c){const t=[...e.rows,...e.cells.flat()].map(t=>t.step??-1),n=Math.max(-1,...t);n<0?s(c,null,"--i",0):s(c,n,"--i",t.filter(t=>t===n).length)}lt(t)})(e);const st=e.categories[0]?.parentElement;return st&&"beside"!==s.categories&&!s.centre&&K(st,e.categories.filter(t=>null!==t.offsetParent),t=>({size:t.scrollWidth,room:t.clientWidth}),"--tablechart-name-fit"),M(o,b.flatMap(({badge:t})=>{if(!(t instanceof HTMLElement&&t.offsetWidth))return[];const e=t.offsetWidth*$,n=t.offsetHeight*$,a=Number.parseFloat(t.style.left)/100*h,o=Number.parseFloat(t.style.top)/100*A,r=getComputedStyle(t).borderTopLeftRadius,s=r.endsWith("%")?Number.parseFloat(r)/100:null,c=(Number.parseFloat(r)||0)*$;return[g("rect",{class:l,"data-for":"badge","data-note":t.dataset.note??"",x:a-e/2,y:o-n/2,width:e,height:n,rx:null===s?c:e*s,ry:null===s?c:n*s,style:["--after","--step"].map(e=>t.style.getPropertyValue(e)&&`${e}:${t.style.getPropertyValue(e)}`).filter(Boolean).join("; ")})]}),h,A),!0})(a,n))&&(r=e,d())};let p=!1;const $=new ResizeObserver(()=>{p||(p=!0,requestAnimationFrame(()=>{p=!1,b()}))}),w=new IntersectionObserver(t=>{for(const e of t)s=e.isIntersecting,d()},{threshold:n.threshold}),y=()=>vt(a,!0),v=()=>{r=null,b()},k={relabel:()=>Mt(a,n),refresh:v};f(),b(),$.observe(a.figure),w.observe(a.figure),window.addEventListener("beforeprint",y),(t=>{Ut.add(t),Bt||(Bt=new MutationObserver(()=>{for(const t of Ut)t.relabel();requestAnimationFrame(()=>requestAnimationFrame(()=>{for(const t of Ut)t.refresh()}))})).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]})})(k);const A={figure:a.figure,refresh:v,next:()=>it(a,a.step+1),previous:()=>it(a,a.step-1),stepTo:t=>it(a,t),get step(){return a.step},get steps(){return a.plan?.count??0},destroy(){$.disconnect(),w.disconnect(),window.removeEventListener("beforeprint",y),(t=>{Ut.delete(t),!Ut.size&&Bt&&(Bt.disconnect(),Bt=null)})(k),a.figure.tablechart===A&&delete a.figure.tablechart}};return a.figure.tablechart=A,A})(a,n)):null};window.Tablechart={init:async(t={},e=document)=>{const n={...f,...t};n.debug&&(ot.enabled=!0);const a=(await Pt(Array.from(e.querySelectorAll(n.selector)),n)).map(t=>jt(t,n)).filter(t=>null!==t);return ot.log(`Made ${a.length} chart(s).`),{charts:a,refresh:()=>{for(const t of a)t.refresh()},destroy:()=>{for(const t of a)t.destroy()}}},create:async(t,e={})=>{if(t.tablechart)return t.tablechart;const n={...f,...e};n.debug&&(ot.enabled=!0);const[a]=await Pt([t],n);return a?jt(a,n):null},defaultConfig:f}}();
1
+ !function(){var t="tablechart",e="tablechart-value",n="tablechart-bar",a="tablechart-rule",o="tablechart-line",r="tablechart-head",s="tablechart-slice",c="tablechart-legend",l="tablechart-hole",i="tablechart-centre",u="tablechart-break",d="tablechart-sr",h=1e3,f={selector:"[data-chart]",aspect:.38,barfill:.58,ringfill:.42,animate:!0,entrance:.5,labels:"outside",shape:"straight",legend:!1,hover:!0,totallabel:"Total",controls:!0,previouslabel:"Previous",nextlabel:"Next",stephint:"step of the chart",threshold:.5,replay:!1,langattribute:"data-i18n"},b="cubic-bezier(0.3, 0.3, 0.6, 1)",m=(t,e,n=1)=>({start:t,span:e,easing:t+e>=n-1e-4?b:"linear"}),g=(t,e)=>`${t}:${e}`,p=t=>Math.round(100*t)/100,$=(t,e={})=>{const n=document.createElementNS("http://www.w3.org/2000/svg",t);for(const a in e){const t=e[a];n.setAttribute(a,String("number"==typeof t?p(t):t))}return n},w=(t,e)=>[t,...e.classes].join(" "),y=(t,e)=>{const n=document.createElement("span");return n.className=t,n.inert=!0,e.appendChild(n),n},M=(t,e,n,a,o)=>{t.style.left=e/a*100+"%",t.style.top=n/o*100+"%"},v=0,k=(t,e,n,a)=>{if(!e.length)return;const o="tablechart-cut-"+ ++v,r=$("mask",{id:o,maskUnits:"userSpaceOnUse"});r.appendChild($("rect",{x:-n,y:-a,width:3*n,height:3*a,fill:"white"}));for(const l of e)l.setAttribute("fill","black"),r.appendChild(l);let s=t.querySelector(":scope > defs");s||(s=$("defs"),t.prepend(s)),s.appendChild(r);const c=$("g",{mask:`url(#${o})`});for(const l of Array.from(t.childNodes))l!==s&&c.appendChild(l);t.appendChild(c)},x=0,A={create:()=>null,draw(t,e,a){const{rows:o,y:r,svg:s,breakAt:c}=a;if(null===c)return;const l="zigzag"===t.getAttribute("data-mark"),i=(t,e)=>{const n=t.sideways?t.height:t.width,a=.09*n,o=n+2*a,r=.3*o,s=.06*o;if(t.sideways){const n=t.y-a;if(!l)return[[e-r/2,n],[e+r/2,n+o]];const c=o/3;return[[e-s,n],[e+s,n+c],[e-s,n+2*c],[e+s,n+o]]}const c=t.x-a;if(!l)return[[c,e+r/2],[c+o,e-r/2]];const i=o/3;return[[c,e+s],[c+i,e-s],[c+2*i,e+s],[c+o,e-s]]},d=(t,e=!1)=>t.map(([t,e],n)=>`${0===n?"M":"L"} ${t.toFixed(1)} ${e.toFixed(1)}`).join(" ")+(e?" Z":""),h="tablechart-break-"+ ++x,f=$("mask",{id:h,maskUnits:"userSpaceOnUse"});f.appendChild($("rect",{x:-1e3,y:-a.height,width:3e3,height:3*a.height,fill:"white"}));const b=[],m=r(c);for(const M of(t=>Array.from(t.querySelectorAll(`.${n}`)).map(t=>{const e="rect"===t.tagName?[t]:Array.from(t.querySelectorAll("rect")),n=(t,e)=>Number(t.getAttribute(e)),a=Math.min(...e.map(t=>n(t,"x"))),o=Math.min(...e.map(t=>n(t,"y"))),r=Math.max(...e.map(t=>n(t,"x")+n(t,"width"))),s=Math.max(...e.map(t=>n(t,"y")+n(t,"height"))),c=["--start","--span"].map(e=>t.style.getPropertyValue(e)&&`${e}:${t.style.getPropertyValue(e)}`).filter(Boolean).join("; ");return{row:Number(t.dataset.row),x:a,y:o,width:r-a,height:s-o,sideways:"right"===t.dataset.grow,part:c}}))(s)){const t=M.sideways?a.breakX:m;if(void 0===t)continue;if(!(M.sideways?M.x<t&&M.x+M.width>t:M.y<m&&M.y+M.height>m))continue;const[e,n]=M.sideways?[i(M,t),i(M,t+a.breakGap)]:[i(M,m-a.breakGap),i(M,m)];f.appendChild($("path",{d:d([...e,...n.slice().reverse()],!0),fill:"black"})),b.push(e,n);const r=[g("--after",o[M.row-1]?.slot??0),M.part].filter(Boolean).join("; ");for(const o of[e,n])s.appendChild($("path",{class:u,"data-part":"edge","data-note":a.note,d:d(o),style:r}))}if(!b.length)return;const p=Array.from(s.querySelectorAll(`.${u}`)),w=$("g",{mask:`url(#${h})`});for(const n of Array.from(s.childNodes))p.includes(n)||w.appendChild(n);const y=$("defs");y.appendChild(f),s.prepend(y,w)}},N=t=>{let e=Number.NEGATIVE_INFINITY;for(const n of t)e=Math.max(e,n);return e},S=t=>(t.split(/[.,]/)[1]||"").length,H=(t,e,n)=>{const a=((t,e)=>new Intl.NumberFormat(e||document.documentElement.lang||void 0,{minimumFractionDigits:t,maximumFractionDigits:t}))(e,n).formatToParts(t),o="minusSign"===a[0]?.type?a[0].value:"";return[o,a.slice(o?1:0).map(t=>t.value).join("")]},z=(t,e)=>{const n=document.createElement("span");if(n.className="tablechart-badge",n.inert=!0,t.childElementCount>0)for(const a of Array.from(t.children))n.appendChild(a.cloneNode(!0));else{n.textContent=(t.textContent||"").trim();const e=t.getAttribute("data-i18n");e&&n.setAttribute("data-i18n",e)}return e.appendChild(n),n},T=(e,n,a,o)=>{const r=(s=e?.textContent||"",Number.parseFloat((s.match(/-?[\d.,]+/)||["NaN"])[0].replace(",",".")));var s;const c=!!Number.isNaN(r)||Math.abs(n-r)<=.5,l={label:a,computed:n,stated:r,agrees:c};o.checks.push(l),c||console.warn(`[${t}] An annotation reads ${r}%, but ${a} is ${n.toFixed(1)}%. The chart shows your number.`)},L={create:z,draw(e,n,a){const{rows:s,cx:c,y:l,unit:i,labelHeight:u,badgeHeight:d,height:f,svg:b,after:m}=a,[p,w]=((t,e)=>{const n=(e,n)=>{const a=Number.parseInt(t.getAttribute(e)??"",10);return Number.isFinite(a)?a-1:n};return[n("data-from",0),n("data-to",e-1)]})(e,s.length),y=s[p],v=s[w];if(!y||!v)return void console.warn(`[${t}] A bracket points at a row that is not there (row ${p+1} to ${w+1}, of ${s.length}).`);const k=7*i,x=4*i,A=c(p),N=c(w),S=Math.min(l(y.value),l(v.value))-u-x-.9*d,H=t=>l(t)-u-x,z=`M ${A} ${H(y.value)} L ${A} ${S} L ${N} ${S} L ${N} ${H(v.value)-k}`,L=(H(y.value)-S+Math.abs(N-A)+(H(v.value)-k-S))/i+1;b.appendChild($("path",{class:o,"data-note":a.note,d:z,style:`--len:${L.toFixed(1)}; ${g("--after",m)}`}));const C=H(v.value);var B;b.appendChild($("polygon",{class:r,"data-note":a.note,points:`${N},${C} ${N-.45*k},${C-k} ${N+.45*k},${C-k}`,style:g("--after",m)})),n&&(M(n,(A+N)/2,S,h,f),n.style.setProperty("--after",String(m))),T(n,(B=y.value,(v.value-B)/Math.abs(B)*100),`${y.value} to ${v.value}`,a)}},C=new WeakMap,B=t=>C.get(t)??{width:t.offsetWidth,height:t.offsetHeight},O={create:z,draw(t,e,n){const{rows:a,cx:s,y:c,unit:l,labelHeight:i,height:u,svg:d,values:f,after:b}=n,m=a[0],p=a[a.length-1];if(!m||!p)return;const w=i+18*l,y=10*l,v=10*l;let k=s(0),x=c(m.value)-w,A=s(a.length-1),N=c(p.value)-w,S=0;a.forEach((t,e)=>{const n=A===k?0:(s(e)-k)/(A-k),a=x+n*(N-x)-(c(t.value)-w);a>S&&(S=a)}),x-=S,N-=S;const H=A-k,z=N-x,L=Math.hypot(H,z)||1,C=H/L,O=z/L;k-=C*y,x-=O*y,A+=C*y,N+=O*y;const U=Number.parseFloat(t.getAttribute("data-at")||"0.5");if(e){const t=k+(A-k)*U,n=x+(N-x)*U,o=B(e).width*l/2,r=n+B(e).height*l/2+8*l;let u=0;a.forEach((e,n)=>{const a=(f[n]?B(f[n]).width:0)*l/2;if(Math.abs(s(n)-t)>=o+a)return;const d=c(e.value)-7*l-i;u=Math.max(u,r-d)}),x-=u,N-=u}const j=A-C*v,E=N-O*v,F=Math.hypot(j-k,E-x)/l+1;d.appendChild($("line",{class:o,"data-note":n.note,x1:k,y1:x,x2:j,y2:E,style:`--len:${F.toFixed(1)}; ${g("--after",b)}`}));const P=-O,_=C,q=.42*v;d.appendChild($("polygon",{class:r,"data-note":n.note,points:[`${A},${N}`,`${j+P*q},${E+_*q}`,`${j-P*q},${E-_*q}`].join(" "),style:g("--after",b)})),e&&(M(e,k+(A-k)*U,x+(N-x)*U,h,u),e.style.setProperty("--after",String(b)));const V=Number.parseFloat(t.getAttribute("data-years")||"");!Number.isNaN(V)&&V>0&&T(e,((t,e,n)=>100*(Math.pow(e/t,1/n)-1))(m.value,p.value,V),`${m.value} to ${p.value} over ${V} years`,n)}},U=(t,e,n)=>{const a=.15,o=Math.min(.7*t/(e+(e-1)*a),n),r=e*o+(e-1)*o*a;return{size:o,gap:o*a,offset:t=>-r/2+t*o*1.15}},j=(t,e,n)=>{const a=t.series[n],o=t.series.some(t=>t.focus)&&!a.focus;return{"data-series":n+1,...o&&{"data-muted":""},style:`--n:${n}; --m:${o?1:0}; --palette:var(--tablechart-color-${n+1}); ${g("--i",e.slot)}`}},E=(t,e,n=!1)=>{let a=0,o=0;return Array.from({length:e},(e,r)=>{const s=t.cells[r]??t.cells[0],c=s.missing?0:s.value;if(n){const t=a;return a+=c,{from:t,to:a,cell:s}}if(c<0){const t=o;return o+=c,{from:t,to:o,cell:s}}const l=a;return a+=c,{from:l,to:a,cell:s}})},F=(t,e,n=!1)=>{const a=E(t,e,n);return{top:Math.max(0,...a.map(t=>t.to)),bottom:Math.min(0,...a.map(t=>t.to))}},P=(t,e)=>{const{top:n,bottom:a}=F(t,e);return n+a},_=(t,e,n)=>{const a=e.series.some(t=>t.focus);t.style.setProperty("--n",String(n)),t.style.setProperty("--m",a&&!e.series[n].focus?"1":"0"),t.style.setProperty("--palette",`var(--tablechart-color-${n+1})`)},q=(t,e,a,o={},r="")=>{const s={class:w(n,e),"data-kind":"bar","data-row":a+1,...o},c=g("--i",e.slot)+(r?`; transform-origin: ${r}`:""),l=$("g",{...s,"data-stack":"",style:c});return t.svg.appendChild(l),(n,r)=>{const s=void 0!==o["data-grow"]?{"data-grow":o["data-grow"]}:{};l.appendChild($("rect",{...s,...r,class:w("tablechart-piece",e),"data-row":a+1,...j(t,e,n)}))}},V=(t,e,n)=>t.some(t=>B(t).width*n>e-6*n),K=(t,e,n)=>e>=B(t).height*n*1.6,R=(t,e,n)=>e>=B(t).width*n*1.5,W=(t,e,n,a,o=.7)=>{t.style.setProperty(a,"1");let r=1;for(const c of e){const{size:t,room:e}=n(c);t>e&&(r=Math.min(r,e/t))}const s=r>=o?r:0;return t.style.setProperty(a,String(s||o)),s},D={segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),series:!0,legend:"box",stackable:!0,totals:!0,breakable:!0,aspect:.5,minHeight:({labelHeight:t,nameHeight:e,rows:n,series:a,stacked:o})=>{const r=1.1*t,s=a>1&&!o?r*(a+.15*(a-1))/.7:r/.58;return n*Math.max(s,1.2*e)},categories:"beside",headroom:()=>0,draw(t){const{segments:e,height:o,unit:r,svg:s,values:c,categories:l,config:i,barMax:u}=t,d=t.series.length>1,f=Math.max(N(l.map(t=>B(t).width*r)),0),b=Math.min(f+10*r,420),m=h-4*r,p=t.stacked?Math.max(N(t.rows.map(e=>F(e,t.series.length).top)),0)||1:Math.max(N(t.rows.flatMap(e=>e.cells.slice(0,t.series.length).map(t=>Math.abs(t.value)))),0)||1,y=t.stacked?Math.max(N(t.rows.map(e=>-F(e,t.series.length).bottom)),0):Math.max(N(t.rows.flatMap(e=>e.cells.slice(0,t.series.length).map(t=>-t.value))),0),v=Math.max(p,t.squeeze?.hi??0)+y,k=(e,n)=>((t,e,n,a,o)=>{if(!a)return t/e*n;const{lo:r,hi:s,gap:c,share:l}=a,i=n*l,u=(n-i-o)/(r+(e-s)),d=i/(s-r);return t<=r?t*u:t<=c?r*u+(t-r)*d:t<=s?r*u+(t-r)*d+o:r*u+i+o+(t-s)*u})(Math.abs(e),v,n,t.squeeze,t.breakGap),x=o/e.length,A=t=>(t+.5)*x,S=Math.min(x*i.barfill,u),H=U(x,t.series.length,u),z=c[0]??t.totals[0],T=z?B(z).height*r*.56:0,L=Math.max(((d&&!t.stacked?H.size:S)-T)/2,5*r),C=t=>B(t).width*r,O=t=>t.length?N(t.map(C))+L+4*r:0,P=(e,n)=>(t.rows[n].cells[e]??t.rows[n].cells[0]).value,V=t.seriesValues.flatMap((t,e)=>t.map((t,n)=>({label:t,value:P(e,n)}))),K=e=>{const n=F(t.rows[e],t.series.length);return 0===n.top&&n.bottom<0};let D=t.stacked?O(t.totals.filter((t,e)=>!K(e))):d?O(V.filter(t=>t.value>=0).map(t=>t.label)):0,I=t.stacked?O(t.totals.filter((t,e)=>K(e))):d?O(V.filter(t=>t.value<0).map(t=>t.label)):0;if(!d&&!t.stacked)for(let n=0;n<3;n++){const t=m-b-D-I,n=e.map((t,e)=>({seg:t,label:c[e]})).filter(({seg:e,label:n})=>!R(n,k(e.value,t),r)),a=O(n.filter(({seg:t})=>t.value>=0).map(({label:t})=>t)),o=O(n.filter(({seg:t})=>t.value<0).map(({label:t})=>t));if(a<=D&&o<=I)break;D=Math.max(D,a),I=Math.max(I,o)}const G=m-b-D-I,Z=b+I+k(y,G),J=t=>t<0?Z-k(t,G):Z+k(t,G);if(t.squeeze&&(t.breakX=J(t.squeeze.gap)),t.stacked)return t.rows.forEach((e,n)=>{const a=F(e,t.series.length),s=q(t,e,n,{"data-grow":"right"},a.bottom<0?Z-J(a.bottom)+"px center":""),c=A(n)-S/2;E(e,t.series.length).forEach(({from:e,to:a,cell:l},i)=>{const u=t.seriesValues[i][n];if(u.dataset.place="none",l.missing||a===e)return;const d=Math.min(J(e),J(a)),f=Math.max(J(e),J(a));s(i,{x:d,y:c,width:Math.max(f-d,1),height:S,...a<e&&{"data-grow":"left"}}),u.dataset.place="inside",u.toggleAttribute("data-left-out",!R(u,f-d,r)||B(u).height*r>S),_(u,t,i),M(u,(d+f)/2,A(n),h,o)});const i=t.totals[n];i&&(i.dataset.place=K(n)?"before":"after",M(i,K(n)?J(a.bottom)-L:J(a.top)+L,A(n),h,o));const u=l[n];u&&M(u,b-8*r,A(n),h,o)}),void s.appendChild($("line",{class:a,x1:Z,x2:Z,y1:0,y2:o}));if(d){t.plot.dataset.grouped="";const e=t.seriesValues.flat().filter(t=>void 0===t.dataset.missing),c=W(t.plot,e,t=>({size:B(t).height*r,room:H.size+.5*H.gap}),"--_fit");return t.rows.forEach((e,a)=>{t.series.forEach((r,l)=>{const i=e.cells[l]??e.cells[0],u=t.seriesValues[l][a];if(i.missing)return void(u.dataset.place="none");const d=J(i.value),f=i.value<0,b=A(a)+H.offset(l);s.appendChild($("rect",{class:w(n,e),"data-kind":"bar","data-row":a+1,"data-grow":f?"left":"right",x:Math.min(d,Z),y:b,width:Math.max(Math.abs(d-Z),1),height:H.size,...j(t,e,l)})),u.dataset.place=f?"before":"after",u.toggleAttribute("data-left-out",!c),M(u,f?d-L:d+L,b+H.size/2,h,o)});const i=l[a];i&&M(i,b-8*r,A(a),h,o)}),void s.appendChild($("line",{class:a,x1:Z,x2:Z,y1:0,y2:o}))}const Q=e.map((t,e)=>R(c[e],Math.abs(J(t.value)-Z),r));e.forEach((e,a)=>{const i=J(e.value),u=A(a),d=e.value<0,f=Math.abs(i-Z);s.appendChild($("rect",{class:w(n,e),"data-kind":e.kind,"data-row":a+1,"data-grow":d?"left":"right",x:Math.min(i,Z),y:u-S/2,width:Math.max(f,1),height:S,style:g("--i",e.slot)}));const m=c[a],p=Math.max(Math.min(L,f-C(m)-6*r),6*r),y=d?1:-1;m.dataset.place=Q[a]?"inside":d?"before":"after",m.dataset.kind=e.kind,M(m,Q[a]?"center"===t.insideAlign?(Z+i)/2:"start"===t.insideAlign?Z-y*(p+C(m)/2):i+y*(p+C(m)/2):i-y*L,u,h,o);const v=l[a];v&&M(v,b-8*r,u,h,o)}),s.appendChild($("line",{class:a,x1:Z,x2:Z,y1:0,y2:o}))}},I={segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),series:!0,legend:"box",stackable:!0,totals:!0,breakable:!0,headroom:({labelHeight:t,badgeHeight:e,hasAnnotations:n,unit:a})=>t+4*a+(n?1.6*e:0),draw(t){const{segments:e,cx:o,y:r,barWidth:s,height:c,unit:l,svg:i,values:u,labels:d,insideAlign:f}=t,b=r(0);if(t.stacked)return t.rows.forEach((e,n)=>{const a=F(e,t.series.length),i=q(t,e,n,{},a.bottom<0?`center ${b-r(a.top)}px`:""),u=o(n)-s/2;E(e,t.series.length).forEach(({from:e,to:a,cell:d},f)=>{const b=t.seriesValues[f][n];if(b.dataset.place="none",d.missing||a===e)return;const m=Math.min(r(a),r(e)),g=Math.max(r(a),r(e));i(f,{x:u,y:m,width:s,height:Math.max(g-m,1),...a<e&&{"data-grow":"down"}}),b.dataset.place="inside",b.toggleAttribute("data-left-out",!K(b,g-m,l)||B(b).width*l>s-4*l),_(b,t,f),M(b,o(n),(m+g)/2,h,c)});const d=t.totals[n];if(d){const t=0===a.top&&a.bottom<0;d.dataset.place=t?"below":"outside",M(d,o(n),t?r(a.bottom)+4*l:r(a.top)-4*l,h,c)}}),void i.appendChild($("line",{class:a,x1:0,x2:h,y1:b,y2:b}));if(t.series.length>1){const e=o(1)-o(0)||2*o(0),s=U(e,t.series.length,t.barMax);t.plot.dataset.grouped="";const u=t.seriesValues.flat().filter(t=>void 0===t.dataset.missing),d=W(t.plot,u,t=>({size:B(t).width*l,room:s.size+.5*s.gap}),"--_fit");return t.rows.forEach((e,a)=>{t.series.forEach((u,f)=>{const m=e.cells[f]??e.cells[0],g=t.seriesValues[f][a],p=o(a)+s.offset(f);if(m.missing)return void(g.dataset.place="none");const y=r(m.value),v=m.value<0;i.appendChild($("rect",{class:w(n,e),"data-kind":"bar","data-row":a+1,...v&&{"data-grow":"down"},x:p,y:Math.min(y,b),width:s.size,height:Math.max(Math.abs(b-y),1),...j(t,e,f)})),g.dataset.place=v?"below":"outside",g.toggleAttribute("data-left-out",!d),M(g,p+s.size/2,v?y+4*l:y-4*l,h,c)})}),void i.appendChild($("line",{class:a,x1:0,x2:h,y1:b,y2:b}))}const m=V(u,s,l),p=e.map((t,e)=>"inside"===d&&!m&&!t.missing&&K(u[e],Math.abs(b-r(t.value)),l)),y=u[0]?B(u[0]).height*l*.56:0;let v=Number.POSITIVE_INFINITY;for(const[n,a]of u.entries())p[n]&&(v=Math.min(v,(s-B(a).width*l)/2));e.forEach((t,e)=>{const a=r(t.value),d=t.value<0;if(t.missing)return M(u[e],o(e),b-4*l,h,c),void(u[e].dataset.place="outside");i.appendChild($("rect",{class:w(n,t),"data-kind":t.kind,"data-row":e+1,...d&&{"data-grow":"down"},x:o(e)-s/2,y:Math.min(a,b),width:s,height:Math.max(Math.abs(b-a),1),style:g("--i",t.slot)}));const m=d?-1:1,k=Math.min(v,(Math.abs(b-a)-y)/2),x="center"===f?(a+b)/2:"start"===f?b-m*(k+y/2):a+m*(k+y/2),A=d?a+4*l:a-4*l;M(u[e],o(e),p[e]?x:A,h,c),u[e].dataset.place=p[e]?"inside":d?"below":"outside"}),i.appendChild($("line",{class:a,x1:0,x2:h,y1:b,y2:b}))}},G=0,Z={aspect:.66,centre:!0,headroom:()=>0,segments:t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),draw({rows:t,height:e,unit:n,labelHeight:a,svg:o,values:r,config:c,centre:l}){const i=500,u=e/2,d=(t=>t.filter(t=>!t.isTotal))(t).reduce((t,e)=>t+Math.abs(e.value),0);if(!d)return;const f=1.2*a+10*n,b=Math.max(Math.min(h,e)/2-f,10),p=b*c.ringfill,y=b-p/2,v=2*Math.PI*y,k=[];let x=0,A=0,N=0;if(t.forEach((t,c)=>{const l=r[c];if(t.isTotal)return void(l.dataset.place="none");const f=Math.abs(t.value)/d,S=m(N,f),H=`--share:${f.toFixed(4)}; --start:${S.start.toFixed(4)}; --span:${S.span.toFixed(4)};`,z=f*v,T=x/v*2*Math.PI-Math.PI/2;k.push(T),o.appendChild($("circle",{class:w(s,t),"data-slice":A+1,"data-row":c+1,cx:i,cy:u,r:y,"stroke-width":p,transform:`rotate(-90 500 ${u})`,"stroke-dasharray":`${z.toFixed(1)} ${(v-z).toFixed(1)}`,"stroke-dashoffset":(-x).toFixed(1),style:`--n:${A}; --palette:var(--tablechart-color-${A+1}); --arc:${z.toFixed(1)}; --circ:${v.toFixed(1)}; ${H} --ease:${S.easing}; ${g("--i",t.slot)}`}));const L=T+z/v*Math.PI,C=Math.cos(L),O=Math.sin(L);o.appendChild($("line",{class:"tablechart-leader",x1:i+C*(b+2*n),y1:u+O*(b+2*n),x2:i+C*(b+7*n),y2:u+O*(b+7*n),"data-row":c+1,style:`${H} ${g("--i",t.slot)}`})),l.style.setProperty("--start",S.start.toFixed(4)),l.style.setProperty("--span",S.span.toFixed(4));const U=b+9*n,j=B(l).width*n/2;M(l,i+C*(U+Math.abs(C)*j),u+O*(U+Math.abs(O)*a*.7),h,e),l.dataset.place="around",x+=z,N+=f,A+=1}),k.length>1){const t=y-p/2-1,n=y+p/2+1,a="tablechart-slices-"+ ++G,r=$("mask",{id:a,maskUnits:"userSpaceOnUse"});r.appendChild($("rect",{x:0,y:0,width:h,height:e,fill:"white"}));for(const e of k)r.appendChild($("line",{class:"tablechart-divide",x1:i+Math.cos(e)*t,y1:u+Math.sin(e)*t,x2:i+Math.cos(e)*n,y2:u+Math.sin(e)*n}));const c=$("g",{mask:`url(#${a})`});for(const e of Array.from(o.querySelectorAll(`.${s}`)))c.appendChild(e);const l=$("defs");l.appendChild(r),o.prepend(l,c)}l&&M(l,i,u,h,e)}},J=["circle","square","diamond"],Q=(t,e)=>{const n=t[e]?.marker?.toLowerCase().split(/\s+/)??[],a=J.find(t=>n.includes(t));return{shape:a??J[Math.floor(e/2)%J.length],open:n.includes("open")||!n.includes("filled")&&!a&&e%2==1}},X=t=>Number(t.toFixed(2));function Y(t,e,n){const a=new Array(t).fill(0);let o=[];const r=()=>{(function(t,e){const n=t.length;if(n<2)return t.map(()=>0);const a=n=>(e[n+1]-e[n])/(t[n+1]-t[n]||1),o=new Array(n).fill(0);for(let s=1;s<n-1;s++){const e=a(s-1),n=a(s);if(e*n<=0)continue;const r=t[s]-t[s-1],c=t[s+1]-t[s],l=(e*c+n*r)/(r+c||1),i=Math.min(2*Math.abs(e),2*Math.abs(n),Math.abs(l));o[s]=Math.sign(e)*i||0}if(2===n)return o[0]=a(0),o[1]=a(0),o;const r=(n,a,o)=>{const r=t[a]-t[n];return r?((e[a]-e[n])/r*3-o)/2:o};return o[0]=r(0,1,o[1]),o[n-1]=r(n-2,n-1,o[n-2]),o})(o.map(t=>n(t)[0]),o.map(t=>n(t)[1])).forEach((t,e)=>{a[o[e]]=t}),o=[]};for(let s=0;s<t;s++)e(s)?r():o.push(s);return r(),a}var tt=t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"})),et=t=>({segments:tt,series:!0,stackable:!0,running:!0,swatch:t?"box":void 0,headroom:({labelHeight:t,unit:e})=>1.6*t+6*e,footroom:({labelHeight:e,unit:n,series:a,focused:o,stacked:r})=>t||r||2!==a||o?0:e+7*n,draw(e){const{rows:n,series:o,seriesValues:r,names:s,cx:c,y:i,height:u,unit:d,labelHeight:f,svg:b,stacked:m}=e,g="step"===e.shape,p="smooth"===e.shape,w=o.length>1,y=o.some(t=>t.focus),v=n.length-1,x=i(0),A=n.length>1?c(1)-c(0):2*c(0);b.style.setProperty("--_base",`${X(x)}px`);const N=(t,e)=>n[e]?.cells[t]??n[e]?.cells[0],S=(t,e)=>!N(t,e)||!!N(t,e)?.missing,H=n.map(t=>m?E(t,o.length,!0):null),z=(t,e)=>H[e]?.[t].to??N(t,e)?.value??0,T=(t,e)=>H[e]?.[t].from??0,L=(t,e)=>[c(e),i(z(t,e))],C=o.map((t,e)=>{if(!w)return{attrs:{},ink:""};const n=y&&!t.focus;return{attrs:{"data-series":e+1,...n&&{"data-muted":""}},ink:`--n:${e}; --m:${n?1:0}; --palette:var(--tablechart-color-${e+1}); `}}),O=Math.min(v,6);e.plot.style.setProperty("--count",String(O+1));const U=v>0?O/(g?n.length:v):1,j=t=>t*U,F=t=>`--i:${X(j(t))}`,P=t=>{const e=[];let a=-1;return n.forEach((n,o)=>{S(t,o)||(a<0&&(a=o),(o===v||S(t,o+1))&&((g||o>a)&&e.push([a,o]),a=-1))}),e},_=(t,e)=>`--i:${X(j(t)+1)}; --d:${X(j(g?e+1:e)-j(t))}`,q=(t,e)=>({"data-from":t+1,"data-to":e+1,...g&&{"data-flat":""}}),V=p?o.map((t,e)=>Y(n.length,t=>S(e,t),t=>L(e,t))):[],K=p&&t?o.map((t,e)=>Y(n.length,t=>S(e,t),t=>[c(t),i(T(e,t))])):[],R=(t,e,n)=>{const a=[];return t.forEach(([o,r],s)=>{g?(a.push(`H${X(o+n*A/2)}`),s<t.length-1&&a.push(`V${X(t[s+1][1])}`)):s>0&&a.push(e?function(t,e,n,a){const[o,r]=function(t,e,n,a){const o=(e[0]-t[0])/3;return[[t[0]+o,t[1]+n*o],[e[0]-o,e[1]-a*o]]}(t,e,n,a),s=([t,e])=>`${X(t)},${X(e)}`;return`C${s(o)} ${s(r)} ${s(e)}`}(t[s-1],[o,r],e[s-1],e[s]):`L${X(o)},${X(r)}`)}),a},W=(t,e,a,o)=>n.slice(e,a+1).map((n,a)=>[c(e+a),i(o(t,e+a))]),D=(t,e,n,a)=>p?t[e].slice(n,a+1):null,I=t=>c(t)-(g?A/2:0),G=t=>c(t)+(g?A/2:0);t&&o.forEach((t,e)=>(t=>{const e=$("g",{class:"tablechart-area",...C[t].attrs,...m&&{"data-stacked":""},style:C[t].ink}),n=P(t),a=$("g",{class:"tablechart-area-fill",style:`--rows:${X(O+1)}; ${n.length?_(...n[0]):""}`});e.appendChild(a);for(const[o,r]of n){const e=W(t,o,r,z),n=W(t,o,r,T),s=D(K,t,o,r)?.reverse()??null,c=[`M${X(I(o))},${X(n[0][1])}`,`L${X(I(o))},${X(e[0][1])}`,...R(e,D(V,t,o,r),1),`L${X(G(r))},${X(n[n.length-1][1])}`,...R(n.reverse(),s,-1),"Z"].join(" ");a.appendChild($("path",{d:c,...q(o,r),style:_(o,r)}))}b.appendChild(e)})(e)),o.forEach((t,e)=>(t=>{const e=o[t];for(const[n,a]of P(t)){const o=W(t,n,a,z),r=[`M${X(I(n))},${X(o[0][1])}`,...R(o,D(V,t,n,a),1)].join(" ");b.appendChild($("path",{class:"tablechart-series",...C[t].attrs,d:r,...e.line&&{"data-line":e.line},...q(n,a),style:`${C[t].ink}${_(n,a)}`}))}})(e)),g||(()=>{const t=o.map((t,e)=>w?Q(o,e):{shape:"circle",open:!1}),e=(e,n,a)=>{const[o,r]=L(e,n);return((t,e,n,a,o={})=>{if("square"===t){const t=.88*a;return $("rect",{x:e-t,y:n-t,width:2*t,height:2*t,...o})}if("diamond"===t){const t=1.2*a;return $("polygon",{points:`${e},${n-t} ${e+t},${n} ${e},${n+t} ${e-t},${n}`,...o})}return $("circle",{cx:e,cy:n,r:a,...o})})(t[e].shape,o,r,4*d,{...a,style:`${a.style??""}${s=r,`--rise:${X(x-s)}px; `}${F(n)}`});var s},a=t=>n.map((t,e)=>e).filter(e=>!S(t,e)),r=o.flatMap((n,o)=>t[o].open?a(o).map(t=>e(o,t,{class:l,"data-row":t+1,...w&&{"data-series":o+1}})):[]);k(b,r,h,u),o.forEach((n,o)=>{for(const r of a(o))b.appendChild(e(o,r,{class:"tablechart-point",...C[o].attrs,"data-marker":t[o].shape,...t[o].open&&{"data-open":""},"data-row":r+1,style:C[o].ink}))})})();const Z=(t,e)=>{let n=e;for(;n<v&&!S(t,n+1)&&N(t,n+1)?.value===N(t,e)?.value;)n++;return n};r.forEach((e,n)=>{e.forEach((e,a)=>{e.style.setProperty("--i",String(X(g?(j(a)+j(a+1))/2:j(a))));const s=((e,n)=>{const a=N(e,n);if(!a||a.missing)return"none";if(g&&n>0&&!S(e,n-1)&&N(e,n-1)?.value===a.value)return"none";if(y&&!o[e].focus)return"none";if(m)return"middle";const r=a.value<0?"below":"above";if(!w||y||o.length>2)return r;const s=N(1-e,n);return!s||s.missing?r:a.value>s.value||a.value===s.value&&0===e||t&&a.value>=0&&L(e,n)[1]+7*d+f>x?"above":"below"})(n,a);if(e.dataset.place="above"===s?"outside":s,e.toggleAttribute("data-left-out","none"!==s&&((t,e)=>m||g?B(r[t][e]).width*d>(g?Z(t,e)-e+1:1)*A-4*d||!!(m&&t>0&&z(t,e)<T(t,e))||m&&Math.abs(i(T(t,e))-i(z(t,e)))<1.2*f:w&&!y&&o.length>2)(n,a)),g&&"none"!==s?e.dataset.rowEnd=String(Z(n,a)+1):delete e.dataset.rowEnd,"none"===s)return;const l=B(e).width*d/2+4*d;let b=c(a);g?b=(c(a)+c(Z(n,a)))/2:"middle"===s&&0===a?b+=l:"middle"===s&&a===v&&(b-=l);const p=i(z(n,a)),$={middle:(i(T(n,a))-p)/2,above:-7*d,below:7*d};M(e,b,p+$[s],h,u)})});const J=s.map((t,e)=>{let n=v;for(;n>0&&S(e,n);)n--;const[a,o]=L(e,n);return{name:t,x:(g?a+A/2:a)+10*d,y:m?(o+i(T(e,n)))/2:o}}),tt=(s[0]?B(s[0]).height:0)*d;for(const t of((t,e)=>(t.sort((t,e)=>t.y-e.y),t.forEach((n,a)=>{const o=t[a-1];o&&n.y<o.y+e&&(n.y=o.y+e)}),t))(J,tt))M(t.name,t.x,t.y,h,u);const et=n.some(t=>t.cells.some(t=>!t.missing&&t.value<0)),nt=t||m||2!==o.length||y||et?x:u-2*d;b.appendChild($("line",{class:a,x1:0,x2:c(v)+c(0),y1:nt,y2:nt}))}}),nt=et(!1),at=et(!0),ot=new Set,rt={segments:e=>{let n=0,a=!1;return e.map(e=>{if(e.isTotal)return a&&((e,n)=>{if(Math.abs(e-n)<=Math.abs(n)/100)return;const a=`[${t}] A total reads ${e}, but the steps before it add up to ${Number(n.toFixed(6))}. The chart shows your number.`;ot.has(a)||(ot.add(a),console.warn(a))})(e.value,n),a=!1,n=e.value,{...e,from:0,to:e.value,kind:"total"};const o=n;return n+=e.value,a=!0,{...e,from:o,to:n,kind:e.value>=0?"up":"down"}})},breakable:!0,headroom:({labelHeight:t,badgeHeight:e,hasAnnotations:n,unit:a})=>t+6*a+(n?1.6*e:0),draw({segments:t,cx:e,y:o,barWidth:r,height:s,unit:c,svg:l,values:i,breakAt:u,insideAlign:d}){const f=o(0),m=V(i,r,c),p=d??"center",y=t.map((e,n)=>{const a=o(Math.max(e.from,e.to)),r=Math.abs(o(e.from)-o(e.to)),s=null!==u&&Math.min(e.from,e.to)<u&&Math.max(e.from,e.to)>u,l="total"===e.kind&&n>0&&n===t.length-1;return{top:a,length:r,down:"down"===e.kind||"total"===e.kind&&(l?e.to>=0:e.to<0),inside:!s&&!m&&K(i[n],r,c)}}),v=i[0]?B(i[0]).height*c*.56:0;let k=Number.POSITIVE_INFINITY;for(const[n,a]of y.entries())a.inside&&(k=Math.min(k,(r-B(i[n]).width*c)/2));const x=t.length,A=(t,e,n=!1)=>`--start:${(t/x).toFixed(4)}; --span:${(e/x).toFixed(4)}; --ease:${n?b:"linear"};`;t.forEach((n,a)=>{const s=t[a+1];if(!s)return;const c=o(n.to),i=e(a)+r/2,u=e(a+1)-r/2;l.appendChild($("line",{class:"tablechart-connector",x1:i,x2:u,y1:c,y2:c,"data-row":a+2,style:`${g("--i",s.slot)}; ${A(a+1,1/3)}`}))}),t.forEach((a,o)=>{const{top:u,length:d,down:f,inside:b}=y[o];l.appendChild($("rect",{class:w(n,a),"data-kind":a.kind,"data-row":o+1,"data-grow":f?"down":"up",x:e(o)-r/2,y:u,width:r,height:Math.max(d,1),style:`${g("--i",a.slot)}; ${A(o,1,o===t.length-1)}`}));const m=i[o];m.style.setProperty("--start",(o/x).toFixed(4)),m.style.setProperty("--span",(1/x).toFixed(4));const N=Math.min(k,(d-v)/2),S="center"===p?u+d/2:"end"===p!==f?u+N+v/2:u+d-N-v/2;m.dataset.place=b?"inside":"outside",m.dataset.kind=a.kind;const H=b?S:"down"===a.kind?u+d+B(m).height*c+3*c:u-3*c;M(m,e(o),H,h,s)}),l.appendChild($("line",{class:a,x1:0,x2:h,y1:f,y2:f}))}},st={enabled:!1,log(...e){st.enabled&&console.log(`[${t}]`,...e)},timed(e,n,a){if(!st.enabled)return a();const o=performance.now(),r=a(),s=performance.now()-o,c=n.querySelectorAll("tbody tr").length;return s>50?console.warn(`[${t}] ${e} took ${s.toFixed(1)} ms for ${c} rows, more than 50 ms.`,n):st.log(`${e} took ${s.toFixed(1)} ms for ${c} rows.`,n),r}},ct=t=>{const e=(t?.textContent||"").trim(),n=e.match(/^(.*?)(-?\d+(?:[.,]\d+)?)(.*)$/);return{raw:e,number:n?.[2]??"",prefix:n?.[1]??"",suffix:n?.[3]??"",missing:!n,value:n?Number.parseFloat(n[2].replace(",",".")):0}},lt=t=>Array.from(t.querySelector("thead tr:last-child")?.children??[]).slice(1),it=["axis-break","trend","bracket"],ut=t=>{const e=t.plan;if(!e)return;const n=e=>null===e||t.step-e>=1;for(const a of t.figure.querySelectorAll("[data-from]")){const t=Number(a.dataset.from)-1,o=Number(a.dataset.to)-1,r=a.closest("[data-series]")?.dataset.series,s=r?Number(r)-1:0,c=e.series[s],l=t=>e.cells[t]?.[s]?.step??e.rows[t]?.step??null;let i=t-1;if(c&&null!==c.step)i=n(c.step)?o:t-1;else for(;i<o&&n(l(i+1));)i++;const u=a.hasAttribute("data-flat")?(i-t+1)/(o-t+1):o>t?Math.max(0,i-t)/(o-t):0;a.style.setProperty("--reveal",String(u))}},dt=(t,e,n=!1)=>{const a=t.plan;if(!a)return;const o=Math.min(Math.max(Math.round(e),0),a.count),r=o!==t.step;t.step=o,t.figure.style.setProperty("--_step",String(o)),ut(t);const[s,c]=t.controls?.querySelectorAll("button")??[];s&&(s.disabled=0===o),c&&(c.disabled=o===a.count),r&&!n&&t.figure.dispatchEvent(new CustomEvent("tablechart:step",{bubbles:!0,detail:{step:o,steps:a.count}}))},ht={area:at,bar:D,column:I,donut:Z,line:nt,waterfall:rt},ft={"axis-break":A,trend:O,bracket:L},bt=Object.keys(ft),mt=t=>{let e="";for(let n=t.previousSibling;n&&(e=(n.textContent??"")+e,!e.trim());n=n.previousSibling);return e.trim()},gt=["straight","step","smooth"],pt=(t,e)=>{const n=t.dataset.chartShape;return n&&gt.includes(n)?n:gt.includes(e.shape)?e.shape:"straight"},$t=0,wt=(n,a,o=null)=>{const r=o??(n.getAttribute("data-chart")||"column"),s=ht[r];if(!s)return console.warn(`[${t}] Unknown chart type "${r}". Known types: ${Object.keys(ht).join(", ")}.`),n.setAttribute("data-chart-empty",""),null;const l=((t,e="data-i18n")=>Array.from(t.querySelectorAll("tbody tr")).map((t,n)=>{const a=t.querySelector("th"),o=Array.from(t.querySelectorAll("td")).map(ct);return o.length||o.push(ct(null)),{...o[0],label:(a?.textContent||"").trim(),key:e&&a?.getAttribute(e)||null,cells:o,classes:Array.from(t.classList),isTotal:"total"===t.getAttribute("data-kind"),slot:n}}))(n,a.langattribute);if(!l.length)return console.warn(`[${t}] A chart has no rows in its table, so there is nothing to draw.`),n.setAttribute("data-chart-empty",""),null;(t=>{const e=t.querySelector(":scope > figcaption");if(!e)return;(t=>{for(const e of t.querySelectorAll("br")){if(e.previousElementSibling?.classList.contains("tablechart-sr"))continue;if(/[.!?:;,…]$/.test(mt(e)))continue;const t=document.createElement("span");t.className=d,t.textContent=". ",e.before(t)}})(e);const n=t=>t.hasAttribute("aria-label")||t.hasAttribute("aria-labelledby"),a=t=>{e.id||(e.id="tablechart-caption-"+ ++$t),t.setAttribute("aria-labelledby",e.id)};"FIGURE"!==t.tagName||n(t)||a(t);const o=t.querySelector("table");!o||n(o)||o.querySelector(":scope > caption")||a(o)})(n);let u=((t,e,n="data-i18n")=>{const a=lt(t),o=Math.max(1,N(e.map(t=>t.cells.length)));return Array.from({length:o},(t,e)=>{const o=a[e];return{name:(o?.textContent||"").trim(),key:n&&o?.getAttribute(n)||null,focus:"focus"===o?.getAttribute("data-kind"),marker:o?.getAttribute("data-marker")??null,line:(r=o?.getAttribute("data-line"),"dashed"===r||"dotted"===r?r:null)};var r})})(n,l,a.langattribute);u.length>1&&!s.series&&(console.warn(`[${t}] A ${r} chart uses only the first of its ${u.length} value columns.`),u=u.slice(0,1));const h=u.length>1;h&&n.style.setProperty("--_series-count",String(u.length));const f=n.hasAttribute("data-chart-stack");f&&!s.stackable&&console.warn(`[${t}] A ${r} chart cannot be stacked.`);const b=f&&!!s.stackable&&h,m=document.createElement("div");m.className="tablechart-plot",m.setAttribute("aria-hidden","true");const g=$("svg",{role:"presentation",focusable:"false"});m.appendChild(g),n.appendChild(m);const p=s.centre?l.filter(t=>!t.isTotal):l,w=Math.max(0,N(p.flatMap(t=>t.cells.slice(0,u.length).map(t=>S(t.number))))),M=u.map((t,n)=>l.map((t,a)=>{const o=t.cells[n]??t.cells[0],r=y(e,m);return r.classList.add(...t.classes),r.dataset.value=String(o.value),o.prefix&&(r.dataset.prefix=o.prefix),o.suffix&&(r.dataset.suffix=o.suffix),o.missing&&(r.dataset.missing=o.raw),h&&(r.dataset.series=String(n+1)),r.dataset.row=String(a+1),r.style.setProperty("--i",String(t.slot)),r})),v=M[0],k=b&&s.totals?l.map((t,n)=>{const a=y(e,m);a.classList.add(...t.classes),a.dataset.kind="total",a.dataset.row=String(n+1),a.dataset.value=String(P(t,u.length));const o=t.cells[0];return o.prefix&&(a.dataset.prefix=o.prefix),o.suffix&&(a.dataset.suffix=o.suffix),a.style.setProperty("--i",String(t.slot)),a}):[],x=l[l.length-1],A=u.some(t=>t.focus),H=n.getAttribute("data-chart-legend"),z=h&&(null===H?a.legend||void 0!==s.legend:"false"!==H)?document.createElement("div"):null;z&&(z.className=c,z.setAttribute("aria-hidden","true"),z.inert=!0);const T=h?u.map((t,e)=>{const o=y("tablechart-name",z??m);z&&(o.dataset.place="legend");const r=s.legend??s.swatch;if(r&&(o.dataset.swatch=r),o.textContent=t.name,!r&&"step"!==pt(n,a)){const t=Q(u,e);o.dataset.marker=t.shape,o.toggleAttribute("data-open",t.open)}return t.line&&!r&&(o.dataset.line=t.line),t.key&&a.langattribute&&o.setAttribute(a.langattribute,t.key),o.dataset.series=String(e+1),o.style.setProperty("--n",String(e)),o.style.setProperty("--palette",`var(--tablechart-color-${e+1})`),o.style.setProperty("--m",A&&!t.focus?"1":"0"),o.style.setProperty("--i",String(x.slot)),o}):[],L=s.centre?y(i,m):null;if(L){const t=l.find(t=>t.isTotal),e=t?t.value:l.reduce((t,e)=>t+Math.abs(e.value),0);L.dataset.value=String(e),t&&(L.dataset.decimals=String(S(t.number)))}const C=L&&!l.some(t=>t.isTotal)?((t,e,n)=>{const a=t.querySelector("table");if(!a)return null;const o=a.querySelector("tfoot [data-chart-total]");if(o)return o.dataset.value=e.dataset.value??"0",o;const r=(a.tFoot??a.createTFoot()).insertRow(),s=document.createElement("th");s.scope="row",s.textContent=n.totallabel;const c=t.getAttribute("data-chart-keys");c&&n.langattribute&&s.setAttribute(n.langattribute,`${c}-total`);const l=r.insertCell();return l.setAttribute("data-chart-total",""),l.dataset.value=e.dataset.value??"0",r.prepend(s),l})(n,L,a):null,B="beside"===s.categories,O=document.createElement("div");O.className="tablechart-categories",O.setAttribute("aria-hidden","true"),O.inert=!0,B?O.dataset.place="beside":s.centre&&(O.dataset.place="key"),O.style.setProperty("--_columns",String(l.length));let U=0;for(const[t,e]of l.entries()){const n=document.createElement("span");n.classList.add(...e.classes),n.textContent=e.label,e.key&&a.langattribute&&n.setAttribute(a.langattribute,e.key),s.centre&&(n.dataset.kind=e.isTotal?"total":"slice",e.isTotal||(n.dataset.slice=String(U+1),n.style.setProperty("--n",String(U)),n.style.setProperty("--palette",`var(--tablechart-color-${U+1})`),U+=1)),n.style.setProperty("--i",String(e.slot)),n.dataset.row=String(t+1),O.appendChild(n)}(B?m:n).appendChild(O),z&&n.appendChild(z);const j=a.animate?(t=>{const e=t.hasAttribute("data-fragment"),n=Array.from(t.querySelectorAll("tbody tr")),a=Array.from(t.querySelector("thead tr:last-child")?.children??[]).slice(1),o=Array.from(t.querySelectorAll("[data-annotation]")).filter(t=>it.includes(t.getAttribute("data-annotation")??"")),r=t=>t.hasAttribute("data-fragment"),s=n.map(t=>Array.from(t.querySelectorAll(":scope > td")));if(!(e||n.some(r)||a.some(r)||s.flat().some(r)||o.some(r)))return null;const c=[],l=new Map,i=[],u=t=>{let e=null!==t?l.get(t):void 0;return void 0===e&&(e=c.length,c.push(t),i.push(0),null!==t&&l.set(t,e)),e};let d=0;const h="donut"===t.getAttribute("data-chart"),f=t=>h&&"total"===t.getAttribute("data-kind"),b=n.map(t=>{if(f(t))return{step:null,slot:0};if(!e&&!r(t))return{step:null,slot:d++};const n=u(t.getAttribute("data-fragment-index"));return{step:n,slot:i[n]++}}),m=Math.max(-1,...b.map(t=>t.step??-1));if(m>=0)for(const[w,y]of n.entries())f(y)&&(b[w]={step:m,slot:i[m]++});const g=a.map(t=>({step:r(t)?u(t.getAttribute("data-fragment-index")):null})),p=s.map(t=>t.map(()=>({step:null,slot:0}))),$=Math.max(0,...s.map(t=>t.length));for(let w=0;w<$;w++)for(const[t,e]of s.entries()){const n=e[w];if(!n||!r(n))continue;const a=u(n.getAttribute("data-fragment-index"));p[t][w]={step:a,slot:i[a]++}}return{rows:b,series:g,cells:p,notes:o.map(t=>{const e=(e,n)=>{const a=Number.parseInt(t.getAttribute(e)??"",10);return Number.isFinite(a)?a-1:n},[n,a]="bracket"===t.getAttribute("data-annotation")?[e("data-from",0),e("data-to",b.length-1)]:[0,b.length-1];let o=null;for(let r=Math.min(n,a);r<=Math.max(n,a);r++)for(const t of[b[r]?.step??null,...(p[r]??[]).map(t=>t.step)])null!==t&&(null===o||t>o)&&(o=t);const s=g[e("data-series",0)]?.step??null;null!==s&&(null===o||s>o)&&(o=s),r(t)&&(o=u(t.getAttribute("data-fragment-index")));const c=null===o?b.length:b.filter(t=>t.step===o).length;return{step:o,after:c}}),count:c.length,indexes:c}})(n):null;j&&n.setAttribute("data-steps","");const E=n.getAttribute("data-chart-keys"),F=j&&a.controls?((t,e,n)=>{const a=document.createElement("div");a.className="tablechart-controls";const o=a=>{const o=document.createElement("button");o.type="button",o.className=`tablechart-${a}`,o.dataset.go=a;const r=document.createElement("span");r.className="tablechart-control-icon",r.setAttribute("aria-hidden","true");const s=$("svg",{viewBox:"0 0 16 16",focusable:"false"});s.appendChild($("path",{d:"next"===a?"M6 3l5 5-5 5":"M10 3L5 8l5 5"})),r.appendChild(s);const c=document.createElement("span");c.className="tablechart-control-label",c.textContent=t[a];const l=e[a];l&&n&&c.setAttribute(n,l);const i=document.createElement("span");return i.className=d,i.textContent=t.hint,e.hint&&n&&i.setAttribute(n,e.hint),o.append(..."next"===a?[c,i,r]:[r,c,i]),o};return a.append(o("previous"),o("next")),a})({previous:a.previouslabel,next:a.nextlabel,hint:a.stephint},{previous:E&&`${E}-previous`,next:E&&`${E}-next`,hint:E&&`${E}-step`},a.langattribute):null;F&&n.appendChild(F);const _=Array.from(n.querySelectorAll("[data-annotation]")).map(e=>{const n=e.getAttribute("data-annotation"),a=ft[n];if(!a)return console.warn(`[${t}] Unknown annotation "${n}". Known annotations: ${Object.keys(ft).join(", ")}.`),null;const o=Number.parseInt(e.getAttribute("data-series")??"1",10),r=o>=1&&o<=u.length?o-1:0;return o!==r+1&&console.warn(`[${t}] An annotation reads line ${o}, which is not there; it reads line 1.`),{spec:e,type:a,badge:a.create(e,m),series:r,after:l.length}}).filter(t=>null!==t);a.animate&&n.setAttribute("data-animate",vt(n,r,a,Boolean(j)));const q={figure:n,plot:m,svg:g,rows:l,decimals:w,type:s,values:v,series:u,seriesValues:M,names:z?[]:T,categories:Array.from(O.children),centre:L,stacked:b,totals:k,totalCell:C,rowAt:null,rowBox:null,annotations:_,checks:[],plan:j,step:0,controls:F};return F?.addEventListener("click",t=>{const e=t.target.closest("button")?.dataset.go;e&&dt(q,q.step+("next"===e?1:-1))}),dt(q,0,!0),a.hover&&"false"!==n.getAttribute("data-chart-hover")&&Ht(q),Nt(q,a),q},yt={grow:"grow",sweep:"sweep"},Mt={...yt,up:"grow",across:"sweep"},vt=(t,e,n,a)=>{const o="line"===e||"area"===e,r=o?Mt:yt,s=r[t.getAttribute("data-chart-animate")??""]??r[String(n.animate)];return o?a?"sweep":s??"sweep":"donut"===e||"waterfall"===e?s??"grow":"grow"},kt=t=>{const e=getComputedStyle(t),n=(e.getPropertyValue("--tablechart-value-align")||e.getPropertyValue("--tablechart-inside-align")).trim();return"start"===n||"center"===n||"end"===n?n:null},xt=(t,e,n,a)=>{const o=getComputedStyle(t),r=(o.getPropertyValue(n).trim()||a).match(/^(\d+(?:\.\d+)?)(px|%|em|rem)$/);if(!r)return null;const s=Number(r[1]);return"%"===r[2]?s/100*h:s*("em"===r[2]?Number.parseFloat(o.fontSize):"rem"===r[2]?Number.parseFloat(getComputedStyle(document.documentElement).fontSize):1)*e},At=(t,e)=>xt(t,e,"--tablechart-bar-max","60px")??Number.POSITIVE_INFINITY,Nt=(t,e)=>{const n=[...t.seriesValues.flat(),...t.totals,...t.totalCell?[t.totalCell]:[]];for(const a of t.centre?[...n,t.centre]:n){const{missing:n,prefix:o="",suffix:r=""}=a.dataset;if(void 0!==n){a.textContent=n;continue}const s=Number.parseFloat(a.dataset.value||"0"),c=a.dataset.decimals?Number(a.dataset.decimals):t.decimals,[l,i]=H(s,c,e.locale);if(a.textContent=o+(o?l:"")+i+r,l&&!o){const t=document.createElement("span");t.className="tablechart-minus",t.textContent=l,a.prepend(t)}}},St=(t,e)=>{t.figure.classList.toggle("is-shown",e),e||t.plot.removeAttribute("data-pointed")},Ht=t=>{const{plot:e}=t,n=()=>[...t.seriesValues.flat(),...t.totals];e.setAttribute("data-hover","");const a=document.createElement("div");a.className="tablechart-pointer",e.prepend(a);const o=()=>{e.removeAttribute("data-active");for(const t of n())t.removeAttribute("data-active")},r=r=>{if(!e.classList.contains("is-placed")||!t.rowAt)return;const s=e.getBoundingClientRect(),c=s.width/e.offsetWidth||1,l=t.rowAt((r.clientX-s.left)/c,(r.clientY-s.top)/c),i=null===l?null:l+1,u=t=>"none"!==t.dataset.place,d=null===i?[]:n().filter(t=>((t,e)=>{const n=Number(t.dataset.row),a=Number(t.dataset.rowEnd??n);return e>=n&&e<=a})(t,i)&&u(t));if(!n().some(t=>t.hasAttribute("data-left-out")&&u(t))||!d.length)return o();e.setAttribute("data-pointed",""),e.setAttribute("data-active",String(i));const[h,f,b,m]=t.rowBox?.(i-1)??[0,0,0,0];Object.assign(a.style,{left:`${h}%`,top:`${f}%`,width:`${b}%`,height:`${m}%`});for(const t of n())t.toggleAttribute("data-active",d.includes(t))};e.addEventListener("pointermove",r),e.addEventListener("pointerdown",r),e.addEventListener("pointerleave",t=>{"mouse"===t.pointerType&&o()}),document.addEventListener("pointerdown",t=>{e.contains(t.target)||o()})},zt=t=>"id"===t||"style"===t||t.startsWith("data-chart"),Tt=/^\s*(?:Table)?:\s+/,Lt=t=>"P"===t?.tagName&&Tt.test(t.textContent??""),Ct=/^\s*([a-z][\w-]*)((?:\s+[\w-]+=[^\s:]+)*)\s*(:\s*|$)/,Bt=t=>{const e=Ut(t);return"P"===e?.tagName?e:t},Ot=t=>{if(!t||"object"!=typeof t)return;const e=Object.entries(t),n=t=>null===t||"string"==typeof t||"number"==typeof t;return e.length&&e.every(([,t])=>n(t)||Array.isArray(t)&&t.every(n))?e.map(([t,e])=>Array.isArray(e)?{label:t,values:e}:{label:t,value:e}):void 0},Ut=t=>{const e=Array.from(t.childNodes).filter(t=>t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.TEXT_NODE&&t.textContent?.trim());return 1===e.length&&e[0]instanceof HTMLElement?e[0]:null},jt="strong, b, span.total",Et="data-chart-made",Ft=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,Pt=new Set,_t=null,qt=["column","bar"],Vt=t=>{const e=t.getAttribute("data-chart")||"column";if(!qt.includes(e))return null;const n=getComputedStyle(t).getPropertyValue("--tablechart-type").trim();return qt.includes(n)?n:e},Kt=async(e,n)=>{const a=(t=>t.map(t=>{const e=t.closest("p"),n=Lt(e)?e:t;if("TABLE"!==n.tagName&&"P"!==n.tagName)return n;const a=document.createElement("div");((t,e)=>{for(const{name:n,value:a}of Array.from(t.attributes))("class"===n||zt(n))&&(e.setAttribute(n,a),t.removeAttribute(n))})(t,a),t.classList.length||t.removeAttribute("class");const o="TABLE"===n.tagName?n:null,r=n.previousElementSibling;let s=n.nextElementSibling;const c=o?Lt(r)?r:Lt(s)?s:null:n;o&&c===s&&(s=s?.nextElementSibling??null);const l=s?.classList.contains("chart-annotations")?s:(t=>{if("UL"!==t?.tagName&&"OL"!==t?.tagName)return null;const e=Array.from(t.children),n=e.map(t=>t.hasAttribute("data-annotation")?null:(t=>{const e=Bt(t).firstChild;if(e?.nodeType!==Node.TEXT_NODE)return null;const n=Ct.exec(e.textContent??"");if(!n||!bt.includes(n[1]))return null;if(!n[3]&&e.nextSibling)return null;const a=n[2].trim().split(/\s+/).filter(Boolean).map(t=>t.split("="));return{name:n[1],options:a,text:e,length:n[0].length}})(t));return!e.length||e.some((t,e)=>!n[e]&&!t.hasAttribute("data-annotation"))?null:(e.forEach((t,e)=>{const a=n[e],o=Bt(t);if(o!==t&&o.replaceWith(...o.childNodes),a){t.setAttribute("data-annotation",a.name);for(const[e,n]of a.options)t.setAttribute(`data-${e}`,n);a.text.textContent=(a.text.textContent??"").slice(a.length)}t.children.length&&Array.from(t.childNodes).filter(t=>t.nodeType===Node.ELEMENT_NODE||t.textContent?.trim()).forEach((t,e)=>{const n=document.createElement("span");0===e&&t instanceof HTMLElement&&t.matches("em, i")?(n.className="tablechart-caption",n.append(...t.childNodes),t.replaceWith(n)):t.nodeType===Node.TEXT_NODE&&(n.textContent=(t.textContent??"").trim(),t.replaceWith(n))})}),t.classList.add("chart-annotations"),t)})(s);return n.replaceWith(a),c&&a.append((t=>{const e=document.createElement("figcaption");for(const{name:r,value:s}of Array.from(t.attributes))e.setAttribute(r,s);const n=t.firstChild;n?.nodeType===Node.TEXT_NODE&&(n.textContent=(n.textContent??"").replace(Tt,""),n.textContent||n.remove());const a=Array.from(t.childNodes),o=a.findIndex(t=>"BR"===t.nodeName);if(e.append(...-1===o?a:a.slice(0,o+1)),-1!==o&&o<a.length-1){const t=document.createElement("span");t.append(...a.slice(o+1)),e.append(t)}return t.remove(),e})(c)),o&&a.append(o),l&&a.append(l),st?.log?.(`A ${o?"table":"caption"} with chart attributes was wrapped in a figure of its own`),a}))(e.filter(t=>!t.hasAttribute(Et)));return await(async e=>{await Promise.all(e.filter(t=>t.hasAttribute("data-chart-src")).map(async e=>{const n=e.getAttribute("data-chart-src"),a=Array.from(e.querySelectorAll("table")).find(t=>t.tHead)??null;for(const t of e.querySelectorAll("table"))t!==a&&t.remove();try{const t=await fetch(n);if(!t.ok)throw new Error(`${t.status} ${t.statusText}`);const o=await t.json(),r=Array.isArray(o)?o:o?.rows?Array.isArray(o.rows)?o.rows:Ot(o.rows):Ot(o);if(!Array.isArray(r))throw new Error("no rows in it: a list of rows, an object with rows, or names with their values");const s=((t,e,n,a=document.createElement("table"))=>{for(const r of a.querySelectorAll(":scope > tbody, :scope > tfoot, :scope > tr"))r.remove();if(!a.tHead&&(e.length||n)){const t=a.createTHead().insertRow(),o=document.createElement("th");o.textContent=n,t.append(o);for(const n of e){const e=document.createElement("th");e.textContent=n,t.append(e)}}const o=document.createElement("tbody");a.append(o);for(const r of t){const t=o.insertRow();"total"===r.kind&&(t.dataset.kind="total");const e=document.createElement("th");e.textContent=String(r.label??""),t.append(e);for(const n of r.values??[r.value??null])t.insertCell().textContent=null===n?"":String(n)}return a})(r,Array.isArray(o?.series)?o.series.map(String):[],"string"==typeof o?.label?o.label:"",a??void 0);if(!a){const t=e.querySelector(":scope > figcaption");t?t.after(s):e.prepend(s)}s.tHead||st?.log?.(`The table from "${n}" has no header row, so a screen reader cannot name its columns.`),st?.log?.(`Read ${r.length} rows from "${n}"`)}catch(o){const e="file:"===window.location.protocol;console.warn(`[${t}] Could not read the chart data in "${n}": ${o.message}.`+(e?" A page opened as a file cannot fetch files; open it from a server.":""))}}))})(a),(t=>{for(const e of t){for(const n of e.querySelectorAll("tbody tr")){const t=n.cells[0];if("TD"!==t?.tagName||n.cells.length<2)continue;const e=document.createElement("th");for(const{name:n,value:a}of Array.from(t.attributes))e.setAttribute(n,a);e.append(...t.childNodes),t.replaceWith(e);for(let a=Ut(e);a?.matches(jt);a=Ut(e))n.dataset.kind="total",a.replaceWith(...a.childNodes)}const t=Array.from(e.querySelector("thead tr:last-child")?.children??[]);for(const e of t.slice(1))for(let t=Ut(e);t?.matches(jt);t=Ut(e))e.setAttribute("data-kind","focus"),t.replaceWith(...t.childNodes)}})(a),((e,n)=>{if(!n)return;const a=new Map;for(const o of e){let e=o.getAttribute("data-chart-keys")||null;if(!e)continue;if(a.has(e)){const n=a.get(e)+1;a.set(e,n),console.warn(`[${t}] Two charts have data-chart-keys="${e}", so this one uses "${e}-${n}" to keep their translations apart.`),e=`${e}-${n}`}else a.set(e,1);o.querySelectorAll("tbody th").forEach((t,a)=>{t.getAttribute(n)||t.setAttribute(n,`${e}-row${a+1}`)});const r=lt(o);r.length>1&&r.forEach((t,a)=>{t.getAttribute(n)||t.setAttribute(n,`${e}-col${a+1}`)}),st?.log?.(`Keys for "${e}" written onto ${o.querySelectorAll("tbody th").length} rows`)}})(a,n.langattribute),a},Rt=(e,a)=>{const o=st.timed("Building",e,()=>wt(e,a));return o?(e.setAttribute(Et,""),((e,a)=>{let o=e,r=Vt(o.figure),u=null,d=!1,f=!1;const b=async()=>{if(!a.animate)return St(o,!0);const t=o.figure.classList.contains("is-shown");if(!d||null===u||t||f)!d&&a.replay&&t&&St(o,!1);else{f=!0;const t=Ft()?null:(t=>{for(let e=t;e&&e!==document.body;e=e.parentElement)if("0"===getComputedStyle(e).opacity)return e;return null})(o.figure);t&&await(e=t,new Promise(t=>{const n=["animationstart","transitionrun"],a=()=>{for(const t of n)document.removeEventListener(t,o,!0);r.disconnect(),t()},o=t=>{t.target instanceof Node&&t.target.contains(e)&&a()},r=new MutationObserver(()=>{"0"!==getComputedStyle(e).opacity&&a()});for(const e of n)document.addEventListener(e,o,!0);r.observe(e,{attributes:!0,attributeFilter:["class","style"]})})),await(async(t,e)=>{if(Ft())return;await new Promise(requestAnimationFrame);const n=t.getAnimations().filter(t=>t instanceof CSSAnimation);for(let r=t.parentElement;r&&r!==document.body;r=r.parentElement)n.push(...r.getAnimations());let a=0;for(const r of n){const t=r.effect?.getComputedTiming(),n=Number(t?.activeDuration??0);if(!t||!Number.isFinite(n))continue;const o=Number(t.delay??0)+n*e;a=Math.max(a,o-Number(r.currentTime??0))}var o;a>0&&await(o=a,new Promise(t=>setTimeout(t,o)))})(o.figure,((t,e)=>{const n=Number.parseFloat(t.dataset.chartEntrance??""),a=Number.isFinite(n)?n:e.entrance;return Math.min(Math.max(a,0),1)})(o.figure,a)),f=!1,!d&&a.replay||St(o,!0)}var e},g=()=>{const t=Vt(o.figure);if(!t||t===r)return;const e=st.timed("Building",o.figure,()=>wt(o.figure,a,t));e&&((t=>{t.plot.remove(),t.categories[0]?.parentElement?.remove(),t.figure.querySelector(`:scope > .${c}`)?.remove(),t.controls?.remove()})(o),dt(e,o.step,!0),o=e,r=t,u=null)},w=()=>{g();const e=o.plot.clientWidth;e&&e!==u&&st.timed("Layout",o.figure,()=>((e,a)=>{const{plot:o,svg:r,rows:c,type:u,values:d,series:f,seriesValues:b,names:g,annotations:w}=e,y=o.clientWidth;if(!y)return!1;const M=h/y,v=Number.parseFloat(e.figure.dataset.chartAspect??""),x=h*(v>0?v:u.aspect??a.aspect);o.classList.add("is-placed");for(const t of[...b.flat(),...e.totals])delete t.dataset.place;o.style.removeProperty("--_fit"),(t=>{const e=[...t].filter(t=>!!t),n=e.map(t=>({width:t.offsetWidth,height:t.offsetHeight}));e.forEach((t,e)=>C.set(t,n[e]))})([...b.flat(),...e.totals,...g,...e.categories,...w.map(t=>t.badge)]);const A=(d[0]?B(d[0]).height:0)*M,S=w[0]?.badge?B(w[0].badge).height*M:0,H=Math.max(x,xt(e.figure,M,"--tablechart-min-height","200px")??0,u.minHeight?.({labelHeight:A,nameHeight:Math.max(0,N(e.categories.map(t=>B(t).height)))*M,unit:M,rows:c.length,series:f.length,stacked:e.stacked})??0),z=e.stacked?c.map(t=>{const e=P(t,f.length);return{...t,value:e,cells:t.cells.map((t,n)=>0===n?{...t,value:e}:t)}}):c,T=(u.segments??(t=>t.map(t=>({...t,from:0,to:t.value,kind:"bar"}))))(e.stacked?z.map(t=>({...t,cells:[t.cells[0]]})):c),L={labelHeight:A,badgeHeight:S,hasAnnotations:w.length>0,unit:M,series:f.length,focused:f.some(t=>t.focus),stacked:e.stacked},O=Math.max((U=N,e.stacked?U(c.map(t=>F(t,f.length,u.running).top)):U([...T.flatMap(t=>[t.from,t.to,t.value]),...c.flatMap(t=>t.cells.slice(0,f.length).map(t=>t.value))])),0);var U;const j=T.some(t=>"up"===t.kind||"down"===t.kind)?T.flatMap(t=>[t.from,t.to]):e.stacked?c.map(t=>F(t,f.length,u.running).bottom):c.flatMap(t=>t.cells.slice(0,f.length).map(t=>t.value)),E=Math.min(-N(j.map(t=>-t)),0),_=u.headroom?.(L)??A,q=2*M+(u.footroom?.(L)??0)+(E<0?A+4*M:0),V=H-_-q,K=1.02*O,R=1.02*E,D=w.find(t=>"axis-break"===t.spec.getAttribute("data-annotation"))?.spec,I=t=>{const e=Number.parseFloat(D?.getAttribute(t)??"");return Number.isFinite(e)?e:null},G=I("data-from")??I("data-at"),Z=I("data-to");let J=null;if(D&&(null!==G||null!==Z)){const e=G??0,n=Z??K,a=null===Z?e:null===G?n:(e+n)/2,o=D.getAttribute("data-size"),r=o?.match(/^\s*(\d+(?:\.\d+)?)\s*%\s*$/);null===o||r||console.warn(`[${t}] data-size="${o}" is not a percentage, such as 30%. Using the default.`);const s=Math.min(Math.max(r?Number(r[1])/100:null===Z?.22:.3,.05),.8),c=T.filter(t=>("up"===t.kind||"down"===t.kind)&&Math.max(t.from,t.to)>e&&Math.min(t.from,t.to)<n);u.breakable?E<0?console.warn(`[${t}] A chart with values below zero cannot break its scale.`):e<0||n<=e||n>K||0===e&&n===K?console.warn(`[${t}] A break from ${e} to ${n} does not fit a scale that runs from 0 to ${O}.`):c.length?console.warn(`[${t}] A break from ${e} to ${n} would cut a step that floats. Keep it below or above the steps.`):J={lo:e,hi:n,gap:a,share:s}:console.warn(`[${t}] This kind of chart cannot break its scale.`)}const Q=J?J.gap:null,X=(J&&xt(e.figure,M,"--tablechart-break-gap",""))??13,Y=H-q,tt=K-R||1;let et=t=>Y-(t-R)/tt*V;if(J){const{lo:t,hi:e,gap:n,share:a}=J,o=V*a,r=(V-o-X)/(t+(K-e)),s=o/(e-t);et=a=>a<=t?Y-a*r:a<=n?Y-t*r-(a-t)*s:a<=e?Y-t*r-(a-t)*s-X:Y-t*r-o-X-(a-e)*r}const nt=g.length?N(g.map(t=>B(t).width))*M+12*M:0,at=e.categories[0]?.parentElement;at&&(at.style.paddingRight=nt?nt/h*100+"%":"");const ot=(h-nt)/c.length,rt=t=>t>=0&&t<c.length?t:null;e.rowAt=u.centre?null:"beside"===u.categories?(t,e)=>rt(Math.floor(e*M/(H/c.length))):t=>rt(Math.floor(t*M/ot));const st=ot/h*100,ct=100/c.length;e.rowBox="beside"===u.categories?t=>[0,t*ct,100,ct]:t=>[t*st,0,st,100],r.setAttribute("viewBox",`0 0 1000 ${p(H)}`),r.textContent="",e.checks=[];const lt={rows:c,segments:T,cx:t=>(t+.5)*ot,y:et,barWidth:Math.min(ot*a.barfill,At(e.figure,M)),barMax:At(e.figure,M),height:H,unit:M,labelHeight:A,badgeHeight:S,after:c.length,note:0,labels:"inside"===e.figure.dataset.chartLabels||"outside"!==e.figure.dataset.chartLabels&&"inside"===a.labels?"inside":"outside",insideAlign:kt(e.figure),breakAt:Q,squeeze:J,breakGap:X,stacked:e.stacked,shape:pt(e.figure,a),totals:e.totals,svg:r,plot:o,values:d,series:f,seriesValues:b,names:g,categories:e.categories,centre:e.centre,config:a,checks:e.checks};o.style.setProperty("--count",String(Math.max(1,...c.map(t=>t.slot+1)))),u.draw(lt);for(const[t,n]of w.entries()){n.badge?.setAttribute("data-note",String(t+1));const a=n.series,o=t=>({...t,...t.cells[a]??t.cells[0]});n.type.draw(n.spec,n.badge,{...lt,...e.stacked&&{rows:z,...e.totals.length&&{values:e.totals}},...a>0&&!e.stacked&&{rows:c.map(o),segments:T.map(t=>{const e=o(t);return"bar"===t.kind?{...e,to:e.value}:e}),values:b[a]},after:n.after,note:t+1})}(t=>{const e=t.plan;if(!e)return;const a=e.rows.length-1,o=t=>e.series.map((n,a)=>e.cells[t]?.[a]?.step??n.step??e.rows[t]?.step??null),r=t=>{const e=o(t);return e.some(t=>null===t)?null:Math.min(...e)},c=new Set(t.totals),l=(t,e,n,a)=>{t.style.setProperty(n,String(a)),t.style.removeProperty("--d"),null===e?t.style.removeProperty("--step"):t.style.setProperty("--step",String(e))};for(const n of t.figure.querySelectorAll("[data-row], [data-series], [data-note]")){if(n.closest("table, .tablechart-controls")||n.hasAttribute("data-from"))continue;const t=Number(n.dataset.note);if(t>0){const a=e.notes[t-1];a&&l(n,a.step,"--after",a.after);continue}const s=n.dataset.row?Number(n.dataset.row)-1:a;if(n.classList.contains("tablechart-connector")){const t=e.rows[s-1],a=e.rows[s];if(t&&a){const e=(t.step??-1)>(a.step??-1);l(n,e?t.step:a.step,"--i",e?t.slot+1:a.slot)}continue}if(c.has(n)){const t=o(s).filter(t=>null!==t);l(n,t.length?Math.max(...t):null,"--i",e.rows[s]?.slot??0);continue}if(n.hasAttribute("data-stack")){l(n,r(s),"--i",e.rows[s]?.slot??0);continue}const i=n.dataset.series?Number(n.dataset.series)-1:0,u=n.dataset.series?e.series[i]:void 0;if(n.classList.contains("tablechart-piece")){const t=o(s)[i]??null,a=e.cells[s]?.[i];l(n,t===r(s)?null:t,"--i",a&&null!==a.step?a.slot:s);continue}if("legend"===n.dataset.place){const t=Math.min(...e.cells.map(t=>t[i]?.step??Number.POSITIVE_INFINITY));l(n,u?.step??(Number.isFinite(t)?t:null),"--i",0);continue}const d=e.cells[s]?.[i];d&&null!==d.step?l(n,d.step,"--i",d.slot):u&&null!==u.step?l(n,u.step,"--i",s):e.rows[s]&&l(n,e.rows[s].step,"--i",e.rows[s].slot)}const u=t.figure.querySelector(`.${i}`);if(u){const t=[...e.rows,...e.cells.flat()].map(t=>t.step??-1),n=Math.max(-1,...t);n<0?l(u,null,"--i",0):l(u,n,"--i",t.filter(t=>t===n).length)}const d=[...e.rows,...e.cells.flat()].map(t=>t.slot+1),h=e.series.some(t=>null!==t.step)?e.rows.length:1;t.plot.style.setProperty("--count",String(Math.max(h,...d)));const f=t.figure.querySelectorAll(`.${n}`),b=f[f.length-1];if("waterfall"===t.figure.dataset.chart&&"total"===b?.dataset.kind&&f.length>1){const t=Number(b.dataset.row)-1;(e.rows[t-1]?.step??-1)>(e.rows[t]?.step??-1)&&(b.dataset.grow="down"===b.dataset.grow?"up":"down")}const g=Array.from(t.figure.querySelectorAll(`.${s}`));if(g.length){const e=t=>t.style.getPropertyValue("--step")||"none",n=t=>Number(t.style.getPropertyValue("--share")||0),a=g.length,o=Math.max(0,g.findIndex((t,n)=>e(t)!==e(g[(n-1+a)%a]))),r=[];for(let t=0;t<a;t++){const n=g[(o+t)%a],s=r[r.length-1];s&&e(s[0])===e(n)?s.push(n):r.push([n])}const s=new Map;for(const t of r){const e=t.reduce((t,e)=>t+n(e),0);let a=0;for(const o of t)s.set(o.dataset.row??"",m(a,n(o),e)),a+=n(o)}for(const c of t.figure.querySelectorAll("[data-row]")){const t=s.get(c.dataset.row??"");t&&c.style.getPropertyValue("--start")&&(c.style.setProperty("--start",t.start.toFixed(4)),c.style.setProperty("--span",t.span.toFixed(4)),c.classList.contains("tablechart-slice")&&c.style.setProperty("--ease",t.easing))}}ut(t)})(e);const it=e.categories[0]?.parentElement;it&&"beside"!==u.categories&&!u.centre&&W(it,e.categories.filter(t=>null!==t.offsetParent),t=>({size:t.scrollWidth,room:t.clientWidth}),"--_name-fit");const dt=w.flatMap(({badge:t})=>{if(!(t instanceof HTMLElement&&t.offsetWidth))return[];const e=t.offsetWidth*M,n=t.offsetHeight*M,a=Number.parseFloat(t.style.left)/100*h,o=Number.parseFloat(t.style.top)/100*H,r=getComputedStyle(t).borderTopLeftRadius,s=r.endsWith("%")?Number.parseFloat(r)/100:null,c=(Number.parseFloat(r)||0)*M;return[$("rect",{class:l,"data-for":"badge","data-note":t.dataset.note??"",x:a-e/2,y:o-n/2,width:e,height:n,rx:null===s?c:e*s,ry:null===s?c:n*s,style:["--after","--step"].map(e=>t.style.getPropertyValue(e)&&`${e}:${t.style.getPropertyValue(e)}`).filter(Boolean).join("; ")})]});return k(r,dt,h,H),!0})(o,a))&&(u=e,b())};let y=!1;const M=new ResizeObserver(()=>{y||(y=!0,requestAnimationFrame(()=>{y=!1,w()}))}),v=new IntersectionObserver(t=>{for(const e of t)d=e.isIntersecting,b()},{threshold:a.threshold}),x=()=>St(o,!0),A=()=>{u=null,w()},S={relabel:()=>Nt(o,a),refresh:A};g(),w(),M.observe(o.figure),v.observe(o.figure),window.addEventListener("beforeprint",x),(t=>{Pt.add(t),_t||(_t=new MutationObserver(()=>{for(const t of Pt)t.relabel();requestAnimationFrame(()=>requestAnimationFrame(()=>{for(const t of Pt)t.refresh()}))})).observe(document.documentElement,{attributes:!0,attributeFilter:["lang"]})})(S);const H={figure:o.figure,refresh:A,next:()=>dt(o,o.step+1),previous:()=>dt(o,o.step-1),stepTo:t=>dt(o,t),get step(){return o.step},get steps(){return o.plan?.count??0},destroy(){M.disconnect(),v.disconnect(),window.removeEventListener("beforeprint",x),(t=>{Pt.delete(t),!Pt.size&&_t&&(_t.disconnect(),_t=null)})(S),o.figure.tablechart===H&&delete o.figure.tablechart}};return o.figure.tablechart=H,H})(o,a)):null},Wt=[["--tablechart-duration","--tablechart-animation-element-duration"],["--tablechart-stagger","--tablechart-animation-stagger, a share of the element time"],["--tablechart-easing","--tablechart-animation-ease"],["--tablechart-category-size","--tablechart-name-size"],["--tablechart-category-padding","--tablechart-name-padding"],["--tablechart-categories-gap","--tablechart-name-gap"],["--tablechart-inside-align","--tablechart-value-align"],["--tablechart-bar-ink","--tablechart-bar-value-color"],["--tablechart-piece-ink","--tablechart-piece-value-color"],["--tablechart-up-ink","--tablechart-up-value-color"],["--tablechart-down-ink","--tablechart-down-value-color"],["--tablechart-total-ink","--tablechart-total-value-color"],["--tablechart-series-ink","--tablechart-series-own-color"],["--tablechart-dash","--tablechart-series-dash"],["--tablechart-dot","--tablechart-series-dot"],["--tablechart-muted-share","--tablechart-series-muted-share"],["--tablechart-rule-color","--tablechart-baseline-color"],["--tablechart-rule-width","--tablechart-baseline-width"],["--tablechart-rule-opacity","--tablechart-baseline-opacity"],["--tablechart-key-size","--tablechart-legend-key-size"],["--tablechart-controls-justify","--tablechart-control-justify"],["--tablechart-controls-gap","--tablechart-control-gap"]],Dt={up:"grow",across:"sweep"},It=!1;window.Tablechart={init:async(e={},n=document)=>{const a={...f,...e};a.debug&&(st.enabled=!0);const o=await Kt(Array.from(n.querySelectorAll(a.selector)),a);((e,n)=>{if(It)return;const a=t=>{const e=Dt[String(t)];return e?[`"${t}" is now "${e}"`]:[]},o=new Set(a(n.animate));for(const t of e){const e=getComputedStyle(t);for(const[t,n]of Wt)e.getPropertyValue(t).trim()&&o.add(`${t} is now ${n}`);for(const n of a(t.getAttribute("data-chart-animate")))o.add(n)}o.size&&(It=!0,console.warn(`[${t}] ${[...o].join("; ")}. The old names work until the next minor version.`))})(o,a);const r=o.map(t=>Rt(t,a)).filter(t=>null!==t);return st.log(`Made ${r.length} chart(s).`),{charts:r,refresh:()=>{for(const t of r)t.refresh()},destroy:()=>{for(const t of r)t.destroy()}}},create:async(t,e={})=>{if(t.tablechart)return t.tablechart;const n={...f,...e};n.debug&&(st.enabled=!0);const[a]=await Kt([t],n);return a?Rt(a,n):null},defaultConfig:f}}();
@@ -1,2 +1 @@
1
- import { r as e, t, y as n } from "./tablechart-shared.mjs";
2
- export { t as create, n as defaultConfig, e as init };
1
+ export { t as create, y as defaultConfig, r as init } from "./tablechart-shared.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@martinomagnifico/tablechart",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Simple charts from an HTML or Markdown table: column, bar, line, area, waterfall and donut, with annotations. A chart builds when it scrolls into view.",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -8,16 +8,16 @@
8
8
  "**/*.scss"
9
9
  ],
10
10
  "main": "./dist/tablechart.mjs",
11
- "types": "./dist/tablechart.d.ts",
11
+ "types": "./dist/tablechart.d.mts",
12
12
  "unpkg": "./dist/tablechart.js",
13
13
  "jsdelivr": "./dist/tablechart.js",
14
14
  "exports": {
15
15
  ".": {
16
- "types": "./dist/tablechart.d.ts",
16
+ "types": "./dist/tablechart.d.mts",
17
17
  "import": "./dist/tablechart.mjs"
18
18
  },
19
19
  "./core": {
20
- "types": "./dist/tablechart-core.d.ts",
20
+ "types": "./dist/tablechart-core.d.mts",
21
21
  "import": "./dist/tablechart-core.mjs"
22
22
  },
23
23
  "./style.css": "./dist/tablechart.css"
@@ -31,7 +31,8 @@
31
31
  "start": "cd docs && npm start",
32
32
  "dev": "vite",
33
33
  "docs": "cd docs && npm start",
34
- "docs:build": "cd docs && npm run build",
34
+ "docs:build": "npm run check:variables && cd docs && npm run build",
35
+ "check:variables": "node scripts/variables.mjs",
35
36
  "docs:preview": "npm run build && cd docs && rm -rf dist && npm run build && npm run preview",
36
37
  "preview": "npm run docs:preview",
37
38
  "build": "npm run clean && npm run build:lib",
@@ -54,17 +55,20 @@
54
55
  "author": "Martijn De Jongh",
55
56
  "license": "MIT",
56
57
  "devDependencies": {
57
- "@microsoft/api-extractor": "^7.59.3",
58
58
  "@vituum/vite-plugin-pug": "^2.0.1",
59
+ "rolldown-plugin-dts": "^0.28.8",
59
60
  "sass": "^1.97.3",
60
61
  "terser": "^5.46.0",
61
62
  "typescript": "^5.9.3",
62
- "vite": "^8.0.0",
63
- "vite-plugin-dts": "5.0.0-beta.6",
63
+ "vite": "^8.3.4",
64
64
  "vituum": "^2.0.1"
65
65
  },
66
66
  "module": "./dist/tablechart.mjs",
67
67
  "publishConfig": {
68
68
  "access": "public"
69
+ },
70
+ "allowScripts": {
71
+ "@parcel/watcher": false,
72
+ "fsevents": false
69
73
  }
70
74
  }