| F1 |
Z-order / paint order wrong with global z-index sort |
generator.ts, inspector.ts (paintOrder) |
| F2 |
Shapes spill past slide (overflow:hidden ignored) |
converter.ts getBaseProperties clamp |
| F3 |
Formula object-fit:contain double-paint / overflow |
converter.ts letterbox; image-sizing-xml.ts |
| F4 |
Circle / flex glyph badges left-aligned |
inspector.ts canvas bake (flex-icon-badge) |
| F5 |
Complex table chrome vs native editability |
Native table + chrome shape; screenshot only if forced raster marker |
| F6 |
Title/subtitle under later opaque panels |
utils/occlusion-repair.ts (opt-in via repairTextOcclusions) |
| O1 |
Figure doesn’t fit in padded host |
forceObjectFitContain for figure hosts/ancestors + object-fit:contain |
| O2 |
Text metrics tighter than HTML (near-collisions) |
converter.ts line-height 1.2× / multi-line 1.35× + px lineSpacing |
| O3 |
Non-badge flex-centered icons drift |
Extended flex icon canvas bake (≤64px, FA, rounded square) |
| O4 |
Native tables lose CSS chrome / stretched rows |
Chrome shape + native table; clamp inflated rowH; host flex:none |
| O4b |
Table chrome missed HTML rounded card |
Full-host plate; true CSS radius; outer shadow; corner chips clip native table |
| O4c |
Large tables overflow host/slide |
Clamp to [data-pptx=table] host; scale rowH + fonts; slide-edge clamp |
| O4d |
Table cells glued / wrong fonts |
Capture CSS padding → tcPr mar*; slide-space font pt; stop forcing mar=0 |
| O4e |
box-shadow parse dropped card elevation |
Multi-layer / unitless 0 / optional spread in parseBoxShadowParts |
| O4f |
Overflow tables still don’t fit card |
Uniform host-fit: rowH + fonts + margins × s; renormalize to hostH |
| O5 |
Flex/grid empty wrapper mis-emission |
Skip transparent flex/grid wrappers with single text child |
| O6 |
Formulas are PNG, not editable |
MathML inject + MathML→OMML |
| O6b |
\hat{} accents float too high (limUpp not acc) |
normalizeMoverDotAccentForOmml + rewriteLimUppAccentsToOmmlAcc |
| O6c |
Formula too small vs plate |
Layout host=[data-pptx=formula]; scale sz from host height (no ×0.77 dampen) |
| O7 |
Charts not native editable |
data-chart-payload → pptxgen addChart |
| O8 |
Fidelity suppressions (font ×0.922, tracking ×1.35, effect caps, occlusion nudge) |
Uncapped in style.ts / converter.ts; occlusion opt-in default off |
| O9 |
Outline / flex-item chips: text wider than pill border (HTML≠PPT) |
isInlinePillBox covers outline+compact flex chips; slide-space insets; spatial pill font; fitPillFontSizeToBox; hollow fill |
| O10 |
space-between chip: text shifts left of outline (algn=r) |
Do not stamp/apply flexItemTextAlign on bordered/filled boxes; pills force center |
| O11 |
Multi-line body clips card bottom (lineSpacing taller than box) |
pxToSlidePointsY for px line-height; clamp N×spcPts to content box height |
| O12 |
Filled chips look too tight (padding collapsed) |
layoutPillBoxForText: grow box before shrink font; keep vertical padding air |
| O13 |
<br> callouts spill below box (extra PPT wraps) |
Exclude multi-line from pill/wrap:none; fitTextBoxToIntentionalLines widens/tallens |
| O14 |
Short flex chips (HNSW/LNS, w/h<2.2) missed pill path |
isInlinePillBox compact ≤48×220 path |
| O15 |
Chip grow overlapped flex-row neighbors |
layoutPillBoxForText sibling bounds + beginSlide HTML peers |
| O16 |
Negative letter-spacing became positive tracking (title wrap) |
parseLetterSpacing preserves CSS sign for OOXML spc |
Hi there. I like the project. Thanks for your efforts. Here are some issues that I saw:
generator.ts,inspector.ts(paintOrder)overflow:hiddenignored)converter.tsgetBasePropertiesclampobject-fit:containdouble-paint / overflowconverter.tsletterbox;image-sizing-xml.tsinspector.tscanvas bake (flex-icon-badge)utils/occlusion-repair.ts(opt-in viarepairTextOcclusions)forceObjectFitContainfor figure hosts/ancestors +object-fit:containconverter.tsline-height 1.2× / multi-line 1.35× + pxlineSpacingrowH; hostflex:none[data-pptx=table]host; scalerowH+ fonts; slide-edge clamptcPrmar*; slide-space font pt; stop forcing mar=0parseBoxShadowPartsrowH+ fonts + margins × s; renormalize to hostH\hat{}accents float too high (limUppnotacc)normalizeMoverDotAccentForOmml+rewriteLimUppAccentsToOmmlAcc[data-pptx=formula]; scaleszfrom host height (no ×0.77 dampen)data-chart-payload→ pptxgenaddChartstyle.ts/converter.ts; occlusion opt-in default offisInlinePillBoxcovers outline+compact flex chips; slide-space insets; spatial pill font;fitPillFontSizeToBox; hollow fillalgn=r)flexItemTextAlignon bordered/filled boxes; pills force centerpxToSlidePointsYfor px line-height; clamp N×spcPts to content box heightlayoutPillBoxForText: grow box before shrink font; keep vertical padding air<br>callouts spill below box (extra PPT wraps)wrap:none;fitTextBoxToIntentionalLineswidens/tallensisInlinePillBoxcompact ≤48×220 pathlayoutPillBoxForTextsibling bounds +beginSlideHTML peersletter-spacingbecame positive tracking (title wrap)parseLetterSpacingpreserves CSS sign for OOXMLspc