@deckflow/deckuse-pptx 1.0.0 → 1.1.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 (79) hide show
  1. package/LICENSE +662 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/adapter.d.ts +70 -3
  4. package/dist/adapter.d.ts.map +1 -1
  5. package/dist/adapter.js +519 -86
  6. package/dist/adapter.js.map +1 -1
  7. package/dist/addressing.d.ts +45 -0
  8. package/dist/addressing.d.ts.map +1 -0
  9. package/dist/addressing.js +401 -0
  10. package/dist/addressing.js.map +1 -0
  11. package/dist/chart-classify.d.ts +10 -0
  12. package/dist/chart-classify.d.ts.map +1 -0
  13. package/dist/chart-classify.js +54 -0
  14. package/dist/chart-classify.js.map +1 -0
  15. package/dist/chart.d.ts +33 -0
  16. package/dist/chart.d.ts.map +1 -0
  17. package/dist/chart.js +492 -0
  18. package/dist/chart.js.map +1 -0
  19. package/dist/edition.d.ts +20 -0
  20. package/dist/edition.d.ts.map +1 -0
  21. package/dist/edition.js +46 -0
  22. package/dist/edition.js.map +1 -0
  23. package/dist/elements.d.ts.map +1 -1
  24. package/dist/elements.js +61 -46
  25. package/dist/elements.js.map +1 -1
  26. package/dist/hyperlink.d.ts +7 -0
  27. package/dist/hyperlink.d.ts.map +1 -0
  28. package/dist/hyperlink.js +83 -0
  29. package/dist/hyperlink.js.map +1 -0
  30. package/dist/index-sync.d.ts +7 -0
  31. package/dist/index-sync.d.ts.map +1 -0
  32. package/dist/index-sync.js +24 -0
  33. package/dist/index-sync.js.map +1 -0
  34. package/dist/index.d.ts +2 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +2 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/indexer.d.ts +4 -0
  39. package/dist/indexer.d.ts.map +1 -1
  40. package/dist/indexer.js +105 -27
  41. package/dist/indexer.js.map +1 -1
  42. package/dist/media.d.ts +15 -0
  43. package/dist/media.d.ts.map +1 -0
  44. package/dist/media.js +141 -0
  45. package/dist/media.js.map +1 -0
  46. package/dist/mutations.d.ts +8 -2
  47. package/dist/mutations.d.ts.map +1 -1
  48. package/dist/mutations.js +695 -72
  49. package/dist/mutations.js.map +1 -1
  50. package/dist/picture.d.ts.map +1 -1
  51. package/dist/picture.js +1 -3
  52. package/dist/picture.js.map +1 -1
  53. package/dist/properties.d.ts +6 -1
  54. package/dist/properties.d.ts.map +1 -1
  55. package/dist/properties.js +159 -10
  56. package/dist/properties.js.map +1 -1
  57. package/dist/resolve-properties.d.ts +17 -0
  58. package/dist/resolve-properties.d.ts.map +1 -0
  59. package/dist/resolve-properties.js +545 -0
  60. package/dist/resolve-properties.js.map +1 -0
  61. package/dist/slides.d.ts +3 -1
  62. package/dist/slides.d.ts.map +1 -1
  63. package/dist/slides.js +77 -4
  64. package/dist/slides.js.map +1 -1
  65. package/dist/table.d.ts +15 -0
  66. package/dist/table.d.ts.map +1 -0
  67. package/dist/table.js +456 -0
  68. package/dist/table.js.map +1 -0
  69. package/dist/types.d.ts +2 -1
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/workspace.d.ts +9 -9
  72. package/dist/workspace.d.ts.map +1 -1
  73. package/dist/workspace.js +67 -47
  74. package/dist/workspace.js.map +1 -1
  75. package/dist/xml.d.ts +7 -0
  76. package/dist/xml.d.ts.map +1 -1
  77. package/dist/xml.js +86 -13
  78. package/dist/xml.js.map +1 -1
  79. package/package.json +11 -3
@@ -1 +1 @@
1
- {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AA+CxD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,OAAO,EACf,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzB,OAAO,CAAC,OAAO,CAAC,CAalB;AACD,eAAO,MAAM,gBAAgB,GAAI,KAAK,QAAQ,EAAE,MAAM,OAAO,KAAG,OAK/D,CAAC;AACF,wBAAgB,WAAW,CACzB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CA0CvB;AACD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQxE"}
1
+ {"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAyHxD,wBAAsB,UAAU,CAC9B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,OAAO,EACf,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACzB,OAAO,CAAC,OAAO,CAAC,CAgBlB;AACD,eAAO,MAAM,gBAAgB,GAAI,KAAK,QAAQ,EAAE,MAAM,OAAO,KAAG,OAK/D,CAAC;AACF,wBAAgB,WAAW,CACzB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAKvB;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQxE"}
package/dist/elements.js CHANGED
@@ -1,18 +1,44 @@
1
1
  import { OpcArchive, parseXml } from '@deckflow/deckuse-opc';
2
+ import { applyChartProperties, chartGraphicFrameXml, createChartPart, } from './chart.js';
3
+ import { addMediaPart, mediaPicXml } from './media.js';
2
4
  import { addPicturePart } from './picture.js';
3
- import { NS, REL, allocateShapeIds, attr, descendants, first, nextShapeId, setNodeText, } from './xml.js';
5
+ import { NS, REL, allocateShapeIds, attr, descendants, nextShapeId, } from './xml.js';
4
6
  const esc = (value) => value.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;');
5
7
  const value = (obj, key, fallback) => typeof obj[key] === 'string' ? obj[key] : fallback;
6
8
  const num = (obj, key, fallback) => typeof obj[key] === 'number' ? obj[key] : fallback;
7
9
  const xfrm = (e) => `<a:xfrm><a:off x="${String(num(e, 'x', 0))}" y="${String(num(e, 'y', 0))}"/><a:ext cx="${String(num(e, 'width', 914400))}" cy="${String(num(e, 'height', 914400))}"/></a:xfrm>`;
8
- const textBody = (text) => `<p:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${esc(text)}</a:t></a:r></a:p></p:txBody>`;
9
- const shapeXml = (id, e) => `<p:sp xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvSpPr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Shape ${String(id)}`))}"/><p:cNvSpPr txBox="1"/><p:nvPr/></p:nvSpPr><p:spPr>${xfrm(e)}<a:prstGeom prst="${esc(value(e, 'preset', 'rect'))}"><a:avLst/></a:prstGeom></p:spPr>${textBody(value(e, 'text', ''))}</p:sp>`;
10
+ /** graphicFrame uses PresentationML p:xfrm (not DrawingML a:xfrm). */
11
+ const graphicFrameXfrm = (e) => `<p:xfrm><a:off x="${String(num(e, 'x', 0))}" y="${String(num(e, 'y', 0))}"/><a:ext cx="${String(num(e, 'width', 914400))}" cy="${String(num(e, 'height', 914400))}"/></p:xfrm>`;
12
+ const textBody = (text) => {
13
+ const lines = text.split('\n');
14
+ return `<p:txBody><a:bodyPr/><a:lstStyle/>${lines
15
+ .map((line) => `<a:p><a:r><a:t>${esc(line)}</a:t></a:r></a:p>`)
16
+ .join('')}</p:txBody>`;
17
+ };
18
+ const nvPrXml = (e) => {
19
+ const role = typeof e['role'] === 'string' ? e['role'] : undefined;
20
+ if (!role)
21
+ return '<p:nvPr/>';
22
+ const idx = typeof e['placeholderIdx'] === 'string' ? e['placeholderIdx'] : undefined;
23
+ const idxAttr = idx !== undefined ? ` idx="${esc(idx)}"` : '';
24
+ return `<p:nvPr><p:ph type="${esc(role)}"${idxAttr}/></p:nvPr>`;
25
+ };
26
+ const shapeXml = (id, e) => `<p:sp xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvSpPr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Shape ${String(id)}`))}"/><p:cNvSpPr txBox="1"/>${nvPrXml(e)}</p:nvSpPr><p:spPr>${xfrm(e)}<a:prstGeom prst="${esc(value(e, 'preset', 'rect'))}"><a:avLst/></a:prstGeom></p:spPr>${textBody(value(e, 'text', ''))}</p:sp>`;
10
27
  const connectorXml = (id, e) => `<p:cxnSp xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvCxnSpPr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Connector ${String(id)}`))}"/><p:cNvCxnSpPr/><p:nvPr/></p:nvCxnSpPr><p:spPr>${xfrm(e)}<a:prstGeom prst="line"><a:avLst/></a:prstGeom></p:spPr></p:cxnSp>`;
11
28
  const groupXml = (id, e) => `<p:grpSp xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvGrpSpPr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Group ${String(id)}`))}"/><p:cNvGrpSpPr/><p:nvPr/></p:nvGrpSpPr><p:grpSpPr><a:xfrm><a:off x="${String(num(e, 'x', 0))}" y="${String(num(e, 'y', 0))}"/><a:ext cx="${String(num(e, 'width', 914400))}" cy="${String(num(e, 'height', 914400))}"/><a:chOff x="0" y="0"/><a:chExt cx="${String(num(e, 'width', 914400))}" cy="${String(num(e, 'height', 914400))}"/></a:xfrm></p:grpSpPr></p:grpSp>`;
12
29
  const tableXml = (id, e) => {
13
30
  const rows = Array.isArray(e['rows']) ? e['rows'] : [['']];
14
31
  const cols = Math.max(1, ...rows.map((r) => r.length));
15
- return `<p:graphicFrame xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvGraphicFramePr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Table ${String(id)}`))}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>${xfrm(e)}<a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table"><a:tbl><a:tblPr firstRow="1"/><a:tblGrid>${Array.from({ length: cols }, () => `<a:gridCol w="${String(Math.floor(num(e, 'width', 914400 * cols) / cols))}"/>`).join('')}</a:tblGrid>${rows.map((row) => `<a:tr h="370840">${Array.from({ length: cols }, (_, i) => `<a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:r><a:t>${esc(typeof row[i] === 'string' ? row[i] : '')}</a:t></a:r></a:p></a:txBody><a:tcPr/></a:tc>`).join('')}</a:tr>`).join('')}</a:tbl></a:graphicData></a:graphic></p:graphicFrame>`;
32
+ const colW = String(Math.floor(num(e, 'width', 914400 * cols) / cols));
33
+ const cellXml = (text, header) => {
34
+ const fill = header ? '1B4F72' : 'FFFFFF';
35
+ const color = header ? 'FFFFFF' : '1A1A1A';
36
+ const bold = header ? ' b="1"' : '';
37
+ // tcPr child order per OOXML: lnL/lnR/lnT/lnB … then EG_FillProperties (not a generic a:ln).
38
+ const border = (side) => `<a:${side} w="6350"><a:solidFill><a:srgbClr val="D0D0D0"/></a:solidFill></a:${side}>`;
39
+ return `<a:tc><a:txBody><a:bodyPr/><a:lstStyle/><a:p><a:pPr algn="ctr"/><a:r><a:rPr lang="zh-CN" sz="1100"${bold}><a:solidFill><a:srgbClr val="${color}"/></a:solidFill></a:rPr><a:t>${esc(text)}</a:t></a:r></a:p></a:txBody><a:tcPr>${border('lnL')}${border('lnR')}${border('lnT')}${border('lnB')}<a:solidFill><a:srgbClr val="${fill}"/></a:solidFill></a:tcPr></a:tc>`;
40
+ };
41
+ return `<p:graphicFrame xmlns:p="${NS.p}" xmlns:a="${NS.a}"><p:nvGraphicFramePr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Table ${String(id)}`))}"/><p:cNvGraphicFramePr/><p:nvPr/></p:nvGraphicFramePr>${graphicFrameXfrm(e)}<a:graphic><a:graphicData uri="http://schemas.openxmlformats.org/drawingml/2006/table"><a:tbl><a:tblPr firstRow="1"/><a:tblGrid>${Array.from({ length: cols }, () => `<a:gridCol w="${colW}"/>`).join('')}</a:tblGrid>${rows.map((row, rowIndex) => `<a:tr h="370840">${Array.from({ length: cols }, (_, i) => cellXml(typeof row[i] === 'string' ? row[i] : '', rowIndex === 0)).join('')}</a:tr>`).join('')}</a:tbl></a:graphicData></a:graphic></p:graphicFrame>`;
16
42
  };
17
43
  async function pictureXml(archive, slidePart, id, e) {
18
44
  const added = await addPicturePart(archive, slidePart, {
@@ -24,6 +50,29 @@ async function pictureXml(archive, slidePart, id, e) {
24
50
  const rid = added.value.rid;
25
51
  return `<p:pic xmlns:p="${NS.p}" xmlns:a="${NS.a}" xmlns:r="${NS.r}"><p:nvPicPr><p:cNvPr id="${String(id)}" name="${esc(value(e, 'name', `Picture ${String(id)}`))}"/><p:cNvPicPr><a:picLocks noChangeAspect="1"/></p:cNvPicPr><p:nvPr/></p:nvPicPr><p:blipFill><a:blip r:embed="${rid}"/><a:stretch><a:fillRect/></a:stretch></p:blipFill><p:spPr>${xfrm(e)}<a:prstGeom prst="rect"><a:avLst/></a:prstGeom></p:spPr></p:pic>`;
26
52
  }
53
+ function chartXml(archive, slidePart, id, e) {
54
+ const chartType = value(e, 'chartType', 'column');
55
+ const data = (e['data'] ?? {});
56
+ const series = Array.isArray(data.series) ? data.series : [];
57
+ if (series.length === 0)
58
+ throw new Error('Chart requires data.series with at least one series');
59
+ const created = createChartPart(archive, slidePart, {
60
+ chartType,
61
+ ...(typeof data.title === 'string' ? { title: data.title } : {}),
62
+ categories: Array.isArray(data.categories) ? data.categories : [],
63
+ series,
64
+ });
65
+ return chartGraphicFrameXml(id, created.rid, e);
66
+ }
67
+ async function avMediaXml(archive, slidePart, id, e, kind) {
68
+ const path = typeof e['path'] === 'string' ? e['path'] : undefined;
69
+ if (!path)
70
+ throw new Error(`${kind} requires path`);
71
+ const added = await addMediaPart(archive, slidePart, { path, kind });
72
+ if (!added.ok)
73
+ throw new Error(added.error.message);
74
+ return mediaPicXml(id, e, kind, added.value.fileRid, added.value.mediaRid, added.value.posterRid);
75
+ }
27
76
  export async function addElement(archive, slidePart, doc, parent, e) {
28
77
  const kind = value(e, 'kind', value(e, 'type', 'textbox')), id = nextShapeId(doc);
29
78
  let xml;
@@ -35,6 +84,12 @@ export async function addElement(archive, slidePart, doc, parent, e) {
35
84
  xml = tableXml(id, e);
36
85
  else if (kind === 'picture')
37
86
  xml = await pictureXml(archive, slidePart, id, e);
87
+ else if (kind === 'chart')
88
+ xml = chartXml(archive, slidePart, id, e);
89
+ else if (kind === 'video')
90
+ xml = await avMediaXml(archive, slidePart, id, e, 'video');
91
+ else if (kind === 'audio')
92
+ xml = await avMediaXml(archive, slidePart, id, e, 'audio');
38
93
  else
39
94
  xml = shapeXml(id, e);
40
95
  const node = parseXml(xml).documentElement, imported = doc.importNode(node, true);
@@ -49,48 +104,8 @@ export const duplicateElement = (doc, node) => {
49
104
  };
50
105
  export function updateChart(archive, part, properties) {
51
106
  const chart = archive.readXml(part);
52
- if (typeof properties['title'] === 'string')
53
- setNodeText(first(chart, 'title') ??
54
- (() => {
55
- if (!chart.documentElement)
56
- throw new Error('Chart XML has no root');
57
- return chart.documentElement;
58
- })(), properties['title']);
59
- const series = properties['series'];
60
- if (Array.isArray(series))
61
- series.forEach((input, index) => {
62
- if (typeof input !== 'object' || input === null)
63
- return;
64
- const spec = input, node = descendants(chart, 'ser')[index];
65
- if (!node)
66
- return;
67
- if (typeof spec['name'] === 'string') {
68
- const tx = first(node, 'tx');
69
- if (tx) {
70
- const v = first(tx, 'v');
71
- if (v)
72
- v.textContent = spec['name'];
73
- else
74
- setNodeText(tx, spec['name']);
75
- }
76
- }
77
- if (Array.isArray(spec['values'])) {
78
- const values = spec['values'];
79
- const cache = first(first(node, 'val') ?? node, 'numCache');
80
- if (cache) {
81
- const points = descendants(cache, 'pt');
82
- values.forEach((entry, i) => {
83
- const v = first(points[i] ?? cache, 'v');
84
- if (v)
85
- v.textContent = String(entry);
86
- });
87
- const count = first(cache, 'ptCount');
88
- if (count)
89
- count.setAttribute('val', String(values.length));
90
- }
91
- }
92
- });
93
- archive.writeXml(part, chart, archive.getPart(part)?.mediaType);
107
+ applyChartProperties(chart, properties);
108
+ archive.writeXml(part, chart);
94
109
  return { workbook: archive.getRelationships(part).some((r) => r.type === REL.package) };
95
110
  }
96
111
  export function setColor(node, from, to) {
@@ -1 +1 @@
1
- {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elements.js","sourceRoot":"","sources":["../src/elements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { OpcArchive } from '@deckflow/deckuse-opc';
2
+ import type { Element } from '@xmldom/xmldom';
3
+ /** Read the external hyperlink URL on a shape/picture `cNvPr`, if any. */
4
+ export declare const readHyperlink: (archive: OpcArchive, slidePart: string, node: Element) => string | null;
5
+ /** Set or clear an external click hyperlink on a shape/picture. Pass null/empty to clear. */
6
+ export declare function setHyperlink(archive: OpcArchive, slidePart: string, node: Element, url: string | null): void;
7
+ //# sourceMappingURL=hyperlink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperlink.d.ts","sourceRoot":"","sources":["../src/hyperlink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAa9C,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GAAI,SAAS,UAAU,EAAE,WAAW,MAAM,EAAE,MAAM,OAAO,KAAG,MAAM,GAAG,IAS9F,CAAC;AAyBF,6FAA6F;AAC7F,wBAAgB,YAAY,CAC1B,OAAO,EAAE,UAAU,EACnB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,GAAG,EAAE,MAAM,GAAG,IAAI,GACjB,IAAI,CAmCN"}
@@ -0,0 +1,83 @@
1
+ import { NS, REL, attr, children, cNvPr, first } from './xml.js';
2
+ const nextRelId = (rels) => {
3
+ const used = new Set(rels.map((r) => r.id));
4
+ let n = 1;
5
+ while (used.has(`rId${String(n)}`))
6
+ n++;
7
+ return `rId${String(n)}`;
8
+ };
9
+ const hlinkRidOf = (hlink) => hlink.getAttributeNS(NS.r, 'id') ?? attr(hlink, 'r:id');
10
+ /** Read the external hyperlink URL on a shape/picture `cNvPr`, if any. */
11
+ export const readHyperlink = (archive, slidePart, node) => {
12
+ const pr = cNvPr(node);
13
+ if (!pr)
14
+ return null;
15
+ const hlink = children(pr).find((c) => c.localName === 'hlinkClick') ?? first(pr, 'hlinkClick');
16
+ if (!hlink)
17
+ return null;
18
+ const rid = hlinkRidOf(hlink);
19
+ if (!rid)
20
+ return null;
21
+ const rel = archive.getRelationships(slidePart).find((r) => r.id === rid);
22
+ return rel?.target ?? null;
23
+ };
24
+ const removeHlinkClicks = (pr) => {
25
+ const removed = [];
26
+ for (const child of [...children(pr)]) {
27
+ if (child.localName !== 'hlinkClick')
28
+ continue;
29
+ const rid = hlinkRidOf(child);
30
+ if (rid)
31
+ removed.push(rid);
32
+ pr.removeChild(child);
33
+ }
34
+ return removed;
35
+ };
36
+ const ridStillUsedInDoc = (root, rid, except) => {
37
+ const walk = (node) => {
38
+ if (node !== except) {
39
+ const embed = node.getAttributeNS(NS.r, 'id') ?? attr(node, 'r:id');
40
+ if (embed === rid)
41
+ return true;
42
+ }
43
+ for (const child of children(node))
44
+ if (walk(child))
45
+ return true;
46
+ return false;
47
+ };
48
+ return walk(root);
49
+ };
50
+ /** Set or clear an external click hyperlink on a shape/picture. Pass null/empty to clear. */
51
+ export function setHyperlink(archive, slidePart, node, url) {
52
+ const pr = cNvPr(node);
53
+ if (!pr)
54
+ throw new Error('Element has no cNvPr for hyperlink');
55
+ const doc = node.ownerDocument;
56
+ if (!doc?.documentElement)
57
+ throw new Error('Element has no document');
58
+ const removedRids = removeHlinkClicks(pr);
59
+ let rels = [...archive.getRelationships(slidePart)];
60
+ for (const rid of removedRids) {
61
+ const rel = rels.find((r) => r.id === rid);
62
+ if (rel?.type === REL.hyperlink &&
63
+ rel.external &&
64
+ !ridStillUsedInDoc(doc.documentElement, rid))
65
+ rels = rels.filter((r) => r.id !== rid);
66
+ }
67
+ if (url === null || url === '') {
68
+ archive.setRelationships(slidePart, rels);
69
+ return;
70
+ }
71
+ const rid = nextRelId(rels);
72
+ rels.push({
73
+ id: rid,
74
+ type: REL.hyperlink,
75
+ target: url,
76
+ external: true,
77
+ });
78
+ archive.setRelationships(slidePart, rels);
79
+ const hlink = doc.createElementNS(NS.a, 'a:hlinkClick');
80
+ hlink.setAttributeNS(NS.r, 'r:id', rid);
81
+ pr.appendChild(hlink);
82
+ }
83
+ //# sourceMappingURL=hyperlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperlink.js","sourceRoot":"","sources":["../src/hyperlink.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { WorkspaceManifest } from '@deckflow/deckuse-core';
2
+ import type { OpcArchive } from '@deckflow/deckuse-opc';
3
+ import type { IndexFile } from './types.js';
4
+ export declare function loadIndex(workspace: string, archive: OpcArchive, manifest: WorkspaceManifest, options?: {
5
+ persist?: boolean;
6
+ }): Promise<IndexFile>;
7
+ //# sourceMappingURL=index-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-sync.d.ts","sourceRoot":"","sources":["../src/index-sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAIxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9B,OAAO,CAAC,SAAS,CAAC,CAepB"}
@@ -0,0 +1,24 @@
1
+ import { resolve } from 'node:path';
2
+ import { writeMetadata } from '@deckflow/deckuse-workspace';
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/index-sync.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,6 @@
1
1
  export { pptxAdapter, pptxCapabilities } from './adapter.js';
2
2
  export { buildIndex } from './indexer.js';
3
+ export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionMetadata, } from './edition.js';
4
+ export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
3
5
  export type { IndexedElement, IndexFile, ElementKind } from './types.js';
4
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/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,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export { pptxAdapter, pptxCapabilities } from './adapter.js';
2
2
  export { buildIndex } from './indexer.js';
3
+ export { EDITION, EDITION_VARIANT, DISTRIBUTION_CHANNEL, editionMetadata, } from './edition.js';
4
+ export { classifyChartDocument, classifyChartPart } from './chart-classify.js';
3
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/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,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/indexer.d.ts CHANGED
@@ -2,6 +2,10 @@ import type { ElementRef } from '@deckflow/deckuse-core';
2
2
  import type { OpcArchive } from '@deckflow/deckuse-opc';
3
3
  import type { IndexFile, IndexedElement } from './types.js';
4
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[];
5
9
  export declare const findIndexed: (index: IndexFile, ref: ElementRef) => IndexedElement | undefined;
6
10
  export declare function matchesSelector(item: IndexedElement, selector: string | {
7
11
  kind?: string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,KAAK,EAAe,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAsCzE,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAiK1F;AACD,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"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,KAAK,EAAe,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAuDzE,wBAAgB,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAkM1F;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"}
package/dist/indexer.js CHANGED
@@ -1,21 +1,39 @@
1
1
  import { basename } from 'node:path';
2
+ import { readSeriesColor } from './chart.js';
2
3
  import { mediaHref } from './workspace.js';
3
4
  import { NS, REL, attr, cNvPr, children, descendants, first, root, textOf } from './xml.js';
4
- const classify = (node) => node.localName === 'sp'
5
- ? first(node, 'txBody')
6
- ? 'textbox'
7
- : 'shape'
8
- : node.localName === 'pic'
9
- ? 'picture'
10
- : node.localName === 'cxnSp'
11
- ? 'connector'
12
- : node.localName === 'grpSp'
13
- ? 'group'
14
- : first(node, 'tbl')
15
- ? 'table'
16
- : first(node, 'chart')
17
- ? 'chart'
18
- : undefined;
5
+ const directChild = (node, localName) => children(node).find((child) => child.localName === localName);
6
+ const classify = (node) => {
7
+ if (node.localName === 'sp')
8
+ return first(node, 'txBody') ? 'textbox' : 'shape';
9
+ if (node.localName === 'pic')
10
+ return first(node, 'videoFile') ? 'video' : first(node, 'audioFile') ? 'audio' : 'picture';
11
+ if (node.localName === 'cxnSp')
12
+ return 'connector';
13
+ if (node.localName === 'grpSp')
14
+ return 'group';
15
+ if (node.localName === 'graphicFrame') {
16
+ if (first(node, 'tbl'))
17
+ return 'table';
18
+ if (first(node, 'chart'))
19
+ return 'chart';
20
+ }
21
+ return undefined;
22
+ };
23
+ const readPlaceholder = (node) => {
24
+ const nv = directChild(node, 'nvSpPr') ??
25
+ directChild(node, 'nvPicPr') ??
26
+ directChild(node, 'nvCxnSpPr') ??
27
+ directChild(node, 'nvGraphicFramePr') ??
28
+ directChild(node, 'nvGrpSpPr');
29
+ const nvPr = nv ? directChild(nv, 'nvPr') : undefined;
30
+ const ph = nvPr ? directChild(nvPr, 'ph') : undefined;
31
+ if (!ph)
32
+ return undefined;
33
+ const type = attr(ph, 'type') ?? 'body';
34
+ const idx = attr(ph, 'idx');
35
+ return { type, ...(idx !== undefined ? { idx } : {}) };
36
+ };
19
37
  const transformOf = (node) => {
20
38
  const x = first(node, 'xfrm');
21
39
  if (!x)
@@ -66,6 +84,17 @@ export function buildIndex(archive, documentId, rev) {
66
84
  continue;
67
85
  }
68
86
  const own = attr(cNvPr(child), 'id') ?? child.nodeName, id = `${slideId}:${[...ancestors, own].join('.')}`, transform = transformOf(child), name = attr(cNvPr(child), 'name'), text = textOf(child);
87
+ const ph = readPlaceholder(child);
88
+ const placeholderType = ph?.type;
89
+ const placeholderIdx = ph?.idx;
90
+ const pr = cNvPr(child);
91
+ const hlink = pr
92
+ ? children(pr).find((c) => c.localName === 'hlinkClick')
93
+ : undefined;
94
+ const hlinkRid = hlink?.getAttributeNS(NS.r, 'id') ?? (hlink ? attr(hlink, 'r:id') : undefined);
95
+ const hlinkRel = hlinkRid
96
+ ? archive.getRelationships(partUri).find((r) => r.id === hlinkRid)
97
+ : undefined;
69
98
  const indexed = {
70
99
  ref: { documentId, elementId: id, path: `${partUri}#${id}`, revision: rev },
71
100
  kind,
@@ -77,6 +106,13 @@ export function buildIndex(archive, documentId, rev) {
77
106
  ...(text ? { text } : {}),
78
107
  ...(transform ? { transform } : {}),
79
108
  };
109
+ if (placeholderType || hlinkRel) {
110
+ indexed.payload = {
111
+ ...(placeholderType ? { placeholder: placeholderType } : {}),
112
+ ...(placeholderIdx !== undefined ? { placeholderIdx } : {}),
113
+ ...(hlinkRel ? { hyperlink: hlinkRel.target } : {}),
114
+ };
115
+ }
80
116
  elements.push(indexed);
81
117
  if (kind === 'table') {
82
118
  const rows = descendants(child, 'tr');
@@ -99,20 +135,25 @@ export function buildIndex(archive, documentId, rev) {
99
135
  }));
100
136
  });
101
137
  }
102
- if (kind === 'picture') {
138
+ if (kind === 'picture' || kind === 'video' || kind === 'audio') {
103
139
  const blip = first(child, 'blip');
104
140
  const embed = blip?.getAttributeNS(NS.r, 'embed') ?? attr(blip, 'r:embed');
105
141
  const link = blip?.getAttributeNS(NS.r, 'link') ?? attr(blip, 'r:link');
106
- const rid = embed ?? link;
107
- const rel = rid
108
- ? archive.getRelationships(partUri).find((r) => r.id === rid)
109
- : undefined;
142
+ const video = first(child, 'videoFile');
143
+ const audio = first(child, 'audioFile');
144
+ const mediaLink = (video ?? audio)?.getAttributeNS(NS.r, 'link') ??
145
+ attr(video ?? audio, 'r:link') ??
146
+ undefined;
147
+ const rid = mediaLink ?? embed ?? link;
148
+ const rel = rid ? archive.getRelationships(partUri).find((r) => r.id === rid) : undefined;
110
149
  if (rel) {
111
150
  const mediaPart = rel.resolvedTarget ?? rel.target;
112
- const external = Boolean(rel.external || (!embed && link));
151
+ const external = Boolean(rel.external || (!embed && link && !mediaLink));
113
152
  indexed.payload = {
153
+ ...(indexed.payload ?? {}),
114
154
  mediaPart,
115
155
  href: external ? rel.target : mediaHref(documentId, mediaPart),
156
+ ...(kind !== 'picture' ? { mediaKind: kind } : {}),
116
157
  ...(external ? { external: true } : {}),
117
158
  ...(!external && rel.resolvedTarget
118
159
  ? {
@@ -129,20 +170,27 @@ export function buildIndex(archive, documentId, rev) {
129
170
  if (cr?.resolvedTarget) {
130
171
  const chart = archive.readXml(cr.resolvedTarget);
131
172
  indexed.payload = {
173
+ ...(indexed.payload ?? {}),
132
174
  chartPart: cr.resolvedTarget,
133
175
  title: textOf(first(chart, 'title') ?? chart),
134
- series: descendants(chart, 'ser').map((ser) => ({
135
- name: first(first(ser, 'tx') ?? ser, 'v')?.textContent ??
136
- textOf(first(ser, 'tx') ?? ser),
137
- values: descendants(first(ser, 'val') ?? ser, 'v').map((v) => v.textContent ?? ''),
138
- })),
176
+ series: descendants(chart, 'ser').map((ser) => {
177
+ const color = readSeriesColor(ser);
178
+ return {
179
+ name: first(first(ser, 'tx') ?? ser, 'v')?.textContent ??
180
+ textOf(first(ser, 'tx') ?? ser),
181
+ values: descendants(first(ser, 'val') ?? ser, 'v').map((v) => v.textContent ?? ''),
182
+ ...(color ? { color } : {}),
183
+ };
184
+ }),
139
185
  embeddedWorkbook: archive
140
186
  .getRelationships(cr.resolvedTarget)
141
187
  .some((r) => r.type === REL.package),
142
188
  };
143
189
  }
144
190
  }
145
- walk(child, [...ancestors, own], id);
191
+ // Only groups nest addressable descendants; table cells are indexed above.
192
+ if (kind === 'group')
193
+ walk(child, [...ancestors, own], id);
146
194
  }
147
195
  };
148
196
  walk(root(doc), [], `slide:${slideId}`);
@@ -186,6 +234,36 @@ export function buildIndex(archive, documentId, rev) {
186
234
  }
187
235
  return { revision: rev, elements };
188
236
  }
237
+ export const slidePageMap = (index) => {
238
+ const map = new Map();
239
+ let page = 1;
240
+ for (const item of index.elements) {
241
+ if (item.kind !== 'slide')
242
+ continue;
243
+ map.set(item.partUri, page);
244
+ if (item.slideId)
245
+ map.set(item.slideId, page);
246
+ page += 1;
247
+ }
248
+ return map;
249
+ };
250
+ export const slidesForItem = (index, item) => {
251
+ const pages = slidePageMap(index);
252
+ if (item.kind === 'slide') {
253
+ const page = pages.get(item.partUri) ?? (item.slideId ? pages.get(item.slideId) : undefined);
254
+ return page ? [page] : [];
255
+ }
256
+ if (item.slideId) {
257
+ const page = pages.get(item.slideId);
258
+ return page ? [page] : [];
259
+ }
260
+ return [];
261
+ };
262
+ export const slidesForRef = (index, ref) => {
263
+ const item = findIndexed(index, ref);
264
+ return item ? slidesForItem(index, item) : [];
265
+ };
266
+ export const mergeSlides = (...groups) => [...new Set(groups.flat())].sort((a, b) => a - b);
189
267
  export const findIndexed = (index, ref) => index.elements.find((e) => e.ref.elementId === ref.elementId || e.ref.path === ref.path);
190
268
  export function matchesSelector(item, selector) {
191
269
  if (typeof selector === 'string' && (selector === '*' || selector === 'all'))