@pixerate/editor 0.156.0 → 0.157.0

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.
Files changed (34) hide show
  1. package/dist/agent/index.cjs +34 -34
  2. package/dist/agent/index.js +5 -5
  3. package/dist/canvas/index.cjs +6 -6
  4. package/dist/canvas/index.js +2 -2
  5. package/dist/chart/index.cjs +90 -88
  6. package/dist/chart/index.js +9 -7
  7. package/dist/chart/spec.d.cts +2 -1
  8. package/dist/chart/spec.d.ts +2 -1
  9. package/dist/chart/types.d.cts +5 -0
  10. package/dist/chart/types.d.ts +5 -0
  11. package/dist/{chunk-2WDZI6QD.cjs → chunk-4T44CJ5K.cjs} +15 -15
  12. package/dist/{chunk-XTU6QO2W.cjs → chunk-4YWAEV4W.cjs} +36 -27
  13. package/dist/{chunk-4YQKRHMI.cjs → chunk-57JLBGJ5.cjs} +8 -8
  14. package/dist/{chunk-SVINJIGK.js → chunk-5QBRAIVK.js} +3 -3
  15. package/dist/{chunk-R3PECGTQ.cjs → chunk-6LUYFHHN.cjs} +51 -51
  16. package/dist/{chunk-ML2II3Y3.cjs → chunk-AKDWAWSY.cjs} +58 -46
  17. package/dist/{chunk-EQ4SF4X4.js → chunk-DBIVICAO.js} +1 -1
  18. package/dist/{chunk-SUVZJ2CP.js → chunk-H5XX4KHB.js} +11 -1
  19. package/dist/{chunk-37RLSNQ3.js → chunk-Q6PA362P.js} +2 -2
  20. package/dist/{chunk-DSZCDNTM.js → chunk-R3QY7PPL.js} +11 -2
  21. package/dist/{chunk-4RF2H3N3.js → chunk-SSCL7QQ4.js} +15 -3
  22. package/dist/{chunk-TLMRGLQQ.cjs → chunk-TVO6W2Q6.cjs} +20 -17
  23. package/dist/{chunk-EIUTJPEL.js → chunk-UM3RPYC5.js} +5 -2
  24. package/dist/{chunk-I4AHLP7F.cjs → chunk-WPPJH6X4.cjs} +12 -2
  25. package/dist/{chunk-RZJCYJWO.cjs → chunk-XNQ5EFB4.cjs} +16 -16
  26. package/dist/{chunk-R6HNWN7B.js → chunk-YABNLNY7.js} +3 -3
  27. package/dist/export/index.cjs +4 -4
  28. package/dist/export/index.js +3 -3
  29. package/dist/extensions/index.cjs +7 -7
  30. package/dist/extensions/index.js +6 -6
  31. package/dist/index.cjs +13 -13
  32. package/dist/index.js +7 -7
  33. package/package.json +1 -1
  34. package/skills/pixerate-chart/SKILL.md +4 -1
@@ -7,7 +7,7 @@ import {
7
7
  TRENDLINE_PROPS,
8
8
  VALUE,
9
9
  WIDTH
10
- } from "../chunk-EIUTJPEL.js";
10
+ } from "../chunk-UM3RPYC5.js";
11
11
  import {
12
12
  CHART_OOXML_CONTENT_TYPE,
13
13
  CHART_OOXML_NS,
@@ -15,7 +15,7 @@ import {
15
15
  chartFormatToCode,
16
16
  chartFromOoxml,
17
17
  chartToOoxml
18
- } from "../chunk-EQ4SF4X4.js";
18
+ } from "../chunk-DBIVICAO.js";
19
19
  import {
20
20
  CHART_COLOR_SCHEMES,
21
21
  CHART_LAYOUT_PRESETS,
@@ -37,7 +37,7 @@ import {
37
37
  monochromeChartPalette,
38
38
  sparklineToSvg,
39
39
  summarizeChart
40
- } from "../chunk-4RF2H3N3.js";
40
+ } from "../chunk-SSCL7QQ4.js";
41
41
  import {
42
42
  CHART_DATE_STEPS,
43
43
  MAX_CHART_DATA_LABELS,
@@ -76,7 +76,7 @@ import {
76
76
  stepDecimals,
77
77
  summarizeChartSeries,
78
78
  trendNumberText
79
- } from "../chunk-DSZCDNTM.js";
79
+ } from "../chunk-R3QY7PPL.js";
80
80
  import {
81
81
  CHART_AXIS_KINDS,
82
82
  CHART_AXIS_SCALES,
@@ -90,6 +90,7 @@ import {
90
90
  CHART_NUMBER_STYLES,
91
91
  CHART_ORIENTATIONS,
92
92
  CHART_PALETTE_SHADES,
93
+ CHART_RADAR_GRATICULES,
93
94
  CHART_SERIES_TYPES,
94
95
  CHART_STACKINGS,
95
96
  CHART_TRENDLINE_TYPES,
@@ -137,7 +138,7 @@ import {
137
138
  shadeChartColor,
138
139
  simulateChartVision,
139
140
  uniqueChartSeriesId
140
- } from "../chunk-SUVZJ2CP.js";
141
+ } from "../chunk-H5XX4KHB.js";
141
142
  import "../chunk-II2WIF5Z.js";
142
143
  import {
143
144
  parseCsv
@@ -445,7 +446,7 @@ function createChartCommands(controller, options = {}) {
445
446
  id: `${prefix}update`,
446
447
  label: "Change Chart\u2026",
447
448
  keywords: ["chart", "title", "axis", "legend", "stack", "style", "format", "type"],
448
- description: 'Changes chart presentation as one undo step: type, titles, axes (xAxis = categories, yAxis = values, yAxis2 = secondary values; reverse, and scale "log" on value axes), legend, stacking, orientation, curve, points, data labels, palette, donut hole, bar spacing, histogram bins or waterfall total. Invalid values change nothing and return why.',
449
+ description: 'Changes chart presentation as one undo step: type, titles, axes (xAxis = categories, yAxis = values, yAxis2 = secondary values; reverse, and scale "log" on value axes), legend, stacking, orientation, curve, points, data labels, palette, donut hole, bar spacing, histogram bins, waterfall total, or radar rings and grid shape. Invalid values change nothing and return why.',
449
450
  params: object(CHART_UPDATE_PROPERTIES),
450
451
  run: (_ctx, params) => {
451
452
  check(controller.update(params));
@@ -1339,7 +1340,7 @@ function createChartToolProvider(controller, options = {}) {
1339
1340
  const updateChart = {
1340
1341
  name: "update_chart",
1341
1342
  title: "Change chart presentation",
1342
- description: 'Changes how the chart looks, as one undo step: type, titles, axes (xAxis = categories or numeric x, yAxis = values, yAxis2 = secondary values; each can be reversed, and value axes can be logarithmic with scale "log"), legend, stacking, orientation, curve, points, data labels and their position, palette, donut hole, bar spacing, histogram bins, waterfall total. All-or-nothing: invalid values change nothing and come back as sentences. Returns the new spec.',
1343
+ description: 'Changes how the chart looks, as one undo step: type, titles, axes (xAxis = categories or numeric x, yAxis = values, yAxis2 = secondary values; each can be reversed, and value axes can be logarithmic with scale "log"), legend, stacking, orientation, curve, points, data labels and their position, palette, donut hole, bar spacing, histogram bins, waterfall total, radar rings (radarTicks) and grid shape (radarGraticule). All-or-nothing: invalid values change nothing and come back as sentences. Returns the new spec.',
1343
1344
  inputSchema: {
1344
1345
  type: "object",
1345
1346
  properties: CHART_UPDATE_PROPERTIES,
@@ -2238,6 +2239,7 @@ export {
2238
2239
  CHART_ORIENTATIONS,
2239
2240
  CHART_PALETTE_SHADES,
2240
2241
  CHART_PRESENCE_COLORS,
2242
+ CHART_RADAR_GRATICULES,
2241
2243
  CHART_RASTER_MAX_SIZE,
2242
2244
  CHART_SERIES_TYPES,
2243
2245
  CHART_STACKINGS,
@@ -1,4 +1,4 @@
1
- import type { ChartAxis, ChartCurve, ChartErrorBars, ChartIssue, ChartLabelPosition, ChartLegendPosition, ChartMarker, ChartNumberFormat, ChartOrientation, ChartSeries, ChartSeriesType, ChartSpec, ChartStacking, ChartTheme, ChartTrendline, ChartTrendlineType, ChartType, ChartValue } from './types.cjs';
1
+ import type { ChartAxis, ChartCurve, ChartErrorBars, ChartIssue, ChartLabelPosition, ChartLegendPosition, ChartMarker, ChartNumberFormat, ChartOrientation, ChartRadarGraticule, ChartSeries, ChartSeriesType, ChartSpec, ChartStacking, ChartTheme, ChartTrendline, ChartTrendlineType, ChartType, ChartValue } from './types.cjs';
2
2
  export declare const CHART_TYPES: readonly ChartType[];
3
3
  export declare const CHART_MARKERS: readonly ChartMarker[];
4
4
  export declare const CHART_TRENDLINE_TYPES: readonly ChartTrendlineType[];
@@ -8,6 +8,7 @@ export declare const CHART_AXIS_SCALES: readonly NonNullable<ChartAxis['scale']>
8
8
  export declare const CHART_SERIES_TYPES: readonly ChartSeriesType[];
9
9
  export declare const CHART_STACKINGS: readonly ChartStacking[];
10
10
  export declare const CHART_CURVES: readonly ChartCurve[];
11
+ export declare const CHART_RADAR_GRATICULES: readonly ChartRadarGraticule[];
11
12
  export declare const CHART_ORIENTATIONS: readonly ChartOrientation[];
12
13
  export declare const CHART_LEGEND_POSITIONS: readonly ChartLegendPosition[];
13
14
  export declare const CHART_NUMBER_STYLES: readonly NonNullable<ChartNumberFormat['style']>[];
@@ -1,4 +1,4 @@
1
- import type { ChartAxis, ChartCurve, ChartErrorBars, ChartIssue, ChartLabelPosition, ChartLegendPosition, ChartMarker, ChartNumberFormat, ChartOrientation, ChartSeries, ChartSeriesType, ChartSpec, ChartStacking, ChartTheme, ChartTrendline, ChartTrendlineType, ChartType, ChartValue } from './types.js';
1
+ import type { ChartAxis, ChartCurve, ChartErrorBars, ChartIssue, ChartLabelPosition, ChartLegendPosition, ChartMarker, ChartNumberFormat, ChartOrientation, ChartRadarGraticule, ChartSeries, ChartSeriesType, ChartSpec, ChartStacking, ChartTheme, ChartTrendline, ChartTrendlineType, ChartType, ChartValue } from './types.js';
2
2
  export declare const CHART_TYPES: readonly ChartType[];
3
3
  export declare const CHART_MARKERS: readonly ChartMarker[];
4
4
  export declare const CHART_TRENDLINE_TYPES: readonly ChartTrendlineType[];
@@ -8,6 +8,7 @@ export declare const CHART_AXIS_SCALES: readonly NonNullable<ChartAxis['scale']>
8
8
  export declare const CHART_SERIES_TYPES: readonly ChartSeriesType[];
9
9
  export declare const CHART_STACKINGS: readonly ChartStacking[];
10
10
  export declare const CHART_CURVES: readonly ChartCurve[];
11
+ export declare const CHART_RADAR_GRATICULES: readonly ChartRadarGraticule[];
11
12
  export declare const CHART_ORIENTATIONS: readonly ChartOrientation[];
12
13
  export declare const CHART_LEGEND_POSITIONS: readonly ChartLegendPosition[];
13
14
  export declare const CHART_NUMBER_STYLES: readonly NonNullable<ChartNumberFormat['style']>[];
@@ -156,6 +156,7 @@ export interface ChartLegend {
156
156
  export type ChartStacking = 'none' | 'stacked' | 'percent';
157
157
  export type ChartOrientation = 'vertical' | 'horizontal';
158
158
  export type ChartCurve = 'linear' | 'smooth' | 'step';
159
+ export type ChartRadarGraticule = 'polygon' | 'circle';
159
160
  /** Where bar labels go: `auto` puts them outside, or centred on stacked segments, and drops ones that do not fit. */
160
161
  export type ChartLabelPosition = 'auto' | 'inside' | 'outside' | 'center';
161
162
  /** A whole chart: data plus presentation. Plain JSON, safe to persist. */
@@ -198,6 +199,10 @@ export interface ChartSpec {
198
199
  bins: number | null;
199
200
  /** Waterfall: append a running-total bar (categories labelled "total" are always totals). */
200
201
  showTotal: boolean;
202
+ /** Radar: number of evenly spaced rings from the value axis minimum to its maximum, 1–50 (`null`: round-number rings). */
203
+ radarTicks: number | null;
204
+ /** Radar: rings drawn as polygons through the spokes or as circles. */
205
+ radarGraticule: ChartRadarGraticule;
201
206
  }
202
207
  /** What a click selects. */
203
208
  export type ChartSelection = {
@@ -156,6 +156,7 @@ export interface ChartLegend {
156
156
  export type ChartStacking = 'none' | 'stacked' | 'percent';
157
157
  export type ChartOrientation = 'vertical' | 'horizontal';
158
158
  export type ChartCurve = 'linear' | 'smooth' | 'step';
159
+ export type ChartRadarGraticule = 'polygon' | 'circle';
159
160
  /** Where bar labels go: `auto` puts them outside, or centred on stacked segments, and drops ones that do not fit. */
160
161
  export type ChartLabelPosition = 'auto' | 'inside' | 'outside' | 'center';
161
162
  /** A whole chart: data plus presentation. Plain JSON, safe to persist. */
@@ -198,6 +199,10 @@ export interface ChartSpec {
198
199
  bins: number | null;
199
200
  /** Waterfall: append a running-total bar (categories labelled "total" are always totals). */
200
201
  showTotal: boolean;
202
+ /** Radar: number of evenly spaced rings from the value axis minimum to its maximum, 1–50 (`null`: round-number rings). */
203
+ radarTicks: number | null;
204
+ /** Radar: rings drawn as polygons through the spokes or as circles. */
205
+ radarGraticule: ChartRadarGraticule;
201
206
  }
202
207
  /** What a click selects. */
203
208
  export type ChartSelection = {
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- var _chunkI4AHLP7Fcjs = require('./chunk-I4AHLP7F.cjs');
9
+ var _chunkWPPJH6X4cjs = require('./chunk-WPPJH6X4.cjs');
10
10
 
11
11
  // src/chart/ooxml.ts
12
12
  var CHART_OOXML_NS = "http://schemas.openxmlformats.org/drawingml/2006/chart";
@@ -109,11 +109,11 @@ function chartFromOoxml(xml, options = {}) {
109
109
  try {
110
110
  doc = new (parser(options))().parseFromString(xml, "application/xml");
111
111
  } catch (error) {
112
- return { spec: _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, {}).spec, issues: [{ path: "", message: `The chart XML could not be read: ${error.message}` }], unsupported, lossless: false };
112
+ return { spec: _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, {}).spec, issues: [{ path: "", message: `The chart XML could not be read: ${error.message}` }], unsupported, lossless: false };
113
113
  }
114
114
  const root = doc.documentElement;
115
115
  if (!root || root.localName !== "chartSpace" || doc.getElementsByTagName("parsererror").length) {
116
- return { spec: _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, {}).spec, issues: [{ path: "", message: "This is not a chart part: expected a c:chartSpace (or cx:chartSpace) root element." }], unsupported, lossless: false };
116
+ return { spec: _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, {}).spec, issues: [{ path: "", message: "This is not a chart part: expected a c:chartSpace (or cx:chartSpace) root element." }], unsupported, lossless: false };
117
117
  }
118
118
  if (_optionalChain([root, 'access', _14 => _14.namespaceURI, 'optionalAccess', _15 => _15.includes, 'call', _16 => _16("chartex")]) || kid(root, "chartData")) return readChartex(root, issues, unsupported);
119
119
  const chart = kid(root, "chart");
@@ -278,7 +278,7 @@ function chartFromOoxml(xml, options = {}) {
278
278
  }
279
279
  if (!types.length) {
280
280
  issues.push({ path: "plotArea", message: unsupported.length ? `The chart type is not supported: ${unsupported.join(", ")}.` : "The chart has no plot groups." });
281
- return { spec: _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, input).spec, issues, unsupported, lossless: false };
281
+ return { spec: _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, input).spec, issues, unsupported, lossless: false };
282
282
  }
283
283
  const first = types[0];
284
284
  const combo = types.some((t) => t !== first);
@@ -288,7 +288,7 @@ function chartFromOoxml(xml, options = {}) {
288
288
  if (!combo) {
289
289
  for (const s of series) if (s.axis) issues.push({ path: "series", message: `"${s.name}" is on a second value axis.` });
290
290
  }
291
- if (types.some((t) => !_chunkI4AHLP7Fcjs.isCartesianChart.call(void 0, t)) && combo) unsupported.push("a pie or radar mixed with other chart types");
291
+ if (types.some((t) => !_chunkWPPJH6X4cjs.isCartesianChart.call(void 0, t)) && combo) unsupported.push("a pie or radar mixed with other chart types");
292
292
  input.series = series;
293
293
  input.categories = categories.length ? categories : Array.from({ length: Math.max(0, ...series.map((s) => s.values.length)) }, (_, i) => `${i + 1}`);
294
294
  input.stacking = stacking;
@@ -322,12 +322,12 @@ function chartFromOoxml(xml, options = {}) {
322
322
  };
323
323
  const xy = first === "scatter" || first === "bubble";
324
324
  const catAxis = _nullishCoalesce(_nullishCoalesce(kid(plot, "catAx"), () => ( kid(plot, "dateAx"))), () => ( (xy ? valAxes.find((a) => !vertical(a)) : void 0)));
325
- input.xAxis = readAxis(catAxis, _chunkI4AHLP7Fcjs.defaultChartAxis.call(void 0, false));
325
+ input.xAxis = readAxis(catAxis, _chunkWPPJH6X4cjs.defaultChartAxis.call(void 0, false));
326
326
  if (kid(plot, "dateAx")) input.xAxis.kind = "date";
327
- input.yAxis = readAxis(_nullishCoalesce(_nullishCoalesce(primaryAxis, () => ( valAxes.find(vertical))), () => ( valAxes[0])), _chunkI4AHLP7Fcjs.defaultChartAxis.call(void 0, true));
327
+ input.yAxis = readAxis(_nullishCoalesce(_nullishCoalesce(primaryAxis, () => ( valAxes.find(vertical))), () => ( valAxes[0])), _chunkWPPJH6X4cjs.defaultChartAxis.call(void 0, true));
328
328
  const secondaryAxis = valAxes.find((a) => a !== primaryAxis && (xy ? vertical(a) && a !== primaryAxis : true) && a !== catAxis);
329
- if (series.some((s) => s.axis === "secondary") && secondaryAxis) input.yAxis2 = readAxis(secondaryAxis, _chunkI4AHLP7Fcjs.defaultChartAxis.call(void 0, false));
330
- const { spec, issues: specIssues } = _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, input);
329
+ if (series.some((s) => s.axis === "secondary") && secondaryAxis) input.yAxis2 = readAxis(secondaryAxis, _chunkWPPJH6X4cjs.defaultChartAxis.call(void 0, false));
330
+ const { spec, issues: specIssues } = _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, input);
331
331
  issues.push(...specIssues);
332
332
  const uniq = [...new Set(unsupported)];
333
333
  return { spec, issues, unsupported: uniq, lossless: uniq.length === 0 && specIssues.length === 0 };
@@ -357,7 +357,7 @@ function readChartex(root, issues, unsupported) {
357
357
  const type = layouts[layout];
358
358
  if (!type) {
359
359
  issues.push({ path: "plotArea", message: `The chart layout "${layout || "unknown"}" is not supported.` });
360
- return { spec: _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, {}).spec, issues, unsupported: [layout || "unknown chartex layout"], lossless: false };
360
+ return { spec: _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, {}).spec, issues, unsupported: [layout || "unknown chartex layout"], lossless: false };
361
361
  }
362
362
  if (layout === "sunburst") unsupported.push("sunburst (drawn as a treemap of the innermost level)");
363
363
  if (layout === "paretoLine") unsupported.push("pareto line");
@@ -382,15 +382,15 @@ function readChartex(root, issues, unsupported) {
382
382
  categories: categories.length >= longest ? categories : Array.from({ length: longest }, (_, i) => _nullishCoalesce(categories[i], () => ( `${i + 1}`)))
383
383
  };
384
384
  if (type === "waterfall") input.showTotal = false;
385
- const { spec, issues: specIssues } = _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, input);
385
+ const { spec, issues: specIssues } = _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, input);
386
386
  issues.push(...specIssues);
387
387
  return { spec, issues, unsupported, lossless: unsupported.length === 0 && specIssues.length === 0 };
388
388
  }
389
389
  var esc = (s) => s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
390
390
  var hex = (color) => {
391
391
  if (!color) return null;
392
- const rgb = _chunkI4AHLP7Fcjs.parseChartColor.call(void 0, color);
393
- return rgb ? _chunkI4AHLP7Fcjs.chartRgbToHex.call(void 0, rgb).slice(1).toUpperCase() : null;
392
+ const rgb = _chunkWPPJH6X4cjs.parseChartColor.call(void 0, color);
393
+ return rgb ? _chunkWPPJH6X4cjs.chartRgbToHex.call(void 0, rgb).slice(1).toUpperCase() : null;
394
394
  };
395
395
  var fillXml = (color, line = false) => {
396
396
  const h = hex(color);
@@ -434,7 +434,7 @@ function errBarsXml(bars, dir) {
434
434
  var MARKER_OUT = { circle: "circle", square: "square", diamond: "diamond", triangle: "triangle", cross: "x", none: "none" };
435
435
  function chartToOoxml(spec) {
436
436
  const issues = [];
437
- const family = _chunkI4AHLP7Fcjs.chartFamily.call(void 0, spec);
437
+ const family = _chunkWPPJH6X4cjs.chartFamily.call(void 0, spec);
438
438
  let type = spec.type;
439
439
  if (family === "waterfall" || family === "histogram" || family === "box" || family === "funnel") {
440
440
  issues.push(`${spec.type} charts are written as bar charts: DrawingML has no ${spec.type} type (Office 2016 stores it as chartex).`);
@@ -449,7 +449,7 @@ function chartToOoxml(spec) {
449
449
  const ids = { cat: 500000001, val: 500000002, cat2: 500000003, val2: 500000004 };
450
450
  const xy = family === "xy" || type === "scatter" || type === "bubble";
451
451
  const pieLike = type === "pie" || type === "donut";
452
- const typed = (s) => pieLike || type === "radar" ? type : type === "bubble" ? "bubble" : xy ? "scatter" : _chunkI4AHLP7Fcjs.chartSeriesType.call(void 0, { type }, s);
452
+ const typed = (s) => pieLike || type === "radar" ? type : type === "bubble" ? "bubble" : xy ? "scatter" : _chunkWPPJH6X4cjs.chartSeriesType.call(void 0, { type }, s);
453
453
  const groups = [];
454
454
  visible.forEach((s) => {
455
455
  const kind = typed(s);
@@ -7,7 +7,7 @@
7
7
 
8
8
 
9
9
 
10
- var _chunkI4AHLP7Fcjs = require('./chunk-I4AHLP7F.cjs');
10
+ var _chunkWPPJH6X4cjs = require('./chunk-WPPJH6X4.cjs');
11
11
 
12
12
 
13
13
  var _chunk55AKPTLMcjs = require('./chunk-55AKPTLM.cjs');
@@ -1074,7 +1074,7 @@ function layoutCartesian(ctx, area, visible) {
1074
1074
  const { spec, theme, marks, measure, fs } = ctx;
1075
1075
  const horizontal = spec.orientation === "horizontal";
1076
1076
  const n = spec.categories.length;
1077
- const types = new Map(visible.map((s) => [s.id, _chunkI4AHLP7Fcjs.chartSeriesType.call(void 0, spec, s)]));
1077
+ const types = new Map(visible.map((s) => [s.id, _chunkWPPJH6X4cjs.chartSeriesType.call(void 0, spec, s)]));
1078
1078
  const stacked = spec.stacking !== "none";
1079
1079
  const percent = spec.stacking === "percent";
1080
1080
  const onSecondary = (s) => s.axis === "secondary";
@@ -1111,7 +1111,7 @@ function layoutCartesian(ctx, area, visible) {
1111
1111
  const stack = stacks.get(s.id);
1112
1112
  errors.set(
1113
1113
  s.id,
1114
- _chunkI4AHLP7Fcjs.chartErrorAmounts.call(void 0, s.errorBars, s.values).map((e, i) => {
1114
+ _chunkWPPJH6X4cjs.chartErrorAmounts.call(void 0, s.errorBars, s.values).map((e, i) => {
1115
1115
  const raw = s.values[i];
1116
1116
  const seg = _optionalChain([stack, 'optionalAccess', _8 => _8.segments, 'access', _9 => _9[i]]);
1117
1117
  if (!e || raw === null || stack && !seg) return null;
@@ -1178,7 +1178,7 @@ function layoutCartesian(ctx, area, visible) {
1178
1178
  const drawOrder = [...visible].sort((a, b) => order(types.get(a.id)) - order(types.get(b.id)));
1179
1179
  for (const s of drawOrder) {
1180
1180
  const si = spec.series.indexOf(s);
1181
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, si);
1181
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, si);
1182
1182
  const type = types.get(s.id);
1183
1183
  const stack = stacks.get(s.id);
1184
1184
  const selSeries = ctx.seriesSelected(s.id);
@@ -1204,7 +1204,7 @@ function layoutCartesian(ctx, area, visible) {
1204
1204
  const selected = ctx.isSelected(target);
1205
1205
  const [x, y] = map({ c: c0, v: Math.min(a, b) });
1206
1206
  const rect = horizontal ? { x: Math.min(a, b), y: c0, width: Math.abs(b - a), height: cw } : { x, y, width: cw, height: Math.abs(b - a) };
1207
- const fill = _chunkI4AHLP7Fcjs.chartPointColor.call(void 0, spec, si, i);
1207
+ const fill = _chunkWPPJH6X4cjs.chartPointColor.call(void 0, spec, si, i);
1208
1208
  marks.push({
1209
1209
  kind: "rect",
1210
1210
  key: `bar-${s.id}-${i}`,
@@ -1283,7 +1283,7 @@ function layoutCartesian(ctx, area, visible) {
1283
1283
  const target = { kind: "point", seriesId: s.id, index: i };
1284
1284
  const selected = ctx.isSelected(target);
1285
1285
  const r = type === "scatter" ? 4.5 : 3.5;
1286
- const pointColor = _chunkI4AHLP7Fcjs.chartPointColor.call(void 0, spec, si, i);
1286
+ const pointColor = _chunkWPPJH6X4cjs.chartPointColor.call(void 0, spec, si, i);
1287
1287
  const fill = showDots ? type === "scatter" ? pointColor : theme.surface : "transparent";
1288
1288
  marks.push(
1289
1289
  pointMark({ key: `point-${s.id}-${i}`, target, selected: selected || selSeries, opacity: type === "scatter" ? 0.85 : void 0 }, showDots ? marker : "hit", cx, cy, showDots ? r : 6, fill, showDots ? pointColor : void 0, 2)
@@ -1355,8 +1355,8 @@ function layoutXy(ctx, area, visible) {
1355
1355
  const yErrors = /* @__PURE__ */ new Map();
1356
1356
  const xErrors = /* @__PURE__ */ new Map();
1357
1357
  for (const { s } of all) {
1358
- if (s.errorBars) yErrors.set(s.id, _chunkI4AHLP7Fcjs.chartErrorAmounts.call(void 0, s.errorBars, s.values));
1359
- if (s.xErrorBars) xErrors.set(s.id, _chunkI4AHLP7Fcjs.chartErrorAmounts.call(void 0, s.xErrorBars, s.values.map((_, i) => _nullishCoalesce(_optionalChain([s, 'access', _26 => _26.x, 'optionalAccess', _27 => _27[i]]), () => ( (bubble || !s.x ? i + 1 : null))))));
1358
+ if (s.errorBars) yErrors.set(s.id, _chunkWPPJH6X4cjs.chartErrorAmounts.call(void 0, s.errorBars, s.values));
1359
+ if (s.xErrorBars) xErrors.set(s.id, _chunkWPPJH6X4cjs.chartErrorAmounts.call(void 0, s.xErrorBars, s.values.map((_, i) => _nullishCoalesce(_optionalChain([s, 'access', _26 => _26.x, 'optionalAccess', _27 => _27[i]]), () => ( (bubble || !s.x ? i + 1 : null))))));
1360
1360
  }
1361
1361
  let xlo = Infinity;
1362
1362
  let xhi = -Infinity;
@@ -1435,8 +1435,8 @@ function layoutXy(ctx, area, visible) {
1435
1435
  const trendLabels = [];
1436
1436
  for (const { s, pts } of all) {
1437
1437
  const si = spec.series.indexOf(s);
1438
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, si);
1439
- const type = _chunkI4AHLP7Fcjs.chartSeriesType.call(void 0, spec, s);
1438
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, si);
1439
+ const type = _chunkWPPJH6X4cjs.chartSeriesType.call(void 0, spec, s);
1440
1440
  const selSeries = ctx.seriesSelected(s.id);
1441
1441
  const seriesTarget = { kind: "series", seriesId: s.id };
1442
1442
  if (type === "line" || type === "area") {
@@ -1461,7 +1461,7 @@ function layoutXy(ctx, area, visible) {
1461
1461
  }
1462
1462
  const target = { kind: "point", seriesId: s.id, index: p.i };
1463
1463
  const selected = ctx.isSelected(target);
1464
- const pointColor = _chunkI4AHLP7Fcjs.chartPointColor.call(void 0, spec, si, p.i);
1464
+ const pointColor = _chunkWPPJH6X4cjs.chartPointColor.call(void 0, spec, si, p.i);
1465
1465
  const r = bubble ? maxSize > 0 && p.size !== null && p.size > 0 ? Math.max(2, Math.sqrt(p.size / maxSize) * maxR) : 2 : 4.5;
1466
1466
  if (bubble) marks.push({ kind: "circle", key: `point-${s.id}-${p.i}`, role: "point", cx, cy, r, fill: pointColor, stroke: pointColor, strokeWidth: 1, opacity: 0.6, target, selected: selected || selSeries });
1467
1467
  else marks.push(pointMark({ key: `point-${s.id}-${p.i}`, target, selected: selected || selSeries, opacity: 0.85 }, marker === "none" ? "hit" : marker, cx, cy, marker === "none" ? 6 : r, marker === "none" ? "transparent" : pointColor, marker === "none" ? void 0 : pointColor, 2));
@@ -1504,7 +1504,7 @@ function trendlineLegendItems(spec, color) {
1504
1504
  }
1505
1505
 
1506
1506
  // src/chart/layout-families.ts
1507
- var sliceColor = (ctx, series, i) => _optionalChain([series, 'access', _42 => _42.pointColors, 'optionalAccess', _43 => _43[i]]) || _chunkI4AHLP7Fcjs.chartSliceColor.call(void 0, ctx.spec, i);
1507
+ var sliceColor = (ctx, series, i) => _optionalChain([series, 'access', _42 => _42.pointColors, 'optionalAccess', _43 => _43[i]]) || _chunkWPPJH6X4cjs.chartSliceColor.call(void 0, ctx.spec, i);
1508
1508
  function layoutPie(ctx, area, series) {
1509
1509
  const { spec, theme, marks, fs, selection } = ctx;
1510
1510
  const values = spec.categories.map((_, i) => {
@@ -1580,7 +1580,12 @@ function layoutRadar(ctx, area, visible) {
1580
1580
  let hi = -Infinity;
1581
1581
  for (const s of visible) for (const v of s.values) if (v !== null && Number.isFinite(v)) lo = Math.min(lo, v), hi = Math.max(hi, v);
1582
1582
  if (!Number.isFinite(hi)) hi = 1;
1583
- const scale = axisScale(lo, hi, radius, spec.yAxis, ctx.options.valueDomain);
1583
+ let scale = axisScale(lo, hi, radius, spec.yAxis, ctx.options.valueDomain);
1584
+ if (spec.radarTicks !== null && spec.yAxis.scale !== "log") {
1585
+ const n2 = spec.radarTicks;
1586
+ const step = (scale.max - scale.min) / n2;
1587
+ scale = { ...scale, step, ticks: Array.from({ length: n2 + 1 }, (_, k) => Number((scale.min + step * k).toPrecision(12))) };
1588
+ }
1584
1589
  const rOf = (v) => linearMap(Math.min(scale.max, Math.max(scale.min, v)), [scale.min, scale.max], [0, radius]);
1585
1590
  const angle = (i) => i / n * Math.PI * 2;
1586
1591
  const at = (i, r) => [cx + r * Math.sin(angle(i)), cy - r * Math.cos(angle(i))];
@@ -1589,6 +1594,10 @@ function layoutRadar(ctx, area, visible) {
1589
1594
  scale.ticks.forEach((t, k) => {
1590
1595
  const r = rOf(t);
1591
1596
  if (r <= 0) return;
1597
+ if (spec.radarGraticule === "circle") {
1598
+ marks.push({ kind: "circle", key: `grid-ring-${k}`, role: "grid", cx, cy, r, fill: "none", stroke: theme.grid, strokeWidth: 1 });
1599
+ return;
1600
+ }
1592
1601
  const d = Array.from({ length: n }, (_, i) => at(i, r)).map(([x, y], i) => `${i ? "L" : "M"}${r2(x)},${r2(y)}`).join("") + "Z";
1593
1602
  marks.push({ kind: "path", key: `grid-ring-${k}`, role: "grid", d, fill: "none", stroke: theme.grid, strokeWidth: 1 });
1594
1603
  });
@@ -1611,7 +1620,7 @@ function layoutRadar(ctx, area, visible) {
1611
1620
  });
1612
1621
  for (const s of visible) {
1613
1622
  const si = spec.series.indexOf(s);
1614
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, si);
1623
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, si);
1615
1624
  const selSeries = ctx.seriesSelected(s.id);
1616
1625
  const pts = s.values.map((v, i) => v !== null && Number.isFinite(v) ? at(i, rOf(v)) : null);
1617
1626
  const present = pts.filter((p) => p !== null);
@@ -1661,7 +1670,7 @@ function layoutWaterfall(ctx, area, series) {
1661
1670
  });
1662
1671
  const { band, catCenter, map, value } = frame;
1663
1672
  const w = band * (1 - spec.gapWidth);
1664
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(series));
1673
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(series));
1665
1674
  const format = _nullishCoalesce(series.format, () => ( spec.yAxis.format));
1666
1675
  const labelsOn = _nullishCoalesce(series.dataLabels, () => ( spec.dataLabels));
1667
1676
  let prevEnd = null;
@@ -1720,7 +1729,7 @@ function layoutHistogram(ctx, area, visible) {
1720
1729
  const gap = k > 1 ? band * spec.gapWidth * 0.5 : 0;
1721
1730
  const w = (band - gap) / k;
1722
1731
  visible.forEach((s, si) => {
1723
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(s));
1732
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(s));
1724
1733
  const target = { kind: "series", seriesId: s.id };
1725
1734
  const selected = ctx.seriesSelected(s.id);
1726
1735
  counts[si].forEach((c, b) => {
@@ -1751,7 +1760,7 @@ function layoutBox(ctx, area, visible) {
1751
1760
  visible.forEach((s, i) => {
1752
1761
  const st = stats[i];
1753
1762
  if (!st) return;
1754
- const color = _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(s));
1763
+ const color = _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(s));
1755
1764
  const target = { kind: "series", seriesId: s.id };
1756
1765
  const selected = ctx.seriesSelected(s.id);
1757
1766
  const c = catCenter(i);
@@ -1837,13 +1846,13 @@ function layoutTreemap(ctx, area, series) {
1837
1846
 
1838
1847
  // src/chart/layout.ts
1839
1848
  function legendItems(spec, ctx) {
1840
- const family = _chunkI4AHLP7Fcjs.chartFamily.call(void 0, spec);
1849
+ const family = _chunkWPPJH6X4cjs.chartFamily.call(void 0, spec);
1841
1850
  if (spec.type === "funnel") return [];
1842
- if (_chunkI4AHLP7Fcjs.chartColorsByCategory.call(void 0, spec.type)) {
1851
+ if (_chunkWPPJH6X4cjs.chartColorsByCategory.call(void 0, spec.type)) {
1843
1852
  const first = spec.series.find((s) => !s.hidden);
1844
1853
  return spec.categories.map((c, i) => ({
1845
1854
  label: c,
1846
- color: _optionalChain([first, 'optionalAccess', _45 => _45.pointColors, 'optionalAccess', _46 => _46[i]]) || _chunkI4AHLP7Fcjs.chartSliceColor.call(void 0, spec, i),
1855
+ color: _optionalChain([first, 'optionalAccess', _45 => _45.pointColors, 'optionalAccess', _46 => _46[i]]) || _chunkWPPJH6X4cjs.chartSliceColor.call(void 0, spec, i),
1847
1856
  target: { kind: "category", index: i },
1848
1857
  faded: false,
1849
1858
  selected: ctx.isSelected({ kind: "category", index: i }),
@@ -1857,17 +1866,17 @@ function legendItems(spec, ctx) {
1857
1866
  return [
1858
1867
  { label: "Increase", color: ctx.theme.positive, target, faded: false, selected: false, shape: "square" },
1859
1868
  { label: "Decrease", color: ctx.theme.negative, target, faded: false, selected: false, shape: "square" },
1860
- { label: "Total", color: _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(first)), target, faded: false, selected: false, shape: "square" }
1869
+ { label: "Total", color: _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, spec.series.indexOf(first)), target, faded: false, selected: false, shape: "square" }
1861
1870
  ];
1862
1871
  }
1863
1872
  if (family === "box") return [];
1864
- const trends = trendlineLegendItems(spec, (i) => _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, i));
1873
+ const trends = trendlineLegendItems(spec, (i) => _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, i));
1865
1874
  const items = [];
1866
1875
  spec.series.forEach((s, i) => {
1867
- const type = _chunkI4AHLP7Fcjs.chartSeriesType.call(void 0, spec, s);
1876
+ const type = _chunkWPPJH6X4cjs.chartSeriesType.call(void 0, spec, s);
1868
1877
  items.push({
1869
1878
  label: s.name,
1870
- color: _chunkI4AHLP7Fcjs.chartSeriesColor.call(void 0, spec, i),
1879
+ color: _chunkWPPJH6X4cjs.chartSeriesColor.call(void 0, spec, i),
1871
1880
  target: { kind: "series", seriesId: s.id },
1872
1881
  faded: !!s.hidden,
1873
1882
  selected: ctx.seriesSelected(s.id),
@@ -1880,7 +1889,7 @@ function legendItems(spec, ctx) {
1880
1889
  function layoutChart(spec, options) {
1881
1890
  const width = Math.max(1, Number.isFinite(options.width) ? options.width : 1);
1882
1891
  const height = Math.max(1, Number.isFinite(options.height) ? options.height : 1);
1883
- const theme = { ..._chunkI4AHLP7Fcjs.DEFAULT_CHART_THEME, ...options.theme };
1892
+ const theme = { ..._chunkWPPJH6X4cjs.DEFAULT_CHART_THEME, ...options.theme };
1884
1893
  const selection = _nullishCoalesce(options.selection, () => ( null));
1885
1894
  const marks = [];
1886
1895
  const warnings = [];
@@ -1919,7 +1928,7 @@ function layoutChart(spec, options) {
1919
1928
  if (spec.title) titleMark("title", spec.title, theme.titleSize, 600, theme.text);
1920
1929
  if (spec.subtitle) titleMark("subtitle", spec.subtitle, fs + 1, 400, theme.mutedText);
1921
1930
  if (spec.title || spec.subtitle) top += 6;
1922
- const family = _chunkI4AHLP7Fcjs.chartFamily.call(void 0, spec);
1931
+ const family = _chunkWPPJH6X4cjs.chartFamily.call(void 0, spec);
1923
1932
  const visible = spec.series.filter((s) => !s.hidden);
1924
1933
  const items = legendItems(spec, ctx);
1925
1934
  let area = { x: pad, y: top, width: width - pad * 2, height: height - top - pad };
@@ -2068,7 +2077,7 @@ function addReadout(ctx, readout, plot) {
2068
2077
  } else return;
2069
2078
  const axis = series.axis === "secondary" ? spec.yAxis2 : spec.yAxis;
2070
2079
  const x = _optionalChain([series, 'access', _52 => _52.x, 'optionalAccess', _53 => _53[readout.index]]);
2071
- const text = x !== null && x !== void 0 && _chunkI4AHLP7Fcjs.chartFamily.call(void 0, spec) === "xy" ? `${formatChartNumber(x, spec.xAxis.format)}, ${formatChartNumber(value, axis.format)}` : `${_nullishCoalesce(spec.categories[readout.index], () => ( ""))}: ${formatChartNumber(value, _nullishCoalesce(series.format, () => ( axis.format)))}`;
2080
+ const text = x !== null && x !== void 0 && _chunkWPPJH6X4cjs.chartFamily.call(void 0, spec) === "xy" ? `${formatChartNumber(x, spec.xAxis.format)}, ${formatChartNumber(value, axis.format)}` : `${_nullishCoalesce(spec.categories[readout.index], () => ( ""))}: ${formatChartNumber(value, _nullishCoalesce(series.format, () => ( axis.format)))}`;
2072
2081
  const w = measure(text, fs, 600) + 10;
2073
2082
  const h = fs + 8;
2074
2083
  const bx = Math.max(plot.x, Math.min(plot.x + plot.width - w, ax - w / 2));
@@ -11,10 +11,10 @@ var _chunkYN6JKAUEcjs = require('./chunk-YN6JKAUE.cjs');
11
11
 
12
12
 
13
13
 
14
- var _chunk2WDZI6QDcjs = require('./chunk-2WDZI6QD.cjs');
14
+ var _chunk4T44CJ5Kcjs = require('./chunk-4T44CJ5K.cjs');
15
15
 
16
16
 
17
- var _chunkI4AHLP7Fcjs = require('./chunk-I4AHLP7F.cjs');
17
+ var _chunkWPPJH6X4cjs = require('./chunk-WPPJH6X4.cjs');
18
18
 
19
19
  // src/export/images.ts
20
20
  var DOCX_IMAGE_TYPES = {
@@ -1028,12 +1028,12 @@ var DocxBuilder = (_class2 = class {
1028
1028
  this.drop("node", "chart", "chart has no spec");
1029
1029
  return;
1030
1030
  }
1031
- const spec = _chunkI4AHLP7Fcjs.normalizeChartSpec.call(void 0, raw).spec;
1032
- const written = _chunk2WDZI6QDcjs.chartToOoxml.call(void 0, spec);
1031
+ const spec = _chunkWPPJH6X4cjs.normalizeChartSpec.call(void 0, raw).spec;
1032
+ const written = _chunk4T44CJ5Kcjs.chartToOoxml.call(void 0, spec);
1033
1033
  for (const issue of written.issues) this.drop("node", "chart", issue);
1034
1034
  const name = `chart${this.charts.length + 1}.xml`;
1035
1035
  this.charts.push(written.xml);
1036
- const relId = this.rels.add(_chunk2WDZI6QDcjs.CHART_OOXML_RELATIONSHIP, `charts/${name}`);
1036
+ const relId = this.rels.add(_chunk4T44CJ5Kcjs.CHART_OOXML_RELATIONSHIP, `charts/${name}`);
1037
1037
  let width = _nullishCoalesce(pixelAttr(_optionalChain([node, 'access', _91 => _91.attrs, 'optionalAccess', _92 => _92.width])), () => ( MAX_IMAGE_WIDTH_PX));
1038
1038
  let height = _nullishCoalesce(pixelAttr(_optionalChain([node, 'access', _93 => _93.attrs, 'optionalAccess', _94 => _94.height])), () => ( 320));
1039
1039
  if (width > MAX_IMAGE_WIDTH_PX) {
@@ -1050,8 +1050,8 @@ var DocxBuilder = (_class2 = class {
1050
1050
  drawing.empty("wp:extent", { cx, cy }).empty("wp:effectExtent", { l: 0, t: 0, r: 0, b: 0 });
1051
1051
  drawing.empty("wp:docPr", { id, name: `Chart ${id}`, descr: title || void 0, title: title || void 0 });
1052
1052
  drawing.empty("wp:cNvGraphicFramePr");
1053
- drawing.open("a:graphic").open("a:graphicData", { uri: _chunk2WDZI6QDcjs.CHART_OOXML_NS });
1054
- drawing.empty("c:chart", { "xmlns:c": _chunk2WDZI6QDcjs.CHART_OOXML_NS, "r:id": relId });
1053
+ drawing.open("a:graphic").open("a:graphicData", { uri: _chunk4T44CJ5Kcjs.CHART_OOXML_NS });
1054
+ drawing.empty("c:chart", { "xmlns:c": _chunk4T44CJ5Kcjs.CHART_OOXML_NS, "r:id": relId });
1055
1055
  drawing.close("a:graphicData").close("a:graphic").close("wp:inline").close("w:drawing").close("w:r");
1056
1056
  this.report.written.paragraphs++;
1057
1057
  w.open("w:p");
@@ -1384,7 +1384,7 @@ var DocxBuilder = (_class2 = class {
1384
1384
  if (people) add("word/people.xml", people, `${CT_WML}people+xml`);
1385
1385
  parts.push({ name: "word/_rels/document.xml.rels", data: this.rels.xml() });
1386
1386
  for (const file of this.media) parts.push({ name: `word/media/${file.name}`, data: file.bytes });
1387
- this.charts.forEach((xml, i) => add(`word/charts/chart${i + 1}.xml`, xml, _chunk2WDZI6QDcjs.CHART_OOXML_CONTENT_TYPE));
1387
+ this.charts.forEach((xml, i) => add(`word/charts/chart${i + 1}.xml`, xml, _chunk4T44CJ5Kcjs.CHART_OOXML_CONTENT_TYPE));
1388
1388
  add("docProps/core.xml", this.coreXml(now), "application/vnd.openxmlformats-package.core-properties+xml");
1389
1389
  const app = new XmlWriter();
1390
1390
  app.open("Properties", { xmlns: "http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" });
@@ -5,14 +5,14 @@ import {
5
5
  chartToMermaid,
6
6
  describeChart,
7
7
  layoutSparkline
8
- } from "./chunk-4RF2H3N3.js";
8
+ } from "./chunk-SSCL7QQ4.js";
9
9
  import {
10
10
  layoutChart
11
- } from "./chunk-DSZCDNTM.js";
11
+ } from "./chunk-R3QY7PPL.js";
12
12
  import {
13
13
  DEFAULT_CHART_THEME,
14
14
  normalizeChartSpec
15
- } from "./chunk-SUVZJ2CP.js";
15
+ } from "./chunk-H5XX4KHB.js";
16
16
  import {
17
17
  plainTextToSlice
18
18
  } from "./chunk-2INPJDNY.js";