@taloswork/ose-shared 0.1.1 → 0.1.3

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 (160) hide show
  1. package/package.json +3 -3
  2. package/skills/document/SKILL.md +29 -33
  3. package/skills/document/assets/fonts/Archivo-Regular.woff2 +0 -0
  4. package/skills/document/assets/fonts/Archivo-SemiBold.woff2 +0 -0
  5. package/skills/document/assets/fonts/BigShouldersDisplay-Bold.woff2 +0 -0
  6. package/skills/document/assets/fonts/BodoniModa-SemiBold.woff2 +0 -0
  7. package/skills/document/assets/fonts/CormorantGaramond-SemiBold.woff2 +0 -0
  8. package/skills/document/assets/fonts/Fraunces-SemiBold.woff2 +0 -0
  9. package/skills/document/assets/fonts/GochiHand-Regular.woff2 +0 -0
  10. package/skills/document/assets/fonts/IBMPlexSans-Regular.woff2 +0 -0
  11. package/skills/document/assets/fonts/IBMPlexSans-SemiBold.woff2 +0 -0
  12. package/skills/document/assets/fonts/Inter-Regular.woff2 +0 -0
  13. package/skills/document/assets/fonts/Jost-Regular.woff2 +0 -0
  14. package/skills/document/assets/fonts/Jost-SemiBold.woff2 +0 -0
  15. package/skills/document/assets/fonts/Karla-Regular.woff2 +0 -0
  16. package/skills/document/assets/fonts/Lora-Regular.woff2 +0 -0
  17. package/skills/document/assets/fonts/Manrope-Bold.woff2 +0 -0
  18. package/skills/document/assets/fonts/Manrope-Regular.woff2 +0 -0
  19. package/skills/document/assets/fonts/Marcellus-Regular.woff2 +0 -0
  20. package/skills/document/assets/fonts/PublicSans-Regular.woff2 +0 -0
  21. package/skills/document/assets/fonts/Sora-Regular.woff2 +0 -0
  22. package/skills/document/assets/fonts/Sora-SemiBold.woff2 +0 -0
  23. package/skills/document/assets/fonts/fonts.json +218 -0
  24. package/skills/document/bin/deck-build.cjs +275 -7
  25. package/skills/document/bin/deck-qa.cjs +1 -1
  26. package/skills/document/bin/doc-convert.cjs +11 -11
  27. package/skills/document/bin/doc-fill.cjs +1 -1
  28. package/skills/document/bin/doc-gen.cjs +119 -34
  29. package/skills/document/bin/doc-scan.cjs +8 -10
  30. package/skills/document/bin/doc-text.cjs +1 -1
  31. package/skills/document/bin/doc-validate.cjs +3 -3
  32. package/skills/document/bin/doc-xml.cjs +3 -3
  33. package/skills/document/bin/docx-annotate.cjs +3 -3
  34. package/skills/document/bin/html2pptx.cjs +290 -59
  35. package/skills/document/bin/ocr.cjs +1 -1
  36. package/skills/document/bin/pdf-form.cjs +1 -1
  37. package/skills/document/bin/pdf-images.cjs +1 -1
  38. package/skills/document/bin/pdf-ops.cjs +2 -2
  39. package/skills/document/bin/pdf-render.cjs +1 -1
  40. package/skills/document/bin/pdf-tables.cjs +1 -1
  41. package/skills/document/bin/pptx-clone.cjs +3 -3
  42. package/skills/document/bin/pptx-embed-fonts.cjs +1 -1
  43. package/skills/document/bin/pptx-set-image.cjs +3 -3
  44. package/skills/document/bin/pptx-slide.cjs +4 -4
  45. package/skills/document/bin/pptx-theme.cjs +1 -1
  46. package/skills/document/bin/pptx-tokenize.cjs +3 -3
  47. package/skills/document/bin/xlsx-query.cjs +1 -1
  48. package/skills/document/bin/xlsx-recalc.cjs +2 -2
  49. package/skills/document/catalog.json +25 -0
  50. package/skills/document/deck-design.md +191 -0
  51. package/skills/document/layouts/README.md +32 -0
  52. package/skills/document/layouts/banner-columns.tpl +9 -9
  53. package/skills/document/layouts/bento.tpl +3 -3
  54. package/skills/document/layouts/big-stat.tpl +3 -3
  55. package/skills/document/layouts/blocks-2x2.tpl +12 -12
  56. package/skills/document/layouts/brand-values.tpl +5 -5
  57. package/skills/document/layouts/cards-3.tpl +3 -3
  58. package/skills/document/layouts/cards-grid.tpl +3 -3
  59. package/skills/document/layouts/chart-full.tpl +3 -3
  60. package/skills/document/layouts/chart-kpi.tpl +3 -3
  61. package/skills/document/layouts/color-palette.tpl +5 -5
  62. package/skills/document/layouts/comparison.tpl +3 -3
  63. package/skills/document/layouts/concept-hub.tpl +3 -3
  64. package/skills/document/layouts/cover-centered.tpl +1 -1
  65. package/skills/document/layouts/cover-image.tpl +1 -1
  66. package/skills/document/layouts/cover-minimal.tpl +3 -3
  67. package/skills/document/layouts/cover-statement.tpl +3 -3
  68. package/skills/document/layouts/cover.tpl +1 -1
  69. package/skills/document/layouts/data-table.tpl +3 -3
  70. package/skills/document/layouts/dos-donts.tpl +14 -14
  71. package/skills/document/layouts/editorial-panel.tpl +11 -11
  72. package/skills/document/layouts/ending-contact.tpl +1 -1
  73. package/skills/document/layouts/ending.tpl +1 -1
  74. package/skills/document/layouts/funnel.tpl +3 -3
  75. package/skills/document/layouts/gantt.tpl +3 -3
  76. package/skills/document/layouts/hero.tpl +3 -3
  77. package/skills/document/layouts/icon-row.tpl +3 -3
  78. package/skills/document/layouts/image-full.tpl +5 -5
  79. package/skills/document/layouts/image-grid.tpl +3 -3
  80. package/skills/document/layouts/image-left.tpl +3 -3
  81. package/skills/document/layouts/list.tpl +3 -3
  82. package/skills/document/layouts/logo-guidelines.tpl +8 -8
  83. package/skills/document/layouts/map-distribution.tpl +3 -3
  84. package/skills/document/layouts/map-quad.tpl +6 -6
  85. package/skills/document/layouts/matrix-2x2.tpl +3 -3
  86. package/skills/document/layouts/numbered-brief.tpl +12 -12
  87. package/skills/document/layouts/org-tree.tpl +3 -3
  88. package/skills/document/layouts/problem-solution-banner.tpl +7 -7
  89. package/skills/document/layouts/problem-solution.tpl +3 -3
  90. package/skills/document/layouts/pyramid.tpl +3 -3
  91. package/skills/document/layouts/quote.tpl +1 -1
  92. package/skills/document/layouts/radar.tpl +3 -3
  93. package/skills/document/layouts/ring-progress.tpl +3 -3
  94. package/skills/document/layouts/section-fullbleed.tpl +3 -3
  95. package/skills/document/layouts/section-image.tpl +1 -1
  96. package/skills/document/layouts/section-stat.tpl +1 -1
  97. package/skills/document/layouts/section.tpl +1 -1
  98. package/skills/document/layouts/slots.json +1 -1
  99. package/skills/document/layouts/split-two-col.tpl +3 -3
  100. package/skills/document/layouts/stats-chart.tpl +3 -3
  101. package/skills/document/layouts/steps-serpentine.tpl +11 -11
  102. package/skills/document/layouts/steps-vertical.tpl +3 -3
  103. package/skills/document/layouts/steps.tpl +3 -3
  104. package/skills/document/layouts/team-row.tpl +4 -4
  105. package/skills/document/layouts/three-kpi.tpl +3 -3
  106. package/skills/document/layouts/timeline.tpl +3 -3
  107. package/skills/document/layouts/title-meta.tpl +5 -5
  108. package/skills/document/layouts/title.tpl +2 -2
  109. package/skills/document/layouts/toc-agenda.tpl +3 -3
  110. package/skills/document/layouts/toc-editorial.tpl +15 -0
  111. package/skills/document/layouts/toc-panel.tpl +4 -4
  112. package/skills/document/layouts/toc.tpl +3 -3
  113. package/skills/document/layouts/transition.tpl +1 -1
  114. package/skills/document/layouts/two-kpi.tpl +3 -3
  115. package/skills/document/layouts/type-specimen.tpl +10 -10
  116. package/skills/document/layouts/versus.tpl +3 -3
  117. package/skills/document/motion/README.md +11 -0
  118. package/skills/document/packs/README.md +9 -0
  119. package/skills/document/styles/README.md +36 -15
  120. package/skills/document/styles/_contract-defaults.css +55 -0
  121. package/skills/document/styles/_samples/_groups/biz-premium.webp +0 -0
  122. package/skills/document/styles/_samples/_groups/creative.webp +0 -0
  123. package/skills/document/styles/_samples/_groups/editorial.webp +0 -0
  124. package/skills/document/styles/_samples/_groups/minimal.webp +0 -0
  125. package/skills/document/styles/_samples/_groups/natural.webp +0 -0
  126. package/skills/document/styles/_samples/_groups/tech-future.webp +0 -0
  127. package/skills/document/styles/_samples/anthropic.webp +0 -0
  128. package/skills/document/styles/_samples/apple.webp +0 -0
  129. package/skills/document/styles/_samples/black-gold.webp +0 -0
  130. package/skills/document/styles/_samples/branding.webp +0 -0
  131. package/skills/document/styles/_samples/cinereel.webp +0 -0
  132. package/skills/document/styles/_samples/cool.webp +0 -0
  133. package/skills/document/styles/_samples/hand-drawn.webp +0 -0
  134. package/skills/document/styles/_samples/ivory-gold.webp +0 -0
  135. package/skills/document/styles/_samples/magazine-ink.webp +0 -0
  136. package/skills/document/styles/_samples/mckinsey.webp +0 -0
  137. package/skills/document/styles/_samples/mono.webp +0 -0
  138. package/skills/document/styles/_samples/olive-gold.webp +0 -0
  139. package/skills/document/styles/_samples/swiss-grid.webp +0 -0
  140. package/skills/document/styles/anthropic/backdrop.html +4 -0
  141. package/skills/document/styles/anthropic/skin.css +15 -8
  142. package/skills/document/styles/apple/backdrop.html +4 -1
  143. package/skills/document/styles/apple/skin.css +5 -2
  144. package/skills/document/styles/black-gold/backdrop.html +3 -0
  145. package/skills/document/styles/black-gold/skin.css +15 -8
  146. package/skills/document/styles/branding/backdrop.html +4 -0
  147. package/skills/document/styles/branding/skin.css +14 -7
  148. package/skills/document/styles/cinereel/skin.css +28 -10
  149. package/skills/document/styles/cool/backdrop.html +3 -0
  150. package/skills/document/styles/cool/skin.css +5 -2
  151. package/skills/document/styles/hand-drawn/skin.css +14 -6
  152. package/skills/document/styles/ivory-gold/skin.css +19 -6
  153. package/skills/document/styles/magazine-ink/skin.css +6 -1
  154. package/skills/document/styles/mckinsey/backdrop.html +5 -0
  155. package/skills/document/styles/mckinsey/skin.css +5 -2
  156. package/skills/document/styles/mono/backdrop.html +6 -0
  157. package/skills/document/styles/mono/skin.css +5 -2
  158. package/skills/document/styles/olive-gold/backdrop.html +5 -0
  159. package/skills/document/styles/olive-gold/skin.css +15 -8
  160. package/skills/document/styles/swiss-grid/skin.css +6 -1
@@ -13795,9 +13795,9 @@ var require_load = __commonJS({
13795
13795
  var require_lib3 = __commonJS({
13796
13796
  "node_modules/jszip/lib/index.js"(exports2, module2) {
13797
13797
  "use strict";
13798
- function JSZip4() {
13799
- if (!(this instanceof JSZip4)) {
13800
- return new JSZip4();
13798
+ function JSZip5() {
13799
+ if (!(this instanceof JSZip5)) {
13800
+ return new JSZip5();
13801
13801
  }
13802
13802
  if (arguments.length) {
13803
13803
  throw new Error("The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.");
@@ -13806,7 +13806,7 @@ var require_lib3 = __commonJS({
13806
13806
  this.comment = null;
13807
13807
  this.root = "";
13808
13808
  this.clone = function() {
13809
- var newObj = new JSZip4();
13809
+ var newObj = new JSZip5();
13810
13810
  for (var i in this) {
13811
13811
  if (typeof this[i] !== "function") {
13812
13812
  newObj[i] = this[i];
@@ -13815,16 +13815,16 @@ var require_lib3 = __commonJS({
13815
13815
  return newObj;
13816
13816
  };
13817
13817
  }
13818
- JSZip4.prototype = require_object();
13819
- JSZip4.prototype.loadAsync = require_load();
13820
- JSZip4.support = require_support();
13821
- JSZip4.defaults = require_defaults();
13822
- JSZip4.version = "3.10.1";
13823
- JSZip4.loadAsync = function(content, options) {
13824
- return new JSZip4().loadAsync(content, options);
13818
+ JSZip5.prototype = require_object();
13819
+ JSZip5.prototype.loadAsync = require_load();
13820
+ JSZip5.support = require_support();
13821
+ JSZip5.defaults = require_defaults();
13822
+ JSZip5.version = "3.10.1";
13823
+ JSZip5.loadAsync = function(content, options) {
13824
+ return new JSZip5().loadAsync(content, options);
13825
13825
  };
13826
- JSZip4.external = require_external();
13827
- module2.exports = JSZip4;
13826
+ JSZip5.external = require_external();
13827
+ module2.exports = JSZip5;
13828
13828
  }
13829
13829
  });
13830
13830
 
@@ -16738,7 +16738,7 @@ var require_browser_buffer_encode = __commonJS({
16738
16738
  var require_zip_stream = __commonJS({
16739
16739
  "node_modules/exceljs/lib/utils/zip-stream.js"(exports2, module2) {
16740
16740
  var events = require("events");
16741
- var JSZip4 = require_lib3();
16741
+ var JSZip5 = require_lib3();
16742
16742
  var StreamBuf = require_stream_buf();
16743
16743
  var { stringToBuffer } = require_browser_buffer_encode();
16744
16744
  var ZipWriter = class extends events.EventEmitter {
@@ -16751,7 +16751,7 @@ var require_zip_stream = __commonJS({
16751
16751
  },
16752
16752
  options
16753
16753
  );
16754
- this.zip = new JSZip4();
16754
+ this.zip = new JSZip5();
16755
16755
  this.stream = new StreamBuf();
16756
16756
  }
16757
16757
  append(data, options) {
@@ -28431,7 +28431,7 @@ var require_theme1 = __commonJS({
28431
28431
  var require_xlsx = __commonJS({
28432
28432
  "node_modules/exceljs/lib/xlsx/xlsx.js"(exports2, module2) {
28433
28433
  var fs = require("fs");
28434
- var JSZip4 = require_lib3();
28434
+ var JSZip5 = require_lib3();
28435
28435
  var { PassThrough } = require_readable2();
28436
28436
  var ZipStream = require_zip_stream();
28437
28437
  var StreamBuf = require_stream_buf();
@@ -28670,7 +28670,7 @@ var require_xlsx = __commonJS({
28670
28670
  tables: {},
28671
28671
  vmlDrawings: {}
28672
28672
  };
28673
- const zip = await JSZip4.loadAsync(buffer);
28673
+ const zip = await JSZip5.loadAsync(buffer);
28674
28674
  for (const entry of Object.values(zip.files)) {
28675
28675
  if (!entry.dir) {
28676
28676
  let entryName = entry.name;
@@ -72933,11 +72933,11 @@ var require_excel = __commonJS({
72933
72933
  var require_pptxgen_cjs = __commonJS({
72934
72934
  "node_modules/pptxgenjs/dist/pptxgen.cjs.js"(exports2, module2) {
72935
72935
  "use strict";
72936
- var JSZip4 = require_lib3();
72936
+ var JSZip5 = require_lib3();
72937
72937
  function _interopDefaultLegacy(e) {
72938
72938
  return e && typeof e === "object" && "default" in e ? e : { "default": e };
72939
72939
  }
72940
- var JSZip__default = /* @__PURE__ */ _interopDefaultLegacy(JSZip4);
72940
+ var JSZip__default = /* @__PURE__ */ _interopDefaultLegacy(JSZip5);
72941
72941
  var __assign2 = function() {
72942
72942
  __assign2 = Object.assign || function __assign3(t) {
72943
72943
  for (var s, i = 1, n = arguments.length; i < n; i++) {
@@ -151933,7 +151933,7 @@ var findPatchKeys = (text) => {
151933
151933
  return (_text$match = text.match(pattern)) !== null && _text$match !== void 0 ? _text$match : [];
151934
151934
  };
151935
151935
 
151936
- // packages/core/dist/fs/doc-gen.js
151936
+ // packages/core/dist/document/doc-gen.js
151937
151937
  var import_exceljs = __toESM(require_excel(), 1);
151938
151938
  var import_jszip = __toESM(require_lib3(), 1);
151939
151939
  var import_pptxgenjs = __toESM(require_pptxgen_cjs(), 1);
@@ -151941,7 +151941,7 @@ var import_pdf_lib = __toESM(require_cjs(), 1);
151941
151941
  var import_fontkit = __toESM(require_fontkit_umd(), 1);
151942
151942
  var import_node_fs = require("node:fs");
151943
151943
 
151944
- // packages/core/dist/fs/doc-theme.js
151944
+ // packages/core/dist/document/doc-theme.js
151945
151945
  var DEFAULT_THEME = {
151946
151946
  bestFor: "",
151947
151947
  fonts: { heading: "", body: "" },
@@ -152175,7 +152175,7 @@ function themeCssVars(theme) {
152175
152175
  return `:root{${lines.join(";")}}`;
152176
152176
  }
152177
152177
 
152178
- // packages/core/dist/fs/doc-palette.js
152178
+ // packages/core/dist/document/doc-palette.js
152179
152179
  var PALETTE_LIBRARY = [
152180
152180
  {
152181
152181
  name: "corporate-navy",
@@ -152413,7 +152413,7 @@ function listPalettes() {
152413
152413
  return PALETTE_LIBRARY.map(({ name, mood, dark }) => ({ name, mood, dark }));
152414
152414
  }
152415
152415
 
152416
- // packages/core/dist/fs/lucide-icons.js
152416
+ // packages/core/dist/document/lucide-icons.js
152417
152417
  var LUCIDE_ICONS = {
152418
152418
  check: '<path d="M20 6 9 17l-5-5"/>',
152419
152419
  "check-circle": '<circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/>',
@@ -152470,7 +152470,7 @@ function iconSvgDataUri(name, colorHex) {
152470
152470
  return "data:image/svg+xml;base64," + Buffer.from(svg).toString("base64");
152471
152471
  }
152472
152472
 
152473
- // packages/core/dist/fs/doc-gen.js
152473
+ // packages/core/dist/document/doc-gen.js
152474
152474
  function bareHex(c) {
152475
152475
  return c.replace("#", "").toUpperCase();
152476
152476
  }
@@ -154029,7 +154029,7 @@ async function generateDocument(kind, spec, theme) {
154029
154029
  }
154030
154030
  }
154031
154031
 
154032
- // packages/core/dist/fs/doc-html.js
154032
+ // packages/core/dist/document/doc-html.js
154033
154033
  var FONT_STACK = 'TalosCJK, "Helvetica Neue", Helvetica, Arial, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", "Source Han Sans SC", "WenQuanYi Zen Hei", sans-serif';
154034
154034
  function stackWith(font) {
154035
154035
  return font ? `"${font.replace(/"/g, "")}", ${FONT_STACK}` : FONT_STACK;
@@ -154132,7 +154132,7 @@ var import_node_path = require("node:path");
154132
154132
  var import_node_fs2 = require("node:fs");
154133
154133
  var import_node_crypto = require("node:crypto");
154134
154134
 
154135
- // packages/core/dist/fs/tpl-interp.js
154135
+ // packages/core/dist/document/tpl-interp.js
154136
154136
  var TAG = /\{\{\{?\s*([#/]?)\s*([^}]*?)\s*\}?\}\}/g;
154137
154137
  function parseTemplate(src) {
154138
154138
  const tokens = [];
@@ -154251,7 +154251,7 @@ function interpolate(src, data) {
154251
154251
  return render(parseTemplate(src), { ctx: data });
154252
154252
  }
154253
154253
 
154254
- // packages/core/dist/fs/html-templates.js
154254
+ // packages/core/dist/document/html-templates.js
154255
154255
  var CARD = "background:var(--card-bg);border:1px solid var(--border);border-radius:16px";
154256
154256
  var TEMPLATES = {
154257
154257
  cover: {
@@ -154405,10 +154405,10 @@ function contrastHex(hex) {
154405
154405
  return lum > 0.55 ? "#1a1a1a" : "#ffffff";
154406
154406
  }
154407
154407
 
154408
- // packages/core/dist/fs/html-pptx.js
154409
- var import_jszip3 = __toESM(require_lib3(), 1);
154408
+ // packages/core/dist/document/html-pptx.js
154409
+ var import_jszip4 = __toESM(require_lib3(), 1);
154410
154410
 
154411
- // packages/core/dist/fs/pptx-anim.js
154411
+ // packages/core/dist/document/pptx-anim.js
154412
154412
  var import_jszip2 = __toESM(require_lib3(), 1);
154413
154413
  var FLY_SUBTYPE = { "fly-up": 4, "fly-down": 1, "fly-left": 2, "fly-right": 8 };
154414
154414
  function setVisible(id, spid) {
@@ -154447,11 +154447,15 @@ function buildSlideTiming(steps, spidOf) {
154447
154447
  return "";
154448
154448
  let id = 100;
154449
154449
  const next = () => id++;
154450
+ const beatOpened = /* @__PURE__ */ new Set();
154450
154451
  const stepPars = resolved.map(({ s, spid }, i) => {
154451
154452
  const { id: pid, sub } = presetOf(s.effect);
154452
154453
  const dur = Math.max(1, Math.round(s.durMs ?? 500));
154453
- const delay = Math.max(0, Math.round(s.delayMs ?? (i === 0 ? 0 : 200)));
154454
- const node = i === 0 ? "clickEffect" : s.start === "with" ? "withEffect" : "afterEffect";
154454
+ const ridesAlong = s.group !== void 0 && beatOpened.has(s.group);
154455
+ if (s.group !== void 0)
154456
+ beatOpened.add(s.group);
154457
+ const delay = ridesAlong ? 0 : Math.max(0, Math.round(s.delayMs ?? (i === 0 ? 0 : 200)));
154458
+ const node = ridesAlong ? "withEffect" : i === 0 ? "clickEffect" : s.start === "with" ? "withEffect" : "afterEffect";
154455
154459
  const effectCtnId = next();
154456
154460
  const beh = behaviorsOf(s.effect, next, spid, dur);
154457
154461
  return `<p:par><p:cTn id="${effectCtnId}" presetID="${pid}" presetClass="entr" presetSubtype="${sub}" fill="hold" grpId="0" nodeType="${node}"><p:stCondLst><p:cond delay="${delay}"/></p:stCondLst><p:childTnLst>${beh}</p:childTnLst></p:cTn></p:par>`;
@@ -154485,7 +154489,85 @@ async function injectAnimations(buf, perSlide) {
154485
154489
  return await zip.generateAsync({ type: "nodebuffer", compression: "DEFLATE" });
154486
154490
  }
154487
154491
 
154488
- // packages/core/dist/fs/html-pptx.js
154492
+ // packages/core/dist/document/pptx-transition.js
154493
+ var import_jszip3 = __toESM(require_lib3(), 1);
154494
+ var MC_NS = "http://schemas.openxmlformats.org/markup-compatibility/2006";
154495
+ var P14_NS = "http://schemas.microsoft.com/office/powerpoint/2010/main";
154496
+ var P159_NS = "http://schemas.microsoft.com/office/powerpoint/2015/09/main";
154497
+ var STANDARD = {
154498
+ cut: { tag: "cut", dirs: null },
154499
+ fade: { tag: "fade", dirs: null },
154500
+ dissolve: { tag: "dissolve", dirs: null },
154501
+ wedge: { tag: "wedge", dirs: null },
154502
+ wipe: { tag: "wipe", dirs: ["l", "r", "u", "d"], defaultDir: "l" },
154503
+ push: { tag: "push", dirs: ["l", "r", "u", "d"], defaultDir: "l" },
154504
+ cover: { tag: "cover", dirs: ["l", "r", "u", "d"], defaultDir: "l" },
154505
+ zoom: { tag: "zoom", dirs: ["in", "out"], defaultDir: "in" },
154506
+ split: { tag: "split", dirs: ["in", "out"], dirAttr: "dir", defaultDir: "in" }
154507
+ };
154508
+ var MORPH = "morph";
154509
+ var TRANSITION_EFFECTS = [...Object.keys(STANDARD), MORPH];
154510
+ function speedOf(durMs) {
154511
+ if (durMs === void 0)
154512
+ return "med";
154513
+ if (durMs >= 1e3)
154514
+ return "slow";
154515
+ if (durMs >= 500)
154516
+ return "med";
154517
+ return "fast";
154518
+ }
154519
+ function effectElement(effect, dir) {
154520
+ const def = STANDARD[effect];
154521
+ if (!def)
154522
+ return "<p:fade/>";
154523
+ if (!def.dirs)
154524
+ return `<p:${def.tag}/>`;
154525
+ const chosen = dir && def.dirs.includes(dir) ? dir : def.defaultDir;
154526
+ return `<p:${def.tag} ${def.dirAttr ?? "dir"}="${chosen}"/>`;
154527
+ }
154528
+ function buildTransition(spec) {
154529
+ const effect = (spec.effect || "").trim();
154530
+ if (!effect || effect === "none")
154531
+ return "";
154532
+ const spd = speedOf(spec.durMs);
154533
+ const dur = spec.durMs !== void 0 ? Math.max(1, Math.round(spec.durMs)) : void 0;
154534
+ const isMorph = effect === MORPH;
154535
+ const plain = `<p:transition spd="${spd}">${effectElement(isMorph ? "fade" : effect, spec.dir)}</p:transition>`;
154536
+ if (!isMorph && dur === void 0)
154537
+ return plain;
154538
+ const choiceNs = isMorph ? ` xmlns:p14="${P14_NS}" xmlns:p159="${P159_NS}" Requires="p159"` : ` xmlns:p14="${P14_NS}" Requires="p14"`;
154539
+ const inner = isMorph ? `<p159:morph option="byObject"/>` : effectElement(effect, spec.dir);
154540
+ const durAttr = dur !== void 0 ? ` p14:dur="${dur}"` : "";
154541
+ return `<mc:AlternateContent xmlns:mc="${MC_NS}"><mc:Choice${choiceNs}><p:transition spd="${spd}"${durAttr}>${inner}</p:transition></mc:Choice><mc:Fallback>${plain}</mc:Fallback></mc:AlternateContent>`;
154542
+ }
154543
+ async function injectTransitions(buf, perSlide) {
154544
+ if (!perSlide.some((t) => t && t.effect && t.effect !== "none"))
154545
+ return buf;
154546
+ const zip = await import_jszip3.default.loadAsync(buf);
154547
+ const slidePaths = Object.keys(zip.files).filter((p) => /^ppt\/slides\/slide\d+\.xml$/.test(p)).sort((a, b) => parseInt(a.match(/(\d+)/)[1], 10) - parseInt(b.match(/(\d+)/)[1], 10));
154548
+ for (let i = 0; i < slidePaths.length; i++) {
154549
+ const spec = perSlide[i];
154550
+ if (!spec)
154551
+ continue;
154552
+ const xml0 = await zip.file(slidePaths[i]).async("string");
154553
+ if (xml0.includes("<p:transition") || xml0.includes("mc:AlternateContent"))
154554
+ continue;
154555
+ const frag = buildTransition(spec);
154556
+ if (!frag)
154557
+ continue;
154558
+ let xml;
154559
+ if (xml0.includes("</p:clrMapOvr>"))
154560
+ xml = xml0.replace("</p:clrMapOvr>", `</p:clrMapOvr>${frag}`);
154561
+ else if (xml0.includes("</p:cSld>"))
154562
+ xml = xml0.replace("</p:cSld>", `</p:cSld>${frag}`);
154563
+ else
154564
+ continue;
154565
+ zip.file(slidePaths[i], xml);
154566
+ }
154567
+ return await zip.generateAsync({ type: "nodebuffer", compression: "DEFLATE" });
154568
+ }
154569
+
154570
+ // packages/core/dist/document/html-pptx.js
154489
154571
  var DEFAULT_CHART_RAMP = ["2563EB", "10B981", "F59E0B", "EF4444", "8B5CF6", "06B6D4"];
154490
154572
  var SLIDE_W_IN = 13.333;
154491
154573
  var SLIDE_H_IN = 7.5;
@@ -154582,7 +154664,7 @@ function gradFillXml(g) {
154582
154664
  return `<a:gradFill rotWithShape="1"><a:gsLst>${gs}</a:gsLst><a:lin ang="${Math.round(deg * 6e4)}" scaled="1"/></a:gradFill>`;
154583
154665
  }
154584
154666
  async function injectGradients(buf, grads) {
154585
- const zip = await import_jszip3.default.loadAsync(buf);
154667
+ const zip = await import_jszip4.default.loadAsync(buf);
154586
154668
  for (const path of Object.keys(zip.files).filter((p) => /^ppt\/slides\/slide\d+\.xml$/.test(p))) {
154587
154669
  let xml = await zip.file(path).async("string");
154588
154670
  let changed = false;
@@ -154650,6 +154732,7 @@ async function convertLayoutToPptx(snapshot) {
154650
154732
  pptx.layout = "TALOS_HTML_WIDE";
154651
154733
  const gradients = [];
154652
154734
  const perSlideAnims = [];
154735
+ const perSlideTransitions = [];
154653
154736
  for (const [slideNo, slideSpec] of snapshot.slides.entries()) {
154654
154737
  const slide = pptx.addSlide();
154655
154738
  const bg = cssColorToHex(slideSpec.background);
@@ -154857,10 +154940,12 @@ async function convertLayoutToPptx(snapshot) {
154857
154940
  if (slideSpec.speakerNotes)
154858
154941
  slide.addNotes(String(slideSpec.speakerNotes));
154859
154942
  perSlideAnims.push(slideAnims);
154943
+ perSlideTransitions.push(slideSpec.transition);
154860
154944
  }
154861
154945
  let buf = await pptx.write("nodebuffer");
154862
154946
  if (gradients.length)
154863
154947
  buf = await injectGradients(buf, gradients);
154948
+ buf = await injectTransitions(buf, perSlideTransitions);
154864
154949
  buf = await injectAnimations(buf, perSlideAnims);
154865
154950
  return { bytes: await finalizePptx(new Uint8Array(buf)), warnings };
154866
154951
  }
@@ -5,18 +5,9 @@
5
5
  var import_promises = require("node:fs/promises");
6
6
  var import_node_path2 = require("node:path");
7
7
 
8
- // packages/core/dist/fs/pdf-extract.js
8
+ // packages/core/dist/document/pdf-extract.js
9
9
  var import_node_path = require("node:path");
10
10
  var import_node_url = require("node:url");
11
-
12
- // packages/core/dist/fs/doc-scan.js
13
- var SCANNED_TEXT_CHARS = 20;
14
- var SCAN_IMAGE_COVERAGE = 0.5;
15
- function isScannedPage(s) {
16
- return s.textChars <= SCANNED_TEXT_CHARS && s.imageCoverage >= SCAN_IMAGE_COVERAGE;
17
- }
18
-
19
- // packages/core/dist/fs/pdf-extract.js
20
11
  var _mupdf = null;
21
12
  function loadMupdf() {
22
13
  if (!_mupdf) {
@@ -183,6 +174,13 @@ async function scanPdfSignals(bytes) {
183
174
  return signals;
184
175
  }
185
176
 
177
+ // packages/core/dist/document/doc-scan.js
178
+ var SCANNED_TEXT_CHARS = 20;
179
+ var SCAN_IMAGE_COVERAGE = 0.5;
180
+ function isScannedPage(s) {
181
+ return s.textChars <= SCANNED_TEXT_CHARS && s.imageCoverage >= SCAN_IMAGE_COVERAGE;
182
+ }
183
+
186
184
  // apps/admin/data/skills.lib/document/bin-src/doc-scan.mjs
187
185
  function die(msg, code = 1) {
188
186
  process.stderr.write(`doc-scan: ${msg}
@@ -5,7 +5,7 @@
5
5
  var import_promises = require("node:fs/promises");
6
6
  var import_node_path2 = require("node:path");
7
7
 
8
- // packages/core/dist/fs/pdf-extract.js
8
+ // packages/core/dist/document/pdf-extract.js
9
9
  var import_node_path = require("node:path");
10
10
  var import_node_url = require("node:url");
11
11
  var _mupdf = null;
@@ -9819,7 +9819,7 @@ var require_lib3 = __commonJS({
9819
9819
  var import_promises2 = require("node:fs/promises");
9820
9820
  var import_node_path2 = require("node:path");
9821
9821
 
9822
- // packages/core/dist/fs/doc-validate.js
9822
+ // packages/core/dist/document/doc-validate.js
9823
9823
  var import_jszip = __toESM(require_lib3(), 1);
9824
9824
  var NAME_RE = /^[A-Za-z_:][A-Za-z0-9_.:-]*/;
9825
9825
  function xmlWellFormednessErrors(xml, maxErrors = 5) {
@@ -10037,7 +10037,7 @@ async function validateOoxml(bytes) {
10037
10037
  return result(root.kind);
10038
10038
  }
10039
10039
 
10040
- // packages/core/dist/fs/doc-xsd.js
10040
+ // packages/core/dist/document/doc-xsd.js
10041
10041
  var import_node_path = require("node:path");
10042
10042
  var import_node_url = require("node:url");
10043
10043
  var import_promises = require("node:fs/promises");
@@ -10139,7 +10139,7 @@ async function validateOoxmlStrict(bytes, schemaDir) {
10139
10139
  return { ok: errors.length === 0, checked, skipped, errors };
10140
10140
  }
10141
10141
 
10142
- // packages/core/dist/fs/doc-design-lint.js
10142
+ // packages/core/dist/document/doc-design-lint.js
10143
10143
  var import_jszip3 = __toESM(require_lib3(), 1);
10144
10144
  var PLACEHOLDER_RE = /替换为|在这里写|占位|示例文本|Lorem ipsum/i;
10145
10145
  var CJK_TEXT_RE = /[぀-ヿ㐀-䶿一-鿿가-힯豈-﫿]/;
@@ -9818,12 +9818,12 @@ var require_lib3 = __commonJS({
9818
9818
  // apps/admin/data/skills.lib/document/bin-src/doc-xml.mjs
9819
9819
  var import_promises2 = require("node:fs/promises");
9820
9820
 
9821
- // packages/core/dist/fs/doc-xml.js
9821
+ // packages/core/dist/document/doc-xml.js
9822
9822
  var import_jszip = __toESM(require_lib3(), 1);
9823
9823
  var import_promises = require("node:fs/promises");
9824
9824
  var import_node_path = require("node:path");
9825
9825
 
9826
- // packages/core/dist/fs/ooxml-util.js
9826
+ // packages/core/dist/document/ooxml-util.js
9827
9827
  function escXml(s) {
9828
9828
  return s.replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&apos;" })[c]);
9829
9829
  }
@@ -9907,7 +9907,7 @@ function replaceTextAcrossRuns(xml, find, replacement, opts) {
9907
9907
  return { xml: rewritten, count };
9908
9908
  }
9909
9909
 
9910
- // packages/core/dist/fs/doc-xml.js
9910
+ // packages/core/dist/document/doc-xml.js
9911
9911
  function prettyXml(xml) {
9912
9912
  const tokens = xml.split(/(?<=>)(?=<)/);
9913
9913
  if (tokens.length < 2)
@@ -9818,15 +9818,15 @@ var require_lib3 = __commonJS({
9818
9818
  // apps/admin/data/skills.lib/document/bin-src/docx-annotate.mjs
9819
9819
  var import_promises = require("node:fs/promises");
9820
9820
 
9821
- // packages/core/dist/fs/docx-annotate.js
9821
+ // packages/core/dist/document/docx-annotate.js
9822
9822
  var import_jszip = __toESM(require_lib3(), 1);
9823
9823
 
9824
- // packages/core/dist/fs/ooxml-util.js
9824
+ // packages/core/dist/document/ooxml-util.js
9825
9825
  function escXml(s) {
9826
9826
  return s.replace(/[&<>"']/g, (c) => ({ "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;", "'": "&apos;" })[c]);
9827
9827
  }
9828
9828
 
9829
- // packages/core/dist/fs/docx-annotate.js
9829
+ // packages/core/dist/document/docx-annotate.js
9830
9830
  var import_node_crypto = require("node:crypto");
9831
9831
  var W_NS = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
9832
9832
  var W14_NS = "http://schemas.microsoft.com/office/word/2010/wordml";