@shbernal/ts-pptx 4.1.0 → 4.2.0

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 (139) hide show
  1. package/README.md +11 -11
  2. package/dist/anim-presets-Qbgh8uut.js +55 -0
  3. package/dist/anim-presets-Qbgh8uut.js.map +1 -0
  4. package/dist/{autopage-D4kyVp11.js → autopage-DqZ37VpL.js} +11 -12
  5. package/dist/autopage-DqZ37VpL.js.map +1 -0
  6. package/dist/{binary-string-CKVAYI3M.js → binary-string-Ba8VM3b9.js} +3 -4
  7. package/dist/binary-string-Ba8VM3b9.js.map +1 -0
  8. package/dist/{body-insets-kVHmjGc6.js → body-insets-BDHymJvz.js} +7 -9
  9. package/dist/body-insets-BDHymJvz.js.map +1 -0
  10. package/dist/browser.d.ts +24 -16
  11. package/dist/browser.d.ts.map +1 -1
  12. package/dist/browser.js +19 -19
  13. package/dist/browser.js.map +1 -1
  14. package/dist/{image-size-DwDbakcl.js → chart-metadata-CwiTTcJq.js} +576 -538
  15. package/dist/chart-metadata-CwiTTcJq.js.map +1 -0
  16. package/dist/{clip-DHDlnHUq.d.ts → clip-ISfCMtWA.d.ts} +6 -10
  17. package/dist/clip-ISfCMtWA.d.ts.map +1 -0
  18. package/dist/{notes-BcT571R4.js → comments-CKIZYRbZ.js} +517 -389
  19. package/dist/comments-CKIZYRbZ.js.map +1 -0
  20. package/dist/{diagnostics-DiMmBU8P.d.ts → diagnostics-MoA4MBq5.d.ts} +52 -50
  21. package/dist/diagnostics-MoA4MBq5.d.ts.map +1 -0
  22. package/dist/{embedded-fonts-CI_YGW2d.d.ts → embedded-fonts-U7HIIhPO.d.ts} +4 -6
  23. package/dist/embedded-fonts-U7HIIhPO.d.ts.map +1 -0
  24. package/dist/{entry-compose-6hF9aTmT.d.ts → entry-compose-CiakSt-f.d.ts} +53 -74
  25. package/dist/entry-compose-CiakSt-f.d.ts.map +1 -0
  26. package/dist/{errors-Da2nXCJm.js → entry-errors-JMthgJ2g.js} +41 -25
  27. package/dist/entry-errors-JMthgJ2g.js.map +1 -0
  28. package/dist/{table-cell-margins-PDshga8T.js → enums-BP9wsb9Q.js} +42 -45
  29. package/dist/enums-BP9wsb9Q.js.map +1 -0
  30. package/dist/{enums-DQRpVOLh.d.ts → enums-PcXr3o3J.d.ts} +11 -12
  31. package/dist/{enums-DQRpVOLh.d.ts.map → enums-PcXr3o3J.d.ts.map} +1 -1
  32. package/dist/families.d.ts +24 -26
  33. package/dist/families.d.ts.map +1 -1
  34. package/dist/families.js +3 -4
  35. package/dist/{fit-CcXbg__l.js → fit-Bpmzep6O.js} +60 -52
  36. package/dist/fit-Bpmzep6O.js.map +1 -0
  37. package/dist/{font-metrics-CBGmhLo0.d.ts → font-metrics-DTppw4t3.d.ts} +61 -37
  38. package/dist/font-metrics-DTppw4t3.d.ts.map +1 -0
  39. package/dist/{grid-9B2w5EaY.js → grid-DUIMxjfl.js} +23 -26
  40. package/dist/grid-DUIMxjfl.js.map +1 -0
  41. package/dist/{html-dom-DvJmuHt2.js → html-dom-LZCgntnJ.js} +42 -43
  42. package/dist/html-dom-LZCgntnJ.js.map +1 -0
  43. package/dist/html.d.ts +53 -9
  44. package/dist/html.d.ts.map +1 -1
  45. package/dist/html.js +12 -13
  46. package/dist/html.js.map +1 -1
  47. package/dist/index.d.ts +21 -13
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +15 -15
  50. package/dist/index.js.map +1 -1
  51. package/dist/inspect.d.ts +14 -16
  52. package/dist/inspect.d.ts.map +1 -1
  53. package/dist/inspect.js +18 -19
  54. package/dist/inspect.js.map +1 -1
  55. package/dist/{text-anchor-BgLPbwbL.js → lock-attrs-CSQnFDHP.js} +62 -12
  56. package/dist/lock-attrs-CSQnFDHP.js.map +1 -0
  57. package/dist/math.d.ts +2 -4
  58. package/dist/math.d.ts.map +1 -1
  59. package/dist/math.js +12 -13
  60. package/dist/math.js.map +1 -1
  61. package/dist/measure.d.ts +23 -12
  62. package/dist/measure.d.ts.map +1 -1
  63. package/dist/measure.js +3 -3
  64. package/dist/node.d.ts +21 -13
  65. package/dist/node.d.ts.map +1 -1
  66. package/dist/node.js +12 -12
  67. package/dist/node.js.map +1 -1
  68. package/dist/{options-internal-WqgMf720.js → options-internal-BWgmLPdx.js} +4 -5
  69. package/dist/options-internal-BWgmLPdx.js.map +1 -0
  70. package/dist/{package-KoEgVwII.d.ts → package-CANBWuSm.d.ts} +4 -12
  71. package/dist/package-CANBWuSm.d.ts.map +1 -0
  72. package/dist/{playbtn-CUqQdoDf.js → playbtn-BQZFJir9.js} +4 -5
  73. package/dist/playbtn-BQZFJir9.js.map +1 -0
  74. package/dist/{pres-BA9_lJbY.d.ts → pres-BkEkUAEM.d.ts} +383 -230
  75. package/dist/pres-BkEkUAEM.d.ts.map +1 -0
  76. package/dist/{presentation-Cyl74rq2.js → presentation-4Ggq0_Xa.js} +408 -288
  77. package/dist/presentation-4Ggq0_Xa.js.map +1 -0
  78. package/dist/{presentation-types-B3VQH4Bz.d.ts → presentation-types-BgnZR-0a.d.ts} +1104 -457
  79. package/dist/presentation-types-BgnZR-0a.d.ts.map +1 -0
  80. package/dist/read.d.ts +18 -13
  81. package/dist/read.d.ts.map +1 -1
  82. package/dist/read.js +4 -4
  83. package/dist/script.d.ts +116 -65
  84. package/dist/script.d.ts.map +1 -1
  85. package/dist/script.js +2697 -777
  86. package/dist/script.js.map +1 -1
  87. package/dist/{shapes-BcyFdZpp.js → shapes-CAPOjU0Q.js} +1556 -487
  88. package/dist/shapes-CAPOjU0Q.js.map +1 -0
  89. package/dist/{slide-BqPtyKmb.d.ts → slide-BmT4kMoO.d.ts} +94 -86
  90. package/dist/slide-BmT4kMoO.d.ts.map +1 -0
  91. package/dist/{slide-size-BalTjFuv.js → slide-size-SkScz1ig.js} +2 -3
  92. package/dist/{slide-size-BalTjFuv.js.map → slide-size-SkScz1ig.js.map} +1 -1
  93. package/dist/{table-dom-CVbvUfgh.js → table-dom-BYga4FYY.js} +3 -4
  94. package/dist/{table-dom-CVbvUfgh.js.map → table-dom-BYga4FYY.js.map} +1 -1
  95. package/dist/{text-BvFFMMFQ.js → text-CU08xJGs.js} +365 -318
  96. package/dist/text-CU08xJGs.js.map +1 -0
  97. package/dist/{transition-speed-kUEWDWTx.js → transition-speed-CNJ0fSpQ.js} +2 -3
  98. package/dist/{transition-speed-kUEWDWTx.js.map → transition-speed-CNJ0fSpQ.js.map} +1 -1
  99. package/dist/{units-internal-DFcUYjh3.js → units-internal-BR3a4cIi.js} +26 -29
  100. package/dist/units-internal-BR3a4cIi.js.map +1 -0
  101. package/dist/{zip-CYZ0F6BV.js → zip-7JTh61LX.js} +8 -10
  102. package/dist/zip-7JTh61LX.js.map +1 -0
  103. package/dist/{zip-CTll_dr0.d.ts → zip-uUjs9Cqx.d.ts} +4 -6
  104. package/dist/zip-uUjs9Cqx.d.ts.map +1 -0
  105. package/dist/zip.d.ts +3 -3
  106. package/dist/zip.js +3 -3
  107. package/dist/{zoom-BoNyOlPm.js → zoom-CSSeOwM8.js} +1153 -583
  108. package/dist/zoom-CSSeOwM8.js.map +1 -0
  109. package/package.json +20 -21
  110. package/skills/{ts-pptx-upstream → pptx-ts-upstream}/SKILL.md +27 -74
  111. package/dist/autopage-D4kyVp11.js.map +0 -1
  112. package/dist/binary-string-CKVAYI3M.js.map +0 -1
  113. package/dist/body-insets-kVHmjGc6.js.map +0 -1
  114. package/dist/clip-DHDlnHUq.d.ts.map +0 -1
  115. package/dist/diagnostics-DiMmBU8P.d.ts.map +0 -1
  116. package/dist/embedded-fonts-CI_YGW2d.d.ts.map +0 -1
  117. package/dist/entry-compose-6hF9aTmT.d.ts.map +0 -1
  118. package/dist/errors-Da2nXCJm.js.map +0 -1
  119. package/dist/fit-CcXbg__l.js.map +0 -1
  120. package/dist/font-metrics-CBGmhLo0.d.ts.map +0 -1
  121. package/dist/grid-9B2w5EaY.js.map +0 -1
  122. package/dist/html-dom-DvJmuHt2.js.map +0 -1
  123. package/dist/image-size-DwDbakcl.js.map +0 -1
  124. package/dist/notes-BcT571R4.js.map +0 -1
  125. package/dist/options-internal-WqgMf720.js.map +0 -1
  126. package/dist/package-KoEgVwII.d.ts.map +0 -1
  127. package/dist/playbtn-CUqQdoDf.js.map +0 -1
  128. package/dist/pres-BA9_lJbY.d.ts.map +0 -1
  129. package/dist/presentation-Cyl74rq2.js.map +0 -1
  130. package/dist/presentation-types-B3VQH4Bz.d.ts.map +0 -1
  131. package/dist/shapes-BcyFdZpp.js.map +0 -1
  132. package/dist/slide-BqPtyKmb.d.ts.map +0 -1
  133. package/dist/table-cell-margins-PDshga8T.js.map +0 -1
  134. package/dist/text-BvFFMMFQ.js.map +0 -1
  135. package/dist/text-anchor-BgLPbwbL.js.map +0 -1
  136. package/dist/units-internal-DFcUYjh3.js.map +0 -1
  137. package/dist/zip-CTll_dr0.d.ts.map +0 -1
  138. package/dist/zip-CYZ0F6BV.js.map +0 -1
  139. package/dist/zoom-BoNyOlPm.js.map +0 -1
package/dist/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","names":[],"sources":["../src/runtime/node.ts","../src/node.ts"],"sourcesContent":["import { Buffer } from 'node:buffer'\nimport fs from 'node:fs/promises'\nimport { MediaError } from '../errors.js'\nimport type { SlideRelMedia } from '../types/internal.js'\nimport type { RuntimeAdapter } from './types.js'\nimport { fetchFontBytes, fetchMediaBase64, isRemote, placeholderSvgPreview } from './fetch-media.js'\n\nexport function createNodeRuntime(): RuntimeAdapter {\n\treturn {\n\t\twriteFileOutputType: 'nodebuffer',\n\t\tloadMedia,\n\t\tcreateSvgPngPreview: placeholderSvgPreview,\n\t\twriteFile,\n\t\tloadFontData,\n\t}\n}\n\nasync function loadFontData(source: string): Promise<Uint8Array> {\n\tif (isRemote(source)) return await fetchFontBytes(source)\n\ttry {\n\t\treturn new Uint8Array(await fs.readFile(source))\n\t} catch (ex) {\n\t\tthrow new MediaError('font/read-failed', `Unable to read font file: \"${source}\"\\n${String(ex)}`, {\n\t\t\tcause: ex,\n\t\t})\n\t}\n}\n\nasync function loadMedia(rel: SlideRelMedia & { path: string }): Promise<string> {\n\tif (isRemote(rel.path)) return await fetchMediaBase64(rel.path)\n\n\ttry {\n\t\treturn Buffer.from(await fs.readFile(rel.path)).toString('base64')\n\t} catch (ex) {\n\t\tthrow new MediaError('media/read-failed', `Unable to read media: \"${rel.path}\"\\n${String(ex)}`, {\n\t\t\tcause: ex,\n\t\t})\n\t}\n}\n\nasync function writeFile(fileName: string, data: string | ArrayBuffer | Blob | Uint8Array): Promise<string> {\n\tawait fs.writeFile(fileName, data as string | Uint8Array)\n\treturn fileName\n}\n","/**\n * The Node authoring entry, which the bare `pptx-ts` specifier resolves to under the `node`\n * export condition.\n *\n * @module\n */\nimport PresentationCore from './presentation.js'\nimport { composePresentation, type ComposeOptions, type Composed } from './entry-compose.js'\nimport type { ConstructFamily } from './families/shared.js'\nimport { ALL_CONSTRUCT_FAMILIES } from './entry-families.js'\nimport { createNodeRuntime } from './runtime/node.js'\n\n/**\n * The Node entry, reached through the `node` export condition — a consumer importing the bare\n * `pptx-ts` specifier under Node lands here without naming this subpath.\n *\n * Same authoring API as every other entry (see `entry-surface.ts`); the runtime adapter is what\n * differs. This one can reach the filesystem, so `writeFile` writes a real file and media may be\n * loaded from a path — both of which throw on the runtime-agnostic entry.\n */\nexport class TsPptx extends PresentationCore {\n\tconstructor() {\n\t\tsuper(createNodeRuntime(), ALL_CONSTRUCT_FAMILIES)\n\t}\n}\n\n/**\n * Compose a presentation from the construct families it needs, on the Node adapter.\n *\n * The counterpart to {@link TsPptx}, which is composed with every family there is. This one costs\n * what it carries: the core tier (text, shapes, images, groups, speaker notes) plus whatever\n * `use` names, and nothing else reaches the bundle.\n * @param {ComposeOptions} opts - the families to compose in, from `pptx-ts/families`\n * @example\n * import { createPresentation } from 'pptx-ts/node'\n * import { charts } from 'pptx-ts/families'\n * const pres = createPresentation({ use: [charts] })\n */\nexport function createPresentation<const Fs extends readonly ConstructFamily[] = []>(\n\topts?: ComposeOptions<Fs>\n): Composed<Fs> {\n\treturn composePresentation(createNodeRuntime(), opts)\n}\n\nexport { TsPptx as default }\nexport * from './entry-surface.js'\n"],"mappings":";;;;;;AAOA,SAAgB,oBAAoC;CACnD,OAAO;EACN,qBAAqB;EACrB;EACA,qBAAqB;EACrB;EACA;CACD;AACD;AAEA,eAAe,aAAa,QAAqC;CAChE,IAAI,SAAS,MAAM,GAAG,OAAO,MAAM,eAAe,MAAM;CACxD,IAAI;EACH,OAAO,IAAI,WAAW,MAAM,GAAG,SAAS,MAAM,CAAC;CAChD,SAAS,IAAI;EACZ,MAAM,IAAI,WAAW,oBAAoB,8BAA8B,OAAO,KAAK,OAAO,EAAE,KAAK,EAChG,OAAO,GACR,CAAC;CACF;AACD;AAEA,eAAe,UAAU,KAAwD;CAChF,IAAI,SAAS,IAAI,IAAI,GAAG,OAAO,MAAM,iBAAiB,IAAI,IAAI;CAE9D,IAAI;EACH,OAAO,OAAO,KAAK,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ;CAClE,SAAS,IAAI;EACZ,MAAM,IAAI,WAAW,qBAAqB,0BAA0B,IAAI,KAAK,KAAK,OAAO,EAAE,KAAK,EAC/F,OAAO,GACR,CAAC;CACF;AACD;AAEA,eAAe,UAAU,UAAkB,MAAiE;CAC3G,MAAM,GAAG,UAAU,UAAU,IAA2B;CACxD,OAAO;AACR;;;;;;;;;;;;;;;;;ACvBA,IAAa,SAAb,cAA4B,iBAAiB;CAC5C,cAAc;EACb,MAAM,kBAAkB,GAAG,sBAAsB;CAClD;AACD;;;;;;;;;;;;;AAcA,SAAgB,mBACf,MACe;CACf,OAAO,oBAAoB,kBAAkB,GAAG,IAAI;AACrD"}
1
+ {"version":3,"file":"node.js","names":[],"sources":["../src/runtime/node.ts","../src/node.ts"],"sourcesContent":["import { Buffer } from 'node:buffer'\nimport fs from 'node:fs/promises'\nimport { MediaError } from '../errors.js'\nimport type { SlideRelMedia } from '../types/internal.js'\nimport type { RuntimeAdapter } from './types.js'\nimport { fetchFontBytes, fetchMediaBase64, isRemote, placeholderSvgPreview } from './fetch-media.js'\n\nexport function createNodeRuntime(): RuntimeAdapter {\n\treturn {\n\t\twriteFileOutputType: 'nodebuffer',\n\t\tloadMedia,\n\t\tcreateSvgPngPreview: placeholderSvgPreview,\n\t\twriteFile,\n\t\tloadFontData,\n\t}\n}\n\nasync function loadFontData(source: string): Promise<Uint8Array> {\n\tif (isRemote(source)) return await fetchFontBytes(source)\n\ttry {\n\t\treturn new Uint8Array(await fs.readFile(source))\n\t} catch (ex) {\n\t\tthrow new MediaError('font/read-failed', `Unable to read font file: \"${source}\"\\n${String(ex)}`, {\n\t\t\tcause: ex,\n\t\t})\n\t}\n}\n\nasync function loadMedia(rel: SlideRelMedia & { path: string }): Promise<string> {\n\tif (isRemote(rel.path)) return await fetchMediaBase64(rel.path)\n\n\ttry {\n\t\treturn Buffer.from(await fs.readFile(rel.path)).toString('base64')\n\t} catch (ex) {\n\t\tthrow new MediaError('media/read-failed', `Unable to read media: \"${rel.path}\"\\n${String(ex)}`, {\n\t\t\tcause: ex,\n\t\t})\n\t}\n}\n\nasync function writeFile(fileName: string, data: string | ArrayBuffer | Blob | Uint8Array): Promise<string> {\n\tawait fs.writeFile(fileName, data as string | Uint8Array)\n\treturn fileName\n}\n","/**\n * The Node authoring entry, which the bare `pptx-ts` specifier resolves to under the `node`\n * export condition.\n *\n * @module\n */\nimport PresentationCore from './presentation.js'\nimport { composePresentation, type ComposeOptions, type Composed } from './entry-compose.js'\nimport type { ConstructFamily } from './families/shared.js'\nimport { ALL_CONSTRUCT_FAMILIES } from './entry-families.js'\nimport { createNodeRuntime } from './runtime/node.js'\n\n/**\n * The Node entry, reached through the `node` export condition. A consumer importing the bare\n * `pptx-ts` specifier under Node lands here without naming this subpath.\n *\n * Same authoring API as every other entry (see `entry-surface.ts`); the runtime adapter is what\n * differs. This one can reach the filesystem, so `writeFile` writes a real file and media may be\n * loaded from a path, both of which throw on the runtime-agnostic entry.\n */\nexport class PptxTs extends PresentationCore {\n\tconstructor() {\n\t\tsuper(createNodeRuntime(), ALL_CONSTRUCT_FAMILIES)\n\t}\n}\n\n/**\n * Compose a presentation from the construct families it needs, on the Node adapter.\n *\n * The counterpart to {@link PptxTs}, which is composed with every family there is. This one costs\n * what it carries: the core tier (text, shapes, images, groups, speaker notes) plus whatever\n * `use` names, and nothing else reaches the bundle.\n * @param {ComposeOptions} opts - the families to compose in, from `pptx-ts/families`\n * @example\n * import { createPresentation } from 'pptx-ts/node'\n * import { charts } from 'pptx-ts/families'\n * const pres = createPresentation({ use: [charts] })\n */\nexport function createPresentation<const Fs extends readonly ConstructFamily[] = []>(\n\topts?: ComposeOptions<Fs>\n): Composed<Fs> {\n\treturn composePresentation(createNodeRuntime(), opts)\n}\n\nexport { PptxTs as default }\n\n/** @deprecated Renamed to {@link PptxTs}. This alias is removed in v5. */\nexport const TsPptx = PptxTs\n/** @deprecated Renamed to {@link PptxTs}. This alias is removed in v5. */\nexport type TsPptx = PptxTs\n\nexport * from './entry-surface.js'\n"],"mappings":";;;;;;AAOA,SAAgB,oBAAoC;CACnD,OAAO;EACN,qBAAqB;EACrB;EACA,qBAAqB;EACrB;EACA;CACD;AACD;AAEA,eAAe,aAAa,QAAqC;CAChE,IAAI,SAAS,MAAM,GAAG,OAAO,MAAM,eAAe,MAAM;CACxD,IAAI;EACH,OAAO,IAAI,WAAW,MAAM,GAAG,SAAS,MAAM,CAAC;CAChD,SAAS,IAAI;EACZ,MAAM,IAAI,WAAW,oBAAoB,8BAA8B,OAAO,KAAK,OAAO,EAAE,KAAK,EAChG,OAAO,GACR,CAAC;CACF;AACD;AAEA,eAAe,UAAU,KAAwD;CAChF,IAAI,SAAS,IAAI,IAAI,GAAG,OAAO,MAAM,iBAAiB,IAAI,IAAI;CAE9D,IAAI;EACH,OAAO,OAAO,KAAK,MAAM,GAAG,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,QAAQ;CAClE,SAAS,IAAI;EACZ,MAAM,IAAI,WAAW,qBAAqB,0BAA0B,IAAI,KAAK,KAAK,OAAO,EAAE,KAAK,EAC/F,OAAO,GACR,CAAC;CACF;AACD;AAEA,eAAe,UAAU,UAAkB,MAAiE;CAC3G,MAAM,GAAG,UAAU,UAAU,IAA2B;CACxD,OAAO;AACR;;;;;;;;;;;;;;;;ACvBA,IAAa,SAAb,cAA4B,iBAAiB;CAC5C,cAAc;EACb,MAAM,kBAAkB,GAAG,sBAAsB;CAClD;AACD;;;;;;;;;;;;;AAcA,SAAgB,mBACf,MACe;CACf,OAAO,oBAAoB,kBAAkB,GAAG,IAAI;AACrD;;AAKA,MAAa,SAAS"}
@@ -1,9 +1,9 @@
1
- //#region src/options-internal.ts
1
+ // src/options-internal.ts
2
2
  /**
3
3
  * Write a normalized value onto an option bag, spelling "no value" as an *absent* key.
4
4
  *
5
- * Reach for this wherever a normalizer's result may be nothing —
6
- * `setOrClear(opts, 'holeSize', clampChartPct(opts.holeSize, 10, 90, 'holeSize'))` — rather than
5
+ * Reach for this wherever a normalizer's result may be nothing, as in
6
+ * `setOrClear(opts, 'holeSize', clampChartPct(opts.holeSize, 10, 90, 'holeSize'))`, rather than
7
7
  * assigning the result directly, which leaves the caller's rejected value replaced by an
8
8
  * `undefined` instead of removed.
9
9
  *
@@ -37,7 +37,6 @@ function pickDefined(source, keys) {
37
37
  }
38
38
  return out;
39
39
  }
40
- //#endregion
41
40
  export { setOrClear as n, pickDefined as t };
42
41
 
43
- //# sourceMappingURL=options-internal-WqgMf720.js.map
42
+ //# sourceMappingURL=options-internal-BWgmLPdx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-internal-BWgmLPdx.js","names":[],"sources":["../src/options-internal.ts"],"sourcesContent":["/**\n * pptx-ts: option-bag normalization helpers for one spelling of absent.\n *\n * `exactOptionalPropertyTypes` draws a line this library needs drawn: a `foo?: T` declaration says\n * the key is either *missing* or holds a `T`, and a key present with an `undefined` in it is a\n * third state. Readers here cannot see that state (every option is read with truthiness or\n * `?.`), but spreads can, and the generator spreads these bags constantly: a layout placeholder's\n * options onto a slide's, a column default under a cell's own, a combo subchart's overrides onto\n * the chart's. There the side that wins is decided by whether the key *exists*, not by what it\n * holds, so \"the caller said nothing\" and \"the caller said nothing, in writing\" produce different\n * output.\n *\n * These two helpers are how a normalizer stays on the right side of that. They are the write-side\n * twin of `compact()` (`script/from-read/values.ts`), which keeps the same invariant on the read\n * side and for the same reason.\n *\n * Internal: nothing here is exported from an entrypoint, the same way `constants-internal.ts` and\n * `units-internal.ts` are not.\n */\n\nimport type { OptionalKeysOf } from './types/internal.js'\n\n/**\n * Write a normalized value onto an option bag, spelling \"no value\" as an *absent* key.\n *\n * Reach for this wherever a normalizer's result may be nothing, as in\n * `setOrClear(opts, 'holeSize', clampChartPct(opts.holeSize, 10, 90, 'holeSize'))`, rather than\n * assigning the result directly, which leaves the caller's rejected value replaced by an\n * `undefined` instead of removed.\n *\n * Only optional keys are accepted, so this cannot be used to unset something required.\n * @param bag - the options bag to write onto\n * @param key - the key to set or remove\n * @param value - the normalized value, or `undefined` to remove the key\n */\nexport function setOrClear<T extends object, K extends OptionalKeysOf<T> & keyof T>(bag: T, key: K, value: T[K]): void {\n\tif (value === undefined) delete bag[key]\n\telse bag[key] = value\n}\n\n/**\n * The named properties of `source` that are actually set, as a new object.\n *\n * For the other shape this problem takes: a literal that projects a fixed key list off a bag that\n * may not state them all (`{ x: opts.x, y: opts.y, rotate: opts.rotate, … }`), which writes a key\n * for every name whether or not the source had one. Naming the keys once is also shorter than\n * spelling out the copy, and it cannot drift from itself the way a hand-written list can.\n *\n * Every key comes back optional and with `undefined` excluded from its type, which is the whole\n * claim: what this returns is the subset that was actually stated.\n * @param source - the bag to read from\n * @param keys - the keys to carry over\n */\nexport function pickDefined<T extends object, K extends keyof T>(\n\tsource: T,\n\tkeys: readonly K[]\n): { [P in K]?: Exclude<T[P], undefined> } {\n\tconst out: { [P in K]?: Exclude<T[P], undefined> } = {}\n\tfor (const key of keys) {\n\t\tconst value = source[key]\n\t\tif (value !== undefined) out[key] = value as Exclude<T[K], undefined>\n\t}\n\treturn out\n}\n"],"mappings":";;;;;;;;;;;;;;AAmCA,SAAgB,WAAoE,KAAQ,KAAQ,OAAmB;CACtH,IAAI,UAAU,KAAA,GAAW,OAAO,IAAI;MAC/B,IAAI,OAAO;AACjB;;;;;;;;;;;;;;AAeA,SAAgB,YACf,QACA,MAC0C;CAC1C,MAAM,MAA+C,CAAC;CACtD,KAAK,MAAM,OAAO,MAAM;EACvB,MAAM,QAAQ,OAAO;EACrB,IAAI,UAAU,KAAA,GAAW,IAAI,OAAO;CACrC;CACA,OAAO;AACR"}
@@ -1,5 +1,4 @@
1
1
  import { Document, Element } from "@xmldom/xmldom";
2
- //#region src/read/opc/content-types.d.ts
3
2
  /**
4
3
  * Overlay over `[Content_Types].xml`, used to resolve part content types at
5
4
  * load and to register new ones when parts are added. While clean, the original
@@ -22,7 +21,7 @@ declare class ContentTypes {
22
21
  ensureRegistered(partName: string, contentType: string): void;
23
22
  /**
24
23
  * Drop the `Override` for `partName` if present (e.g. when a part is removed).
25
- * `Default` rules by extension are left untouched — they may still serve other
24
+ * `Default` rules by extension are left untouched; they may still serve other
26
25
  * parts. Marks the overlay dirty when something was removed.
27
26
  */
28
27
  removeOverride(partName: string): void;
@@ -30,8 +29,6 @@ declare class ContentTypes {
30
29
  ensureDefault(extension: string, contentType: string): void;
31
30
  serialize(): string;
32
31
  }
33
- //#endregion
34
- //#region src/read/opc/part.d.ts
35
32
  /**
36
33
  * One OPC part. Holds the original bytes from the zip for its whole life;
37
34
  * parses to a DOM only on demand; serializes back to the original bytes
@@ -73,8 +70,6 @@ declare class Part {
73
70
  */
74
71
  serialize(): Uint8Array;
75
72
  }
76
- //#endregion
77
- //#region src/read/opc/relationships.d.ts
78
73
  interface Relationship {
79
74
  id: string;
80
75
  type: string;
@@ -130,8 +125,6 @@ declare class Relationships {
130
125
  resolveTarget(id: string): string;
131
126
  serialize(): string;
132
127
  }
133
- //#endregion
134
- //#region src/read/opc/package.d.ts
135
128
  /**
136
129
  * Input to {@link OpcPackage.load}. A `string` is a **filesystem path** (Node)
137
130
  * read from disk; pass `Uint8Array`/`ArrayBuffer`/`Blob`/`number[]` for an
@@ -143,7 +136,7 @@ type OpcInput = string | number[] | Uint8Array | ArrayBuffer | Blob;
143
136
  *
144
137
  * Fidelity contract: parts that are never mutated (`Part.markDirty()`) are
145
138
  * written back byte-identically by `save()`. Whole-zip byte-identity is not
146
- * promised — zip metadata and compression may differ — but part bodies, the
139
+ * promised (zip metadata and compression may differ), but part bodies, the
147
140
  * part-name set, and part order are preserved.
148
141
  */
149
142
  declare class OpcPackage {
@@ -176,7 +169,7 @@ declare class OpcPackage {
176
169
  * later `save()` neither re-emits it nor flushes a stale `.rels` for it. A relationship set
177
170
  * belongs to its part: one left behind would come back as the relationships of the next part
178
171
  * added under the same name. Low-level: it does not touch references *to* this part
179
- * (dangling rels are the caller's concern) nor cascade to parts this one referenced — see
172
+ * (dangling rels are the caller's concern) nor cascade to parts this one referenced; see
180
173
  * {@link Presentation.removeSlide} for the slide-aware variant that unwires the presentation
181
174
  * and prunes orphans.
182
175
  */
@@ -207,6 +200,5 @@ declare class OpcPackage {
207
200
  */
208
201
  save(): Promise<Uint8Array>;
209
202
  }
210
- //#endregion
211
203
  export { Part as a, Relationships as i, OpcPackage as n, Element as o, Relationship as r, ContentTypes as s, OpcInput as t };
212
- //# sourceMappingURL=package-KoEgVwII.d.ts.map
204
+ //# sourceMappingURL=package-CANBWuSm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-CANBWuSm.d.ts","names":[],"sources":["../src/read/opc/content-types.ts","../src/read/opc/part.ts","../src/read/opc/relationships.ts","../src/read/opc/package.ts"],"mappings":";;;;;;;cAaa;;SAKL,MAAM,cAAc;;EAgC3B,eAAe;;MAKX;;;;;;;EAUJ,iBAAiB,kBAAkB;;;;;;EAWnC,eAAe;;EAKf,cAAc,mBAAmB;EAOjC;;;;;;;;;cCxEY;;WACH;WACA;EAKT,YAAY,kBAAkB,qBAAqB,OAAO;;MAOtD;;MAOA;;;;;;;;;;MAaA,iBAAiB;;;;;MAQjB,OAAO;;EAWX;MASI;;;;;;EASJ,aAAa;;UChFG;EAChB;EACA;EACA;EACA;;;;;;;;cASY;;;WAEH;UAIF;;;;;SAQA,MAAM,aAAa,yBAAyB;;SAuC5C,MAAM,yBAAyB;MAIlC;;MAKA;;;;;;;EAUJ,IAAI,cAAc,gBAAgB,uCAAuC;;;;;;;;EAgBzE,UAAU,YAAY,cAAc,gBAAgB,uCAAuC;;;;;;EA8B3F,OAAO;EASP,IAAI,aAAa;EAIjB,OAAO,eAAe;GAIrB,OAAO,aAAa,iBAAiB;;EAiBtC,cAAc;EAoBd;;;;;;;KCnLW,+BAA+B,aAAa,cAAc;;;;;;;;;cAezD;;;WAIH,cAAc;UAchB;;MAOH,SAAS,oBAAoB;SAIpB,KAAK,OAAO,WAAW,QAAQ;;;;;EAgC5C,KAAK,0BAA0B;EAI/B,mBAAmB,sBAAsB;;;;;EAoBzC,iBAAiB,0BAAuB;;;;;EAexC,QAAQ,kBAAkB,qBAAqB,OAAO,aAAa;;;;;;;;;;;EAuBnE,WAAW;;;;;EAgBX,qBAAqB,mBAAmB;;;;;;;;;;;;;;EAqBxC,oBAAoB,0BAA0B,QAAQ;;;;;;EAiChD,QAAQ,QAAQ"}
@@ -1,4 +1,4 @@
1
- //#region src/media/playbtn.ts
1
+ // src/media/playbtn.ts
2
2
  /**
3
3
  * The default poster frame for an embedded video: PowerPoint's play-button overlay.
4
4
  *
@@ -9,14 +9,13 @@
9
9
  * dynamic import instead, and leave it out of the entry chunk.
10
10
  *
11
11
  * It is resolved during the async media pass, for a deck that actually carries media and only
12
- * where the caller supplied no `cover` of their own — see `SlideRelMedia.isDefaultCover`.
12
+ * where the caller supplied no `cover` of their own (see `SlideRelMedia.isDefaultCover`).
13
13
  *
14
- * **Generated — do not hand-edit.** `scripts/gen-playbtn.mjs` draws it from measured geometry and
14
+ * **Generated: do not hand-edit.** `scripts/gen-playbtn.mjs` draws it from measured geometry and
15
15
  * writes this file; that script's header is where the design and its two deliberate departures
16
16
  * from the original artwork are written down. `pnpm run media:playbtn` rewrites it.
17
17
  */
18
18
  const IMG_PLAYBTN = "data:image/png;base64,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5OTk1HVDcU43fo2Q+8EHH3xkRRcABGAAKLi4q/iaa675PAzPnTu3ZdasWScNx3V1dRc0NTVNBeqxsbGhycnJkwbV9957b+To0aOf36n78ssvj7hjFwAEYAAAAPijzlUCAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAgET+L42bXdU+VqmBAAAAAElFTkSuQmCC";
19
- //#endregion
20
19
  export { IMG_PLAYBTN };
21
20
 
22
- //# sourceMappingURL=playbtn-CUqQdoDf.js.map
21
+ //# sourceMappingURL=playbtn-BQZFJir9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playbtn-BQZFJir9.js","names":[],"sources":["../src/media/playbtn.ts"],"sourcesContent":["/**\n * The default poster frame for an embedded video: PowerPoint's play-button overlay.\n *\n * Alone in a module because of its size. 19,312 base64 characters is about 14 kB of PNG, and\n * base64 of an already-compressed image barely deflates, so it is still the largest thing the\n * write path can reach. The chunker splits by module, so every chunk reaching this module is\n * charged the whole payload; keeping it alone is what lets `gen/media.ts` reach it through a\n * dynamic import instead, and leave it out of the entry chunk.\n *\n * It is resolved during the async media pass, for a deck that actually carries media and only\n * where the caller supplied no `cover` of their own (see `SlideRelMedia.isDefaultCover`).\n *\n * **Generated: do not hand-edit.** `scripts/gen-playbtn.mjs` draws it from measured geometry and\n * writes this file; that script's header is where the design and its two deliberate departures\n * from the original artwork are written down. `pnpm run media:playbtn` rewrites it.\n */\nexport const IMG_PLAYBTN =\n\t'data:image/png;base64,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5OTk1HVDcU43fo2Q+8EHH3xkRRcABGAAKLi4q/iaa675PAzPnTu3ZdasWScNx3V1dRc0NTVNBeqxsbGhycnJkwbV9957b+To0aOf36n78ssvj7hjFwAEYAAAAPijzlUCAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAAAAARgAAAAEYAAAABCAAQAAQAAGAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAAABGAAAAARgAAAAEIABAABAAAYAAEAABgAAAAEYAAAABGAAAAAQgAEAAEAABgAAgET+L42bXdU+VqmBAAAAAElFTkSuQmCC'\n"],"mappings":";;;;;;;;;;;;;;;;;AAgBA,MAAa,cACZ"}