| 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.tsgetBaseProperties 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