pptx-react-viewer 2.16.6 → 2.16.7

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 (108) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/{AiChatPanel-NQFSMKIJ.mjs → AiChatPanel-2YYL6AKX.mjs} +3 -9
  3. package/dist/AiChatPanel-2YYL6AKX.mjs.br +0 -0
  4. package/dist/AiChatPanel-2YYL6AKX.mjs.gz +0 -0
  5. package/dist/{AiChatPanel-T6UN6LME.js → AiChatPanel-XSXMU2Q5.js} +23 -29
  6. package/dist/AiChatPanel-XSXMU2Q5.js.br +0 -0
  7. package/dist/AiChatPanel-XSXMU2Q5.js.gz +0 -0
  8. package/dist/{Model3DScene-SIST7CIH.js → Model3DScene-36UJZLCO.js} +2 -2
  9. package/dist/Model3DScene-36UJZLCO.js.br +0 -0
  10. package/dist/Model3DScene-36UJZLCO.js.gz +0 -0
  11. package/dist/{Model3DScene-4D4GSRIB.mjs → Model3DScene-NVFP3JBJ.mjs} +1 -1
  12. package/dist/Model3DScene-NVFP3JBJ.mjs.br +0 -0
  13. package/dist/Model3DScene-NVFP3JBJ.mjs.gz +0 -0
  14. package/dist/{SurfaceChart3DScene-ZT7L27U4.mjs → SurfaceChart3DScene-BMFEDBLF.mjs} +1 -1
  15. package/dist/{SurfaceChart3DScene-ZT7L27U4.mjs.br → SurfaceChart3DScene-BMFEDBLF.mjs.br} +0 -0
  16. package/dist/SurfaceChart3DScene-BMFEDBLF.mjs.gz +0 -0
  17. package/dist/{SurfaceChart3DScene-GRM24VBC.js → SurfaceChart3DScene-W6I255VU.js} +2 -2
  18. package/dist/SurfaceChart3DScene-W6I255VU.js.br +0 -0
  19. package/dist/SurfaceChart3DScene-W6I255VU.js.gz +0 -0
  20. package/dist/{chunk-DYGKE2LY.js → chunk-77TMRPDU.js} +2128 -1541
  21. package/dist/chunk-77TMRPDU.js.br +0 -0
  22. package/dist/chunk-77TMRPDU.js.gz +0 -0
  23. package/dist/{chunk-PUBYHZYJ.mjs → chunk-D5TAZ5NL.mjs} +1132 -6
  24. package/dist/chunk-D5TAZ5NL.mjs.br +0 -0
  25. package/dist/chunk-D5TAZ5NL.mjs.gz +0 -0
  26. package/dist/{chunk-YZHBUMVU.mjs → chunk-J56KVWI5.mjs} +1114 -527
  27. package/dist/chunk-J56KVWI5.mjs.br +0 -0
  28. package/dist/chunk-J56KVWI5.mjs.gz +0 -0
  29. package/dist/{chunk-6F76GHPE.mjs → chunk-J5V7UCD2.mjs} +15 -1410
  30. package/dist/chunk-J5V7UCD2.mjs.br +0 -0
  31. package/dist/chunk-J5V7UCD2.mjs.gz +0 -0
  32. package/dist/{chunk-YDYAOW6D.js → chunk-JSJZWA43.js} +9 -3
  33. package/dist/chunk-JSJZWA43.js.br +0 -0
  34. package/dist/chunk-JSJZWA43.js.gz +0 -0
  35. package/dist/{chunk-NI5GSVZU.mjs → chunk-KVNZGR3L.mjs} +6 -91
  36. package/dist/chunk-KVNZGR3L.mjs.br +0 -0
  37. package/dist/chunk-KVNZGR3L.mjs.gz +0 -0
  38. package/dist/{chunk-H36QL5T5.js → chunk-NFJLF7TX.js} +258 -1683
  39. package/dist/chunk-NFJLF7TX.js.br +0 -0
  40. package/dist/chunk-NFJLF7TX.js.gz +0 -0
  41. package/dist/{chunk-VDQD3ZOU.mjs → chunk-QNKJUUKD.mjs} +7 -2
  42. package/dist/chunk-QNKJUUKD.mjs.br +0 -0
  43. package/dist/chunk-QNKJUUKD.mjs.gz +0 -0
  44. package/dist/{chunk-GUDJDY4J.js → chunk-S7HPAJRX.js} +342 -427
  45. package/dist/chunk-S7HPAJRX.js.br +0 -0
  46. package/dist/chunk-S7HPAJRX.js.gz +0 -0
  47. package/dist/{chunk-RZYOOWZN.js → chunk-USAJMMF2.js} +1165 -13
  48. package/dist/chunk-USAJMMF2.js.br +0 -0
  49. package/dist/chunk-USAJMMF2.js.gz +0 -0
  50. package/dist/index.d.ts +12 -0
  51. package/dist/index.js +39 -39
  52. package/dist/index.js.br +0 -0
  53. package/dist/index.js.gz +0 -0
  54. package/dist/index.mjs +5 -5
  55. package/dist/index.mjs.br +0 -0
  56. package/dist/index.mjs.gz +0 -0
  57. package/dist/internals.d.ts +27 -7
  58. package/dist/internals.d.ts.map +1 -1
  59. package/dist/internals.js +78 -78
  60. package/dist/internals.js.br +0 -0
  61. package/dist/internals.js.gz +0 -0
  62. package/dist/internals.mjs +3 -3
  63. package/dist/internals.mjs.br +0 -0
  64. package/dist/internals.mjs.gz +0 -0
  65. package/dist/pptx-viewer.css +1 -1
  66. package/dist/pptx-viewer.css.br +0 -0
  67. package/dist/pptx-viewer.css.gz +0 -0
  68. package/dist/{useViewerBuildingBlocks-DpzU8NZ_.d.ts → useViewerBuildingBlocks-Xddn6SFj.d.ts} +13 -1
  69. package/dist/useViewerBuildingBlocks-Xddn6SFj.d.ts.map +1 -0
  70. package/dist/viewer/index.js +26 -26
  71. package/dist/viewer/index.js.br +0 -0
  72. package/dist/viewer/index.js.gz +0 -0
  73. package/dist/viewer/index.mjs +5 -5
  74. package/dist/viewer/index.mjs.br +0 -0
  75. package/dist/viewer/index.mjs.gz +0 -0
  76. package/package.json +1 -1
  77. package/dist/AiChatPanel-NQFSMKIJ.mjs.br +0 -0
  78. package/dist/AiChatPanel-NQFSMKIJ.mjs.gz +0 -0
  79. package/dist/AiChatPanel-T6UN6LME.js.br +0 -0
  80. package/dist/AiChatPanel-T6UN6LME.js.gz +0 -0
  81. package/dist/Model3DScene-4D4GSRIB.mjs.br +0 -0
  82. package/dist/Model3DScene-4D4GSRIB.mjs.gz +0 -0
  83. package/dist/Model3DScene-SIST7CIH.js.br +0 -0
  84. package/dist/Model3DScene-SIST7CIH.js.gz +0 -0
  85. package/dist/SurfaceChart3DScene-GRM24VBC.js.br +0 -0
  86. package/dist/SurfaceChart3DScene-GRM24VBC.js.gz +0 -0
  87. package/dist/SurfaceChart3DScene-ZT7L27U4.mjs.gz +0 -0
  88. package/dist/chunk-6F76GHPE.mjs.br +0 -0
  89. package/dist/chunk-6F76GHPE.mjs.gz +0 -0
  90. package/dist/chunk-DYGKE2LY.js.br +0 -0
  91. package/dist/chunk-DYGKE2LY.js.gz +0 -0
  92. package/dist/chunk-GUDJDY4J.js.br +0 -0
  93. package/dist/chunk-GUDJDY4J.js.gz +0 -0
  94. package/dist/chunk-H36QL5T5.js.br +0 -0
  95. package/dist/chunk-H36QL5T5.js.gz +0 -0
  96. package/dist/chunk-NI5GSVZU.mjs.br +0 -0
  97. package/dist/chunk-NI5GSVZU.mjs.gz +0 -0
  98. package/dist/chunk-PUBYHZYJ.mjs.br +0 -0
  99. package/dist/chunk-PUBYHZYJ.mjs.gz +0 -0
  100. package/dist/chunk-RZYOOWZN.js.br +0 -0
  101. package/dist/chunk-RZYOOWZN.js.gz +0 -0
  102. package/dist/chunk-VDQD3ZOU.mjs.br +0 -0
  103. package/dist/chunk-VDQD3ZOU.mjs.gz +0 -0
  104. package/dist/chunk-YDYAOW6D.js.br +0 -0
  105. package/dist/chunk-YDYAOW6D.js.gz +0 -0
  106. package/dist/chunk-YZHBUMVU.mjs.br +0 -0
  107. package/dist/chunk-YZHBUMVU.mjs.gz +0 -0
  108. package/dist/useViewerBuildingBlocks-DpzU8NZ_.d.ts.map +0 -1
@@ -1,5 +1,5 @@
1
1
  import { translationsEn } from './chunk-5IUEPQTK.mjs';
2
- import { SHAPE_PRESET_DEFS, computeValueRangeForChart, VIEWER_SHORTCUT_REFERENCE, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, isTemplateElement, getImageFitStyle, isImageLikeElement, runMediaCommand, findMediaElementByElementId, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, resolveParagraphStrutFontSize, colorWithOpacity, normalizeHexColor, build3DExtrusionData, isIdentityRectClip, getResolvedShapeClipPath, isStrokeOnlyPresetElement, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, suppressesCssBorder, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getSoftEdgeFilterId, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, buildSvgGradientDef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, DEFAULT_FONT_FAMILY, rectToCells, isCellInRect, buildChartViewModel, centeredSvgTextLines, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, getRoundRectRadiusPx2, mediaFallbackVisual, registerPersistentAudio, proportionalLineHeight, substituteFieldText, resolveUnderlineDecorationStyle, resolveAutoFitFontScale, getSubstituteFontFamily, parsePanoseString, hasDistinctScriptFonts, pieceLetterSpacing, resolveMetricTrackingPx, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, sanitizeGradientStops, getGradientTileFlipCss, getGradientTileRectCss, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, svgGradientFillRef, computeColumnBoundaries, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, getPatternSvg, ooxmlDashToCssBorderStyle, cell3DBevelCss, getChartStylePalette, chartAreaFill, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, resolveFontRefIdx, tintColor2, shadeColor2, ooxmlGradientAngleToCssDegrees, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, splitRunForMetrics, hexToRgbChannels, chartPartToAttrs, segmentByScript, resolveFontForScript } from './chunk-PUBYHZYJ.mjs';
2
+ import { SHAPE_PRESET_DEFS, computeValueRangeForChart, VIEWER_SHORTCUT_REFERENCE, getAnimationInitialStyle, cloneHistorySnapshot, hasShapeProperties, getImageFitStyle, isImageLikeElement, runMediaCommand, findMediaElementByElementId, mediaPlaybackAttributes, buildTextBlockStyle, hasTextProperties, toCssWritingMode, toCssTextOrientation, toCssVerticalDirection, getKinsokuLineBreakStyles, buildTextBody3DSceneStyle, resolveParagraphRtl, resolveParagraphAlign, resolveCssTextAlign, resolveParagraphSpacing, resolveParagraphStrutFontSize, colorWithOpacity, normalizeHexColor, build3DExtrusionData, isIdentityRectClip, getResolvedShapeClipPath, isStrokeOnlyPresetElement, normalizeStrokeDashType, buildCssGradientFromShapeStyle, buildShadowCssFromShapeStyle, buildInnerShadowCssFromShapeStyle, suppressesCssBorder, buildMultiLayerShadowCss, buildGlowBoxShadow, getCompoundLineBoxShadow, getSoftEdgeFilterId, getEffectDagFilter, buildPatternFillCss, buildReflectionCss, getCssBorderDashStyle, getCompoundLineBorderWidth, getSvgStrokeDasharray, buildSvgGradientDef, isCalloutShape, getCalloutLeaderLineGeometry, buildCalloutLeaderLineSvgPath, getCalloutViewBoxBounds, svgLineCap, getCompoundLineOffsets, getCompoundLineWidths, computeSelectionRect, DEFAULT_FONT_FAMILY, cellStyleToCss, rectToCells, isCellInRect, buildChartViewModel, buildNotesPdfBytes, buildSlidesPdfBytes, buildPreviewAnimation, buildMotionPathPreview, getRoundRectRadiusPx2, mediaFallbackVisual, registerPersistentAudio, substituteFieldText, resolveUnderlineDecorationStyle, resolveAutoFitFontScale, getSubstituteFontFamily, parsePanoseString, hasDistinctScriptFonts, pieceLetterSpacing, resolveMetricTrackingPx, buildTextReflectionCss, getTextAlphaOpacity, buildTextRunFilterChain, buildTextShadowCss, TEXT_BUILD_ID_SEP, buildTextBuildSpec, textBuildSpanStyle, sanitizeGradientStops, getGradientTileFlipCss, getGradientTileRectCss, apply3dEffects, clampUnitInterval, customGeometryPathsToSvgSubpaths, svgGradientFillRef, computeColumnBoundaries, getTableCellBandStyle, parseDrawingColor, parseDrawingColorOpacity, getCellDiagonalBorders, getChartStylePalette, chartAreaFill, computeLayout, valueToY, formatAxisValue, computeLayoutOptions, splitSeriesByAxis, computeValueRange, getSecondaryValueAxis, seriesColor, paletteColor, resolveRegionCode, normalizeValue, sequentialColorScale, mediaFallbackIcon, mediaFallbackLabelKey, MEDIA_CHROME_ATTRIBUTE, convertOmmlToMathMl, sanitizeMathMl, buildTextFillCss, resolvePictureBullet, computeResizedColumnWidths, computeResizedRowHeight, DEFAULT_ROW_HEIGHT, ooxmlGradientAngleToCssDegrees, generateLogTicks, formatAxisValueWithUnits, getDisplayUnitLabel, splitRunForMetrics, hexToRgbChannels, chartPartToAttrs, segmentByScript, resolveFontForScript } from './chunk-D5TAZ5NL.mjs';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import React6, { useState, useEffect, useMemo, Suspense, useRef, useCallback, useLayoutEffect } from 'react';
@@ -267,29 +267,6 @@ function isConnectorOrLineElement(element) {
267
267
  return st === "connector" || st === "line" || element.shapeType === "line";
268
268
  }
269
269
 
270
- // src/viewer/utils/template-editing.ts
271
- function partitionTemplateElements(slides) {
272
- const templateElementsBySlideId = {};
273
- const nextSlides = slides.map((slide) => {
274
- const template = slide.elements.filter((el) => isTemplateElement(el));
275
- if (template.length === 0) {
276
- return slide;
277
- }
278
- templateElementsBySlideId[slide.id] = template;
279
- return { ...slide, elements: slide.elements.filter((el) => !isTemplateElement(el)) };
280
- });
281
- return { slides: nextSlides, templateElementsBySlideId };
282
- }
283
- function buildSaveSlides(slides, templateElementsBySlideId) {
284
- return slides.map((slide) => {
285
- const template = templateElementsBySlideId[slide.id];
286
- if (!template || template.length === 0) {
287
- return slide;
288
- }
289
- return { ...slide, elements: [...template, ...slide.elements] };
290
- });
291
- }
292
-
293
270
  // src/viewer/utils/image-style.ts
294
271
  function getImageMaskStyle(element) {
295
272
  if (!hasShapeProperties(element)) {
@@ -1917,31 +1894,6 @@ function renderSingleSegment(element, segment, segmentIndex, fallbackColor, find
1917
1894
  }
1918
1895
  return spanNode;
1919
1896
  }
1920
-
1921
- // src/viewer/utils/text-paragraph-spacing.ts
1922
- var PT_TO_PX = 96 / 72;
1923
- function resolveParagraphSpacing(input) {
1924
- const { paraProps, bodyStyle, isFirst, isLast, spaceFirstLast } = input;
1925
- const result = {};
1926
- const before = paraProps?.paragraphSpacingBefore ?? bodyStyle?.paragraphSpacingBefore;
1927
- if (typeof before === "number" && before > 0 && (!isFirst || spaceFirstLast)) {
1928
- result.marginTop = before;
1929
- }
1930
- const after = paraProps?.paragraphSpacingAfter ?? bodyStyle?.paragraphSpacingAfter;
1931
- if (typeof after === "number" && after > 0 && (!isLast || spaceFirstLast)) {
1932
- result.marginBottom = after;
1933
- }
1934
- const hasOwnLine = paraProps?.lineSpacing !== void 0 || paraProps?.lineSpacingExactPt !== void 0;
1935
- const lineSrc = hasOwnLine ? paraProps : bodyStyle;
1936
- const exactPt = lineSrc?.lineSpacingExactPt;
1937
- const multiplier = lineSrc?.lineSpacing;
1938
- if (typeof exactPt === "number" && exactPt > 0) {
1939
- result.lineHeight = `${exactPt * PT_TO_PX}px`;
1940
- } else if (typeof multiplier === "number" && multiplier > 0) {
1941
- result.lineHeight = proportionalLineHeight(multiplier);
1942
- }
1943
- return result;
1944
- }
1945
1897
  function groupSegmentsIntoParagraphs(segments) {
1946
1898
  const paragraphs = [];
1947
1899
  let current = [];
@@ -2020,18 +1972,18 @@ function renderTextSegments(element, fallbackColor, emptyFallback, findHighlight
2020
1972
  paraSegments.length > 0 ? paraSegments.map(({ segment }) => segment) : terminator ? [terminator] : [],
2021
1973
  bodyStyle?.fontSize
2022
1974
  );
2023
- const hasParaSpacing = spacing.marginTop !== void 0 || spacing.marginBottom !== void 0 || spacing.lineHeight !== void 0;
1975
+ const hasParaSpacing = spacing.spaceBeforePx !== void 0 || spacing.spaceAfterPx !== void 0 || spacing.lineHeight !== void 0;
2024
1976
  const paraStyle = {
2025
1977
  ...paraKinsokuStyle
2026
1978
  };
2027
1979
  if (strutFontSize !== void 0) {
2028
1980
  paraStyle.fontSize = strutFontSize;
2029
1981
  }
2030
- if (spacing.marginTop !== void 0) {
2031
- paraStyle.marginTop = spacing.marginTop;
1982
+ if (spacing.spaceBeforePx !== void 0) {
1983
+ paraStyle.marginTop = spacing.spaceBeforePx;
2032
1984
  }
2033
- if (spacing.marginBottom !== void 0) {
2034
- paraStyle.marginBottom = spacing.marginBottom;
1985
+ if (spacing.spaceAfterPx !== void 0) {
1986
+ paraStyle.marginBottom = spacing.spaceAfterPx;
2035
1987
  }
2036
1988
  if (spacing.lineHeight !== void 0) {
2037
1989
  paraStyle.lineHeight = spacing.lineHeight;
@@ -3385,194 +3337,15 @@ function extractTableCellStyle(cellXml, fallbackStyle, schemeColorOverrides) {
3385
3337
  }
3386
3338
 
3387
3339
  // src/viewer/utils/table-band-style.tsx
3388
- function resolveTableStyleFillColor(fill, colorScheme) {
3389
- if (!fill) {
3390
- return void 0;
3391
- }
3392
- const key = fill.schemeColor;
3393
- const base = colorScheme ? colorScheme[key] : void 0;
3394
- if (!base) {
3395
- return void 0;
3396
- }
3397
- let color = base;
3398
- if (fill.tint !== void 0 && fill.tint > 0) {
3399
- color = tintColor2(color, fill.tint / 1e5);
3400
- }
3401
- if (fill.shade !== void 0 && fill.shade > 0) {
3402
- color = shadeColor2(color, 1 - fill.shade / 1e5);
3403
- }
3404
- return color;
3405
- }
3406
- function applyTableStyleText(text, colorScheme, style, fontScheme) {
3407
- if (!text) {
3408
- return false;
3409
- }
3410
- let applied = false;
3411
- if (text.bold) {
3412
- style.fontWeight = 700;
3413
- applied = true;
3414
- }
3415
- if (text.italic) {
3416
- style.fontStyle = "italic";
3417
- applied = true;
3418
- }
3419
- if (text.underline) {
3420
- style.textDecorationLine = "underline";
3421
- applied = true;
3422
- }
3423
- if (text.fontFace) {
3424
- style.fontFamily = text.fontFace;
3425
- applied = true;
3426
- } else {
3427
- const refFont = resolveFontRefIdx(text.fontRefIdx, fontScheme);
3428
- if (refFont) {
3429
- style.fontFamily = refFont;
3430
- applied = true;
3431
- }
3432
- }
3433
- if (text.fontSchemeColor && colorScheme) {
3434
- const base = colorScheme[text.fontSchemeColor];
3435
- if (base) {
3436
- let color = base;
3437
- if (text.fontTint !== void 0 && text.fontTint > 0) {
3438
- color = tintColor2(color, text.fontTint / 1e5);
3439
- }
3440
- if (text.fontShade !== void 0 && text.fontShade > 0) {
3441
- color = shadeColor2(color, 1 - text.fontShade / 1e5);
3442
- }
3443
- style.color = color;
3444
- applied = true;
3445
- }
3446
- }
3447
- return applied;
3448
- }
3449
- function resolveTableStyleEntry(tableStyleId, tableStyleMap) {
3450
- if (!tableStyleId || !tableStyleMap) {
3451
- return void 0;
3452
- }
3453
- const direct = tableStyleMap[tableStyleId];
3454
- if (direct) {
3455
- return direct;
3456
- }
3457
- const normalised = tableStyleId.trim().toUpperCase();
3458
- const withBraces = normalised.startsWith("{") ? normalised : `{${normalised}}`;
3459
- return tableStyleMap[withBraces];
3460
- }
3461
- function getTableCellBandStyle(element, rowIndex, cellIndex, rowCount, columnCount, styleCtx) {
3340
+ function getTableCellBandStyle2(element, rowIndex, cellIndex, rowCount, columnCount, styleCtx) {
3462
3341
  if (element.type !== "table") {
3463
3342
  return void 0;
3464
3343
  }
3465
- const td = element.tableData;
3466
- if (!td) {
3467
- return void 0;
3468
- }
3469
- const styleEntry = resolveTableStyleEntry(td.tableStyleId, styleCtx?.tableStyleMap);
3470
- const colorScheme = styleCtx?.theme?.colorScheme;
3471
- const fontScheme = styleCtx?.theme?.fontScheme;
3472
- const resolveFill = (fill, fallback) => resolveTableStyleFillColor(fill, colorScheme) ?? fallback;
3473
- const style = {};
3474
- let applied = false;
3475
- if (styleEntry?.wholeTblFill) {
3476
- const wholeBg = resolveFill(styleEntry.wholeTblFill, "");
3477
- if (wholeBg) {
3478
- style.backgroundColor = wholeBg;
3479
- applied = true;
3480
- }
3481
- }
3482
- if (applyTableStyleText(styleEntry?.wholeTblText, colorScheme, style, fontScheme)) {
3483
- applied = true;
3484
- }
3485
- const bandStartRow = td.firstRowHeader ? 1 : 0;
3486
- const bandEndRow = td.lastRow ? rowCount - 1 : rowCount;
3487
- if (td.bandedRows && rowIndex >= bandStartRow && rowIndex < bandEndRow) {
3488
- const bandIndex = rowIndex - bandStartRow;
3489
- const rowCycle = Math.max(td.bandRowCycle ?? 1, 1);
3490
- const bandGroup = Math.floor(bandIndex / rowCycle) % 2;
3491
- if (bandGroup === 0) {
3492
- const band1Bg = resolveFill(styleEntry?.band1HFill, "rgba(217, 226, 243, 0.5)");
3493
- style.backgroundColor = band1Bg;
3494
- applied = true;
3495
- } else if (styleEntry?.band2HFill) {
3496
- const band2Bg = resolveFill(styleEntry.band2HFill, "");
3497
- if (band2Bg) {
3498
- style.backgroundColor = band2Bg;
3499
- applied = true;
3500
- }
3501
- }
3502
- }
3503
- if (td.bandedColumns) {
3504
- const isFirstCol = td.firstCol;
3505
- const isLastCol = td.lastCol;
3506
- const colBandIndex = isFirstCol && cellIndex > 0 ? cellIndex - 1 : cellIndex;
3507
- const skipCol = isFirstCol && cellIndex === 0 || isLastCol && cellIndex === columnCount - 1;
3508
- if (!skipCol) {
3509
- const colCycle = Math.max(td.bandColCycle ?? 1, 1);
3510
- const colBandGroup = Math.floor(colBandIndex / colCycle) % 2;
3511
- if (colBandGroup === 0) {
3512
- if (!style.backgroundColor || !td.bandedRows) {
3513
- const band1Bg = resolveFill(styleEntry?.band1VFill, "rgba(217, 226, 243, 0.35)");
3514
- style.backgroundColor = band1Bg;
3515
- applied = true;
3516
- }
3517
- } else if (styleEntry?.band2VFill) {
3518
- if (!style.backgroundColor || !td.bandedRows) {
3519
- const band2Bg = resolveFill(styleEntry.band2VFill, "");
3520
- if (band2Bg) {
3521
- style.backgroundColor = band2Bg;
3522
- applied = true;
3523
- }
3524
- }
3525
- }
3526
- }
3527
- }
3528
- if (td.firstRowHeader && rowIndex === 0) {
3529
- style.fontWeight = 700;
3530
- if (styleEntry?.firstRowFill?.noFill) {
3531
- style.backgroundColor = "transparent";
3532
- } else {
3533
- style.backgroundColor = resolveFill(styleEntry?.firstRowFill, "rgba(68, 114, 196, 0.85)");
3534
- style.color = "#ffffff";
3535
- }
3536
- applyTableStyleText(styleEntry?.firstRowText, colorScheme, style, fontScheme);
3537
- applied = true;
3538
- }
3539
- if (td.lastRow && rowIndex === rowCount - 1) {
3540
- style.fontWeight = 700;
3541
- if (styleEntry?.lastRowFill) {
3542
- const lastRowBg = resolveFill(styleEntry.lastRowFill, "");
3543
- if (lastRowBg) {
3544
- style.backgroundColor = lastRowBg;
3545
- }
3546
- }
3547
- style.borderTopWidth = 2;
3548
- style.borderTopColor = resolveFill(styleEntry?.firstRowFill, "rgba(68, 114, 196, 0.7)");
3549
- style.borderTopStyle = "solid";
3550
- applyTableStyleText(styleEntry?.lastRowText, colorScheme, style, fontScheme);
3551
- applied = true;
3552
- }
3553
- if (td.firstCol && cellIndex === 0) {
3554
- style.fontWeight = 700;
3555
- if (styleEntry?.firstColFill) {
3556
- const firstColBg = resolveFill(styleEntry.firstColFill, "");
3557
- if (firstColBg) {
3558
- style.backgroundColor = firstColBg;
3559
- }
3560
- }
3561
- applyTableStyleText(styleEntry?.firstColText, colorScheme, style, fontScheme);
3562
- applied = true;
3563
- }
3564
- if (td.lastCol && cellIndex === columnCount - 1) {
3565
- style.fontWeight = 700;
3566
- if (styleEntry?.lastColFill) {
3567
- const lastColBg = resolveFill(styleEntry.lastColFill, "");
3568
- if (lastColBg) {
3569
- style.backgroundColor = lastColBg;
3570
- }
3571
- }
3572
- applyTableStyleText(styleEntry?.lastColText, colorScheme, style, fontScheme);
3573
- applied = true;
3574
- }
3575
- return applied ? style : void 0;
3344
+ return getTableCellBandStyle(element.tableData, rowIndex, cellIndex, rowCount, columnCount, {
3345
+ tableStyleMap: styleCtx?.tableStyleMap,
3346
+ colorScheme: styleCtx?.theme?.colorScheme,
3347
+ fontScheme: styleCtx?.theme?.fontScheme
3348
+ });
3576
3349
  }
3577
3350
 
3578
3351
  // src/viewer/utils/table-data-parse.tsx
@@ -3753,144 +3526,6 @@ function TableCellInput({
3753
3526
  }
3754
3527
  );
3755
3528
  }
3756
-
3757
- // src/viewer/utils/table-render-helpers.ts
3758
- function cellStyleToCss(style) {
3759
- if (!style) {
3760
- return {};
3761
- }
3762
- const css = {};
3763
- if (style.fontSize) {
3764
- css.fontSize = style.fontSize;
3765
- }
3766
- if (style.bold) {
3767
- css.fontWeight = "bold";
3768
- }
3769
- if (style.italic) {
3770
- css.fontStyle = "italic";
3771
- }
3772
- if (style.underline) {
3773
- css.textDecorationLine = "underline";
3774
- }
3775
- if (style.color) {
3776
- css.color = style.color;
3777
- }
3778
- if (style.gradientFillCss) {
3779
- css.background = style.gradientFillCss;
3780
- } else if (style.fillMode === "pattern" && style.patternFillPreset) {
3781
- const fg = normalizeHexColor(style.patternFillForeground, "#000000");
3782
- const bg = normalizeHexColor(style.patternFillBackground, "#ffffff");
3783
- const svgPattern = getPatternSvg(style.patternFillPreset, fg, bg);
3784
- if (svgPattern) {
3785
- const encoded = encodeURIComponent(svgPattern);
3786
- css.backgroundImage = `url("data:image/svg+xml,${encoded}")`;
3787
- css.backgroundColor = bg;
3788
- } else if (style.backgroundColor) {
3789
- css.backgroundColor = style.backgroundColor;
3790
- }
3791
- } else if (style.backgroundColor) {
3792
- css.backgroundColor = style.backgroundColor;
3793
- }
3794
- if (style.align) {
3795
- css.textAlign = style.align;
3796
- } else if (style.anchorCtr) {
3797
- css.textAlign = "center";
3798
- }
3799
- if (style.vAlign) {
3800
- css.verticalAlign = style.vAlign;
3801
- }
3802
- if (style.horzOverflow === "clip") {
3803
- css.overflowX = "hidden";
3804
- } else if (style.horzOverflow === "overflow") {
3805
- css.overflowX = "visible";
3806
- }
3807
- if (style.textDirection) {
3808
- switch (style.textDirection) {
3809
- case "vert":
3810
- case "eaVert":
3811
- case "wordArtVert":
3812
- case "wordArtVertRtl":
3813
- css.writingMode = "vertical-rl";
3814
- break;
3815
- case "vert270":
3816
- case "mongolianVert":
3817
- css.writingMode = "vertical-lr";
3818
- break;
3819
- }
3820
- if (style.textDirection === "wordArtVert") {
3821
- css.textOrientation = "upright";
3822
- } else if (css.writingMode) {
3823
- css.textOrientation = "mixed";
3824
- }
3825
- if (style.textDirection === "wordArtVertRtl") {
3826
- css.direction = "rtl";
3827
- }
3828
- }
3829
- const borderEdges = [
3830
- {
3831
- prefix: "borderTop",
3832
- width: style.borderTopWidth,
3833
- color: style.borderTopColor,
3834
- dash: style.borderTopDash
3835
- },
3836
- {
3837
- prefix: "borderBottom",
3838
- width: style.borderBottomWidth,
3839
- color: style.borderBottomColor,
3840
- dash: style.borderBottomDash
3841
- },
3842
- {
3843
- prefix: "borderLeft",
3844
- width: style.borderLeftWidth,
3845
- color: style.borderLeftColor,
3846
- dash: style.borderLeftDash
3847
- },
3848
- {
3849
- prefix: "borderRight",
3850
- width: style.borderRightWidth,
3851
- color: style.borderRightColor,
3852
- dash: style.borderRightDash
3853
- }
3854
- ];
3855
- for (const edge of borderEdges) {
3856
- if (edge.width || edge.color) {
3857
- const w = edge.width ?? 1;
3858
- const c = edge.color ?? style.borderColor ?? "#000000";
3859
- const s = ooxmlDashToCssBorderStyle(edge.dash);
3860
- css[edge.prefix] = `${w}px ${s} ${c}`;
3861
- }
3862
- }
3863
- if (style.marginLeft) {
3864
- css.paddingLeft = style.marginLeft;
3865
- }
3866
- if (style.marginRight) {
3867
- css.paddingRight = style.marginRight;
3868
- }
3869
- if (style.marginTop) {
3870
- css.paddingTop = style.marginTop;
3871
- }
3872
- if (style.marginBottom) {
3873
- css.paddingBottom = style.marginBottom;
3874
- }
3875
- const textShadowParts = [];
3876
- if (style.textShadowColor) {
3877
- const offX = style.textShadowOffsetX ?? 1;
3878
- const offY = style.textShadowOffsetY ?? 1;
3879
- const blur = style.textShadowBlur ?? 0;
3880
- textShadowParts.push(`${offX}px ${offY}px ${blur}px ${style.textShadowColor}`);
3881
- }
3882
- if (style.textGlowColor) {
3883
- const radius = style.textGlowRadius ?? 2;
3884
- textShadowParts.push(`0px 0px ${radius}px ${style.textGlowColor}`);
3885
- }
3886
- if (textShadowParts.length > 0) {
3887
- css.textShadow = textShadowParts.join(", ");
3888
- }
3889
- if (style.cell3D) {
3890
- Object.assign(css, cell3DBevelCss(style.cell3D));
3891
- }
3892
- return css;
3893
- }
3894
3529
  function TableResizeOverlay({
3895
3530
  children,
3896
3531
  columnWidths,
@@ -4243,7 +3878,7 @@ function renderTableElement(element, textStyle, options) {
4243
3878
  const colSpan = Number.isFinite(gridSpanRaw) && gridSpanRaw > 1 ? gridSpanRaw : void 0;
4244
3879
  const rowSpanRaw = Number.parseInt(String(cell["@_rowSpan"] || ""), 10);
4245
3880
  const rSpan = Number.isFinite(rowSpanRaw) && rowSpanRaw > 1 ? rowSpanRaw : void 0;
4246
- const bandStyle = getTableCellBandStyle(
3881
+ const bandStyle = getTableCellBandStyle2(
4247
3882
  element,
4248
3883
  rowIndex,
4249
3884
  cellIndex,
@@ -6184,7 +5819,7 @@ function FailedToLoad() {
6184
5819
  var LazySurfaceChart3DScene = React6.lazy(
6185
5820
  async () => {
6186
5821
  try {
6187
- return await import('./SurfaceChart3DScene-ZT7L27U4.mjs');
5822
+ return await import('./SurfaceChart3DScene-BMFEDBLF.mjs');
6188
5823
  } catch {
6189
5824
  return { default: FailedToLoad };
6190
5825
  }
@@ -6859,1036 +6494,6 @@ function renderChartElement(element) {
6859
6494
  }
6860
6495
  return renderDefaultBarChart(element);
6861
6496
  }
6862
- var PALETTES = {
6863
- colorful1: ["#3b82f6", "#22c55e", "#f97316", "#eab308", "#a855f7", "#ec4899"],
6864
- colorful2: ["#6366f1", "#14b8a6", "#f59e0b", "#ef4444", "#8b5cf6", "#06b6d4"],
6865
- colorful3: ["#0ea5e9", "#84cc16", "#f43e5e", "#a855f7", "#f97316", "#10b981"],
6866
- monochromatic1: ["#3b82f6", "#60a5fa", "#93c5fd", "#bfdbfe", "#2563eb", "#1d4ed8"],
6867
- monochromatic2: ["#6366f1", "#818cf8", "#a5b4fc", "#c7d2fe", "#4f46e5", "#4338ca"]
6868
- };
6869
- var DEFAULT_PALETTE = PALETTES.colorful1;
6870
- function colour(index, palette = DEFAULT_PALETTE) {
6871
- return palette[index % palette.length];
6872
- }
6873
- function nodeOpacity(index, total, style) {
6874
- const base = style === "intense" ? 1 : style === "moderate" ? 0.92 : 0.85;
6875
- if (total <= 1) {
6876
- return base;
6877
- }
6878
- return base - index / (total - 1) * 0.15;
6879
- }
6880
- function styleShadow(style) {
6881
- if (style === "intense") {
6882
- return "drop-shadow(0 2px 6px rgba(0,0,0,0.35))";
6883
- }
6884
- if (style === "moderate") {
6885
- return "drop-shadow(0 1px 3px rgba(0,0,0,0.2))";
6886
- }
6887
- return void 0;
6888
- }
6889
- function styleStroke(style) {
6890
- if (style === "intense") {
6891
- return 2;
6892
- }
6893
- if (style === "moderate") {
6894
- return 1.5;
6895
- }
6896
- return 0;
6897
- }
6898
- function truncate(text, max) {
6899
- if (text.length <= max) {
6900
- return text;
6901
- }
6902
- return `${text.slice(0, max - 1)}\u2026`;
6903
- }
6904
- function resolvePalette(el) {
6905
- if (el.type !== "smartArt" || !el.smartArtData) {
6906
- return DEFAULT_PALETTE;
6907
- }
6908
- const ctFills = el.smartArtData.colorTransform?.fillColors;
6909
- if (ctFills && ctFills.length > 0) {
6910
- return ctFills;
6911
- }
6912
- return PALETTES[el.smartArtData.colorScheme ?? "colorful1"] ?? DEFAULT_PALETTE;
6913
- }
6914
- function resolveStyle(el) {
6915
- if (el.type !== "smartArt" || !el.smartArtData) {
6916
- return "flat";
6917
- }
6918
- return el.smartArtData.style ?? "flat";
6919
- }
6920
- function resolveSmartArtDataPalette(data) {
6921
- const ctFills = data.colorTransform?.fillColors;
6922
- if (ctFills && ctFills.length > 0) {
6923
- return ctFills;
6924
- }
6925
- return PALETTES[data.colorScheme ?? "colorful1"] ?? DEFAULT_PALETTE;
6926
- }
6927
- function buildTree(nodes) {
6928
- const map = /* @__PURE__ */ new Map();
6929
- for (const n of nodes) {
6930
- map.set(n.id, { node: n, children: [] });
6931
- }
6932
- const roots = [];
6933
- for (const n of nodes) {
6934
- const treeNode = map.get(n.id);
6935
- if (n.parentId && map.has(n.parentId)) {
6936
- map.get(n.parentId).children.push(treeNode);
6937
- } else {
6938
- roots.push(treeNode);
6939
- }
6940
- }
6941
- return roots;
6942
- }
6943
- function treeWidth(t) {
6944
- if (t.children.length === 0) {
6945
- return 1;
6946
- }
6947
- return t.children.reduce((sum, c) => sum + treeWidth(c), 0);
6948
- }
6949
- function treeDepth(t) {
6950
- if (t.children.length === 0) {
6951
- return 1;
6952
- }
6953
- return 1 + Math.max(...t.children.map(treeDepth));
6954
- }
6955
- function layoutToCategory(layout) {
6956
- if (!layout) {
6957
- return "list";
6958
- }
6959
- const map = {
6960
- basicBlockList: "list",
6961
- alternatingHexagons: "list",
6962
- basicChevronProcess: "process",
6963
- basicCycle: "cycle",
6964
- basicPie: "cycle",
6965
- basicRadial: "radial",
6966
- basicVenn: "venn",
6967
- continuousBlockProcess: "process",
6968
- convergingRadial: "radial",
6969
- hierarchy: "hierarchy",
6970
- horizontalBulletList: "list",
6971
- linearVenn: "venn",
6972
- segmentedProcess: "process",
6973
- stackedList: "list",
6974
- tableList: "list",
6975
- trapezoidList: "list",
6976
- upwardArrow: "process",
6977
- basicFunnel: "funnel",
6978
- basicTarget: "radial",
6979
- interlockingGears: "radial",
6980
- basicTimeline: "process",
6981
- basicMatrix: "matrix",
6982
- basicPyramid: "pyramid",
6983
- invertedPyramid: "pyramid",
6984
- bendingProcess: "process",
6985
- stepDownProcess: "stepdown",
6986
- alternatingFlow: "alternatingflow",
6987
- descendingProcess: "descending",
6988
- pictureAccentList: "pictureaccent",
6989
- verticalBlockList: "verticalblock",
6990
- groupedList: "grouped",
6991
- pyramidList: "pyramidlist",
6992
- horizontalPictureList: "horizontalpicture",
6993
- accentProcess: "accentprocess",
6994
- verticalChevronList: "verticalchevron"
6995
- };
6996
- return map[layout] ?? "list";
6997
- }
6998
- var LABEL_WIDTH_FRACTION = 0.82;
6999
- function smartArtNodeGroupProps(nodeId, shadow, label2) {
7000
- const props = {
7001
- "data-smartart-node-id": nodeId,
7002
- style: { filter: shadow, pointerEvents: "auto" }
7003
- };
7004
- if (label2) {
7005
- props.role = "img";
7006
- props["aria-label"] = label2;
7007
- }
7008
- return props;
7009
- }
7010
- function fitFontSize(text, maxWidth, maxHeight, baseSize) {
7011
- const charWidthRatio = 0.6;
7012
- const maxByWidth = maxWidth / (text.length * charWidthRatio);
7013
- const maxByHeight = maxHeight * 0.5;
7014
- return Math.max(6, Math.min(baseSize, maxByWidth, maxByHeight));
7015
- }
7016
- function chevronPoints(x, y, w, h) {
7017
- const depth = Math.min(w * 0.2, h * 0.4);
7018
- return [
7019
- `${x},${y}`,
7020
- `${x + w - depth},${y}`,
7021
- `${x + w},${y + h / 2}`,
7022
- `${x + w - depth},${y + h}`,
7023
- `${x},${y + h}`,
7024
- `${x + depth},${y + h / 2}`
7025
- ].join(" ");
7026
- }
7027
- function gearPath(cx, cy, outerR, innerR, teeth) {
7028
- const segments = [];
7029
- const step = Math.PI * 2 / (teeth * 2);
7030
- for (let i = 0; i < teeth * 2; i++) {
7031
- const angle = i * step - Math.PI / 2;
7032
- const r = i % 2 === 0 ? outerR : innerR;
7033
- const x = cx + r * Math.cos(angle);
7034
- const y = cy + r * Math.sin(angle);
7035
- segments.push(i === 0 ? `M${x},${y}` : `L${x},${y}`);
7036
- }
7037
- segments.push("Z");
7038
- return segments.join(" ");
7039
- }
7040
- function SmartArtNodeText({
7041
- text,
7042
- x,
7043
- y,
7044
- fill,
7045
- fontSize,
7046
- fontWeight,
7047
- fontStyle,
7048
- className,
7049
- anchor = "middle",
7050
- maxWidth
7051
- }) {
7052
- const lines = maxWidth !== void 0 ? centeredSvgTextLines(text, fontSize, { maxWidth: maxWidth * LABEL_WIDTH_FRACTION }).map(
7053
- (line) => line.text
7054
- ) : text.split("\n").filter((l) => l.length > 0);
7055
- const lineHeight = fontSize * 1.2;
7056
- let startY;
7057
- let dominantBaseline;
7058
- if (anchor === "bottom") {
7059
- startY = lines.length > 0 ? y - (lines.length - 1) * lineHeight : y;
7060
- dominantBaseline = "auto";
7061
- } else if (anchor === "top") {
7062
- startY = y;
7063
- dominantBaseline = "hanging";
7064
- } else {
7065
- const totalHeight = lines.length * lineHeight;
7066
- startY = lines.length > 0 ? y - totalHeight / 2 + lineHeight / 2 : y;
7067
- dominantBaseline = "central";
7068
- }
7069
- return /* @__PURE__ */ jsx(
7070
- "text",
7071
- {
7072
- x,
7073
- textAnchor: "middle",
7074
- dominantBaseline,
7075
- fill,
7076
- fontSize,
7077
- fontWeight,
7078
- fontStyle,
7079
- className,
7080
- children: lines.map((line, i) => /* @__PURE__ */ jsx("tspan", { x, y: startY + i * lineHeight, children: line }, i))
7081
- }
7082
- );
7083
- }
7084
- function wrapChrome(chrome, content, className, a11y) {
7085
- const wrapperStyle = {};
7086
- if (chrome?.backgroundColor) {
7087
- wrapperStyle.backgroundColor = chrome.backgroundColor;
7088
- }
7089
- if (chrome?.outlineColor) {
7090
- wrapperStyle.border = `${chrome.outlineWidth ?? 1}px solid ${chrome.outlineColor}`;
7091
- }
7092
- return /* @__PURE__ */ jsx(
7093
- "div",
7094
- {
7095
- className: `w-full h-full ${className}`,
7096
- style: wrapperStyle,
7097
- role: a11y?.role,
7098
- "aria-label": a11y?.label,
7099
- children: content
7100
- }
7101
- );
7102
- }
7103
- function renderStepDownProcess(element, nodes, palette, style) {
7104
- const w = element.width;
7105
- const h = element.height;
7106
- const pad = 8;
7107
- const usableW = w - pad * 2;
7108
- const usableH = h - pad * 2;
7109
- const stepW = usableW / nodes.length;
7110
- const stepH = usableH / nodes.length;
7111
- const boxW = stepW * 0.85;
7112
- const boxH = stepH * 0.6;
7113
- const shadow = styleShadow(style);
7114
- const sw = styleStroke(style);
7115
- return /* @__PURE__ */ jsx(
7116
- "svg",
7117
- {
7118
- className: "w-full h-full pointer-events-none",
7119
- viewBox: `0 0 ${w} ${h}`,
7120
- preserveAspectRatio: "xMidYMid meet",
7121
- style: { filter: shadow },
7122
- children: nodes.map((node, i) => {
7123
- const x = pad + i * stepW;
7124
- const y = pad + i * stepH;
7125
- const fontSize = Math.max(7, Math.min(10, boxW * 0.1));
7126
- return /* @__PURE__ */ jsxs("g", { children: [
7127
- i < nodes.length - 1 && /* @__PURE__ */ jsx(
7128
- "line",
7129
- {
7130
- x1: x + boxW,
7131
- y1: y + boxH / 2,
7132
- x2: x + stepW,
7133
- y2: y + stepH + boxH / 2,
7134
- stroke: "#94a3b8",
7135
- strokeWidth: 1.5,
7136
- opacity: 0.5
7137
- }
7138
- ),
7139
- /* @__PURE__ */ jsx(
7140
- "rect",
7141
- {
7142
- x,
7143
- y,
7144
- width: boxW,
7145
- height: boxH,
7146
- rx: 5,
7147
- fill: colour(i, palette),
7148
- opacity: nodeOpacity(i, nodes.length, style),
7149
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7150
- strokeWidth: sw
7151
- }
7152
- ),
7153
- /* @__PURE__ */ jsx(
7154
- SmartArtNodeText,
7155
- {
7156
- x: x + boxW / 2,
7157
- y: y + boxH / 2,
7158
- text: truncate(node.text, 20),
7159
- fill: "white",
7160
- fontSize,
7161
- className: "pointer-events-none"
7162
- }
7163
- )
7164
- ] }, `${element.id}-stepdown-${node.id}-${i}`);
7165
- })
7166
- }
7167
- );
7168
- }
7169
- function renderAlternatingFlow(element, nodes, palette, style) {
7170
- const w = element.width;
7171
- const h = element.height;
7172
- const pad = 8;
7173
- const usableH = h - pad * 2;
7174
- const rowH = usableH / nodes.length;
7175
- const halfW = (w - pad * 2) / 2;
7176
- const boxW = halfW * 0.8;
7177
- const boxH = Math.min(rowH * 0.7, 40);
7178
- const centerX = w / 2;
7179
- const shadow = styleShadow(style);
7180
- const sw = styleStroke(style);
7181
- return /* @__PURE__ */ jsxs(
7182
- "svg",
7183
- {
7184
- className: "w-full h-full pointer-events-none",
7185
- viewBox: `0 0 ${w} ${h}`,
7186
- preserveAspectRatio: "xMidYMid meet",
7187
- style: { filter: shadow },
7188
- children: [
7189
- /* @__PURE__ */ jsx(
7190
- "line",
7191
- {
7192
- x1: centerX,
7193
- y1: pad,
7194
- x2: centerX,
7195
- y2: h - pad,
7196
- stroke: "#94a3b8",
7197
- strokeWidth: 2,
7198
- opacity: 0.3
7199
- }
7200
- ),
7201
- nodes.map((node, i) => {
7202
- const isLeft = i % 2 === 0;
7203
- const y = pad + i * rowH + (rowH - boxH) / 2;
7204
- const x = isLeft ? centerX - boxW - 12 : centerX + 12;
7205
- const fontSize = Math.max(7, Math.min(10, boxW * 0.1));
7206
- return /* @__PURE__ */ jsxs("g", { children: [
7207
- /* @__PURE__ */ jsx(
7208
- "line",
7209
- {
7210
- x1: isLeft ? x + boxW : x,
7211
- y1: y + boxH / 2,
7212
- x2: centerX,
7213
- y2: y + boxH / 2,
7214
- stroke: colour(i, palette),
7215
- strokeWidth: 1.5,
7216
- opacity: 0.5
7217
- }
7218
- ),
7219
- /* @__PURE__ */ jsx("circle", { cx: centerX, cy: y + boxH / 2, r: 3, fill: colour(i, palette), opacity: 0.8 }),
7220
- /* @__PURE__ */ jsx(
7221
- "rect",
7222
- {
7223
- x,
7224
- y,
7225
- width: boxW,
7226
- height: boxH,
7227
- rx: 5,
7228
- fill: colour(i, palette),
7229
- opacity: nodeOpacity(i, nodes.length, style),
7230
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7231
- strokeWidth: sw
7232
- }
7233
- ),
7234
- /* @__PURE__ */ jsx(
7235
- SmartArtNodeText,
7236
- {
7237
- x: x + boxW / 2,
7238
- y: y + boxH / 2,
7239
- text: truncate(node.text, 20),
7240
- fill: "white",
7241
- fontSize,
7242
- className: "pointer-events-none"
7243
- }
7244
- )
7245
- ] }, `${element.id}-altflow-${node.id}-${i}`);
7246
- })
7247
- ]
7248
- }
7249
- );
7250
- }
7251
- function renderDescendingProcess(element, nodes, palette, style) {
7252
- const w = element.width;
7253
- const h = element.height;
7254
- const pad = 8;
7255
- const gap = 4;
7256
- const usableH = h - pad * 2;
7257
- const maxW = w - pad * 2;
7258
- const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
7259
- const shadow = styleShadow(style);
7260
- const sw = styleStroke(style);
7261
- return /* @__PURE__ */ jsx(
7262
- "svg",
7263
- {
7264
- className: "w-full h-full pointer-events-none",
7265
- viewBox: `0 0 ${w} ${h}`,
7266
- preserveAspectRatio: "xMidYMid meet",
7267
- style: { filter: shadow },
7268
- children: nodes.map((node, i) => {
7269
- const widthFraction = 1 - i / Math.max(nodes.length, 1) * 0.5;
7270
- const bw = maxW * widthFraction;
7271
- const x = (w - bw) / 2;
7272
- const y = pad + i * (itemH + gap);
7273
- const fontSize = Math.max(7, Math.min(11, itemH * 0.4));
7274
- return /* @__PURE__ */ jsxs("g", { children: [
7275
- i < nodes.length - 1 && /* @__PURE__ */ jsxs(Fragment, { children: [
7276
- /* @__PURE__ */ jsx(
7277
- "line",
7278
- {
7279
- x1: w / 2,
7280
- y1: y + itemH,
7281
- x2: w / 2,
7282
- y2: y + itemH + gap,
7283
- stroke: "#94a3b8",
7284
- strokeWidth: 1.5,
7285
- opacity: 0.5
7286
- }
7287
- ),
7288
- /* @__PURE__ */ jsx(
7289
- "polygon",
7290
- {
7291
- points: `${w / 2 - 3},${y + itemH + gap - 4} ${w / 2},${y + itemH + gap} ${w / 2 + 3},${y + itemH + gap - 4}`,
7292
- fill: "#94a3b8",
7293
- opacity: 0.5
7294
- }
7295
- )
7296
- ] }),
7297
- /* @__PURE__ */ jsx(
7298
- "rect",
7299
- {
7300
- x,
7301
- y,
7302
- width: bw,
7303
- height: itemH,
7304
- rx: 5,
7305
- fill: colour(i, palette),
7306
- opacity: nodeOpacity(i, nodes.length, style),
7307
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7308
- strokeWidth: sw
7309
- }
7310
- ),
7311
- /* @__PURE__ */ jsx(
7312
- SmartArtNodeText,
7313
- {
7314
- x: w / 2,
7315
- y: y + itemH / 2,
7316
- text: truncate(node.text, 30),
7317
- fill: "white",
7318
- fontSize,
7319
- className: "pointer-events-none"
7320
- }
7321
- )
7322
- ] }, `${element.id}-desc-${node.id}-${i}`);
7323
- })
7324
- }
7325
- );
7326
- }
7327
- function renderPictureAccentList(element, nodes, palette, style) {
7328
- const w = element.width;
7329
- const h = element.height;
7330
- const pad = 8;
7331
- const gap = 6;
7332
- const usableH = h - pad * 2;
7333
- const usableW = w - pad * 2;
7334
- const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
7335
- const circleR = Math.min(itemH * 0.38, 18);
7336
- const textX = pad + circleR * 2 + 12;
7337
- const textW = usableW - circleR * 2 - 16;
7338
- const shadow = styleShadow(style);
7339
- const sw = styleStroke(style);
7340
- return /* @__PURE__ */ jsx(
7341
- "svg",
7342
- {
7343
- className: "w-full h-full pointer-events-none",
7344
- viewBox: `0 0 ${w} ${h}`,
7345
- preserveAspectRatio: "xMidYMid meet",
7346
- style: { filter: shadow },
7347
- children: nodes.map((node, i) => {
7348
- const y = pad + i * (itemH + gap);
7349
- const cy = y + itemH / 2;
7350
- const col = colour(i, palette);
7351
- const fontSize = Math.max(7, Math.min(11, itemH * 0.35));
7352
- return /* @__PURE__ */ jsxs("g", { children: [
7353
- /* @__PURE__ */ jsx(
7354
- "circle",
7355
- {
7356
- cx: pad + circleR,
7357
- cy,
7358
- r: circleR,
7359
- fill: col,
7360
- opacity: nodeOpacity(i, nodes.length, style)
7361
- }
7362
- ),
7363
- /* @__PURE__ */ jsx(
7364
- "text",
7365
- {
7366
- x: pad + circleR,
7367
- y: cy,
7368
- textAnchor: "middle",
7369
- dominantBaseline: "central",
7370
- fill: "white",
7371
- fontSize: Math.max(7, circleR * 0.7),
7372
- fontWeight: "bold",
7373
- className: "pointer-events-none",
7374
- children: i + 1
7375
- }
7376
- ),
7377
- /* @__PURE__ */ jsx(
7378
- "rect",
7379
- {
7380
- x: textX,
7381
- y: y + 2,
7382
- width: textW,
7383
- height: itemH - 4,
7384
- rx: 4,
7385
- fill: col,
7386
- opacity: 0.12,
7387
- stroke: col,
7388
- strokeWidth: sw > 0 ? sw : 1,
7389
- strokeOpacity: 0.3
7390
- }
7391
- ),
7392
- /* @__PURE__ */ jsx(
7393
- "text",
7394
- {
7395
- x: textX + 8,
7396
- y: cy,
7397
- textAnchor: "start",
7398
- dominantBaseline: "central",
7399
- fill: col,
7400
- fontSize,
7401
- className: "pointer-events-none",
7402
- children: truncate(node.text, 40)
7403
- }
7404
- )
7405
- ] }, `${element.id}-picacc-${node.id}-${i}`);
7406
- })
7407
- }
7408
- );
7409
- }
7410
- function renderVerticalBlockList(element, nodes, palette, style) {
7411
- const w = element.width;
7412
- const h = element.height;
7413
- const pad = 8;
7414
- const gap = 4;
7415
- const usableH = h - pad * 2;
7416
- const usableW = w - pad * 2;
7417
- const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
7418
- const headerW = usableW * 0.22;
7419
- const bodyW = usableW - headerW - 4;
7420
- const shadow = styleShadow(style);
7421
- const sw = styleStroke(style);
7422
- return /* @__PURE__ */ jsx(
7423
- "svg",
7424
- {
7425
- className: "w-full h-full pointer-events-none",
7426
- viewBox: `0 0 ${w} ${h}`,
7427
- preserveAspectRatio: "xMidYMid meet",
7428
- style: { filter: shadow },
7429
- children: nodes.map((node, i) => {
7430
- const y = pad + i * (itemH + gap);
7431
- const col = colour(i, palette);
7432
- const fontSize = Math.max(7, Math.min(11, itemH * 0.35));
7433
- return /* @__PURE__ */ jsxs("g", { children: [
7434
- /* @__PURE__ */ jsx(
7435
- "rect",
7436
- {
7437
- x: pad,
7438
- y,
7439
- width: headerW,
7440
- height: itemH,
7441
- rx: 3,
7442
- fill: col,
7443
- opacity: nodeOpacity(i, nodes.length, style),
7444
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7445
- strokeWidth: sw
7446
- }
7447
- ),
7448
- /* @__PURE__ */ jsx(
7449
- "text",
7450
- {
7451
- x: pad + headerW / 2,
7452
- y: y + itemH / 2,
7453
- textAnchor: "middle",
7454
- dominantBaseline: "central",
7455
- fill: "white",
7456
- fontSize: Math.max(8, itemH * 0.4),
7457
- fontWeight: "bold",
7458
- className: "pointer-events-none",
7459
- children: i + 1
7460
- }
7461
- ),
7462
- /* @__PURE__ */ jsx(
7463
- "rect",
7464
- {
7465
- x: pad + headerW + 4,
7466
- y,
7467
- width: bodyW,
7468
- height: itemH,
7469
- rx: 3,
7470
- fill: col,
7471
- opacity: 0.1,
7472
- stroke: col,
7473
- strokeWidth: 1,
7474
- strokeOpacity: 0.3
7475
- }
7476
- ),
7477
- /* @__PURE__ */ jsx(
7478
- "text",
7479
- {
7480
- x: pad + headerW + 12,
7481
- y: y + itemH / 2,
7482
- textAnchor: "start",
7483
- dominantBaseline: "central",
7484
- fill: col,
7485
- fontSize,
7486
- className: "pointer-events-none",
7487
- children: truncate(node.text, 40)
7488
- }
7489
- )
7490
- ] }, `${element.id}-vblk-${node.id}-${i}`);
7491
- })
7492
- }
7493
- );
7494
- }
7495
- function renderGroupedList(element, nodes, palette, style) {
7496
- const w = element.width;
7497
- const h = element.height;
7498
- const pad = 8;
7499
- const gap = 8;
7500
- const shadow = styleShadow(style);
7501
- const sw = styleStroke(style);
7502
- const groupSize = nodes.length <= 4 ? 2 : 3;
7503
- const groups = [];
7504
- for (let i = 0; i < nodes.length; i += groupSize) {
7505
- groups.push(nodes.slice(i, i + groupSize));
7506
- }
7507
- const usableW = w - pad * 2;
7508
- const groupW = (usableW - gap * (groups.length - 1)) / groups.length;
7509
- const usableH = h - pad * 2;
7510
- const headerH = usableH * 0.18;
7511
- return /* @__PURE__ */ jsx(
7512
- "svg",
7513
- {
7514
- className: "w-full h-full pointer-events-none",
7515
- viewBox: `0 0 ${w} ${h}`,
7516
- preserveAspectRatio: "xMidYMid meet",
7517
- style: { filter: shadow },
7518
- children: groups.map((group, gi) => {
7519
- const gx = pad + gi * (groupW + gap);
7520
- const col = colour(gi, palette);
7521
- const subItemGap = 3;
7522
- const subItemH = (usableH - headerH - 4 - subItemGap * (group.length - 1)) / group.length;
7523
- return /* @__PURE__ */ jsxs("g", { children: [
7524
- /* @__PURE__ */ jsx(
7525
- "rect",
7526
- {
7527
- x: gx,
7528
- y: pad,
7529
- width: groupW,
7530
- height: headerH,
7531
- rx: 4,
7532
- fill: col,
7533
- opacity: nodeOpacity(gi, groups.length, style),
7534
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7535
- strokeWidth: sw
7536
- }
7537
- ),
7538
- /* @__PURE__ */ jsx(
7539
- "text",
7540
- {
7541
- x: gx + groupW / 2,
7542
- y: pad + headerH / 2,
7543
- textAnchor: "middle",
7544
- dominantBaseline: "central",
7545
- fill: "white",
7546
- fontSize: Math.max(7, Math.min(10, groupW * 0.08)),
7547
- fontWeight: "bold",
7548
- className: "pointer-events-none",
7549
- children: `Group ${gi + 1}`
7550
- }
7551
- ),
7552
- group.map((node, si) => {
7553
- const sy = pad + headerH + 4 + si * (subItemH + subItemGap);
7554
- const fontSize = Math.max(7, Math.min(10, subItemH * 0.35));
7555
- return /* @__PURE__ */ jsxs("g", { children: [
7556
- /* @__PURE__ */ jsx(
7557
- "rect",
7558
- {
7559
- x: gx + 4,
7560
- y: sy,
7561
- width: groupW - 8,
7562
- height: subItemH,
7563
- rx: 3,
7564
- fill: col,
7565
- opacity: 0.15,
7566
- stroke: col,
7567
- strokeWidth: 1,
7568
- strokeOpacity: 0.3
7569
- }
7570
- ),
7571
- /* @__PURE__ */ jsx(
7572
- SmartArtNodeText,
7573
- {
7574
- x: gx + groupW / 2,
7575
- y: sy + subItemH / 2,
7576
- text: truncate(node.text, 20),
7577
- fill: col,
7578
- fontSize,
7579
- className: "pointer-events-none"
7580
- }
7581
- )
7582
- ] }, `${element.id}-grp-${gi}-item-${node.id}-${si}`);
7583
- })
7584
- ] }, `${element.id}-grp-${gi}`);
7585
- })
7586
- }
7587
- );
7588
- }
7589
- function renderPyramidList(element, nodes, palette, style) {
7590
- const w = element.width;
7591
- const h = element.height;
7592
- const pad = 8;
7593
- const gap = 4;
7594
- const usableH = h - pad * 2;
7595
- const pyramidW = w * 0.35;
7596
- const labelStartX = pyramidW + pad + 16;
7597
- const labelW = w - labelStartX - pad;
7598
- const bandH = (usableH - gap * (nodes.length - 1)) / nodes.length;
7599
- const shadow = styleShadow(style);
7600
- return /* @__PURE__ */ jsx(
7601
- "svg",
7602
- {
7603
- className: "w-full h-full pointer-events-none",
7604
- viewBox: `0 0 ${w} ${h}`,
7605
- preserveAspectRatio: "xMidYMid meet",
7606
- style: { filter: shadow },
7607
- children: nodes.map((node, i) => {
7608
- const y = pad + i * (bandH + gap);
7609
- const col = colour(i, palette);
7610
- const topFrac = 0.3 + i / Math.max(nodes.length - 1, 1) * 0.7;
7611
- const segW = pyramidW * topFrac;
7612
- const segX = pad + (pyramidW - segW) / 2;
7613
- const fontSize = Math.max(7, Math.min(11, bandH * 0.35));
7614
- return /* @__PURE__ */ jsxs("g", { children: [
7615
- /* @__PURE__ */ jsx(
7616
- "rect",
7617
- {
7618
- x: segX,
7619
- y,
7620
- width: segW,
7621
- height: bandH,
7622
- rx: 2,
7623
- fill: col,
7624
- opacity: nodeOpacity(i, nodes.length, style)
7625
- }
7626
- ),
7627
- /* @__PURE__ */ jsx(
7628
- "line",
7629
- {
7630
- x1: segX + segW,
7631
- y1: y + bandH / 2,
7632
- x2: labelStartX - 4,
7633
- y2: y + bandH / 2,
7634
- stroke: col,
7635
- strokeWidth: 1,
7636
- opacity: 0.5,
7637
- strokeDasharray: "3,2"
7638
- }
7639
- ),
7640
- /* @__PURE__ */ jsx(
7641
- "rect",
7642
- {
7643
- x: labelStartX,
7644
- y: y + 2,
7645
- width: labelW,
7646
- height: bandH - 4,
7647
- rx: 3,
7648
- fill: col,
7649
- opacity: 0.1,
7650
- stroke: col,
7651
- strokeWidth: 1,
7652
- strokeOpacity: 0.25
7653
- }
7654
- ),
7655
- /* @__PURE__ */ jsx(
7656
- "text",
7657
- {
7658
- x: labelStartX + 8,
7659
- y: y + bandH / 2,
7660
- textAnchor: "start",
7661
- dominantBaseline: "central",
7662
- fill: col,
7663
- fontSize,
7664
- className: "pointer-events-none",
7665
- children: truncate(node.text, 30)
7666
- }
7667
- )
7668
- ] }, `${element.id}-pyrlist-${node.id}-${i}`);
7669
- })
7670
- }
7671
- );
7672
- }
7673
- function renderHorizontalPictureList(element, nodes, palette, style) {
7674
- const w = element.width;
7675
- const h = element.height;
7676
- const pad = 8;
7677
- const gap = 8;
7678
- const usableW = w - pad * 2;
7679
- const colW = (usableW - gap * (nodes.length - 1)) / nodes.length;
7680
- const usableH = h - pad * 2;
7681
- const circleR = Math.min(colW * 0.38, usableH * 0.28);
7682
- const shadow = styleShadow(style);
7683
- const sw = styleStroke(style);
7684
- return /* @__PURE__ */ jsx(
7685
- "svg",
7686
- {
7687
- className: "w-full h-full pointer-events-none",
7688
- viewBox: `0 0 ${w} ${h}`,
7689
- preserveAspectRatio: "xMidYMid meet",
7690
- style: { filter: shadow },
7691
- children: nodes.map((node, i) => {
7692
- const cx = pad + i * (colW + gap) + colW / 2;
7693
- const cy = pad + circleR + 4;
7694
- const col = colour(i, palette);
7695
- const labelY = cy + circleR + 10;
7696
- const fontSize = Math.max(7, Math.min(10, colW * 0.1));
7697
- return /* @__PURE__ */ jsxs("g", { children: [
7698
- /* @__PURE__ */ jsx(
7699
- "circle",
7700
- {
7701
- cx,
7702
- cy,
7703
- r: circleR,
7704
- fill: col,
7705
- opacity: nodeOpacity(i, nodes.length, style),
7706
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7707
- strokeWidth: sw
7708
- }
7709
- ),
7710
- /* @__PURE__ */ jsx(
7711
- "text",
7712
- {
7713
- x: cx,
7714
- y: cy,
7715
- textAnchor: "middle",
7716
- dominantBaseline: "central",
7717
- fill: "white",
7718
- fontSize: Math.max(8, circleR * 0.5),
7719
- fontWeight: "bold",
7720
- className: "pointer-events-none",
7721
- children: i + 1
7722
- }
7723
- ),
7724
- /* @__PURE__ */ jsx(
7725
- "text",
7726
- {
7727
- x: cx,
7728
- y: labelY,
7729
- textAnchor: "middle",
7730
- dominantBaseline: "hanging",
7731
- fill: col,
7732
- fontSize,
7733
- className: "pointer-events-none",
7734
- children: truncate(node.text, 15)
7735
- }
7736
- )
7737
- ] }, `${element.id}-hpic-${node.id}-${i}`);
7738
- })
7739
- }
7740
- );
7741
- }
7742
- function renderAccentProcess(element, nodes, palette, style) {
7743
- const w = element.width;
7744
- const h = element.height;
7745
- const pad = 8;
7746
- const arrowGap = 16;
7747
- const usableW = w - pad * 2;
7748
- const nodeW = (usableW - arrowGap * (nodes.length - 1)) / nodes.length;
7749
- const nodeH = h * 0.45;
7750
- const yMid = h / 2;
7751
- const circleR = Math.min(nodeW, nodeH) * 0.55;
7752
- const shadow = styleShadow(style);
7753
- const sw = styleStroke(style);
7754
- return /* @__PURE__ */ jsx(
7755
- "svg",
7756
- {
7757
- className: "w-full h-full pointer-events-none",
7758
- viewBox: `0 0 ${w} ${h}`,
7759
- preserveAspectRatio: "xMidYMid meet",
7760
- style: { filter: shadow },
7761
- children: nodes.map((node, i) => {
7762
- const x = pad + i * (nodeW + arrowGap);
7763
- const cx = x + nodeW / 2;
7764
- const col = colour(i, palette);
7765
- const fontSize = Math.max(7, Math.min(11, nodeW * 0.1));
7766
- return /* @__PURE__ */ jsxs("g", { children: [
7767
- /* @__PURE__ */ jsx("circle", { cx, cy: yMid, r: circleR, fill: col, opacity: 0.15 }),
7768
- /* @__PURE__ */ jsx(
7769
- "rect",
7770
- {
7771
- x,
7772
- y: yMid - nodeH / 2,
7773
- width: nodeW,
7774
- height: nodeH,
7775
- rx: 5,
7776
- fill: col,
7777
- opacity: nodeOpacity(i, nodes.length, style),
7778
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7779
- strokeWidth: sw
7780
- }
7781
- ),
7782
- /* @__PURE__ */ jsx(
7783
- SmartArtNodeText,
7784
- {
7785
- x: cx,
7786
- y: yMid,
7787
- text: truncate(node.text, 20),
7788
- fill: "white",
7789
- fontSize,
7790
- className: "pointer-events-none"
7791
- }
7792
- ),
7793
- i < nodes.length - 1 && /* @__PURE__ */ jsxs(Fragment, { children: [
7794
- /* @__PURE__ */ jsx(
7795
- "line",
7796
- {
7797
- x1: x + nodeW + 2,
7798
- y1: yMid,
7799
- x2: x + nodeW + arrowGap - 2,
7800
- y2: yMid,
7801
- stroke: "#94a3b8",
7802
- strokeWidth: 1.5,
7803
- opacity: 0.5
7804
- }
7805
- ),
7806
- /* @__PURE__ */ jsx(
7807
- "polygon",
7808
- {
7809
- points: `${x + nodeW + arrowGap - 6},${yMid - 3} ${x + nodeW + arrowGap - 2},${yMid} ${x + nodeW + arrowGap - 6},${yMid + 3}`,
7810
- fill: "#94a3b8",
7811
- opacity: 0.5
7812
- }
7813
- )
7814
- ] })
7815
- ] }, `${element.id}-accproc-${node.id}-${i}`);
7816
- })
7817
- }
7818
- );
7819
- }
7820
- function renderVerticalChevronList(element, nodes, palette, style) {
7821
- const w = element.width;
7822
- const h = element.height;
7823
- const pad = 8;
7824
- const gap = 2;
7825
- const usableW = w - pad * 2;
7826
- const usableH = h - pad * 2;
7827
- const itemH = (usableH - gap * (nodes.length - 1)) / nodes.length;
7828
- const chevDepth = Math.min(12, itemH * 0.3);
7829
- const shadow = styleShadow(style);
7830
- const sw = styleStroke(style);
7831
- return /* @__PURE__ */ jsx(
7832
- "svg",
7833
- {
7834
- className: "w-full h-full pointer-events-none",
7835
- viewBox: `0 0 ${w} ${h}`,
7836
- preserveAspectRatio: "xMidYMid meet",
7837
- style: { filter: shadow },
7838
- children: nodes.map((node, i) => {
7839
- const x = pad;
7840
- const y = pad + i * (itemH + gap);
7841
- const col = colour(i, palette);
7842
- const fontSize = Math.max(7, Math.min(11, itemH * 0.4));
7843
- const isFirst = i === 0;
7844
- const isLast = i === nodes.length - 1;
7845
- const points = isFirst ? [
7846
- `${x},${y}`,
7847
- `${x + usableW},${y}`,
7848
- `${x + usableW},${y + itemH - chevDepth}`,
7849
- `${x + usableW / 2},${y + itemH}`,
7850
- `${x},${y + itemH - chevDepth}`
7851
- ].join(" ") : isLast ? [
7852
- `${x},${y + chevDepth}`,
7853
- `${x + usableW / 2},${y}`,
7854
- `${x + usableW},${y + chevDepth}`,
7855
- `${x + usableW},${y + itemH}`,
7856
- `${x},${y + itemH}`
7857
- ].join(" ") : [
7858
- `${x},${y + chevDepth}`,
7859
- `${x + usableW / 2},${y}`,
7860
- `${x + usableW},${y + chevDepth}`,
7861
- `${x + usableW},${y + itemH - chevDepth}`,
7862
- `${x + usableW / 2},${y + itemH}`,
7863
- `${x},${y + itemH - chevDepth}`
7864
- ].join(" ");
7865
- return /* @__PURE__ */ jsxs("g", { children: [
7866
- /* @__PURE__ */ jsx(
7867
- "polygon",
7868
- {
7869
- points,
7870
- fill: col,
7871
- opacity: nodeOpacity(i, nodes.length, style),
7872
- stroke: sw > 0 ? "rgba(255,255,255,0.3)" : "none",
7873
- strokeWidth: sw
7874
- }
7875
- ),
7876
- /* @__PURE__ */ jsx(
7877
- SmartArtNodeText,
7878
- {
7879
- x: x + usableW / 2,
7880
- y: y + itemH / 2,
7881
- text: truncate(node.text, 30),
7882
- fill: "white",
7883
- fontSize,
7884
- className: "pointer-events-none"
7885
- }
7886
- )
7887
- ] }, `${element.id}-vchev-${node.id}-${i}`);
7888
- })
7889
- }
7890
- );
7891
- }
7892
6497
 
7893
6498
  // src/viewer/utils/pdf-builder-notes-builder.ts
7894
6499
  function buildNotesPdf(pages) {
@@ -7994,4 +6599,4 @@ function stopPreviewAnimation() {
7994
6599
  activePreview = null;
7995
6600
  }
7996
6601
 
7997
- export { ANIMATION_PRESET_OPTIONS, ARROW_SIZE_OPTIONS, CONNECTOR_ARROW_OPTIONS, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TABLE_COLUMNS, DEFAULT_TABLE_ROWS, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, EMU_PER_PX, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, STROKE_DASH_OPTIONS, SmartArtNodeText, THEME_COLOR_SWATCHES, TOOLBAR_SECTIONS, UNGROUPED_SECTION_ID, ZOOM_TO_SELECTION_PADDING, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildNotesPdf, buildPdfFromImageData, buildReactChartViewModel, buildSaveSlides, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, buildTree, chevronPoints, cloneHistorySnapshot2 as cloneHistorySnapshot, cn, colour, executeMediaCommand, fitFontSize, gearPath, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isConnectorOrLineElement, isImageTiled, layoutToCategory, nodeOpacity, partitionTemplateElements, renderAccentProcess, renderAlternatingFlow, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderDescendingProcess, renderGroupedList, renderHorizontalPictureList, renderMediaElement, renderPictureAccentList, renderPyramidList, renderStepDownProcess, renderTableElement, renderTextSegments, renderVectorShape, renderVerticalBlockList, renderVerticalChevronList, resolvePalette, resolveSmartArtDataPalette, resolveStyle, shouldRenderFallbackLabel, smartArtNodeGroupProps, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation, styleShadow, styleStroke, treeDepth, treeWidth, truncate, wrapChrome };
6602
+ export { ANIMATION_PRESET_OPTIONS, ARROW_SIZE_OPTIONS, CONNECTOR_ARROW_OPTIONS, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_FILL_COLOR, DEFAULT_FONT_FAMILY2 as DEFAULT_FONT_FAMILY, DEFAULT_STROKE_COLOR, DEFAULT_TABLE_COLUMNS, DEFAULT_TABLE_ROWS, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_FONT_SIZE, EMU_PER_PX, GRID_SIZE, HYPERLINK_COLOR, MIN_ELEMENT_SIZE, SHAPE_PRESETS, SHORTCUT_REFERENCE_ITEMS, SLIDE_NAV_THUMBNAIL_WIDTH, STROKE_DASH_OPTIONS, THEME_COLOR_SWATCHES, TOOLBAR_SECTIONS, UNGROUPED_SECTION_ID, ZOOM_TO_SELECTION_PADDING, build3DExtrusionData2 as build3DExtrusionData, buildLineGlowFilter, buildLineShadowCss, buildNotesPdf, buildPdfFromImageData, buildReactChartViewModel, buildTextBody3DSceneStyle2 as buildTextBody3DSceneStyle, cloneHistorySnapshot2 as cloneHistorySnapshot, cn, executeMediaCommand, getAnimationInitialStyle2 as getAnimationInitialStyle, getConnectorPathGeometry, getCropShapeClipPath, getDuotoneColors, getImageRenderStyle, getImageTilingStyle, getShapeVisualStyle, getTextLayoutStyle, getTextStyleForElement, getTextWarpStyle, hasDagDuotoneEffect, isConnectorOrLineElement, isImageTiled, renderChartElement, renderConnectorMarker, renderDagDuotoneSvgFilter, renderMediaElement, renderTableElement, renderTextSegments, renderVectorShape, shouldRenderFallbackLabel, startMotionPathPreview, startPreviewAnimation, stopPreviewAnimation };