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.
Files changed (315) hide show
  1. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/PKG-INFO +1 -1
  2. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/context.tsx +1 -1
  3. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Renderer.tsx +1 -1
  4. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/load.ts +7 -0
  5. pptd_utils-2026.10.2.dev4/app/test/load.test.ts +17 -0
  6. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/main.py +7 -1
  7. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pyproject.toml +1 -1
  8. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/pptd.md +13 -0
  9. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/main.py +7 -1
  10. pptd_utils-2026.10.2.dev4/tests/element_ids.py +30 -0
  11. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.agents/reference/2026-09-19-implementation_plan.md +0 -0
  12. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.agents/reference/2026-09-22-canvas_editor_rewrite_plan.md +0 -0
  13. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.github/workflows/publish-pypi.yml +0 -0
  14. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.gitignore +0 -0
  15. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.ignore +0 -0
  16. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/.npmignore +0 -0
  17. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/AGENTS.md +0 -0
  18. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/README.md +0 -0
  19. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.agents/skills/react-grab/SKILL.md +0 -0
  20. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.gitignore +0 -0
  21. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/.oxlintrc.json +0 -0
  22. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/README.md +0 -0
  23. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/bun.lock +0 -0
  24. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/index.html +0 -0
  25. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/mockup.html +0 -0
  26. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/package-lock.json +0 -0
  27. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/package.json +0 -0
  28. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/public/favicon.svg +0 -0
  29. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/public/icons.svg +0 -0
  30. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Canvas.tsx +0 -0
  31. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/EditorOverlay.tsx +0 -0
  32. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/PropertyPanel.tsx +0 -0
  33. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Root.tsx +0 -0
  34. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/SlideList.tsx +0 -0
  35. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Stage.tsx +0 -0
  36. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/TextEditor.tsx +0 -0
  37. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/Tool.tsx +0 -0
  38. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/commands.ts +0 -0
  39. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/editorState.ts +0 -0
  40. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/helpers.ts +0 -0
  41. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/index.ts +0 -0
  42. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/pickers.tsx +0 -0
  43. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Deck/textEdit.ts +0 -0
  44. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/FileExplorer.tsx +0 -0
  45. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/FilePreviewer.tsx +0 -0
  46. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Pptd.tsx +0 -0
  47. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Content.tsx +0 -0
  48. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Layout.tsx +0 -0
  49. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/Root.tsx +0 -0
  50. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/context.tsx +0 -0
  51. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/helpers.ts +0 -0
  52. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Previewer/index.ts +0 -0
  53. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/SelectPopover.tsx +0 -0
  54. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Shell.tsx +0 -0
  55. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/Viewer.tsx +0 -0
  56. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/anim.ts +0 -0
  57. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/index.css +0 -0
  58. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/index.ts +0 -0
  59. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/main.tsx +0 -0
  60. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/Fill.tsx +0 -0
  61. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/RichText.tsx +0 -0
  62. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/charts/map.ts +0 -0
  63. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Chart.tsx +0 -0
  64. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Icon.tsx +0 -0
  65. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Image.tsx +0 -0
  66. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Line.tsx +0 -0
  67. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Shape.tsx +0 -0
  68. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Table.tsx +0 -0
  69. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/Text.tsx +0 -0
  70. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/fx.ts +0 -0
  71. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/render/elements/geometry.ts +0 -0
  72. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/select.ts +0 -0
  73. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/theme.ts +0 -0
  74. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/types.ts +0 -0
  75. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/src/useDragResize.ts +0 -0
  76. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/Deck.test.ts +0 -0
  77. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/FilePreviewer.test.ts +0 -0
  78. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/anim.test.ts +0 -0
  79. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/charts.test.ts +0 -0
  80. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/editor.test.ts +0 -0
  81. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/elements.test.ts +0 -0
  82. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/primitives.test.ts +0 -0
  83. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/resize.test.ts +0 -0
  84. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/smoke.test.ts +0 -0
  85. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/test/textEdit.test.ts +0 -0
  86. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.app.json +0 -0
  87. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.json +0 -0
  88. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/tsconfig.node.json +0 -0
  89. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/app/vite.config.ts +0 -0
  90. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/package.json +0 -0
  91. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/README.md +0 -0
  92. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/__init__.py +0 -0
  93. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/__main__.py +0 -0
  94. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/_shape_data.py +0 -0
  95. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/anim.py +0 -0
  96. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/charts_native.py +0 -0
  97. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/charts_raster.py +0 -0
  98. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/fonts.py +0 -0
  99. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/icons.py +0 -0
  100. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/images.py +0 -0
  101. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/lines.py +0 -0
  102. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/render_text.py +0 -0
  103. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/rich.py +0 -0
  104. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/shapes.py +0 -0
  105. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/slides_image.py +0 -0
  106. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/style.py +0 -0
  107. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/tables.py +0 -0
  108. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/pptd_utils/xmlutil.py +0 -0
  109. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/gen_example_manifest.py +0 -0
  110. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/set_release_version.py +0 -0
  111. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/scripts/test_release_version.py +0 -0
  112. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/SKILL.md +0 -0
  113. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/dji-pocket4.pptd +0 -0
  114. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/manifest.json +0 -0
  115. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/accessories.jpg +0 -0
  116. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/activetrack.jpg +0 -0
  117. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/day_street.jpg +0 -0
  118. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/film_dancer.jpg +0 -0
  119. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/hero_sunset.jpg +0 -0
  120. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/horse_dusk.jpg +0 -0
  121. {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
  122. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/inhand.jpg +0 -0
  123. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/mic3.jpg +0 -0
  124. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/night_vlog.jpg +0 -0
  125. {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
  126. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/osmoaudio.jpg +0 -0
  127. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/picnic.jpg +0 -0
  128. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/portrait.jpg +0 -0
  129. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/product_black.jpg +0 -0
  130. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/product_sq.jpg +0 -0
  131. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/slowmo_rollers.jpg +0 -0
  132. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/slowmo_skate.jpg +0 -0
  133. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/tripod_street.jpg +0 -0
  134. {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
  135. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/media/vlog_dusk.jpg +0 -0
  136. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/01_cover.page +0 -0
  137. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/02_highlights.page +0 -0
  138. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/03_toc.page +0 -0
  139. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/04_chapter1.page +0 -0
  140. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/05_cmos.page +0 -0
  141. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/06_dlog.page +0 -0
  142. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/07_slowmo.page +0 -0
  143. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/08_zoom.page +0 -0
  144. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/09_chapter2.page +0 -0
  145. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/10_tracking.page +0 -0
  146. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/11_control.page +0 -0
  147. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/12_gimbal.page +0 -0
  148. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/13_chapter3.page +0 -0
  149. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/14_audio.page +0 -0
  150. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/15_battery.page +0 -0
  151. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/16_accessories.page +0 -0
  152. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/17_specs.page +0 -0
  153. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/dji-pocket4/pages/18_price.page +0 -0
  154. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/manifest.json +0 -0
  155. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/media/blocks.svg +0 -0
  156. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/01_shapes.page +0 -0
  157. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/02_lines.page +0 -0
  158. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/03_image_icon.page +0 -0
  159. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/04_table.page +0 -0
  160. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/05_chart_cartesian.page +0 -0
  161. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/06_chart_xy.page +0 -0
  162. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/pages/07_chart_misc.page +0 -0
  163. {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
  164. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/torture/torture.pptd +0 -0
  165. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/xiaomi-yu7-ppt-animation/manifest.json +0 -0
  166. {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
  167. {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
  168. {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
  169. {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
  170. {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
  171. {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
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {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
  178. {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
  179. {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
  180. {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
  181. {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
  182. {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
  183. {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
  184. {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
  185. {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
  186. {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
  187. {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
  188. {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
  189. {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
  190. {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
  191. {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
  192. {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
  193. {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
  194. {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
  195. {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
  196. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/manifest.json +0 -0
  197. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_cabin.png +0 -0
  198. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_cover.jpg +0 -0
  199. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_data.png +0 -0
  200. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_exterior.jpg +0 -0
  201. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_final.jpg +0 -0
  202. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_had.jpg +0 -0
  203. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_performance.jpg +0 -0
  204. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/media/bg_safety.jpg +0 -0
  205. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/1_cover.page +0 -0
  206. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/2_overview.page +0 -0
  207. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/3_exterior.page +0 -0
  208. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/4_performance.page +0 -0
  209. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/5_cabin.page +0 -0
  210. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/6_had.page +0 -0
  211. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/pages/7_safety.page +0 -0
  212. {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
  213. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/example/yu7-ppt/yu7.pptd +0 -0
  214. {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
  215. {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
  216. {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
  217. {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
  218. {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
  219. {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
  220. {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
  221. {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
  222. {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
  223. {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
  224. {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
  225. {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
  226. {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
  227. {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
  228. {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
  229. {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
  230. {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
  231. {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
  232. {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
  233. {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
  234. {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
  235. {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
  236. {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
  237. {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
  238. {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
  239. {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
  240. {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
  241. {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
  242. {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
  243. {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
  244. {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
  245. {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
  246. {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
  247. {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
  248. {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
  249. {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
  250. {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
  251. {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
  252. {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
  253. {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
  254. {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
  255. {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
  256. {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
  257. {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
  258. {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
  259. {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
  260. {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
  261. {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
  262. {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
  263. {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
  264. {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
  265. {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
  266. {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
  267. {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
  268. {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
  269. {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
  270. {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
  271. {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
  272. {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
  273. {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
  274. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/fonts.md +0 -0
  275. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/general-poster.md +0 -0
  276. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/shapes.md +0 -0
  277. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/academic-research.md +0 -0
  278. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/analysis-decision.md +0 -0
  279. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/brand-creative.md +0 -0
  280. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/business-plan.md +0 -0
  281. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/education-training.md +0 -0
  282. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/management-report.md +0 -0
  283. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories/tech-engineering.md +0 -0
  284. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/reference/slides_categories.md +0 -0
  285. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/README.md +0 -0
  286. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/__init__.py +0 -0
  287. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/__main__.py +0 -0
  288. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/_shape_data.py +0 -0
  289. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/anim.py +0 -0
  290. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/charts_native.py +0 -0
  291. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/charts_raster.py +0 -0
  292. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/fonts.py +0 -0
  293. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/icons.py +0 -0
  294. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/images.py +0 -0
  295. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/lines.py +0 -0
  296. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/render_text.py +0 -0
  297. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/rich.py +0 -0
  298. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/shapes.py +0 -0
  299. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/slides_image.py +0 -0
  300. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/style.py +0 -0
  301. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/tables.py +0 -0
  302. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/skills/cowork-ppt/scripts/pptd_utils/xmlutil.py +0 -0
  303. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/full.pptd +0 -0
  304. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/manifest.json +0 -0
  305. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/media/avatar.png +0 -0
  306. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/media/cover.jpg +0 -0
  307. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/1_rich.page +0 -0
  308. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/2_shapes_lines.page +0 -0
  309. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/3_table.page +0 -0
  310. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/4_chart_native.page +0 -0
  311. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/5_chart_native2.page +0 -0
  312. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/6_chart_raster.page +0 -0
  313. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/fixtures/full/pages/7_media_anim.page +0 -0
  314. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/tests/run.py +0 -0
  315. {pptd_utils-2026.10.2.dev3 → pptd_utils-2026.10.2.dev4}/theme.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: pptd-utils
3
- Version: 2026.10.2.dev3
3
+ Version: 2026.10.2.dev4
4
4
  Summary: Offline PPTD v2 toolkit for converting editable presentations to PowerPoint
5
5
  Author: binaryify
6
6
  License: MIT
@@ -66,5 +66,5 @@ function useDeckCtx(): DeckCtx {
66
66
  return ctx
67
67
  }
68
68
 
69
- export type { DeckCtx, DeckFeatures }
69
+ export type { DeckCtx }
70
70
  export { Ctx, useDeckCtx }
@@ -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.dev3"
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
@@ -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')