pptd-utils 2026.10.2.dev3__tar.gz → 2026.10.2.dev4__tar.gz
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.
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/PKG-INFO +1 -1
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/context.tsx +1 -1
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Renderer.tsx +1 -1
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/load.ts +7 -0
- pptd_utils-2026.10.2.dev4/app/test/load.test.ts +17 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/main.py +7 -1
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pyproject.toml +1 -1
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/pptd.md +13 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/main.py +7 -1
- pptd_utils-2026.10.2.dev4/tests/element_ids.py +30 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.agents/reference/2026-09-19-implementation_plan.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.agents/reference/2026-09-22-canvas_editor_rewrite_plan.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.github/workflows/publish-pypi.yml +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.gitignore +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.ignore +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.npmignore +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/AGENTS.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/README.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.agents/skills/react-grab/SKILL.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.gitignore +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.oxlintrc.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/README.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/bun.lock +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/index.html +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/mockup.html +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/package-lock.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/package.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/public/favicon.svg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/public/icons.svg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Canvas.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/EditorOverlay.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/PropertyPanel.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Root.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/SlideList.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Stage.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/TextEditor.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Tool.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/commands.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/editorState.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/helpers.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/index.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/pickers.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/textEdit.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/FileExplorer.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/FilePreviewer.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Pptd.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Content.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Layout.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Root.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/context.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/helpers.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/index.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/SelectPopover.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Shell.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Viewer.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/anim.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/index.css +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/index.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/main.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/Fill.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/RichText.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/charts/map.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Chart.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Icon.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Image.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Line.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Shape.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Table.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Text.tsx +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/fx.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/geometry.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/select.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/theme.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/types.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/useDragResize.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/Deck.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/FilePreviewer.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/anim.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/charts.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/editor.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/elements.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/primitives.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/resize.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/smoke.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/textEdit.test.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.app.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.node.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/vite.config.ts +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/package.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/README.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/__init__.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/__main__.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/_shape_data.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/anim.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/charts_native.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/charts_raster.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/fonts.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/icons.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/images.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/lines.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/render_text.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/rich.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/shapes.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/slides_image.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/style.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/tables.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/xmlutil.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/gen_example_manifest.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/set_release_version.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/test_release_version.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/SKILL.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/dji-pocket4.pptd +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/manifest.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/accessories.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/activetrack.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/day_street.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/film_dancer.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/hero_sunset.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/horse_dusk.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/horse_dusk_bl.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/inhand.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/mic3.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/night_vlog.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/night_vlog_bl.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/osmoaudio.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/picnic.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/portrait.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/product_black.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/product_sq.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/slowmo_rollers.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/slowmo_skate.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/tripod_street.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/tripod_street_bl.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/vlog_dusk.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/01_cover.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/02_highlights.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/03_toc.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/04_chapter1.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/05_cmos.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/06_dlog.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/07_slowmo.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/08_zoom.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/09_chapter2.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/10_tracking.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/11_control.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/12_gimbal.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/13_chapter3.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/14_audio.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/15_battery.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/16_accessories.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/17_specs.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/18_price.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/manifest.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/media/blocks.svg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/01_shapes.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/02_lines.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/03_image_icon.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/04_table.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/05_chart_cartesian.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/06_chart_xy.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/07_chart_misc.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/08_chart_radar_mix.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/torture.pptd +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/manifest.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/cabin-detail.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/cabin.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/charging.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/design-detail.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/design-front.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/design-side.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/hero.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/performance.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/tech-detail.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/tech.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-cabin-2.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-cabin-3.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-cabin-4.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-cabin-5.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-cabin.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-detail.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-exterior.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-hero.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-performance.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-tech-2.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/media/yu7-tech.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/01_cover.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/02_position.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/03_design.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/04_cabin.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/05_performance.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/06_range.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/07_intelligence.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/pages/08_summary.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/xiaomi-yu7.pptd +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/manifest.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_cabin.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_cover.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_data.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_exterior.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_final.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_had.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_performance.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_safety.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/1_cover.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/2_overview.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/3_exterior.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/4_performance.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/5_cabin.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/6_had.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/7_safety.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/8_space_final.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/yu7.pptd +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/01/en/dusk-violet-consulting.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/02/en/indigo-due-diligence.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/03/en/pine-green-strategy.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/04/en/red-black-business.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/05/en/moss-green-transformation.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/01_strategy/06/en/map-strategy.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/01/en/honey-orange-memo.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/02/en/lake-blue-memo.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/03/en/xuan-paper-annual.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/04/en/lead-gray-quarterly.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/05/en/ink-green-market-trends.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/02_business/06/en/orange-tech.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/01/en/sky-blue-wayfinding.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/02/en/mist-blue-travelogue.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/03/en/warm-jade-annual-report.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/04/en/color-stripes-documentary.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/05/en/moon-white-imagery.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/03_work/06/en/red-white-business.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/01/en/cream-collage.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/02/en/silk-yellow-magazine.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/03/en/pine-soot-pictorial.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/04/en/gold-orange-type-journal.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/05/en/silver-gray-luxury-magazine.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/04_promotion/06/en/fresh-brand.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/01/en/pink-purple-diagnosis.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/02/en/teal-green-academic-defense.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/03/en/pastel-derivation.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/04/en/paper-white-courseware.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/05/en/blue-line-courseware.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/05_academic/06/en/dark-themed-data.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/blue-line-courseware/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/deep-blue-atlas/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/paper-white-courseware/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/pastel-derivation/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/teal-green-academic-defense/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/academic/wine-red-data/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/apricot-white-brief/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/indigo-due-diligence/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/marine-blue-research/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/moss-green-transformation/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/pine-green-strategy/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/consulting/red-black-growth/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/black-gold-ledger/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/ebony-ledger/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/honey-orange-memo/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/lake-blue-memo/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/prospect-annual/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/finance/rice-paper-annual/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/aqua-charity-report/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/cream-collage/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/pine-soot-pictorial/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/silk-yellow-magazine/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/silver-gray-luxury-magazine/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/promotion/travel-green-handbook/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/blue-flame-brand/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/electric-violet-business/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/moon-white-imagery/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/sky-blue-wayfinding/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/warm-clay-works/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/design_system/work/warm-jade-annual-report/design.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/fonts.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/general-poster.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/shapes.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/academic-research.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/analysis-decision.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/brand-creative.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/business-plan.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/education-training.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/management-report.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/tech-engineering.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/README.md +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/__init__.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/__main__.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/_shape_data.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/anim.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/charts_native.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/charts_raster.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/fonts.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/icons.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/images.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/lines.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/render_text.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/rich.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/shapes.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/slides_image.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/style.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/tables.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/xmlutil.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/full.pptd +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/manifest.json +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/media/avatar.png +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/media/cover.jpg +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/1_rich.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/2_shapes_lines.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/3_table.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/4_chart_native.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/5_chart_native2.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/6_chart_raster.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/7_media_anim.page +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/run.py +0 -0
- {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/theme.md +0 -0
|
@@ -59,7 +59,7 @@ export function PageView({ page, slide, onSelect, static: isStatic = false, edit
|
|
|
59
59
|
{page.elements.map(el => {
|
|
60
60
|
const anim = active.get(el.elementId)
|
|
61
61
|
const hidden = groups.length > 0 && !visible.has(el.elementId) && page.animations?.some(a => a.elementId === el.elementId)
|
|
62
|
-
if (editingId === el.elementId) return null // editor overlay replaces it
|
|
62
|
+
if (editingId !== undefined && editingId === el.elementId) return null // editor overlay replaces it
|
|
63
63
|
return <div
|
|
64
64
|
key={el.elementId}
|
|
65
65
|
className={act ? 'cursor-crosshair' : undefined}
|
|
@@ -90,6 +90,13 @@ export async function loadProject(src: FileSource): Promise<LoadedProject> {
|
|
|
90
90
|
for (const rel of pptd.pages) {
|
|
91
91
|
const page = yamlLoad(await src.read(base + rel)) as Page
|
|
92
92
|
if (!page || !Array.isArray(page.elements)) throw new Error(`invalid page: ${rel}`)
|
|
93
|
+
const ids = new Set<string>()
|
|
94
|
+
for (const [index, el] of page.elements.entries()) {
|
|
95
|
+
if (typeof el?.elementId !== 'string' || !el.elementId.trim())
|
|
96
|
+
throw new Error(`${rel}: element ${index + 1}: elementId must be a nonempty string`)
|
|
97
|
+
if (ids.has(el.elementId)) throw new Error(`${rel}: duplicate elementId: ${el.elementId}`)
|
|
98
|
+
ids.add(el.elementId)
|
|
99
|
+
}
|
|
93
100
|
pages.push(resolveSrc(page, base, urlOf) as Page)
|
|
94
101
|
pagePaths.push(base + rel)
|
|
95
102
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { expect, test } from 'bun:test'
|
|
2
|
+
import { loadProject } from '../src/load'
|
|
3
|
+
|
|
4
|
+
function load(elements: unknown[]) {
|
|
5
|
+
const files: Record<string, string> = {
|
|
6
|
+
'deck.pptd': JSON.stringify({ pages: ['slide.page'] }),
|
|
7
|
+
'slide.page': JSON.stringify({ elements }),
|
|
8
|
+
}
|
|
9
|
+
return loadProject({ list: async () => Object.keys(files), read: async p => files[p], url: p => p })
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
test('requires nonempty string element IDs, unique per page', async () => {
|
|
13
|
+
for (const elementId of [undefined, null, '', ' ', 42])
|
|
14
|
+
await expect(load([{ elementId }])).rejects.toThrow('elementId must be a nonempty string')
|
|
15
|
+
await expect(load([{ elementId: 'title' }, { elementId: 'title' }])).rejects.toThrow('duplicate elementId: title')
|
|
16
|
+
expect((await load([{ elementId: 'title' }, { elementId: 'body' }])).pages).toHaveLength(1)
|
|
17
|
+
})
|
|
@@ -119,7 +119,13 @@ def build(pptd_path, out_path):
|
|
|
119
119
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
120
120
|
_set_background(slide, page.get("background"), theme, root, prs)
|
|
121
121
|
shape_ids = {}
|
|
122
|
-
for el in page.get("elements", []):
|
|
122
|
+
for index, el in enumerate(page.get("elements", []), 1):
|
|
123
|
+
element_id = el.get("elementId") if isinstance(el, dict) else None
|
|
124
|
+
if not isinstance(element_id, str) or not element_id.strip():
|
|
125
|
+
raise ValueError(f"{page_rel}: element {index}: elementId must be a nonempty string")
|
|
126
|
+
if element_id in shape_ids:
|
|
127
|
+
raise ValueError(f"{page_rel}: duplicate elementId: {element_id}")
|
|
128
|
+
shape_ids[element_id] = None
|
|
123
129
|
shape = _render_element(slide, el, theme, root)
|
|
124
130
|
if shape is not None:
|
|
125
131
|
shape_ids[el.get("elementId")] = (
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pptd-utils"
|
|
7
|
-
version = "2026.10.2.
|
|
7
|
+
version = "2026.10.2.dev4"
|
|
8
8
|
description = "Offline PPTD v2 toolkit for converting editable presentations to PowerPoint"
|
|
9
9
|
readme = "pptd_utils/README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
@@ -508,6 +508,19 @@ elements:
|
|
|
508
508
|
|
|
509
509
|
Common properties of all elements.
|
|
510
510
|
|
|
511
|
+
**Every element must declare `elementId`: a nonempty string, unique within its page.**
|
|
512
|
+
This is required for every element type, even without animations. IDs may repeat
|
|
513
|
+
across different pages. Missing, blank, non-string, or duplicate IDs are invalid;
|
|
514
|
+
the local app loader and `pptd_utils` exporter reject them. IDs are not generated
|
|
515
|
+
automatically.
|
|
516
|
+
|
|
517
|
+
```yaml
|
|
518
|
+
- elementId: title-1
|
|
519
|
+
elementType: text
|
|
520
|
+
bounds: [100, 50, 760, 80]
|
|
521
|
+
content: {text: Annual Work Summary}
|
|
522
|
+
```
|
|
523
|
+
|
|
511
524
|
```ts
|
|
512
525
|
interface ElementBase {
|
|
513
526
|
elementId: string; // constraint: unique within the same page; unique element ID
|
{pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/main.py
RENAMED
|
@@ -119,7 +119,13 @@ def build(pptd_path, out_path):
|
|
|
119
119
|
slide = prs.slides.add_slide(prs.slide_layouts[6])
|
|
120
120
|
_set_background(slide, page.get("background"), theme, root, prs)
|
|
121
121
|
shape_ids = {}
|
|
122
|
-
for el in page.get("elements", []):
|
|
122
|
+
for index, el in enumerate(page.get("elements", []), 1):
|
|
123
|
+
element_id = el.get("elementId") if isinstance(el, dict) else None
|
|
124
|
+
if not isinstance(element_id, str) or not element_id.strip():
|
|
125
|
+
raise ValueError(f"{page_rel}: element {index}: elementId must be a nonempty string")
|
|
126
|
+
if element_id in shape_ids:
|
|
127
|
+
raise ValueError(f"{page_rel}: duplicate elementId: {element_id}")
|
|
128
|
+
shape_ids[element_id] = None
|
|
123
129
|
shape = _render_element(slide, el, theme, root)
|
|
124
130
|
if shape is not None:
|
|
125
131
|
shape_ids[el.get("elementId")] = (
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Run: python3 tests/element_ids.py"""
|
|
2
|
+
import sys
|
|
3
|
+
import tempfile
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
7
|
+
from pptd_utils.main import build
|
|
8
|
+
import yaml
|
|
9
|
+
|
|
10
|
+
with tempfile.TemporaryDirectory() as tmp:
|
|
11
|
+
root = Path(tmp)
|
|
12
|
+
manifest = root / 'deck.pptd'
|
|
13
|
+
manifest.write_text(yaml.safe_dump({'version': 'v2', 'size': [960, 540], 'pages': ['slide.page']}))
|
|
14
|
+
for ids, error in [([None], 'nonempty string'), ([''], 'nonempty string'),
|
|
15
|
+
([' '], 'nonempty string'), ([42], 'nonempty string'),
|
|
16
|
+
(['title', 'title'], 'duplicate elementId')]:
|
|
17
|
+
elements = [{'elementType': 'text', 'bounds': [0, 0, 100, 40],
|
|
18
|
+
'content': {'text': 'Test'}, 'elementId': i} for i in ids]
|
|
19
|
+
(root / 'slide.page').write_text(yaml.safe_dump({'elements': elements}))
|
|
20
|
+
try:
|
|
21
|
+
build(manifest, root / 'deck.pptx')
|
|
22
|
+
except ValueError as exc:
|
|
23
|
+
assert error in str(exc), str(exc)
|
|
24
|
+
else:
|
|
25
|
+
raise AssertionError(f'accepted invalid IDs: {ids}')
|
|
26
|
+
assert not (root / 'deck.pptx').exists()
|
|
27
|
+
elements[1]['elementId'] = 'body'
|
|
28
|
+
(root / 'slide.page').write_text(yaml.safe_dump({'elements': elements}))
|
|
29
|
+
assert build(manifest, root / 'deck.pptx')[0] == 1
|
|
30
|
+
print('element ID checks passed')
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.agents/skills/react-grab/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|