@deckflow/deckuse 1.2.1 → 1.3.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 (281) hide show
  1. package/README.es.md +342 -0
  2. package/README.fr.md +342 -0
  3. package/README.ja.md +342 -0
  4. package/README.ko.md +342 -0
  5. package/README.md +46 -8
  6. package/README.pt-BR.md +342 -0
  7. package/README.ru.md +342 -0
  8. package/README.zh-CN.md +367 -0
  9. package/assets/default.docx +0 -0
  10. package/assets/default.pptx +0 -0
  11. package/dist/bin.js +183 -19
  12. package/dist/bin.js.map +1 -1
  13. package/dist/core/adapter.d.ts +24 -0
  14. package/dist/core/adapter.d.ts.map +1 -0
  15. package/dist/core/adapter.js +20 -0
  16. package/dist/core/adapter.js.map +1 -0
  17. package/dist/core/executor.d.ts +24 -0
  18. package/dist/core/executor.d.ts.map +1 -0
  19. package/dist/core/executor.js +65 -0
  20. package/dist/core/executor.js.map +1 -0
  21. package/dist/core/index.d.ts +7 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/index.js +7 -0
  24. package/dist/core/index.js.map +1 -0
  25. package/dist/core/length.d.ts +27 -0
  26. package/dist/core/length.d.ts.map +1 -0
  27. package/dist/core/length.js +63 -0
  28. package/dist/core/length.js.map +1 -0
  29. package/dist/core/measure.d.ts +24 -0
  30. package/dist/core/measure.d.ts.map +1 -0
  31. package/dist/core/measure.js +79 -0
  32. package/dist/core/measure.js.map +1 -0
  33. package/dist/core/not-implemented.d.ts +3 -0
  34. package/dist/core/not-implemented.d.ts.map +1 -0
  35. package/dist/core/not-implemented.js +12 -0
  36. package/dist/core/not-implemented.js.map +1 -0
  37. package/dist/core/schema.d.ts +3035 -0
  38. package/dist/core/schema.d.ts.map +1 -0
  39. package/dist/core/schema.js +798 -0
  40. package/dist/core/schema.js.map +1 -0
  41. package/dist/default-template.d.ts +8 -0
  42. package/dist/default-template.d.ts.map +1 -0
  43. package/dist/default-template.js +29 -0
  44. package/dist/default-template.js.map +1 -0
  45. package/dist/docx/adapter.d.ts +29 -0
  46. package/dist/docx/adapter.d.ts.map +1 -0
  47. package/dist/docx/adapter.js +442 -0
  48. package/dist/docx/adapter.js.map +1 -0
  49. package/dist/docx/addressing.d.ts +18 -0
  50. package/dist/docx/addressing.d.ts.map +1 -0
  51. package/dist/docx/addressing.js +111 -0
  52. package/dist/docx/addressing.js.map +1 -0
  53. package/dist/docx/blank.d.ts +4 -0
  54. package/dist/docx/blank.d.ts.map +1 -0
  55. package/dist/docx/blank.js +75 -0
  56. package/dist/docx/blank.js.map +1 -0
  57. package/dist/docx/index-sync.d.ts +7 -0
  58. package/dist/docx/index-sync.d.ts.map +1 -0
  59. package/dist/docx/index-sync.js +24 -0
  60. package/dist/docx/index-sync.js.map +1 -0
  61. package/dist/docx/index.d.ts +5 -0
  62. package/dist/docx/index.d.ts.map +1 -0
  63. package/dist/docx/index.js +4 -0
  64. package/dist/docx/index.js.map +1 -0
  65. package/dist/docx/indexer.d.ts +41 -0
  66. package/dist/docx/indexer.d.ts.map +1 -0
  67. package/dist/docx/indexer.js +353 -0
  68. package/dist/docx/indexer.js.map +1 -0
  69. package/dist/docx/mutations.d.ts +5 -0
  70. package/dist/docx/mutations.d.ts.map +1 -0
  71. package/dist/docx/mutations.js +311 -0
  72. package/dist/docx/mutations.js.map +1 -0
  73. package/dist/docx/paragraphs.d.ts +26 -0
  74. package/dist/docx/paragraphs.d.ts.map +1 -0
  75. package/dist/docx/paragraphs.js +314 -0
  76. package/dist/docx/paragraphs.js.map +1 -0
  77. package/dist/docx/properties.d.ts +23 -0
  78. package/dist/docx/properties.d.ts.map +1 -0
  79. package/dist/docx/properties.js +414 -0
  80. package/dist/docx/properties.js.map +1 -0
  81. package/dist/docx/tables.d.ts +4 -0
  82. package/dist/docx/tables.d.ts.map +1 -0
  83. package/dist/docx/tables.js +64 -0
  84. package/dist/docx/tables.js.map +1 -0
  85. package/dist/docx/text-spans.d.ts +25 -0
  86. package/dist/docx/text-spans.d.ts.map +1 -0
  87. package/dist/docx/text-spans.js +142 -0
  88. package/dist/docx/text-spans.js.map +1 -0
  89. package/dist/docx/types.d.ts +27 -0
  90. package/dist/docx/types.d.ts.map +1 -0
  91. package/dist/docx/types.js +2 -0
  92. package/dist/docx/types.js.map +1 -0
  93. package/dist/docx/workspace.d.ts +20 -0
  94. package/dist/docx/workspace.d.ts.map +1 -0
  95. package/dist/docx/workspace.js +145 -0
  96. package/dist/docx/workspace.js.map +1 -0
  97. package/dist/docx/xml.d.ts +18 -0
  98. package/dist/docx/xml.d.ts.map +1 -0
  99. package/dist/docx/xml.js +87 -0
  100. package/dist/docx/xml.js.map +1 -0
  101. package/dist/edition-config/index.d.ts +25 -0
  102. package/dist/edition-config/index.d.ts.map +1 -0
  103. package/dist/edition-config/index.js +22 -0
  104. package/dist/edition-config/index.js.map +1 -0
  105. package/dist/edition.d.ts +2 -2
  106. package/dist/edition.d.ts.map +1 -1
  107. package/dist/edition.js +1 -1
  108. package/dist/edition.js.map +1 -1
  109. package/dist/help.d.ts.map +1 -1
  110. package/dist/help.js +124 -32
  111. package/dist/help.js.map +1 -1
  112. package/dist/index.d.ts +1 -1
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +6 -6
  115. package/dist/index.js.map +1 -1
  116. package/dist/key/index.d.ts +2 -0
  117. package/dist/key/index.d.ts.map +1 -0
  118. package/dist/key/index.js +3 -0
  119. package/dist/key/index.js.map +1 -0
  120. package/dist/monitor-daemon.d.ts +21 -8
  121. package/dist/monitor-daemon.d.ts.map +1 -1
  122. package/dist/monitor-daemon.js +189 -51
  123. package/dist/monitor-daemon.js.map +1 -1
  124. package/dist/monitor-registry.d.ts +34 -0
  125. package/dist/monitor-registry.d.ts.map +1 -0
  126. package/dist/monitor-registry.js +191 -0
  127. package/dist/monitor-registry.js.map +1 -0
  128. package/dist/monitor.js +1 -1
  129. package/dist/monitor.js.map +1 -1
  130. package/dist/numbers/index.d.ts +2 -0
  131. package/dist/numbers/index.d.ts.map +1 -0
  132. package/dist/numbers/index.js +3 -0
  133. package/dist/numbers/index.js.map +1 -0
  134. package/dist/opc/index.d.ts +90 -0
  135. package/dist/opc/index.d.ts.map +1 -0
  136. package/dist/opc/index.js +569 -0
  137. package/dist/opc/index.js.map +1 -0
  138. package/dist/pptx/adapter.d.ts +167 -0
  139. package/dist/pptx/adapter.d.ts.map +1 -0
  140. package/dist/pptx/adapter.js +807 -0
  141. package/dist/pptx/adapter.js.map +1 -0
  142. package/dist/pptx/addressing.d.ts +45 -0
  143. package/dist/pptx/addressing.d.ts.map +1 -0
  144. package/dist/pptx/addressing.js +428 -0
  145. package/dist/pptx/addressing.js.map +1 -0
  146. package/dist/pptx/align.d.ts +24 -0
  147. package/dist/pptx/align.d.ts.map +1 -0
  148. package/dist/pptx/align.js +112 -0
  149. package/dist/pptx/align.js.map +1 -0
  150. package/dist/pptx/chart-classify.d.ts +10 -0
  151. package/dist/pptx/chart-classify.d.ts.map +1 -0
  152. package/dist/pptx/chart-classify.js +58 -0
  153. package/dist/pptx/chart-classify.js.map +1 -0
  154. package/dist/pptx/chart.d.ts +42 -0
  155. package/dist/pptx/chart.d.ts.map +1 -0
  156. package/dist/pptx/chart.js +614 -0
  157. package/dist/pptx/chart.js.map +1 -0
  158. package/dist/pptx/edition-extension.d.ts +25 -0
  159. package/dist/pptx/edition-extension.d.ts.map +1 -0
  160. package/dist/pptx/edition-extension.js +10 -0
  161. package/dist/pptx/edition-extension.js.map +1 -0
  162. package/dist/pptx/edition.d.ts +20 -0
  163. package/dist/pptx/edition.d.ts.map +1 -0
  164. package/dist/pptx/edition.js +69 -0
  165. package/dist/pptx/edition.js.map +1 -0
  166. package/dist/pptx/elements.d.ts +12 -0
  167. package/dist/pptx/elements.d.ts.map +1 -0
  168. package/dist/pptx/elements.js +224 -0
  169. package/dist/pptx/elements.js.map +1 -0
  170. package/dist/pptx/hyperlink.d.ts +7 -0
  171. package/dist/pptx/hyperlink.d.ts.map +1 -0
  172. package/dist/pptx/hyperlink.js +81 -0
  173. package/dist/pptx/hyperlink.js.map +1 -0
  174. package/dist/pptx/index-sync.d.ts +7 -0
  175. package/dist/pptx/index-sync.d.ts.map +1 -0
  176. package/dist/pptx/index-sync.js +24 -0
  177. package/dist/pptx/index-sync.js.map +1 -0
  178. package/dist/pptx/index.d.ts +10 -0
  179. package/dist/pptx/index.d.ts.map +1 -0
  180. package/dist/pptx/index.js +7 -0
  181. package/dist/pptx/index.js.map +1 -0
  182. package/dist/pptx/indexer.d.ts +19 -0
  183. package/dist/pptx/indexer.d.ts.map +1 -0
  184. package/dist/pptx/indexer.js +319 -0
  185. package/dist/pptx/indexer.js.map +1 -0
  186. package/dist/pptx/layout-ref.d.ts +41 -0
  187. package/dist/pptx/layout-ref.d.ts.map +1 -0
  188. package/dist/pptx/layout-ref.js +145 -0
  189. package/dist/pptx/layout-ref.js.map +1 -0
  190. package/dist/pptx/media.d.ts +15 -0
  191. package/dist/pptx/media.d.ts.map +1 -0
  192. package/dist/pptx/media.js +145 -0
  193. package/dist/pptx/media.js.map +1 -0
  194. package/dist/pptx/mutations.d.ts +11 -0
  195. package/dist/pptx/mutations.d.ts.map +1 -0
  196. package/dist/pptx/mutations.js +1111 -0
  197. package/dist/pptx/mutations.js.map +1 -0
  198. package/dist/pptx/picture.d.ts +25 -0
  199. package/dist/pptx/picture.d.ts.map +1 -0
  200. package/dist/pptx/picture.js +118 -0
  201. package/dist/pptx/picture.js.map +1 -0
  202. package/dist/pptx/placeholder-role.d.ts +19 -0
  203. package/dist/pptx/placeholder-role.d.ts.map +1 -0
  204. package/dist/pptx/placeholder-role.js +71 -0
  205. package/dist/pptx/placeholder-role.js.map +1 -0
  206. package/dist/pptx/properties.d.ts +13 -0
  207. package/dist/pptx/properties.d.ts.map +1 -0
  208. package/dist/pptx/properties.js +587 -0
  209. package/dist/pptx/properties.js.map +1 -0
  210. package/dist/pptx/resolve-properties.d.ts +17 -0
  211. package/dist/pptx/resolve-properties.d.ts.map +1 -0
  212. package/dist/pptx/resolve-properties.js +571 -0
  213. package/dist/pptx/resolve-properties.js.map +1 -0
  214. package/dist/pptx/slide-size.d.ts +9 -0
  215. package/dist/pptx/slide-size.d.ts.map +1 -0
  216. package/dist/pptx/slide-size.js +29 -0
  217. package/dist/pptx/slide-size.js.map +1 -0
  218. package/dist/pptx/slides.d.ts +15 -0
  219. package/dist/pptx/slides.d.ts.map +1 -0
  220. package/dist/pptx/slides.js +236 -0
  221. package/dist/pptx/slides.js.map +1 -0
  222. package/dist/pptx/table-measure.d.ts +43 -0
  223. package/dist/pptx/table-measure.d.ts.map +1 -0
  224. package/dist/pptx/table-measure.js +70 -0
  225. package/dist/pptx/table-measure.js.map +1 -0
  226. package/dist/pptx/table.d.ts +23 -0
  227. package/dist/pptx/table.d.ts.map +1 -0
  228. package/dist/pptx/table.js +529 -0
  229. package/dist/pptx/table.js.map +1 -0
  230. package/dist/pptx/types.d.ts +27 -0
  231. package/dist/pptx/types.d.ts.map +1 -0
  232. package/dist/pptx/types.js +2 -0
  233. package/dist/pptx/types.js.map +1 -0
  234. package/dist/pptx/workspace.d.ts +23 -0
  235. package/dist/pptx/workspace.d.ts.map +1 -0
  236. package/dist/pptx/workspace.js +148 -0
  237. package/dist/pptx/workspace.js.map +1 -0
  238. package/dist/pptx/xml.d.ts +67 -0
  239. package/dist/pptx/xml.d.ts.map +1 -0
  240. package/dist/pptx/xml.js +355 -0
  241. package/dist/pptx/xml.js.map +1 -0
  242. package/dist/render.d.ts.map +1 -1
  243. package/dist/render.js +14 -2
  244. package/dist/render.js.map +1 -1
  245. package/dist/version.d.ts +1 -1
  246. package/dist/version.js +1 -1
  247. package/dist/workspace/git.d.ts +7 -0
  248. package/dist/workspace/git.d.ts.map +1 -0
  249. package/dist/workspace/git.js +82 -0
  250. package/dist/workspace/git.js.map +1 -0
  251. package/dist/workspace/index.d.ts +7 -0
  252. package/dist/workspace/index.d.ts.map +1 -0
  253. package/dist/workspace/index.js +7 -0
  254. package/dist/workspace/index.js.map +1 -0
  255. package/dist/workspace/lock.d.ts +3 -0
  256. package/dist/workspace/lock.d.ts.map +1 -0
  257. package/dist/workspace/lock.js +35 -0
  258. package/dist/workspace/lock.js.map +1 -0
  259. package/dist/workspace/metadata.d.ts +4 -0
  260. package/dist/workspace/metadata.d.ts.map +1 -0
  261. package/dist/workspace/metadata.js +21 -0
  262. package/dist/workspace/metadata.js.map +1 -0
  263. package/dist/workspace/operations.d.ts +14 -0
  264. package/dist/workspace/operations.d.ts.map +1 -0
  265. package/dist/workspace/operations.js +35 -0
  266. package/dist/workspace/operations.js.map +1 -0
  267. package/dist/workspace/paths.d.ts +11 -0
  268. package/dist/workspace/paths.d.ts.map +1 -0
  269. package/dist/workspace/paths.js +12 -0
  270. package/dist/workspace/paths.js.map +1 -0
  271. package/dist/workspace/revision.d.ts +6 -0
  272. package/dist/workspace/revision.d.ts.map +1 -0
  273. package/dist/workspace/revision.js +15 -0
  274. package/dist/workspace/revision.js.map +1 -0
  275. package/dist/xlsx/index.d.ts +2 -0
  276. package/dist/xlsx/index.d.ts.map +1 -0
  277. package/dist/xlsx/index.js +3 -0
  278. package/dist/xlsx/index.js.map +1 -0
  279. package/package.json +48 -27
  280. package/schema/command.schema.json +2399 -0
  281. package/dist/.tsbuildinfo +0 -1
@@ -0,0 +1,24 @@
1
+ import { resolve } from 'node:path';
2
+ import { writeMetadata } from '../workspace/index.js';
3
+ import { buildIndex } from './indexer.js';
4
+ import { readIndex } from './workspace.js';
5
+ export async function loadIndex(workspace, archive, manifest, options) {
6
+ const root = resolve(workspace);
7
+ let index;
8
+ try {
9
+ index = await readIndex(root);
10
+ }
11
+ catch {
12
+ index = buildIndex(archive, manifest.workspaceId, manifest.revision);
13
+ if (options?.persist)
14
+ await writeMetadata(root, manifest, index);
15
+ return index;
16
+ }
17
+ if (index.revision !== manifest.revision) {
18
+ index = buildIndex(archive, manifest.workspaceId, manifest.revision);
19
+ if (options?.persist)
20
+ await writeMetadata(root, manifest, index);
21
+ }
22
+ return index;
23
+ }
24
+ //# sourceMappingURL=index-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-sync.js","sourceRoot":"","sources":["../../src/pptx/index-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,SAAiB,EACjB,OAAmB,EACnB,QAA2B,EAC3B,OAA+B;IAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,IAAI,KAAgB,CAAC;IACrB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzC,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrE,IAAI,OAAO,EAAE,OAAO;YAAE,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { pptxAdapter, pptxCapabilities } from './adapter.js';
2
+ export { buildIndex } from './indexer.js';
3
+ export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionCapabilities, editionMetadata, editionGatedWriteKind, writeDenialReason, assertWritable, clearPptxEditionExtension, getPptxEditionExtension, registerPptxEditionExtension, } from './edition.js';
4
+ export type { EditionGatedWriteKind, PptxEditionExtension } from './edition.js';
5
+ export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
6
+ export type { ChartVariant } from './chart-classify.js';
7
+ export { applyChartProperties } from './chart.js';
8
+ export { setNodeText, setNodeTextBlocks } from './xml.js';
9
+ export type { IndexedElement, IndexFile, ElementKind } from './types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pptx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { pptxAdapter, pptxCapabilities } from './adapter.js';
2
+ export { buildIndex } from './indexer.js';
3
+ export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionCapabilities, editionMetadata, editionGatedWriteKind, writeDenialReason, assertWritable, clearPptxEditionExtension, getPptxEditionExtension, registerPptxEditionExtension, } from './edition.js';
4
+ export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
5
+ export { applyChartProperties } from './chart.js';
6
+ export { setNodeText, setNodeTextBlocks } from './xml.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pptx/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EACL,OAAO,EACP,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ElementRef } from '../core/index.js';
2
+ import type { OpcArchive } from '../opc/index.js';
3
+ import type { IndexFile, IndexedElement } from './types.js';
4
+ export declare function buildIndex(archive: OpcArchive, documentId: string, rev: string): IndexFile;
5
+ export declare const slidePageMap: (index: IndexFile) => Map<string, number>;
6
+ export declare const slidesForItem: (index: IndexFile, item: IndexedElement) => number[];
7
+ export declare const slidesForRef: (index: IndexFile, ref: ElementRef) => number[];
8
+ export declare const mergeSlides: (...groups: number[][]) => number[];
9
+ export declare const findIndexed: (index: IndexFile, ref: ElementRef) => IndexedElement | undefined;
10
+ export declare function matchesSelector(item: IndexedElement, selector: string | {
11
+ kind?: string | undefined;
12
+ name?: string | undefined;
13
+ text?: string | undefined;
14
+ textRegex?: string | undefined;
15
+ id?: string | undefined;
16
+ slide?: string | undefined;
17
+ hasText?: boolean | string | undefined;
18
+ }): boolean;
19
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/pptx/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,OAAO,KAAK,EAAe,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqDzE,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAqM1F;AACD,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,KAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAUjE,CAAC;AACF,eAAO,MAAM,aAAa,GAAI,OAAO,SAAS,EAAE,MAAM,cAAc,KAAG,MAAM,EAW5E,CAAC;AACF,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,EAAE,KAAK,UAAU,KAAG,MAAM,EAGtE,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,GAAG,QAAQ,MAAM,EAAE,EAAE,KAAG,MAAM,EACP,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,EAAE,KAAK,UAAU,KAAG,cAAc,GAAG,SACS,CAAC;AAC3F,wBAAgB,eAAe,CAC7B,IAAI,EAAE,cAAc,EACpB,QAAQ,EACJ,MAAM,GACN;IACE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACxC,GACJ,OAAO,CAkDT"}
@@ -0,0 +1,319 @@
1
+ import { basename } from 'node:path';
2
+ import { classifyChartPart } from './chart-classify.js';
3
+ import { readSeriesColor } from './chart.js';
4
+ import { mediaHref } from './workspace.js';
5
+ import { NS, REL, attr, cNvPr, children, descendants, first, root, textOf } from './xml.js';
6
+ const directChild = (node, localName) => children(node).find((child) => child.localName === localName);
7
+ const classify = (node) => {
8
+ if (node.localName === 'sp')
9
+ return first(node, 'txBody') ? 'textbox' : 'shape';
10
+ if (node.localName === 'pic')
11
+ return first(node, 'videoFile') ? 'video' : first(node, 'audioFile') ? 'audio' : 'picture';
12
+ if (node.localName === 'cxnSp')
13
+ return 'connector';
14
+ if (node.localName === 'grpSp')
15
+ return 'group';
16
+ if (node.localName === 'graphicFrame') {
17
+ if (first(node, 'tbl'))
18
+ return 'table';
19
+ if (first(node, 'chart'))
20
+ return 'chart';
21
+ }
22
+ return undefined;
23
+ };
24
+ const readPlaceholder = (node) => {
25
+ const nv = directChild(node, 'nvSpPr') ??
26
+ directChild(node, 'nvPicPr') ??
27
+ directChild(node, 'nvCxnSpPr') ??
28
+ directChild(node, 'nvGraphicFramePr') ??
29
+ directChild(node, 'nvGrpSpPr');
30
+ const nvPr = nv ? directChild(nv, 'nvPr') : undefined;
31
+ const ph = nvPr ? directChild(nvPr, 'ph') : undefined;
32
+ if (!ph)
33
+ return undefined;
34
+ const type = attr(ph, 'type') ?? 'body';
35
+ const idx = attr(ph, 'idx');
36
+ return { type, ...(idx !== undefined ? { idx } : {}) };
37
+ };
38
+ const transformOf = (node) => {
39
+ const x = first(node, 'xfrm');
40
+ if (!x)
41
+ return;
42
+ const off = first(x, 'off'), ext = first(x, 'ext'), result = {};
43
+ for (const [key, n, a] of [
44
+ ['x', off, 'x'],
45
+ ['y', off, 'y'],
46
+ ['width', ext, 'cx'],
47
+ ['height', ext, 'cy'],
48
+ ]) {
49
+ const v = attr(n, a);
50
+ if (v !== undefined)
51
+ result[key] = Number(v);
52
+ }
53
+ const rot = attr(x, 'rot');
54
+ if (rot !== undefined)
55
+ result['rotation'] = Number(rot) / 60000;
56
+ return result;
57
+ };
58
+ export function buildIndex(archive, documentId, rev) {
59
+ const elements = [];
60
+ const presentation = archive.readXml('/ppt/presentation.xml'), rels = archive.getRelationships('/ppt/presentation.xml');
61
+ for (const sld of descendants(presentation, 'sldId')) {
62
+ if (sld.namespaceURI && sld.namespaceURI !== NS.p)
63
+ continue;
64
+ const rid = sld.getAttributeNS(NS.r, 'id') ?? attr(sld, 'r:id'), rel = rels.find((r) => r.id === rid);
65
+ if (!rel?.resolvedTarget)
66
+ continue;
67
+ const partUri = rel.resolvedTarget, slideId = attr(sld, 'id') ?? rid ?? basename(partUri), slideRef = {
68
+ documentId,
69
+ elementId: `slide:${slideId}`,
70
+ path: partUri,
71
+ revision: rev,
72
+ };
73
+ elements.push({
74
+ ref: slideRef,
75
+ kind: 'slide',
76
+ partUri,
77
+ slideId,
78
+ name: `Slide ${slideId}`,
79
+ location: { slideId, partUri },
80
+ });
81
+ const doc = archive.readXml(partUri);
82
+ const walk = (node, ancestors, parentId) => {
83
+ for (const child of children(node)) {
84
+ const kind = classify(child);
85
+ if (!kind) {
86
+ walk(child, ancestors, parentId);
87
+ continue;
88
+ }
89
+ const own = attr(cNvPr(child), 'id') ?? child.nodeName, id = `${slideId}:${[...ancestors, own].join('.')}`, transform = transformOf(child), name = attr(cNvPr(child), 'name'), text = textOf(child);
90
+ const ph = readPlaceholder(child);
91
+ const placeholderType = ph?.type;
92
+ const placeholderIdx = ph?.idx;
93
+ const pr = cNvPr(child);
94
+ const hlink = pr ? children(pr).find((c) => c.localName === 'hlinkClick') : undefined;
95
+ const hlinkRid = hlink?.getAttributeNS(NS.r, 'id') ?? (hlink ? attr(hlink, 'r:id') : undefined);
96
+ const hlinkRel = hlinkRid
97
+ ? archive.getRelationships(partUri).find((r) => r.id === hlinkRid)
98
+ : undefined;
99
+ const indexed = {
100
+ ref: { documentId, elementId: id, path: `${partUri}#${id}`, revision: rev },
101
+ kind,
102
+ partUri,
103
+ slideId,
104
+ parentId,
105
+ location: { slideId, partUri, ancestorIds: ancestors, cNvPrId: own },
106
+ ...(name ? { name } : {}),
107
+ ...(text ? { text } : {}),
108
+ ...(transform ? { transform } : {}),
109
+ };
110
+ if (placeholderType || hlinkRel) {
111
+ indexed.payload = {
112
+ ...(placeholderType ? { placeholder: placeholderType } : {}),
113
+ ...(placeholderIdx !== undefined ? { placeholderIdx } : {}),
114
+ ...(hlinkRel ? { hyperlink: hlinkRel.target } : {}),
115
+ };
116
+ }
117
+ elements.push(indexed);
118
+ if (kind === 'table') {
119
+ const rows = descendants(child, 'tr');
120
+ rows.forEach((row, rowIndex) => {
121
+ children(row)
122
+ .filter((n) => n.localName === 'tc')
123
+ .forEach((cell, columnIndex) => elements.push({
124
+ ref: {
125
+ documentId,
126
+ elementId: `${id}:cell:${String(rowIndex)}:${String(columnIndex)}`,
127
+ path: `${partUri}#${id}:cell:${String(rowIndex)}:${String(columnIndex)}`,
128
+ revision: rev,
129
+ },
130
+ kind: 'tableCell',
131
+ partUri,
132
+ slideId,
133
+ parentId: id,
134
+ text: textOf(cell),
135
+ location: { slideId, partUri, tableId: id, row: rowIndex, column: columnIndex },
136
+ }));
137
+ });
138
+ }
139
+ if (kind === 'picture' || kind === 'video' || kind === 'audio') {
140
+ const blip = first(child, 'blip');
141
+ const embed = blip?.getAttributeNS(NS.r, 'embed') ?? attr(blip, 'r:embed');
142
+ const link = blip?.getAttributeNS(NS.r, 'link') ?? attr(blip, 'r:link');
143
+ const video = first(child, 'videoFile');
144
+ const audio = first(child, 'audioFile');
145
+ const mediaLink = (video ?? audio)?.getAttributeNS(NS.r, 'link') ??
146
+ attr(video ?? audio, 'r:link') ??
147
+ undefined;
148
+ const rid = mediaLink ?? embed ?? link;
149
+ const rel = rid ? archive.getRelationships(partUri).find((r) => r.id === rid) : undefined;
150
+ if (rel) {
151
+ const mediaPart = rel.resolvedTarget ?? rel.target;
152
+ const external = Boolean(rel.external || (!embed && link && !mediaLink));
153
+ indexed.payload = {
154
+ ...(indexed.payload ?? {}),
155
+ mediaPart,
156
+ href: external ? rel.target : mediaHref(documentId, mediaPart),
157
+ ...(kind !== 'picture' ? { mediaKind: kind } : {}),
158
+ ...(external ? { external: true } : {}),
159
+ ...(!external && rel.resolvedTarget
160
+ ? {
161
+ mediaType: archive.getPart(rel.resolvedTarget)?.mediaType,
162
+ fileName: basename(rel.resolvedTarget),
163
+ }
164
+ : {}),
165
+ };
166
+ }
167
+ }
168
+ if (kind === 'chart') {
169
+ const crid = first(child, 'chart')?.getAttributeNS(NS.r, 'id') ??
170
+ attr(first(child, 'chart'), 'r:id'), cr = archive.getRelationships(partUri).find((r) => r.id === crid);
171
+ if (cr?.resolvedTarget) {
172
+ const chart = archive.readXml(cr.resolvedTarget);
173
+ indexed.payload = {
174
+ ...(indexed.payload ?? {}),
175
+ chartPart: cr.resolvedTarget,
176
+ chartVariant: classifyChartPart(archive, cr.resolvedTarget),
177
+ title: textOf(first(chart, 'title') ?? chart),
178
+ series: descendants(chart, 'ser').map((ser) => {
179
+ const color = readSeriesColor(ser);
180
+ return {
181
+ name: first(first(ser, 'tx') ?? ser, 'v')?.textContent ??
182
+ textOf(first(ser, 'tx') ?? ser),
183
+ values: descendants(first(ser, 'val') ?? ser, 'v').map((v) => v.textContent ?? ''),
184
+ ...(color ? { color } : {}),
185
+ };
186
+ }),
187
+ embeddedWorkbook: archive
188
+ .getRelationships(cr.resolvedTarget)
189
+ .some((r) => r.type === REL.package),
190
+ };
191
+ }
192
+ else {
193
+ // Fail closed: unresolvable chart parts are advanced (commercial-only edits).
194
+ indexed.payload = { ...(indexed.payload ?? {}), chartVariant: 'advanced' };
195
+ }
196
+ }
197
+ // Only groups nest addressable descendants; table cells are indexed above.
198
+ if (kind === 'group')
199
+ walk(child, [...ancestors, own], id);
200
+ }
201
+ };
202
+ walk(root(doc), [], `slide:${slideId}`);
203
+ const notes = archive.getRelationships(partUri).find((r) => r.type === REL.notes);
204
+ if (notes?.resolvedTarget) {
205
+ const nd = archive.readXml(notes.resolvedTarget);
206
+ elements.push({
207
+ ref: {
208
+ documentId,
209
+ elementId: `notes:${slideId}`,
210
+ path: notes.resolvedTarget,
211
+ revision: rev,
212
+ },
213
+ kind: 'notes',
214
+ partUri: notes.resolvedTarget,
215
+ slideId,
216
+ text: textOf(nd),
217
+ location: { slideId, partUri: notes.resolvedTarget, region: 'speakerNotes' },
218
+ });
219
+ }
220
+ }
221
+ for (const [prefix, kind] of [
222
+ ['/ppt/slideMasters/', 'master'],
223
+ ['/ppt/slideLayouts/', 'layout'],
224
+ ['/ppt/theme/', 'theme'],
225
+ ])
226
+ for (const part of archive.parts.values())
227
+ if (part.name.startsWith(prefix) && part.name.endsWith('.xml')) {
228
+ const doc = archive.readXml(part.name);
229
+ elements.push({
230
+ ref: { documentId, elementId: `${kind}:${part.name}`, path: part.name, revision: rev },
231
+ kind,
232
+ partUri: part.name,
233
+ text: textOf(doc),
234
+ payload: {
235
+ colors: descendants(doc, 'srgbClr')
236
+ .map((n) => attr(n, 'val'))
237
+ .filter((v) => v !== undefined),
238
+ },
239
+ });
240
+ }
241
+ return { revision: rev, elements };
242
+ }
243
+ export const slidePageMap = (index) => {
244
+ const map = new Map();
245
+ let page = 1;
246
+ for (const item of index.elements) {
247
+ if (item.kind !== 'slide')
248
+ continue;
249
+ map.set(item.partUri, page);
250
+ if (item.slideId)
251
+ map.set(item.slideId, page);
252
+ page += 1;
253
+ }
254
+ return map;
255
+ };
256
+ export const slidesForItem = (index, item) => {
257
+ const pages = slidePageMap(index);
258
+ if (item.kind === 'slide') {
259
+ const page = pages.get(item.partUri) ?? (item.slideId ? pages.get(item.slideId) : undefined);
260
+ return page ? [page] : [];
261
+ }
262
+ if (item.slideId) {
263
+ const page = pages.get(item.slideId);
264
+ return page ? [page] : [];
265
+ }
266
+ return [];
267
+ };
268
+ export const slidesForRef = (index, ref) => {
269
+ const item = findIndexed(index, ref);
270
+ return item ? slidesForItem(index, item) : [];
271
+ };
272
+ export const mergeSlides = (...groups) => [...new Set(groups.flat())].sort((a, b) => a - b);
273
+ export const findIndexed = (index, ref) => index.elements.find((e) => e.ref.elementId === ref.elementId || e.ref.path === ref.path);
274
+ export function matchesSelector(item, selector) {
275
+ if (typeof selector === 'string' && (selector === '*' || selector === 'all'))
276
+ return true;
277
+ const spec = typeof selector === 'string'
278
+ ? selector.includes('=')
279
+ ? Object.fromEntries(selector.split(/\s+/).map((part) => {
280
+ const index = part.indexOf('=');
281
+ return [part.slice(0, index), part.slice(index + 1)];
282
+ }))
283
+ : { any: selector }
284
+ : selector;
285
+ if (spec['any'] === '*' || spec['any'] === 'all')
286
+ return true;
287
+ const contains = (actual, expected) => expected === undefined || (actual?.toLowerCase().includes(expected.toLowerCase()) ?? false);
288
+ const hasTextSpec = spec['hasText'];
289
+ if (hasTextSpec !== undefined) {
290
+ const want = typeof hasTextSpec === 'boolean'
291
+ ? hasTextSpec
292
+ : !['0', 'false', 'no'].includes(hasTextSpec.toLowerCase());
293
+ if (Boolean(item.text?.length) !== want)
294
+ return false;
295
+ }
296
+ const textRegex = typeof spec['textRegex'] === 'string'
297
+ ? spec['textRegex']
298
+ : typeof spec['text~'] === 'string'
299
+ ? spec['text~']
300
+ : undefined;
301
+ if (typeof textRegex === 'string') {
302
+ try {
303
+ if (!new RegExp(textRegex, 'u').test(item.text ?? ''))
304
+ return false;
305
+ }
306
+ catch {
307
+ return false;
308
+ }
309
+ }
310
+ return (contains(item.kind, typeof spec['kind'] === 'string' ? spec['kind'] : undefined) &&
311
+ contains(item.name, typeof spec['name'] === 'string' ? spec['name'] : undefined) &&
312
+ contains(item.text, typeof spec['text'] === 'string' ? spec['text'] : undefined) &&
313
+ contains(item.ref.elementId, typeof spec['id'] === 'string' ? spec['id'] : undefined) &&
314
+ contains(item.slideId, typeof spec['slide'] === 'string' ? spec['slide'] : undefined) &&
315
+ contains([item.kind, item.name, item.text, item.ref.elementId, item.slideId]
316
+ .filter((value) => value !== undefined)
317
+ .join(' '), typeof spec['any'] === 'string' ? spec['any'] : undefined));
318
+ }
319
+ //# sourceMappingURL=indexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../../src/pptx/indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type Result } from '../core/index.js';
2
+ import type { OpcArchive } from '../opc/index.js';
3
+ import type { IndexFile, IndexedElement } from './types.js';
4
+ /** Basename of an OPC part URI without the `.xml` suffix (e.g. `slideLayout1`). */
5
+ export declare const layoutPartBaseName: (partUri: string) => string;
6
+ /** Natural-sort compare so `slideLayout2` < `slideLayout10`. */
7
+ export declare const naturalCompare: (a: string, b: string) => number;
8
+ /** Layouts in stable natural order of part basename (matches `list layouts` index). */
9
+ export declare const orderedLayouts: (index: IndexFile) => IndexedElement[];
10
+ /** `p:cSld/@name` on a slideLayout part. */
11
+ export declare const layoutDisplayName: (archive: OpcArchive, partUri: string) => string;
12
+ /** `p:sldLayout/@type` when present. */
13
+ export declare const layoutTypeAttr: (archive: OpcArchive, partUri: string) => string | undefined;
14
+ /** Slide→layout relationship target, if any. */
15
+ export declare const slideLayoutPart: (archive: OpcArchive, slidePart: string) => string | undefined;
16
+ export type LayoutListItem = {
17
+ index: number;
18
+ target: string;
19
+ name: string;
20
+ displayName: string;
21
+ type?: string;
22
+ partUri: string;
23
+ uid: string;
24
+ };
25
+ export declare const layoutListMeta: (archive: OpcArchive, item: IndexedElement, listIndex: number) => Omit<LayoutListItem, "uid">;
26
+ /**
27
+ * Resolve a layout reference used by `addSlide` / `setSlideLayout`.
28
+ *
29
+ * Accepts:
30
+ * - `slide:N` — inherit that slide's layout relationship
31
+ * - bare digit / `layout:N` — 1-based index into {@link orderedLayouts}
32
+ * - display name (`Blank`), basename (`slideLayout2`), or substring of display
33
+ * (except needle `blank`, which requires an exact Blank match)
34
+ *
35
+ * When `allowBlankFallback` is true and needle is `blank` with no match,
36
+ * returns `ok(undefined)` so callers can fall through to inheritance.
37
+ */
38
+ export declare const resolveLayoutRef: (archive: OpcArchive, index: IndexFile, ref: string, options?: {
39
+ allowBlankFallback?: boolean;
40
+ }) => Result<string | undefined>;
41
+ //# sourceMappingURL=layout-ref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-ref.d.ts","sourceRoot":"","sources":["../../src/pptx/layout-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG5D,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,GAAI,SAAS,MAAM,KAAG,MAInB,CAAC;AAEnC,gEAAgE;AAChE,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,KAAG,MAqBrD,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,cAAc,GAAI,OAAO,SAAS,KAAG,cAAc,EAIiC,CAAC;AAElG,4CAA4C;AAC5C,eAAO,MAAM,iBAAiB,GAAI,SAAS,UAAU,EAAE,SAAS,MAAM,KAAG,MAOxE,CAAC;AAEF,wCAAwC;AACxC,eAAO,MAAM,cAAc,GAAI,SAAS,UAAU,EAAE,SAAS,MAAM,KAAG,MAAM,GAAG,SAO9E,CAAC;AAEF,gDAAgD;AAChD,eAAO,MAAM,eAAe,GAAI,SAAS,UAAU,EAAE,WAAW,MAAM,KAAG,MAAM,GAAG,SAGjF,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,eAAO,MAAM,cAAc,GACzB,SAAS,UAAU,EACnB,MAAM,cAAc,EACpB,WAAW,MAAM,KAChB,IAAI,CAAC,cAAc,EAAE,KAAK,CAY5B,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,UAAU,EACnB,OAAO,SAAS,EAChB,KAAK,MAAM,EACX,UAAS;IAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAAO,KAC7C,MAAM,CAAC,MAAM,GAAG,SAAS,CAuD3B,CAAC"}
@@ -0,0 +1,145 @@
1
+ import { err, ok } from '../core/index.js';
2
+ import { REL, attr, first, root } from './xml.js';
3
+ /** Basename of an OPC part URI without the `.xml` suffix (e.g. `slideLayout1`). */
4
+ export const layoutPartBaseName = (partUri) => partUri
5
+ .split('/')
6
+ .pop()
7
+ ?.replace(/\.xml$/i, '') ?? '';
8
+ /** Natural-sort compare so `slideLayout2` < `slideLayout10`. */
9
+ export const naturalCompare = (a, b) => {
10
+ const re = /(\d+)|(\D+)/g;
11
+ const as = a.toLowerCase().match(re) ?? [];
12
+ const bs = b.toLowerCase().match(re) ?? [];
13
+ const n = Math.max(as.length, bs.length);
14
+ for (let i = 0; i < n; i++) {
15
+ const x = as[i] ?? '';
16
+ const y = bs[i] ?? '';
17
+ if (x === y)
18
+ continue;
19
+ const xn = /^\d+$/.test(x);
20
+ const yn = /^\d+$/.test(y);
21
+ if (xn && yn) {
22
+ const d = Number(x) - Number(y);
23
+ if (d !== 0)
24
+ return d;
25
+ continue;
26
+ }
27
+ if (xn !== yn)
28
+ return xn ? -1 : 1;
29
+ if (x < y)
30
+ return -1;
31
+ if (x > y)
32
+ return 1;
33
+ }
34
+ return 0;
35
+ };
36
+ /** Layouts in stable natural order of part basename (matches `list layouts` index). */
37
+ export const orderedLayouts = (index) => index.elements
38
+ .filter((item) => item.kind === 'layout')
39
+ .slice()
40
+ .sort((a, b) => naturalCompare(layoutPartBaseName(a.partUri), layoutPartBaseName(b.partUri)));
41
+ /** `p:cSld/@name` on a slideLayout part. */
42
+ export const layoutDisplayName = (archive, partUri) => {
43
+ try {
44
+ const cSld = first(archive.readXml(partUri), 'cSld');
45
+ return attr(cSld, 'name') ?? '';
46
+ }
47
+ catch {
48
+ return '';
49
+ }
50
+ };
51
+ /** `p:sldLayout/@type` when present. */
52
+ export const layoutTypeAttr = (archive, partUri) => {
53
+ try {
54
+ const type = attr(root(archive.readXml(partUri)), 'type');
55
+ return type || undefined;
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ };
61
+ /** Slide→layout relationship target, if any. */
62
+ export const slideLayoutPart = (archive, slidePart) => {
63
+ const rel = archive.getRelationships(slidePart).find((r) => r.type === REL.layout);
64
+ return rel?.resolvedTarget;
65
+ };
66
+ export const layoutListMeta = (archive, item, listIndex) => {
67
+ const name = layoutPartBaseName(item.partUri);
68
+ const displayName = layoutDisplayName(archive, item.partUri);
69
+ const type = layoutTypeAttr(archive, item.partUri);
70
+ return {
71
+ index: listIndex,
72
+ target: `layout:${name}`,
73
+ name,
74
+ displayName,
75
+ ...(type !== undefined ? { type } : {}),
76
+ partUri: item.partUri,
77
+ };
78
+ };
79
+ /**
80
+ * Resolve a layout reference used by `addSlide` / `setSlideLayout`.
81
+ *
82
+ * Accepts:
83
+ * - `slide:N` — inherit that slide's layout relationship
84
+ * - bare digit / `layout:N` — 1-based index into {@link orderedLayouts}
85
+ * - display name (`Blank`), basename (`slideLayout2`), or substring of display
86
+ * (except needle `blank`, which requires an exact Blank match)
87
+ *
88
+ * When `allowBlankFallback` is true and needle is `blank` with no match,
89
+ * returns `ok(undefined)` so callers can fall through to inheritance.
90
+ */
91
+ export const resolveLayoutRef = (archive, index, ref, options = {}) => {
92
+ const raw = ref.trim();
93
+ if (!raw)
94
+ return err('INVALID_COMMAND', 'Layout reference is empty');
95
+ const slideMatch = /^slide:(\d+)$/i.exec(raw);
96
+ if (slideMatch) {
97
+ const page = Number(slideMatch[1]);
98
+ const slides = index.elements.filter((item) => item.kind === 'slide');
99
+ const slide = slides[page - 1];
100
+ if (!slide)
101
+ return err('TARGET_NOT_FOUND', `slide:${page} does not exist`, [], {
102
+ target: `slide:${page}`,
103
+ hint: 'Run deckuse list slides --json.',
104
+ });
105
+ const part = slideLayoutPart(archive, slide.partUri);
106
+ if (!part)
107
+ return err('TARGET_NOT_FOUND', `slide:${page} has no slideLayout relationship`, [], {
108
+ target: `slide:${page}`,
109
+ });
110
+ return ok(part);
111
+ }
112
+ let indexNeedle;
113
+ const layoutIndexMatch = /^layout:(\d+)$/i.exec(raw);
114
+ if (layoutIndexMatch)
115
+ indexNeedle = Number(layoutIndexMatch[1]);
116
+ else if (/^\d+$/.test(raw))
117
+ indexNeedle = Number(raw);
118
+ const layouts = orderedLayouts(index);
119
+ if (indexNeedle !== undefined) {
120
+ if (!Number.isInteger(indexNeedle) || indexNeedle < 1)
121
+ return err('INVALID_COMMAND', `Invalid layout index: ${raw}`, [], { target: raw });
122
+ const hit = layouts[indexNeedle - 1];
123
+ if (!hit)
124
+ return err('TARGET_NOT_FOUND', `Layout index out of range: ${indexNeedle}`, [], {
125
+ target: `layout:${indexNeedle}`,
126
+ hint: 'Run deckuse list layouts --json.',
127
+ });
128
+ return ok(hit.partUri);
129
+ }
130
+ const needle = raw.toLowerCase().replace(/^layout:/i, '');
131
+ const match = layouts.find((item) => {
132
+ const fileName = layoutPartBaseName(item.partUri).toLowerCase();
133
+ const display = layoutDisplayName(archive, item.partUri).toLowerCase();
134
+ return (display === needle || fileName === needle || (needle !== 'blank' && display.includes(needle)));
135
+ });
136
+ if (match)
137
+ return ok(match.partUri);
138
+ if (options.allowBlankFallback && needle === 'blank')
139
+ return ok(undefined);
140
+ return err('TARGET_NOT_FOUND', `Layout not found: ${ref}`, [], {
141
+ target: raw,
142
+ hint: 'Use a layout index, layout:N, slide:N, display name, or basename (deckuse list layouts --json).',
143
+ });
144
+ };
145
+ //# sourceMappingURL=layout-ref.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout-ref.js","sourceRoot":"","sources":["../../src/pptx/layout-ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,kBAAkB,CAAC;AAGxD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAElD,mFAAmF;AACnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAU,EAAE,CAC5D,OAAO;KACJ,KAAK,CAAC,GAAG,CAAC;KACV,GAAG,EAAE;IACN,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;AAEnC,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC7D,MAAM,EAAE,GAAG,cAAc,CAAC;IAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACtB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAEF,uFAAuF;AACvF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAgB,EAAoB,EAAE,CACnE,KAAK,CAAC,QAAQ;KACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;KACxC,KAAK,EAAE;KACP,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAElG,4CAA4C;AAC5C,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAmB,EAAE,OAAe,EAAU,EAAE;IAChF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEF,wCAAwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAmB,EAAE,OAAe,EAAsB,EAAE;IACzF,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC1D,OAAO,IAAI,IAAI,SAAS,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAmB,EAAE,SAAiB,EAAsB,EAAE;IAC5F,MAAM,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;IACnF,OAAO,GAAG,EAAE,cAAc,CAAC;AAC7B,CAAC,CAAC;AAYF,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAmB,EACnB,IAAoB,EACpB,SAAiB,EACY,EAAE;IAC/B,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO;QACL,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,UAAU,IAAI,EAAE;QACxB,IAAI;QACJ,WAAW;QACX,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAmB,EACnB,KAAgB,EAChB,GAAW,EACX,UAA4C,EAAE,EAClB,EAAE;IAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG;QAAE,OAAO,GAAG,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;IAErE,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK;YACR,OAAO,GAAG,CAAC,kBAAkB,EAAE,SAAS,IAAI,iBAAiB,EAAE,EAAE,EAAE;gBACjE,MAAM,EAAE,SAAS,IAAI,EAAE;gBACvB,IAAI,EAAE,iCAAiC;aACxC,CAAC,CAAC;QACL,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACrD,IAAI,CAAC,IAAI;YACP,OAAO,GAAG,CAAC,kBAAkB,EAAE,SAAS,IAAI,kCAAkC,EAAE,EAAE,EAAE;gBAClF,MAAM,EAAE,SAAS,IAAI,EAAE;aACxB,CAAC,CAAC;QACL,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,WAA+B,CAAC;IACpC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,gBAAgB;QAAE,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3D,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;QAAE,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAEtD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;YACnD,OAAO,GAAG,CAAC,iBAAiB,EAAE,yBAAyB,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG;YACN,OAAO,GAAG,CAAC,kBAAkB,EAAE,8BAA8B,WAAW,EAAE,EAAE,EAAE,EAAE;gBAC9E,MAAM,EAAE,UAAU,WAAW,EAAE;gBAC/B,IAAI,EAAE,kCAAkC;aACzC,CAAC,CAAC;QACL,OAAO,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAClC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAChE,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACvE,OAAO,CACL,OAAO,KAAK,MAAM,IAAI,QAAQ,KAAK,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAC9F,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,KAAK;QAAE,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,OAAO,CAAC,kBAAkB,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC,kBAAkB,EAAE,qBAAqB,GAAG,EAAE,EAAE,EAAE,EAAE;QAC7D,MAAM,EAAE,GAAG;QACX,IAAI,EAAE,iGAAiG;KACxG,CAAC,CAAC;AACL,CAAC,CAAC"}