allyhub 0.5.0 → 0.6.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 (125) hide show
  1. package/dist/commands/render.js +1 -1
  2. package/dist/commands/sheet.js +7 -7
  3. package/dist/commands/slides.js +1 -1
  4. package/dist/node_modules/@allyhub-next/audio/package.json +1 -1
  5. package/dist/node_modules/@allyhub-next/browser/package.json +1 -1
  6. package/dist/node_modules/@allyhub-next/build/package.json +1 -1
  7. package/dist/node_modules/@allyhub-next/chart/package.json +1 -1
  8. package/dist/node_modules/@allyhub-next/check/package.json +1 -1
  9. package/dist/node_modules/@allyhub-next/cloud/package.json +1 -1
  10. package/dist/node_modules/@allyhub-next/components/package.json +1 -1
  11. package/dist/node_modules/@allyhub-next/dev-server/dist/exports.js +1 -1
  12. package/dist/node_modules/@allyhub-next/dev-server/package.json +1 -1
  13. package/dist/node_modules/@allyhub-next/doc/package.json +1 -1
  14. package/dist/node_modules/@allyhub-next/export/dist/export.d.ts +2 -2
  15. package/dist/node_modules/@allyhub-next/export/dist/export.js +4 -4
  16. package/dist/node_modules/@allyhub-next/export/dist/names.d.ts +1 -1
  17. package/dist/node_modules/@allyhub-next/export/package.json +1 -1
  18. package/dist/node_modules/@allyhub-next/formats/dist/data/sheet.d.ts +179 -0
  19. package/dist/node_modules/@allyhub-next/formats/dist/data/sheet.js +1 -1
  20. package/dist/node_modules/@allyhub-next/formats/dist/data/slides.d.ts +303 -11
  21. package/dist/node_modules/@allyhub-next/formats/dist/data/slides.js +1 -1
  22. package/dist/node_modules/@allyhub-next/formats/dist/index.d.ts +1 -0
  23. package/dist/node_modules/@allyhub-next/formats/dist/index.js +1 -1
  24. package/dist/node_modules/@allyhub-next/formats/dist/items.js +1 -1
  25. package/dist/node_modules/@allyhub-next/formats/dist/schemas.d.ts +135 -3
  26. package/dist/node_modules/@allyhub-next/formats/dist/zip.d.ts +17 -0
  27. package/dist/node_modules/@allyhub-next/formats/dist/zip.js +2 -0
  28. package/dist/node_modules/@allyhub-next/formats/package.json +1 -1
  29. package/dist/node_modules/@allyhub-next/measure/package.json +1 -1
  30. package/dist/node_modules/@allyhub-next/media/package.json +1 -1
  31. package/dist/node_modules/@allyhub-next/model/package.json +1 -1
  32. package/dist/node_modules/@allyhub-next/project/package.json +1 -1
  33. package/dist/node_modules/@allyhub-next/protocol/dist/editor.d.ts +10 -0
  34. package/dist/node_modules/@allyhub-next/protocol/dist/editor.js +1 -1
  35. package/dist/node_modules/@allyhub-next/protocol/dist/notes.d.ts +2 -0
  36. package/dist/node_modules/@allyhub-next/protocol/dist/notes.js +1 -1
  37. package/dist/node_modules/@allyhub-next/protocol/package.json +1 -1
  38. package/dist/node_modules/@allyhub-next/registry/package.json +1 -1
  39. package/dist/node_modules/@allyhub-next/render/dist/exports.d.ts +2 -11
  40. package/dist/node_modules/@allyhub-next/render/dist/exports.js +2 -2
  41. package/dist/node_modules/@allyhub-next/render/dist/page.d.ts +1 -9
  42. package/dist/node_modules/@allyhub-next/render/package.json +1 -1
  43. package/dist/node_modules/@allyhub-next/runtime/package.json +1 -1
  44. package/dist/node_modules/@allyhub-next/runtimes/package.json +1 -1
  45. package/dist/node_modules/@allyhub-next/scaffold/package.json +1 -1
  46. package/dist/node_modules/@allyhub-next/scenery/package.json +1 -1
  47. package/dist/node_modules/@allyhub-next/scenery-host/package.json +1 -1
  48. package/dist/node_modules/@allyhub-next/sheet/dist/api/capabilities.js +1 -1
  49. package/dist/node_modules/@allyhub-next/sheet/dist/api/index.d.ts +1 -0
  50. package/dist/node_modules/@allyhub-next/sheet/dist/api/index.js +1 -1
  51. package/dist/node_modules/@allyhub-next/sheet/dist/api/page.d.ts +83 -0
  52. package/dist/node_modules/@allyhub-next/sheet/dist/api/page.js +2 -0
  53. package/dist/node_modules/@allyhub-next/sheet/dist/api/workbook.d.ts +40 -1
  54. package/dist/node_modules/@allyhub-next/sheet/dist/api/workbook.js +1 -1
  55. package/dist/node_modules/@allyhub-next/sheet/dist/check.js +1 -1
  56. package/dist/node_modules/@allyhub-next/sheet/dist/structure.js +1 -1
  57. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/charts.d.ts +2 -0
  58. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/charts.js +1 -1
  59. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/import.d.ts +3 -0
  60. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/import.js +1 -1
  61. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/read.d.ts +2 -1
  62. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/read.js +1 -1
  63. package/dist/node_modules/@allyhub-next/sheet/dist/xlsx/write.js +1 -1
  64. package/dist/node_modules/@allyhub-next/sheet/package.json +1 -1
  65. package/dist/node_modules/@allyhub-next/site/package.json +1 -1
  66. package/dist/node_modules/@allyhub-next/slides-core/dist/api.d.ts +64 -7
  67. package/dist/node_modules/@allyhub-next/slides-core/dist/api.js +2 -2
  68. package/dist/node_modules/@allyhub-next/slides-core/dist/capabilities.js +1 -1
  69. package/dist/node_modules/@allyhub-next/slides-core/dist/chart-api.d.ts +23 -0
  70. package/dist/node_modules/@allyhub-next/slides-core/dist/chart-api.js +1 -1
  71. package/dist/node_modules/@allyhub-next/slides-core/dist/chart-file.js +1 -1
  72. package/dist/node_modules/@allyhub-next/slides-core/dist/enums.d.ts +20 -0
  73. package/dist/node_modules/@allyhub-next/slides-core/dist/enums.js +1 -1
  74. package/dist/node_modules/@allyhub-next/slides-core/dist/index.d.ts +1 -0
  75. package/dist/node_modules/@allyhub-next/slides-core/dist/index.js +1 -1
  76. package/dist/node_modules/@allyhub-next/slides-core/dist/model.d.ts +37 -1
  77. package/dist/node_modules/@allyhub-next/slides-core/dist/office.d.ts +10 -0
  78. package/dist/node_modules/@allyhub-next/slides-core/dist/office.js +1 -1
  79. package/dist/node_modules/@allyhub-next/slides-core/dist/preset.d.ts +5 -0
  80. package/dist/node_modules/@allyhub-next/slides-core/dist/preset.js +2 -0
  81. package/dist/node_modules/@allyhub-next/slides-core/dist/resolve.d.ts +7 -2
  82. package/dist/node_modules/@allyhub-next/slides-core/dist/resolve.js +1 -1
  83. package/dist/node_modules/@allyhub-next/slides-core/package.json +1 -1
  84. package/dist/node_modules/@allyhub-next/slides-pptx/dist/charts.js +1 -1
  85. package/dist/node_modules/@allyhub-next/slides-pptx/dist/import.js +1 -1
  86. package/dist/node_modules/@allyhub-next/slides-pptx/dist/read.d.ts +2 -1
  87. package/dist/node_modules/@allyhub-next/slides-pptx/dist/read.js +2 -2
  88. package/dist/node_modules/@allyhub-next/slides-pptx/dist/shapes.d.ts +6 -1
  89. package/dist/node_modules/@allyhub-next/slides-pptx/dist/shapes.js +1 -1
  90. package/dist/node_modules/@allyhub-next/slides-pptx/dist/text.d.ts +11 -0
  91. package/dist/node_modules/@allyhub-next/slides-pptx/dist/text.js +1 -1
  92. package/dist/node_modules/@allyhub-next/slides-pptx/dist/write.js +2 -2
  93. package/dist/node_modules/@allyhub-next/slides-pptx/dist/xml.d.ts +10 -4
  94. package/dist/node_modules/@allyhub-next/slides-pptx/dist/xml.js +2 -2
  95. package/dist/node_modules/@allyhub-next/slides-pptx/package.json +1 -1
  96. package/dist/node_modules/@allyhub-next/slides-runtime/dist/draw.d.ts +3 -0
  97. package/dist/node_modules/@allyhub-next/slides-runtime/dist/draw.js +2 -2
  98. package/dist/node_modules/@allyhub-next/slides-runtime/dist/edit.js +1 -1
  99. package/dist/node_modules/@allyhub-next/slides-runtime/package.json +1 -1
  100. package/dist/node_modules/@allyhub-next/stage/dist/graphics.js +1 -1
  101. package/dist/node_modules/@allyhub-next/stage/package.json +1 -1
  102. package/dist/node_modules/@allyhub-next/stage-page/dist/page.js +19 -19
  103. package/dist/node_modules/@allyhub-next/stage-page/package.json +1 -1
  104. package/dist/node_modules/@allyhub-next/video-core/package.json +1 -1
  105. package/editor-web/assets/dist-BW2s9FMO.js +4 -0
  106. package/editor-web/assets/{dist-CuW84oPe.js → dist-C-6JmebI.js} +22 -22
  107. package/editor-web/assets/dist-CCYMLMKN.js +6 -0
  108. package/editor-web/assets/dist-CHzurjMx.js +33 -0
  109. package/editor-web/assets/{dist-Yi3sy7Ea.js → dist-DF7H1dxw.js} +1 -1
  110. package/editor-web/assets/dist-Da5AUSKX.js +2 -0
  111. package/editor-web/assets/index-CovQYWvD.js +69 -0
  112. package/editor-web/assets/minus-BrvjaJyO.js +1 -0
  113. package/editor-web/assets/react-DV5fPdiH.js +101 -0
  114. package/editor-web/assets/{textarea-CvxipnGW.js → textarea-B0vCGdZI.js} +2 -2
  115. package/editor-web/assets/{trash-2-Bq1Dt8XG.js → trash-2-B0dvc1cZ.js} +1 -1
  116. package/editor-web/assets/{undo-2-Djhvu4xt.js → undo-2-A1EPubPO.js} +1 -1
  117. package/editor-web/index.html +2 -2
  118. package/package.json +2 -2
  119. package/editor-web/assets/dist-Cg2PdedY.js +0 -6
  120. package/editor-web/assets/dist-CxAS_vp7.js +0 -2
  121. package/editor-web/assets/dist-DCVaj9i1.js +0 -4
  122. package/editor-web/assets/dist-DGVUuVPB.js +0 -33
  123. package/editor-web/assets/index-pwRfZ2Jv.js +0 -69
  124. package/editor-web/assets/minus-BizJdinJ.js +0 -1
  125. package/editor-web/assets/react-D54s6gwK.js +0 -101
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{createHash as ve}from"node:crypto";import{zipSync as Me}from"fflate";import{AUTOSHAPE_STYLE as ke,CONNECTOR_STYLE as Pe,joinPath as le,placeholderFrame as $e,plainLevels as Le,Pt as Te}from"@allyhub-next/slides-core";import{chartBook as De,chartXml as Ce}from"./charts.js";import{asFace as Ee,fontInfo as Ie,eotOf as Oe}from"./fonts.js";import{NO_PARAGRAPHS as Re,shapeXml as pe,treeXml as ee}from"./shapes.js";import{bodyOfStyle as Be,bodyProps as q,levelOf as de,listStyle as B,txBody as j}from"./text.js";import{themeXml as me}from"./theme.js";import{timingXml as Ae,transitionXml as Ne}from"./timing.js";import{HEAD as w,PML as T,el as n,esc as je,fill as ce}from"./xml.js";const te={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif"},fe={mp4:"video/mp4",m4v:"video/mp4",mov:"video/quicktime"},A=e=>(e.split(".").pop()??"").toLowerCase(),Fe=[["regular","p:regular","Regular"],["bold","p:bold","Bold"],["italic","p:italic","Italic"],["boldItalic","p:boldItalic","Bold Italic"]],d={chart:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",package:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package",font:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font",officeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",core:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",app:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",slideMaster:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster",slideLayout:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout",slide:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide",theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",notesMaster:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster",notesSlide:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide",image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",video:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video",media:"http://schemas.microsoft.com/office/2007/relationships/media",presProps:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps",viewProps:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps",tableStyles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles"},b={chart:"application/vnd.openxmlformats-officedocument.drawingml.chart+xml",workbook:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",presentation:"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml",slideMaster:"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml",slideLayout:"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml",slide:"application/vnd.openxmlformats-officedocument.presentationml.slide+xml",theme:"application/vnd.openxmlformats-officedocument.theme+xml",notesMaster:"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml",notesSlide:"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml",presProps:"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml",viewProps:"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml",tableStyles:"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml",core:"application/vnd.openxmlformats-package.core-properties+xml",app:"application/vnd.openxmlformats-officedocument.extended-properties+xml"};class D{list=[];add(t,s){const o=this.list.find(l=>l.type===t&&l.target===s);if(o)return o.id;const i=`rId${String(this.list.length+1)}`;return this.list.push({id:i,type:t,target:s}),i}xml(){return w+n("Relationships",{xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},...this.list.map(t=>n("Relationship",{Id:t.id,Type:t.type,Target:t.target})))}}class He{list=[];add(t,s){return this.list.push({chart:t,frame:s}),`../charts/chart${String(this.list.length)}.xml`}}class ze{parts=new Map;byHash=new Map;add(t,s,o){const i=ve("sha256").update(t).digest("hex"),l=this.byHash.get(`${o}:${i}`);if(l)return l;const r=`${o}${String(this.parts.size+1)}.${s}`;return this.parts.set(`ppt/media/${r}`,t),this.byHash.set(`${o}:${i}`,`../media/${r}`),`../media/${r}`}}function he(e){return e.kind==="component"||e.kind==="movie"?!1:e.kind==="picture"?te[A(e.media?.path??"")]!==void 0:!0}function ne(e){return e.kind==="component"||e.kind==="movie"?!0:e.kind==="picture"?te[A(e.media?.path??"")]===void 0:!1}export function picturedShapes(e){return e.slides.flatMap(t=>t.shapes.filter(s=>ne(s)).map(s=>({key:`${t.id}/${s.name}`,slide:t.id,shape:s.name,frame:s.frame})))}export function filesOf(e){const t=new Set;for(const s of e.masters)for(const o of[...s.shapes,...s.layouts.flatMap(i=>i.shapes)])o.media&&he(o)&&t.add(le(o.media.base,o.media.path));for(const s of e.slides)for(const o of s.shapes)o.media&&(o.kind==="picture"||o.kind==="movie")&&t.add(o.media.path);return[...t].sort()}const Ge=n("p:nvGrpSpPr",{},n("p:cNvPr",{id:1,name:""}),n("p:cNvGrpSpPr"),n("p:nvPr")),Xe=n("p:grpSpPr",{},n("a:xfrm",{},n("a:off",{x:0,y:0}),n("a:ext",{cx:0,cy:0}),n("a:chOff",{x:0,y:0}),n("a:chExt",{cx:0,cy:0}))),U=e=>n("p:spTree",{},Ge,Xe,...e),ue={bg1:"lt1",tx1:"dk1",bg2:"lt2",tx2:"dk2",accent1:"accent1",accent2:"accent2",accent3:"accent3",accent4:"accent4",accent5:"accent5",accent6:"accent6",hlink:"hlink",folHlink:"folHlink"},oe=e=>n("p:bg",{},n("p:bgPr",{},n("a:solidFill",{},Ue(e)),n("a:effectLst"))),Ue=e=>typeof e=="string"?n("a:schemeClr",{val:e}):n("a:srgbClr",{val:e.rgb.replace("#","").toUpperCase()}),xe=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function Z(e){const t=s=>({...e.fill===void 0||"fill"in s&&xe(e.fill,s.fill)?{}:{fill:e.fill},...e.line===void 0||xe(e.line,s.line)?{}:{line:e.line},...e.line_width===void 0||e.line_width===s.line_width?{}:{lineWidth:e.line_width}});return e.kind==="autoshape"?e.geometry==="line"?{style:"connector",...t(Pe)}:{style:"shape",...t(ke)}:{...e.kind==="textbox"?{fill:e.fill??null}:e.fill===void 0?{}:{fill:e.fill},...e.line===void 0?{}:{line:e.line},...e.line_width===void 0?{}:{lineWidth:e.line_width}}}const We=(e,t)=>Array.from({length:Math.max(e.length,t.length)},(s,o)=>{const i=e[o]??{},l=t[o]??{},r={...i.font,...l.font};return{...i,...l,...Object.keys(r).length>0?{font:r}:{}}});function ge(e,t,s,o,i,l,r,m){const x=o!==void 0&&i!==void 0&&JSON.stringify(o.text_styles.other)!==JSON.stringify(i.text_styles.other);return j("p:txBody",q(t,r,e==="autoshape"?{rtlCol:0}:{}),B(x?We(o.text_styles.other,t.levels):t.levels),s,l,m)}const Je="{2D5ABB26-0587-4C30-8999-92F81FD0307C}",Ye=[["left","a:lnL"],["right","a:lnR"],["top","a:lnT"],["bottom","a:lnB"]];function ye(e,t){return n("a:tbl",{},n("a:tblPr",{firstRow:e.first_row?1:void 0,firstCol:e.first_col?1:void 0,lastRow:e.last_row?1:void 0,lastCol:e.last_col?1:void 0,bandRow:e.horz_banding?1:void 0,bandCol:e.vert_banding?1:void 0},n("a:tableStyleId",{},Je)),n("a:tblGrid",{},...e.columns.map(s=>n("a:gridCol",{w:s}))),...e.rows.map((s,o)=>n("a:tr",{h:s.height},...s.cells.map((i,l)=>{const r=i.text.own??i.text,m=s.cells[l-1],x=e.rows[o-1]?.cells[l];return n("a:tc",{gridSpan:i.span_width,rowSpan:i.span_height,hMerge:i.spanned&&m&&(m.spanned||m.span_width)?1:void 0,vMerge:i.spanned&&x&&(x.spanned||x.span_height)?1:void 0},j("a:txBody",n("a:bodyPr"),n("a:lstStyle"),i.text.paragraphs,t,se(i.fileText)),n("a:tcPr",{marL:r.margin_left,marR:r.margin_right,marT:r.margin_top,marB:r.margin_bottom,anchor:r.vertical_anchor},...Ye.map(([P,$])=>{const C=i.borders?.[P];return C?n($,{w:C.width},ce(C.color)):""}),i.fill===void 0?"":ce(i.fill)))}))))}const ae=e=>e.group===void 0?{}:{group:e.group},V=e=>({...e.line_dash===void 0?{}:{lineDash:e.line_dash},...e.line_begin===void 0?{}:{lineBegin:e.line_begin},...e.line_end===void 0?{}:{lineEnd:e.line_end}});function Se(e,t,s,o,i,l,r){const m={id:t,name:e.name,...e.frame?{frame:e.frame}:{},...e.rotation===void 0?{}:{rotation:e.rotation}};if(e.kind==="placeholder"&&e.placeholder){const x=r.on==="master"?{...$e(e.placeholder.type),...e.text}:e.text;return{...m,kind:"sp",placeholder:{...e.placeholder},...e.fill===void 0?{}:{fill:e.fill},...e.line===void 0?{}:{line:e.line},...e.line_width===void 0?{}:{lineWidth:e.line_width},...e.fill===void 0&&e.line===void 0?{}:{geometry:e.geometry??"rect"},text:j("p:txBody",x?q(x):n("a:bodyPr"),B(x?.levels??[]),Re,l)}}if(he(e)){if(e.table)return{...m,kind:"table",table:ye(e.table,l)};if(e.kind==="picture"&&e.media){const x=i(le(e.media.base,e.media.path));return x?{...m,kind:"pic",picture:{image:s.add(d.image,o.add(x,A(e.media.path),"image")),descr:e.media.path.split("/").pop()??""}}:void 0}return e.geometry==="line"?{...m,kind:"cxn",...e.flip?{flip:e.flip}:{},...Z(e),...V(e)}:{...m,kind:"sp",...e.kind==="textbox"?{textbox:!0}:{},...e.path?{path:e.path}:{geometry:e.geometry??"rect"},...e.adjustments?{adjustments:e.adjustments}:{},...Z(e),...V(e),...e.text?{text:ge(e.kind,e.text,e.text.paragraphs,r.master,r.first,l)}:{}}}}function se(e){if(e)return{font:{...e.size===void 0?{}:{size:Te(e.size)},...e.bold===void 0?{}:{bold:e.bold},...e.font===void 0?{}:{name:e.font},...e.color===void 0?{}:e.color.startsWith("#")?{rgb:e.color.toUpperCase()}:{color:e.color}},...e.align===void 0?{}:{alignment:e.align}}}function qe(e,t,s,o,i,l,r,m,x){const P=`${e.id}/${t.name}`,$=l.deck.fitted[P];if(t.level!=="slide"&&!ne(t))return;const C=t.level==="slide"&&t.placeholder?{placeholder:{...t.placeholder}}:{},F=!t.placeholder||t.sources.frame.from==="slide"||t.sources.frame.from==="code"?{frame:t.frame}:{},v={id:s,name:t.name,...C,...F,...t.rotation===void 0?{}:{rotation:t.rotation}},W=()=>{const f=l.pictures.get(P);return f?{image:o.add(d.image,i.add(f,"png","image")),descr:t.name}:void 0};if(t.table)return{...v,kind:"table",table:ye(t.table,r)};if(t.chart)return{...v,frame:t.frame,kind:"chart",chart:o.add(d.chart,x.add(t.chart,t.frame))};if(t.kind==="movie"&&t.media){const f=W(),I=fe[A(t.media.path)]?l.file(t.media.path):void 0;if(!f)return;if(!I)return{...v,frame:t.frame,kind:"pic",picture:f};const O=i.add(I,A(t.media.path),"media");return m.push(s),{...v,frame:t.frame,kind:"pic",picture:{image:f.image},video:{link:o.add(d.video,O),media:o.add(d.media,O)}}}if(ne(t)){const f=W(),I=l.movies?.get(P);if(f&&I){const O=i.add(I.bytes,"mp4","media");return m.push(s),{...v,frame:t.frame,kind:"pic",picture:{image:f.image},video:{link:o.add(d.video,O),media:o.add(d.media,O)}}}return f?{...v,frame:t.frame,kind:"pic",picture:f}:void 0}if(t.kind==="picture"&&t.media){const f=l.file(t.media.path);return f?{...v,frame:t.frame,kind:"pic",picture:{image:o.add(d.image,i.add(f,A(t.media.path),"image")),...t.media.crop?{crop:t.media.crop}:{},descr:t.media.path.split("/").pop()??""}}:void 0}if(t.geometry==="line")return{...v,kind:"cxn",...t.flip?{flip:t.flip}:{},...Z(t),...V(t)};const k=t.text,J=l.deck.masters.find(f=>f.name===e.master),H=k?t.placeholder?j("p:txBody",$===void 0?n("a:bodyPr"):q({},$),n("a:lstStyle"),k.paragraphs,r,se(t.fileText)):k.own?ge(t.kind,k.own,k.paragraphs,J,l.deck.masters[0],r,$,se(t.fileText)):j("p:txBody",q(Be(k.style),$),B(k.style.levels.map(de)),k.paragraphs,r):void 0,z=t.sources.frame.from==="code",G=t.fill!==void 0&&(z||t.sources.fill?.from==="slide"),E=t.line!==void 0&&(z||t.sources.line?.from==="slide");return{...v,kind:"sp",...t.kind==="textbox"?{textbox:!0}:{},...t.path?{path:t.path}:!t.placeholder||G||E?{geometry:t.geometry??"rect"}:{},...t.adjustments?{adjustments:t.adjustments}:{},...V(t),...t.placeholder?{...G?{fill:t.fill}:{},...E?{line:t.line}:{},...t.line_width===void 0?{}:{lineWidth:t.line_width}}:Z(t),...H?{text:H}:{}}}const Ze={cx:6858e3,cy:9144e3};function be(e,t){const s=pe({id:2,name:"Slide Image Placeholder 1",kind:"sp",placeholder:{type:"sldImg",idx:2},...e===void 0?{frame:{left:1143e3,top:685800,width:4572e3,height:3429e3}}:{}}),o=pe({id:3,name:"Notes Placeholder 2",kind:"sp",placeholder:{type:"body",idx:3,sz:"quarter"},...e===void 0?{frame:{left:685800,top:4343400,width:5486400,height:4114800}}:{},text:j("p:txBody",n("a:bodyPr"),n("a:lstStyle"),(e??"").split(`
3
- `).map(i=>({runs:[{text:i}],level:0})),t)});return[s,o]}export function pptxParts(e){const{deck:t}=e,s=t.lang?.split("-").map((a,p)=>p===0?a.toLowerCase():a.toUpperCase()).join("-"),o=new Map,i=new ze,l=new He,r=[],m=new D,x=[],P=new Map;let $=2147483648;t.masters.forEach((a,p)=>{const c=p+1,_=$++,g=`ppt/slideMasters/slideMaster${String(c)}.xml`,y=`ppt/theme/theme${String(c)}.xml`;o.set(y,me(t.theme)),r.push([y,b.theme]);const S=new D,L=[];a.layouts.forEach(M=>{const h=P.size+1,u=`ppt/slideLayouts/slideLayout${String(h)}.xml`;P.set(M,u);const X=new D;X.add(d.slideMaster,`../slideMasters/slideMaster${String(c)}.xml`);const _e=M.shapes.flatMap((ie,we)=>{const re=Se(ie,we+2,X,i,e.file,s,{master:a,first:e.deck.masters[0],on:"layout"});return re?[{...re,...ae(ie)}]:[]});o.set(u,w+n("p:sldLayout",{...T,...M.display_master_shapes===!1?{showMasterSp:0}:{},preserve:1},n("p:cSld",{name:M.name},M.background===void 0?"":oe(M.background),U(ee(_e))),n("p:clrMapOvr",{},n("a:masterClrMapping")))),o.set(`ppt/slideLayouts/_rels/slideLayout${String(h)}.xml.rels`,X.xml()),r.push([u,b.slideLayout]),L.push(n("p:sldLayoutId",{id:$++,"r:id":S.add(d.slideLayout,`../slideLayouts/slideLayout${String(h)}.xml`)}))}),S.add(d.theme,`../theme/theme${String(c)}.xml`);const Y=a.shapes.flatMap((M,h)=>{const u=Se(M,h+2,S,i,e.file,s,{master:a,first:e.deck.masters[0],on:"master"});return u?[{...u,...ae(M)}]:[]}),N=a.text_styles;o.set(g,w+n("p:sldMaster",T,n("p:cSld",{name:a.name},oe(a.background),U(ee(Y))),n("p:clrMap",ue),n("p:sldLayoutIdLst",{},...L),n("p:txStyles",{},B(N.title,"p:titleStyle"),B(N.body,"p:bodyStyle"),B(N.other,"p:otherStyle")))),o.set(`ppt/slideMasters/_rels/slideMaster${String(c)}.xml.rels`,S.xml()),r.push([g,b.slideMaster]),x.push(n("p:sldMasterId",{id:_,"r:id":m.add(d.slideMaster,`slideMasters/slideMaster${String(c)}.xml`)}))});const C=t.slides.some(a=>a.notes!==void 0),K=`ppt/theme/theme${String(t.masters.length+1)}.xml`;let F="";if(C){o.set(K,me(t.theme)),r.push([K,b.theme]);const a=new D;a.add(d.theme,`../theme/theme${String(t.masters.length+1)}.xml`),o.set("ppt/notesMasters/notesMaster1.xml",w+n("p:notesMaster",T,n("p:cSld",{},oe("lt1"),U(be(void 0,s))),n("p:clrMap",ue))),o.set("ppt/notesMasters/_rels/notesMaster1.xml.rels",a.xml()),r.push(["ppt/notesMasters/notesMaster1.xml",b.notesMaster]),F=m.add(d.notesMaster,"notesMasters/notesMaster1.xml")}const v=[],W=new Map(t.masters.flatMap(a=>a.layouts.map(p=>[p.name,p]))),k=a=>{const p=new Set,c=t.slides[a];for(const[_,g]of[[t.slides[a-1],c],[c,t.slides[a+1]]])if(_&&g&&g.transition?.type==="morph")for(const y of _.shapes)y.level==="slide"&&g.shapes.some(S=>S.name===y.name)&&p.add(y.name);return p};t.slides.forEach((a,p)=>{const c=p+1,_=`ppt/slides/slide${String(c)}.xml`,g=new D,y=W.get(a.layout),S=y?P.get(y):void 0;S&&g.add(d.slideLayout,`../${S.slice(4)}`);const L=[],Y=new Map;let N=1;const M=a.shapes.flatMap(h=>{const u=qe(a,h,++N,g,i,e,s,L,l);if(!u)return N--,[];Y.set(h.name,u.id);const X=k(p).has(h.name)?{name:`!!${u.name}`}:{};return[{...u,...ae(h),...X}]});if(a.notes!==void 0){const h=`ppt/notesSlides/notesSlide${String(c)}.xml`,u=new D;u.add(d.notesMaster,"../notesMasters/notesMaster1.xml"),u.add(d.slide,`../slides/slide${String(c)}.xml`),o.set(h,w+n("p:notes",T,n("p:cSld",{},U(be(a.notes,s))),n("p:clrMapOvr",{},n("a:masterClrMapping")))),o.set(`ppt/notesSlides/_rels/notesSlide${String(c)}.xml.rels`,u.xml()),r.push([h,b.notesSlide]),g.add(d.notesSlide,`../notesSlides/notesSlide${String(c)}.xml`)}o.set(_,w+n("p:sld",{...T,show:a.hidden?0:void 0},n("p:cSld",{name:a.id},U(ee(M))),n("p:clrMapOvr",{},n("a:masterClrMapping")),Ne(a.transition),Ae(a.animations,L,h=>Y.get(h),h=>a.shapes.find(u=>u.name===h)?.text!==void 0,t,new Map(a.shapes.flatMap(h=>{const u=e.movies?.get(`${a.id}/${h.name}`);return u?[[h.name,u.seconds]]:[]}))))),o.set(`ppt/slides/_rels/slide${String(c)}.xml.rels`,g.xml()),r.push([_,b.slide]),v.push(n("p:sldId",{id:256+p,"r:id":m.add(d.slide,`slides/slide${String(c)}.xml`)}))}),m.add(d.theme,"theme/theme1.xml"),m.add(d.presProps,"presProps.xml"),m.add(d.viewProps,"viewProps.xml"),m.add(d.tableStyles,"tableStyles.xml");const J=new Map;let H=0;const z=(e.fonts??[]).flatMap(a=>{const p=Fe.flatMap(([c,_,g])=>{const y=a[c]&&Ee(a[c],a.typeface,g),S=y&&Ie(y);if(!y||!S)return[];const L=`fonts/font${String(++H)}.fntdata`;return J.set(`ppt/${L}`,Oe(y,S,a.typeface,g)),[n(_,{"r:id":m.add(d.font,L)})]});return p.length===0?[]:[n("p:embeddedFont",{},n("p:font",{typeface:a.typeface}),...p)]}),G=z.length===0?"":n("p:embeddedFontLst",{},...z);o.set("ppt/presentation.xml",w+n("p:presentation",{...T,...G===""?{}:{embedTrueTypeFonts:1},saveSubsetFonts:1},n("p:sldMasterIdLst",{},...x),F===""?"":n("p:notesMasterIdLst",{},n("p:notesMasterId",{"r:id":F})),n("p:sldIdLst",{},...v),n("p:sldSz",{cx:t.width,cy:t.height}),n("p:notesSz",Ze),G,e.deck.masters[0]?B(Le(e.deck.masters[0]).map(de),"p:defaultTextStyle"):"")),o.set("ppt/_rels/presentation.xml.rels",m.xml()),r.push(["ppt/presentation.xml",b.presentation]),o.set("ppt/presProps.xml",w+n("p:presentationPr",T)),o.set("ppt/viewProps.xml",w+n("p:viewPr",T)),o.set("ppt/tableStyles.xml",w+n("a:tblStyleLst",{"xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main",def:"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"})),r.push(["ppt/presProps.xml",b.presProps]),r.push(["ppt/viewProps.xml",b.viewProps]),r.push(["ppt/tableStyles.xml",b.tableStyles]),o.set("docProps/core.xml",w+n("cp:coreProperties",{"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/"},e.title===void 0?"":`<dc:title>${je(e.title)}</dc:title>`)),o.set("docProps/app.xml",w+n("Properties",{xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"},n("Application",{},"AllyHub"),n("Slides",{},String(t.slides.length)),n("Notes",{},String(t.slides.filter(a=>a.notes!==void 0).length)),n("HiddenSlides",{},String(t.slides.filter(a=>a.hidden).length)))),r.push(["docProps/core.xml",b.core]),r.push(["docProps/app.xml",b.app]);const E=new D;E.add(d.officeDocument,"ppt/presentation.xml"),E.add(d.core,"docProps/core.xml"),E.add(d.app,"docProps/app.xml");const f=new Map;l.list.forEach(({chart:a,frame:p},c)=>{const _=String(c+1),g=`ppt/charts/chart${_}.xml`,y=new D,S=`Microsoft_Excel_Sheet${_}.xlsx`;f.set(`ppt/embeddings/${S}`,De(a)),o.set(g,Ce(a,p,y.add(d.package,`../embeddings/${S}`))),o.set(`ppt/charts/_rels/chart${_}.xml.rels`,y.xml()),r.push([g,b.chart])});const I=new Set([...i.parts.keys(),...f.keys()].map(A)),O=w+n("Types",{xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},n("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),n("Default",{Extension:"xml",ContentType:"application/xml"}),H>0?n("Default",{Extension:"fntdata",ContentType:"application/x-fontdata"}):"",...[...I].sort().map(a=>n("Default",{Extension:a,ContentType:a==="xlsx"?b.workbook:te[a]??fe[a]??"application/octet-stream"})),...r.map(([a,p])=>n("Override",{PartName:`/${a}`,ContentType:p}))),Q=new TextEncoder,R=new Map;R.set("[Content_Types].xml",Q.encode(O)),R.set("_rels/.rels",Q.encode(E.xml()));for(const[a,p]of o)R.set(a,Q.encode(p));for(const[a,p]of i.parts)R.set(a,p);for(const[a,p]of f)R.set(a,p);for(const[a,p]of J)R.set(a,p);return R}const Ve=new Date(1980,0,1);export function writePptx(e){const t={};for(const[s,o]of pptxParts(e))t[s]=[o,{level:/\.(png|jpe?g|gif|mp4|m4v|mov)$/u.test(s)?0:6,mtime:Ve}];return Me(t)}
2
+ import{createHash as ve}from"node:crypto";import{zipSync as Me}from"fflate";import{AUTOSHAPE_STYLE as Pe,CONNECTOR_STYLE as $e,joinPath as le,placeholderFrame as Le,plainLevels as Te,Pt as De}from"@allyhub-next/slides-core";import{chartBook as Ee,chartXml as Ce}from"./charts.js";import{asFace as Ie,fontInfo as Oe,eotOf as Re}from"./fonts.js";import{NO_PARAGRAPHS as Be,shapeXml as de,treeXml as ee}from"./shapes.js";import{bodyOfStyle as Ne,bodyProps as q,LINK as Ae,SLIDE_NUMBER as je,levelOf as pe,listStyle as B,txBody as j}from"./text.js";import{themeXml as me}from"./theme.js";import{timingXml as Fe,transitionXml as He}from"./timing.js";import{HEAD as w,PML as T,el as n,esc as ze,fill as ce,unesc as Ge}from"./xml.js";const te={png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif"},fe={mp4:"video/mp4",m4v:"video/mp4",mov:"video/quicktime"},N=e=>(e.split(".").pop()??"").toLowerCase(),Ue=[["regular","p:regular","Regular"],["bold","p:bold","Bold"],["italic","p:italic","Italic"],["boldItalic","p:boldItalic","Bold Italic"]],l={hyperlink:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",chart:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",package:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/package",font:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font",officeDocument:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",core:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",app:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",slideMaster:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideMaster",slideLayout:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout",slide:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide",theme:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",notesMaster:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster",notesSlide:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide",image:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",video:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/video",media:"http://schemas.microsoft.com/office/2007/relationships/media",presProps:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/presProps",viewProps:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/viewProps",tableStyles:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/tableStyles"},b={chart:"application/vnd.openxmlformats-officedocument.drawingml.chart+xml",workbook:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",presentation:"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml",slideMaster:"application/vnd.openxmlformats-officedocument.presentationml.slideMaster+xml",slideLayout:"application/vnd.openxmlformats-officedocument.presentationml.slideLayout+xml",slide:"application/vnd.openxmlformats-officedocument.presentationml.slide+xml",theme:"application/vnd.openxmlformats-officedocument.theme+xml",notesMaster:"application/vnd.openxmlformats-officedocument.presentationml.notesMaster+xml",notesSlide:"application/vnd.openxmlformats-officedocument.presentationml.notesSlide+xml",presProps:"application/vnd.openxmlformats-officedocument.presentationml.presProps+xml",viewProps:"application/vnd.openxmlformats-officedocument.presentationml.viewProps+xml",tableStyles:"application/vnd.openxmlformats-officedocument.presentationml.tableStyles+xml",core:"application/vnd.openxmlformats-package.core-properties+xml",app:"application/vnd.openxmlformats-officedocument.extended-properties+xml"};class D{list=[];linked(t){return t.replaceAll(new RegExp(`r:id="${Ae}([^"]*)"`,"gu"),(i,o)=>`r:id="${this.add(l.hyperlink,Ge(o),!0)}"`)}add(t,i,o=!1){const r=this.list.find(s=>s.type===t&&s.target===i);if(r)return r.id;const d=`rId${String(this.list.length+1)}`;return this.list.push({id:d,type:t,target:i,...o?{external:o}:{}}),d}xml(){return w+n("Relationships",{xmlns:"http://schemas.openxmlformats.org/package/2006/relationships"},...this.list.map(t=>n("Relationship",{Id:t.id,Type:t.type,Target:t.target,TargetMode:t.external?"External":void 0})))}}class Xe{list=[];add(t,i){return this.list.push({chart:t,frame:i}),`../charts/chart${String(this.list.length)}.xml`}}class We{parts=new Map;byHash=new Map;add(t,i,o){const r=ve("sha256").update(t).digest("hex"),d=this.byHash.get(`${o}:${r}`);if(d)return d;const s=`${o}${String(this.parts.size+1)}.${i}`;return this.parts.set(`ppt/media/${s}`,t),this.byHash.set(`${o}:${r}`,`../media/${s}`),`../media/${s}`}}function he(e){return e.kind==="component"||e.kind==="movie"?!1:e.kind==="picture"?te[N(e.media?.path??"")]!==void 0:!0}function ne(e){return e.kind==="component"||e.kind==="movie"?!0:e.kind==="picture"?te[N(e.media?.path??"")]===void 0:!1}export function picturedShapes(e){return e.slides.flatMap(t=>t.shapes.filter(i=>ne(i)).map(i=>({key:`${t.id}/${i.name}`,slide:t.id,shape:i.name,frame:i.frame})))}export function filesOf(e){const t=new Set;for(const i of e.masters)for(const o of[...i.shapes,...i.layouts.flatMap(r=>r.shapes)])o.media&&he(o)&&t.add(le(o.media.base,o.media.path));for(const i of e.slides)for(const o of i.shapes)o.media&&(o.kind==="picture"||o.kind==="movie")&&t.add(o.media.path);return[...t].sort()}const Je=n("p:nvGrpSpPr",{},n("p:cNvPr",{id:1,name:""}),n("p:cNvGrpSpPr"),n("p:nvPr")),Ye=n("p:grpSpPr",{},n("a:xfrm",{},n("a:off",{x:0,y:0}),n("a:ext",{cx:0,cy:0}),n("a:chOff",{x:0,y:0}),n("a:chExt",{cx:0,cy:0}))),X=e=>n("p:spTree",{},Je,Ye,...e),ue={bg1:"lt1",tx1:"dk1",bg2:"lt2",tx2:"dk2",accent1:"accent1",accent2:"accent2",accent3:"accent3",accent4:"accent4",accent5:"accent5",accent6:"accent6",hlink:"hlink",folHlink:"folHlink"},oe=e=>n("p:bg",{},n("p:bgPr",{},n("a:solidFill",{},qe(e)),n("a:effectLst"))),qe=e=>typeof e=="string"?n("a:schemeClr",{val:e}):n("a:srgbClr",{val:e.rgb.replace("#","").toUpperCase()}),xe=(e,t)=>JSON.stringify(e)===JSON.stringify(t);function ge(e){return{...e.fill_transparency===void 0?{}:{fillTransparency:e.fill_transparency,...e.fill===void 0?{}:{fill:e.fill}},...e.gradient?{gradient:e.gradient}:{},...e.shadow?{shadow:e.shadow}:{}}}function Z(e){const t=i=>({...e.fill===void 0||"fill"in i&&xe(e.fill,i.fill)?{}:{fill:e.fill},...e.line===void 0||xe(e.line,i.line)?{}:{line:e.line},...e.line_width===void 0||e.line_width===i.line_width?{}:{lineWidth:e.line_width}});return e.kind==="autoshape"?e.geometry==="line"?{style:"connector",...t($e)}:{style:"shape",...t(Pe)}:{...e.kind==="textbox"?{fill:e.fill??null}:e.fill===void 0?{}:{fill:e.fill},...e.line===void 0?{}:{line:e.line},...e.line_width===void 0?{}:{lineWidth:e.line_width}}}const Ze=(e,t)=>Array.from({length:Math.max(e.length,t.length)},(i,o)=>{const r=e[o]??{},d=t[o]??{},s={...r.font,...d.font};return{...r,...d,...Object.keys(s).length>0?{font:s}:{}}});function ye(e,t,i,o,r,d,s,m){const g=o!==void 0&&r!==void 0&&JSON.stringify(o.text_styles.other)!==JSON.stringify(r.text_styles.other);return j("p:txBody",q(t,s,e==="autoshape"?{rtlCol:0}:{}),B(g?Ze(o.text_styles.other,t.levels):t.levels),i,d,m)}const Ke="{2D5ABB26-0587-4C30-8999-92F81FD0307C}",Ve=[["left","a:lnL"],["right","a:lnR"],["top","a:lnT"],["bottom","a:lnB"]];function Se(e,t){return n("a:tbl",{},n("a:tblPr",{firstRow:e.first_row?1:void 0,firstCol:e.first_col?1:void 0,lastRow:e.last_row?1:void 0,lastCol:e.last_col?1:void 0,bandRow:e.horz_banding?1:void 0,bandCol:e.vert_banding?1:void 0},n("a:tableStyleId",{},Ke)),n("a:tblGrid",{},...e.columns.map(i=>n("a:gridCol",{w:i}))),...e.rows.map((i,o)=>n("a:tr",{h:i.height},...i.cells.map((r,d)=>{const s=r.text.own??r.text,m=i.cells[d-1],g=e.rows[o-1]?.cells[d];return n("a:tc",{gridSpan:r.span_width,rowSpan:r.span_height,hMerge:r.spanned&&m&&(m.spanned||m.span_width)?1:void 0,vMerge:r.spanned&&g&&(g.spanned||g.span_height)?1:void 0},j("a:txBody",n("a:bodyPr"),n("a:lstStyle"),r.text.paragraphs,t,ie(r.fileText)),n("a:tcPr",{marL:s.margin_left,marR:s.margin_right,marT:s.margin_top,marB:s.margin_bottom,anchor:s.vertical_anchor},...Ve.map(([P,$])=>{const E=r.borders?.[P];return E?n($,{w:E.width},ce(E.color)):""}),r.fill===void 0?"":ce(r.fill)))}))))}const ae=e=>e.group===void 0?{}:{group:e.group},K=e=>({...e.line_dash===void 0?{}:{lineDash:e.line_dash},...e.line_begin===void 0?{}:{lineBegin:e.line_begin},...e.line_end===void 0?{}:{lineEnd:e.line_end}});function be(e,t,i,o,r,d,s){const m={...ge(e),id:t,name:e.name,...e.frame?{frame:e.frame}:{},...e.rotation===void 0?{}:{rotation:e.rotation}};if(e.kind==="placeholder"&&e.placeholder){const g=s.on==="master"?{...Le(e.placeholder.type),...e.text}:e.text;return{...m,kind:"sp",placeholder:{...e.placeholder},...e.fill===void 0?{}:{fill:e.fill},...e.line===void 0?{}:{line:e.line},...e.line_width===void 0?{}:{lineWidth:e.line_width},...e.fill===void 0&&e.line===void 0?{}:{geometry:e.geometry??"rect"},text:j("p:txBody",g?q(g):n("a:bodyPr"),B(g?.levels??[]),e.placeholder.type==="sldNum"?je:Be,d)}}if(he(e)){if(e.table)return{...m,kind:"table",table:Se(e.table,d)};if(e.kind==="picture"&&e.media){const g=r(le(e.media.base,e.media.path));return g?{...m,kind:"pic",picture:{image:i.add(l.image,o.add(g,N(e.media.path),"image")),descr:e.media.path.split("/").pop()??""}}:void 0}return e.geometry==="line"?{...m,kind:"cxn",...e.flip?{flip:e.flip}:{},...Z(e),...K(e)}:{...m,kind:"sp",...e.kind==="textbox"?{textbox:!0}:{},...e.path?{path:e.path}:{geometry:e.geometry??"rect"},...e.adjustments?{adjustments:e.adjustments}:{},...Z(e),...K(e),...e.text?{text:ye(e.kind,e.text,e.text.paragraphs,s.master,s.first,d)}:{}}}}function ie(e,t){if(e)return{font:{...e.size===void 0?{}:{size:De(e.size)},...e.bold===void 0?{}:{bold:e.bold},...e.font===void 0?{}:{name:e.font},...e.color===void 0?{}:e.color.startsWith("#")?{rgb:e.color.toUpperCase()}:{color:e.color}},...e.align===void 0?{}:{alignment:e.align},...e.numbered===void 0?{}:{numbered:e.numbered,...t?.levels[0]?{margin_left:t.levels[0].margin_left,indent:t.levels[0].indent}:{}}}}function Qe(e,t,i,o,r,d,s,m,g){const P=`${e.id}/${t.name}`,$=d.deck.fitted[P];if(t.level!=="slide"&&!ne(t))return;const E=t.level==="slide"&&t.placeholder?{placeholder:{...t.placeholder}}:{},F=!t.placeholder||t.sources.frame.from==="slide"||t.sources.frame.from==="code"?{frame:t.frame}:{},k={...ge(t),id:i,name:t.name,...E,...F,...t.rotation===void 0?{}:{rotation:t.rotation}},W=()=>{const f=d.pictures.get(P);return f?{image:o.add(l.image,r.add(f,"png","image")),descr:t.name}:void 0};if(t.table)return{...k,kind:"table",table:Se(t.table,s)};if(t.chart)return{...k,frame:t.frame,kind:"chart",chart:o.add(l.chart,g.add(t.chart,t.frame))};if(t.kind==="movie"&&t.media){const f=W(),I=fe[N(t.media.path)]?d.file(t.media.path):void 0;if(!f)return;if(!I)return{...k,frame:t.frame,kind:"pic",picture:f};const O=r.add(I,N(t.media.path),"media");return m.push(i),{...k,frame:t.frame,kind:"pic",picture:{image:f.image},video:{link:o.add(l.video,O),media:o.add(l.media,O)}}}if(ne(t)){const f=W(),I=d.movies?.get(P);if(f&&I){const O=r.add(I.bytes,"mp4","media");return m.push(i),{...k,frame:t.frame,kind:"pic",picture:{image:f.image},video:{link:o.add(l.video,O),media:o.add(l.media,O)}}}return f?{...k,frame:t.frame,kind:"pic",picture:f}:void 0}if(t.kind==="picture"&&t.media){const f=d.file(t.media.path);return f?{...k,frame:t.frame,kind:"pic",picture:{image:o.add(l.image,r.add(f,N(t.media.path),"image")),...t.media.crop?{crop:t.media.crop}:{},descr:t.media.path.split("/").pop()??""}}:void 0}if(t.geometry==="line")return{...k,kind:"cxn",...t.flip?{flip:t.flip}:{},...Z(t),...K(t)};const v=t.text,J=d.deck.masters.find(f=>f.name===e.master),H=v?t.placeholder?j("p:txBody",$===void 0?n("a:bodyPr"):q({},$),n("a:lstStyle"),v.paragraphs,s,ie(t.fileText,v.style)):v.own?ye(t.kind,v.own,v.paragraphs,J,d.deck.masters[0],s,$,ie(t.fileText,v.style)):j("p:txBody",q(Ne(v.style),$),B(v.style.levels.map(pe)),v.paragraphs,s):void 0,z=t.sources.frame.from==="code",G=t.fill!==void 0&&(z||t.sources.fill?.from==="slide"),C=t.line!==void 0&&(z||t.sources.line?.from==="slide");return{...k,kind:"sp",...t.kind==="textbox"?{textbox:!0}:{},...t.path?{path:t.path}:!t.placeholder||G||C?{geometry:t.geometry??"rect"}:{},...t.adjustments?{adjustments:t.adjustments}:{},...K(t),...t.placeholder?{...G?{fill:t.fill}:{},...C?{line:t.line}:{},...t.line_width===void 0?{}:{lineWidth:t.line_width}}:Z(t),...H?{text:H}:{}}}const et={cx:6858e3,cy:9144e3};function _e(e,t){const i=de({id:2,name:"Slide Image Placeholder 1",kind:"sp",placeholder:{type:"sldImg",idx:2},...e===void 0?{frame:{left:1143e3,top:685800,width:4572e3,height:3429e3}}:{}}),o=de({id:3,name:"Notes Placeholder 2",kind:"sp",placeholder:{type:"body",idx:3,sz:"quarter"},...e===void 0?{frame:{left:685800,top:4343400,width:5486400,height:4114800}}:{},text:j("p:txBody",n("a:bodyPr"),n("a:lstStyle"),(e??"").split(`
3
+ `).map(r=>({runs:[{text:r}],level:0})),t)});return[i,o]}export function pptxParts(e){const{deck:t}=e,i=t.lang?.split("-").map((a,p)=>p===0?a.toLowerCase():a.toUpperCase()).join("-"),o=new Map,r=new We,d=new Xe,s=[],m=new D,g=[],P=new Map;let $=2147483648;t.masters.forEach((a,p)=>{const c=p+1,_=$++,x=`ppt/slideMasters/slideMaster${String(c)}.xml`,y=`ppt/theme/theme${String(c)}.xml`;o.set(y,me(t.theme)),s.push([y,b.theme]);const S=new D,L=[];a.layouts.forEach(M=>{const h=P.size+1,u=`ppt/slideLayouts/slideLayout${String(h)}.xml`;P.set(M,u);const U=new D;U.add(l.slideMaster,`../slideMasters/slideMaster${String(c)}.xml`);const we=M.shapes.flatMap((se,ke)=>{const re=be(se,ke+2,U,r,e.file,i,{master:a,first:e.deck.masters[0],on:"layout"});return re?[{...re,...ae(se)}]:[]});o.set(u,w+n("p:sldLayout",{...T,...M.display_master_shapes===!1?{showMasterSp:0}:{},preserve:1},n("p:cSld",{name:M.name},M.background===void 0?"":oe(M.background),X(ee(we))),n("p:clrMapOvr",{},n("a:masterClrMapping")))),o.set(`ppt/slideLayouts/_rels/slideLayout${String(h)}.xml.rels`,U.xml()),s.push([u,b.slideLayout]),L.push(n("p:sldLayoutId",{id:$++,"r:id":S.add(l.slideLayout,`../slideLayouts/slideLayout${String(h)}.xml`)}))}),S.add(l.theme,`../theme/theme${String(c)}.xml`);const Y=a.shapes.flatMap((M,h)=>{const u=be(M,h+2,S,r,e.file,i,{master:a,first:e.deck.masters[0],on:"master"});return u?[{...u,...ae(M)}]:[]}),A=a.text_styles;o.set(x,w+n("p:sldMaster",T,n("p:cSld",{name:a.name},oe(a.background),X(ee(Y))),n("p:clrMap",ue),n("p:sldLayoutIdLst",{},...L),n("p:txStyles",{},B(A.title,"p:titleStyle"),B(A.body,"p:bodyStyle"),B(A.other,"p:otherStyle")))),o.set(`ppt/slideMasters/_rels/slideMaster${String(c)}.xml.rels`,S.xml()),s.push([x,b.slideMaster]),g.push(n("p:sldMasterId",{id:_,"r:id":m.add(l.slideMaster,`slideMasters/slideMaster${String(c)}.xml`)}))});const E=t.slides.some(a=>a.notes!==void 0),V=`ppt/theme/theme${String(t.masters.length+1)}.xml`;let F="";if(E){o.set(V,me(t.theme)),s.push([V,b.theme]);const a=new D;a.add(l.theme,`../theme/theme${String(t.masters.length+1)}.xml`),o.set("ppt/notesMasters/notesMaster1.xml",w+n("p:notesMaster",T,n("p:cSld",{},oe("lt1"),X(_e(void 0,i))),n("p:clrMap",ue))),o.set("ppt/notesMasters/_rels/notesMaster1.xml.rels",a.xml()),s.push(["ppt/notesMasters/notesMaster1.xml",b.notesMaster]),F=m.add(l.notesMaster,"notesMasters/notesMaster1.xml")}const k=[],W=new Map(t.masters.flatMap(a=>a.layouts.map(p=>[p.name,p]))),v=a=>{const p=new Set,c=t.slides[a];for(const[_,x]of[[t.slides[a-1],c],[c,t.slides[a+1]]])if(_&&x&&x.transition?.type==="morph")for(const y of _.shapes)y.level==="slide"&&x.shapes.some(S=>S.name===y.name)&&p.add(y.name);return p};t.slides.forEach((a,p)=>{const c=p+1,_=`ppt/slides/slide${String(c)}.xml`,x=new D,y=W.get(a.layout),S=y?P.get(y):void 0;S&&x.add(l.slideLayout,`../${S.slice(4)}`);const L=[],Y=new Map;let A=1;const M=a.shapes.flatMap(h=>{const u=Qe(a,h,++A,x,r,e,i,L,d);if(!u)return A--,[];Y.set(h.name,u.id);const U=v(p).has(h.name)?{name:`!!${u.name}`}:{};return[{...u,...ae(h),...U}]});if(a.notes!==void 0){const h=`ppt/notesSlides/notesSlide${String(c)}.xml`,u=new D;u.add(l.notesMaster,"../notesMasters/notesMaster1.xml"),u.add(l.slide,`../slides/slide${String(c)}.xml`),o.set(h,w+n("p:notes",T,n("p:cSld",{},X(_e(a.notes,i))),n("p:clrMapOvr",{},n("a:masterClrMapping")))),o.set(`ppt/notesSlides/_rels/notesSlide${String(c)}.xml.rels`,u.xml()),s.push([h,b.notesSlide]),x.add(l.notesSlide,`../notesSlides/notesSlide${String(c)}.xml`)}o.set(_,w+n("p:sld",{...T,show:a.hidden?0:void 0},n("p:cSld",{name:a.id},x.linked(X(ee(M)))),n("p:clrMapOvr",{},n("a:masterClrMapping")),He(a.transition),Fe(a.animations,L,h=>Y.get(h),h=>a.shapes.find(u=>u.name===h)?.text!==void 0,t,new Map(a.shapes.flatMap(h=>{const u=e.movies?.get(`${a.id}/${h.name}`);return u?[[h.name,u.seconds]]:[]}))))),o.set(`ppt/slides/_rels/slide${String(c)}.xml.rels`,x.xml()),s.push([_,b.slide]),k.push(n("p:sldId",{id:256+p,"r:id":m.add(l.slide,`slides/slide${String(c)}.xml`)}))}),m.add(l.theme,"theme/theme1.xml"),m.add(l.presProps,"presProps.xml"),m.add(l.viewProps,"viewProps.xml"),m.add(l.tableStyles,"tableStyles.xml");const J=new Map;let H=0;const z=(e.fonts??[]).flatMap(a=>{const p=Ue.flatMap(([c,_,x])=>{const y=a[c]&&Ie(a[c],a.typeface,x),S=y&&Oe(y);if(!y||!S)return[];const L=`fonts/font${String(++H)}.fntdata`;return J.set(`ppt/${L}`,Re(y,S,a.typeface,x)),[n(_,{"r:id":m.add(l.font,L)})]});return p.length===0?[]:[n("p:embeddedFont",{},n("p:font",{typeface:a.typeface}),...p)]}),G=z.length===0?"":n("p:embeddedFontLst",{},...z);o.set("ppt/presentation.xml",w+n("p:presentation",{...T,...G===""?{}:{embedTrueTypeFonts:1},saveSubsetFonts:1},n("p:sldMasterIdLst",{},...g),F===""?"":n("p:notesMasterIdLst",{},n("p:notesMasterId",{"r:id":F})),n("p:sldIdLst",{},...k),n("p:sldSz",{cx:t.width,cy:t.height}),n("p:notesSz",et),G,e.deck.masters[0]?B(Te(e.deck.masters[0]).map(pe),"p:defaultTextStyle"):"")),o.set("ppt/_rels/presentation.xml.rels",m.xml()),s.push(["ppt/presentation.xml",b.presentation]),o.set("ppt/presProps.xml",w+n("p:presentationPr",T)),o.set("ppt/viewProps.xml",w+n("p:viewPr",T)),o.set("ppt/tableStyles.xml",w+n("a:tblStyleLst",{"xmlns:a":"http://schemas.openxmlformats.org/drawingml/2006/main",def:"{5C22544A-7EE6-4342-B048-85BDC9FD1C3A}"})),s.push(["ppt/presProps.xml",b.presProps]),s.push(["ppt/viewProps.xml",b.viewProps]),s.push(["ppt/tableStyles.xml",b.tableStyles]),o.set("docProps/core.xml",w+n("cp:coreProperties",{"xmlns:cp":"http://schemas.openxmlformats.org/package/2006/metadata/core-properties","xmlns:dc":"http://purl.org/dc/elements/1.1/"},e.title===void 0?"":`<dc:title>${ze(e.title)}</dc:title>`)),o.set("docProps/app.xml",w+n("Properties",{xmlns:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties"},n("Application",{},"AllyHub"),n("Slides",{},String(t.slides.length)),n("Notes",{},String(t.slides.filter(a=>a.notes!==void 0).length)),n("HiddenSlides",{},String(t.slides.filter(a=>a.hidden).length)))),s.push(["docProps/core.xml",b.core]),s.push(["docProps/app.xml",b.app]);const C=new D;C.add(l.officeDocument,"ppt/presentation.xml"),C.add(l.core,"docProps/core.xml"),C.add(l.app,"docProps/app.xml");const f=new Map;d.list.forEach(({chart:a,frame:p},c)=>{const _=String(c+1),x=`ppt/charts/chart${_}.xml`,y=new D,S=`Microsoft_Excel_Sheet${_}.xlsx`;f.set(`ppt/embeddings/${S}`,Ee(a)),o.set(x,Ce(a,p,y.add(l.package,`../embeddings/${S}`))),o.set(`ppt/charts/_rels/chart${_}.xml.rels`,y.xml()),s.push([x,b.chart])});const I=new Set([...r.parts.keys(),...f.keys()].map(N)),O=w+n("Types",{xmlns:"http://schemas.openxmlformats.org/package/2006/content-types"},n("Default",{Extension:"rels",ContentType:"application/vnd.openxmlformats-package.relationships+xml"}),n("Default",{Extension:"xml",ContentType:"application/xml"}),H>0?n("Default",{Extension:"fntdata",ContentType:"application/x-fontdata"}):"",...[...I].sort().map(a=>n("Default",{Extension:a,ContentType:a==="xlsx"?b.workbook:te[a]??fe[a]??"application/octet-stream"})),...s.map(([a,p])=>n("Override",{PartName:`/${a}`,ContentType:p}))),Q=new TextEncoder,R=new Map;R.set("[Content_Types].xml",Q.encode(O)),R.set("_rels/.rels",Q.encode(C.xml()));for(const[a,p]of o)R.set(a,Q.encode(p));for(const[a,p]of r.parts)R.set(a,p);for(const[a,p]of f)R.set(a,p);for(const[a,p]of J)R.set(a,p);return R}const tt=new Date(1980,0,1);export function writePptx(e){const t={};for(const[i,o]of pptxParts(e))t[i]=[o,{level:/\.(png|jpe?g|gif|mp4|m4v|mov)$/u.test(i)?0:6,mtime:tt}];return Me(t)}
@@ -1,6 +1,8 @@
1
- import type { Color } from "@allyhub-next/slides-core";
1
+ import type { Color, GradientDef, ShadowDef } from "@allyhub-next/slides-core";
2
2
  /** Text and attribute values escaped; characters XML 1.0 cannot hold dropped. */
3
3
  export declare const esc: (s: string) => string;
4
+ /** A value as `esc` left it, read back. */
5
+ export declare const unesc: (s: string) => string;
4
6
  export type Attrs = Record<string, string | number | boolean | undefined>;
5
7
  /** An element: its attributes (undefined ones left out, booleans as 1 and 0) and its children. */
6
8
  export declare function el(name: string, attrs?: Attrs, ...children: string[]): string;
@@ -17,10 +19,14 @@ export declare const PML: {
17
19
  "xmlns:r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
18
20
  "xmlns:p": "http://schemas.openxmlformats.org/presentationml/2006/main";
19
21
  };
20
- /** A colour as DrawingML writes it: the theme's (`a:schemeClr`) or RGB (`a:srgbClr`). */
21
- export declare function color(c: Color): string;
22
+ /** A colour as DrawingML writes it: the theme's (`a:schemeClr`) or RGB (`a:srgbClr`), and how much shows through it. */
23
+ export declare function color(c: Color, transparency?: number): string;
22
24
  /** A solid fill of a colour, or none. */
23
- export declare const fill: (c: Color | null) => string;
25
+ export declare const fill: (c: Color | null, transparency?: number) => string;
26
+ /** A gradient fill: stops in order, an angle in 60 000ths of a degree. */
27
+ export declare const gradientFill: (g: GradientDef) => string;
28
+ /** A shadow outside a shape, in an effect list. */
29
+ export declare const effects: (s: ShadowDef) => string;
24
30
  /** Hundredths of a point (`sz`) from EMU. */
25
31
  export declare const centipoints: (emu: number) => number;
26
32
  //# sourceMappingURL=xml.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- const l={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"},p=o=>{const t=o.charCodeAt(0);return t<32&&t!==9&&t!==10&&t!==13||t===65534||t===65535};export const esc=o=>Array.from(o,t=>p(t)?"":l[t]??t).join("");export function el(o,t={},...a){const r=Object.entries(t).filter(([,n])=>n!==void 0).map(([n,e])=>` ${n}="${esc(typeof e=="boolean"?e?"1":"0":String(e))}"`).join(""),s=a.join("");return s===""?`<${o}${r}/>`:`<${o}${r}>${s}</${o}>`}export const HEAD=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
3
- `,NS={a:"http://schemas.openxmlformats.org/drawingml/2006/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",p:"http://schemas.openxmlformats.org/presentationml/2006/main",p14:"http://schemas.microsoft.com/office/powerpoint/2010/main"},PML={"xmlns:a":NS.a,"xmlns:r":NS.r,"xmlns:p":NS.p};export function color(o){return typeof o=="string"?el("a:schemeClr",{val:o}):el("a:srgbClr",{val:o.rgb.replace("#","").toUpperCase()})}export const fill=o=>o===null?el("a:noFill"):el("a:solidFill",{},color(o)),centipoints=o=>Math.round(o/127);
2
+ const s={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"},p=t=>{const o=t.charCodeAt(0);return o<32&&o!==9&&o!==10&&o!==13||o===65534||o===65535};export const esc=t=>Array.from(t,o=>p(o)?"":s[o]??o).join(""),unesc=t=>t.replaceAll("&quot;",'"').replaceAll("&gt;",">").replaceAll("&lt;","<").replaceAll("&amp;","&");export function el(t,o={},...e){const r=Object.entries(o).filter(([,n])=>n!==void 0).map(([n,a])=>` ${n}="${esc(typeof a=="boolean"?a?"1":"0":String(a))}"`).join(""),l=e.join("");return l===""?`<${t}${r}/>`:`<${t}${r}>${l}</${t}>`}export const HEAD=`<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
3
+ `,NS={a:"http://schemas.openxmlformats.org/drawingml/2006/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",p:"http://schemas.openxmlformats.org/presentationml/2006/main",p14:"http://schemas.microsoft.com/office/powerpoint/2010/main"},PML={"xmlns:a":NS.a,"xmlns:r":NS.r,"xmlns:p":NS.p};export function color(t,o=0){const e=o>0?el("a:alpha",{val:Math.round((1-o)*1e5)}):"";return typeof t=="string"?el("a:schemeClr",{val:t},e):el("a:srgbClr",{val:t.rgb.replace("#","").toUpperCase()},e)}export const fill=(t,o=0)=>t===null?el("a:noFill"):el("a:solidFill",{},color(t,o)),gradientFill=t=>el("a:gradFill",{rotWithShape:1},el("a:gsLst",{},...[...t.stops].sort((o,e)=>o.at-e.at).map(o=>el("a:gs",{pos:Math.round(o.at*1e5)},color(o.color,o.transparency)))),el("a:lin",{ang:Math.round(t.angle*6e4),scaled:0})),effects=t=>el("a:effectLst",{},el("a:outerShdw",{blurRad:t.blur,dist:t.distance,dir:Math.round(t.angle*6e4),algn:"ctr",rotWithShape:0},color(t.color,t.transparency))),centipoints=t=>Math.round(t/127);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/slides-pptx",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,3 +1,4 @@
1
+ import type { Numbering } from "@allyhub-next/formats";
1
2
  import type { Color, ResolvedShape, ResolvedSlide, Theme } from "@allyhub-next/slides-core";
2
3
  /** The attribute a shape's element carries: its slide and name (`<slide>/<shape>`). */
3
4
  export declare const SHAPE_ATTR = "data-ak-shape";
@@ -27,6 +28,8 @@ export interface DrawOptions {
27
28
  /** The deck's language (its combo's): a CJK one draws its punctuation in the East Asian face. */
28
29
  lang?: string;
29
30
  }
31
+ /** What a list says at its `n`th item, from 1. */
32
+ export declare function numberText(numbering: Numbering, n: number): string;
30
33
  /**
31
34
  * Shrinks a frame's text until it fits its frame, as PowerPoint's
32
35
  * "shrink text on overflow" does (`a:normAutofit`, its fontScale): the
@@ -1,3 +1,3 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{ADJUSTMENT_DEFAULTS as z,chartDrawing as M,EMU_PER_PT as $,Pt as R}from"@allyhub-next/slides-core";export const SHAPE_ATTR="data-ak-shape",LINE_WIDTH=R(.75),SINGLE_SPACING=1.2,MIN_FONT_SCALE=.25;export function themeCss(e){const t={};for(const[i,o]of Object.entries(e.colors))t[`--ak-theme-${i}`]=o;return t["--ak-theme-major"]=y(e.fonts.major),t["--ak-theme-minor"]=y(e.fonts.minor),t["--ak-theme-major-ea"]=y(e.fonts.major_east_asian),t["--ak-theme-minor-ea"]=y(e.fonts.minor_east_asian),t}const y=e=>e.includes(",")||e.includes('"')?e:`"${e}", "Noto Sans SC", sans-serif`;export const colorCss=e=>e==null?"transparent":typeof e=="string"?`var(--ak-theme-${e})`:e.rgb;const E=e=>e===void 0?void 0:e==="+mj-lt"?"var(--ak-theme-major)":e==="+mn-lt"?"var(--ak-theme-minor)":y(e),I={l:"left",ctr:"center",r:"right",just:"justify"},L={t:"flex-start",ctr:"center",b:"flex-end"},B=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\u2E80-\u2FDF\u3000-\u303F\uFF00-\uFFEF]/u,P=/[\u2018\u2019\u201C\u201D\u2026\u2014\u2013\u2025\u00B7]/u;export function eastAsianRuns(e,t){const i=[];for(const o of e){const r=B.test(o)||t&&P.test(o),c=i.at(-1);c?.ea===r?c.text+=o:i.push({text:o,ea:r})}return i}function j(e,t,i,o){if(!t)return;const r=E(t.name);r&&(e.style.fontFamily=r),t.size!==void 0&&(e.style.fontSize=`${String(t.size*i*o)}px`),t.bold!==void 0&&(e.style.fontWeight=t.bold?"700":"400"),t.italic!==void 0&&(e.style.fontStyle=t.italic?"italic":"normal"),t.underline!==void 0&&(e.style.textDecoration=t.underline?"underline":"none"),t.spacing!==void 0&&(e.style.letterSpacing=`${String(t.spacing*i*o)}px`),t.rgb!==void 0?e.style.color=t.rgb:t.color!==void 0&&(e.style.color=colorCss(t.color))}function G(){if(document.getElementById("ak-bullet-style"))return;const e=document.createElement("style");e.id="ak-bullet-style",e.textContent="[data-ak-bullet]::before{content:attr(data-ak-bullet)}",document.head.append(e)}function U(e,t){const i=t[e.level]??t[0];if(!i)throw new Error("A text style has nine levels.");return{...i,...e.alignment===void 0?{}:{alignment:e.alignment},...e.line_spacing===void 0?{}:{line_spacing:e.line_spacing},...e.space_before===void 0?{}:{space_before:e.space_before},...e.space_after===void 0?{}:{space_after:e.space_after},...e.margin_left===void 0?{}:{margin_left:e.margin_left},...e.indent===void 0?{}:{indent:e.indent},font:{...i.font,...e.font}}}function C(e,t,i,o,r=!1){e.replaceChildren(),t.paragraphs.forEach((c,d)=>{const s=U(c,t.style.levels),a=document.createElement("div");a.dataset.akParagraph=String(d),a.dataset.akLevel=String(c.level);const f=s.font.size*i*o,u="lines"in s.line_spacing?String(s.line_spacing.lines*SINGLE_SPACING):`${String(s.line_spacing.fixed*i*o)}px`,g=c.runs.some(l=>l.text!==""&&l.text!=="\v")?s.bullet:void 0;if(Object.assign(a.style,{position:"relative",textAlign:I[s.alignment],paddingLeft:`${String(s.margin_left*i)}px`,textIndent:g?"0px":`${String(s.indent*i)}px`,marginTop:d===0?"0px":`${String(s.space_before*i*o)}px`,marginBottom:`${String(s.space_after*i*o)}px`,lineHeight:u,fontSize:`${String(f)}px`,minHeight:"lines"in s.line_spacing?`${String(f*s.line_spacing.lines*SINGLE_SPACING)}px`:u}),j(a,s.font,i,o),g){G();const l=document.createElement("span");l.dataset.akBullet=g.char,Object.assign(l.style,{position:"absolute",left:`${String((s.margin_left+s.indent)*i)}px`,...g.font===void 0?{}:{fontFamily:E(g.font)}}),a.append(l)}for(const l of c.runs){const p=document.createElement("span");j(p,l.font,i,o);const m=l.font?.color??l.font?.rgb;m!==void 0&&(p.dataset.akColor=m),l.code?p.dataset.akCode="":l.font?.name!==void 0&&(p.dataset.akFont=l.font.name);const w=`var(--ak-theme-${(l.font?.name??s.font.name)==="+mj-lt"?"major":"minor"}-ea)`;for(const b of eastAsianRuns(l.text.replaceAll("\v",`
3
- `),r)){if(!b.ea){p.append(b.text);continue}const x=document.createElement("span");x.style.fontFamily=w,x.textContent=b.text,p.append(x)}a.append(p)}e.append(a)})}const _=e=>e!==void 0&&/^(zh|ja|ko)(-|$)/iu.test(e);function v(e,t,i){const{style:o}=e,r=o.auto_size==="shape",c=document.createElement("div");c.dataset.akText="",c.dataset.akAutofit=o.auto_size,Object.assign(c.style,{position:r?"relative":"absolute",inset:r?"auto":"0px",minHeight:"100%",display:"flex",flexDirection:"column",justifyContent:L[o.vertical_anchor],padding:`${String(o.margins.top*t)}px ${String(o.margins.right*t)}px ${String(o.margins.bottom*t)}px ${String(o.margins.left*t)}px`,whiteSpace:o.word_wrap?"pre-wrap":"pre",overflowWrap:"break-word",boxSizing:"border-box"});const d=document.createElement("div");return d.dataset.akBody="",c.append(d),C(d,e,t,1,i),c.akText=e,i&&(c.dataset.akCjk=""),c}export function fitText(e,t){const i=e.akText,o=e.querySelector("[data-ak-body]");if(!i||!o||e.dataset.akAutofit!=="text")return 1;const r=e.clientHeight-parseFloat(getComputedStyle(e).paddingTop)-parseFloat(getComputedStyle(e).paddingBottom),c=a=>(C(o,i,t,a,e.dataset.akCjk!==void 0),o.scrollHeight<=r+.5);if(c(1))return 1;let d=MIN_FONT_SCALE,s=1;if(!c(d))return d;for(;s-d>.01;){const a=(d+s)/2;c(a)?d=a:s=a}return c(d),e.dataset.akFontScale=d.toFixed(2),d}function W(e,t,i,o){const r=t.frame.width*i,c=t.frame.height*i,d=t.flip?.h?r:0,s=t.flip?.v?c:0,a="http://www.w3.org/2000/svg",f=document.createElementNS(a,"svg");f.setAttribute("width",String(Math.max(r,1))),f.setAttribute("height",String(Math.max(c,1))),Object.assign(f.style,{position:"absolute",left:"0px",top:"0px",overflow:"visible"});const u=r-d,n=c-s,g=colorCss(t.line??"accent1"),l=h=>h===void 0||h==="none"||h==="arrow"?0:o*1.5,p=Math.hypot(u-d,n-s)||1,m=(u-d)/p,S=(n-s)/p,w=l(t.line_begin),b=l(t.line_end),x=document.createElementNS(a,"line");x.setAttribute("x1",String(d+m*w)),x.setAttribute("y1",String(s+S*w)),x.setAttribute("x2",String(u-m*b)),x.setAttribute("y2",String(n-S*b)),x.setAttribute("stroke",g),x.setAttribute("stroke-width",String(o));const A=F(t.line_dash,o);A&&x.setAttribute("stroke-dasharray",A),f.append(x);for(const[h,D,T,N,H]of[[t.line_begin,d,s,-m,-S],[t.line_end,u,n,m,S]]){const k=J(h,D,T,N,H,o,g);k&&f.append(k)}e.append(f)}const q={sysDash:[3,1],sysDot:[1,1],dash:[4,3],dashDot:[4,3,1,3],lgDash:[8,3],lgDashDot:[8,3,1,3],lgDashDotDot:[8,3,1,3,1,3]},F=(e,t)=>e&&q[e]?.map(i=>String(i*t)).join(" ");function J(e,t,i,o,r,c,d){if(e===void 0||e==="none")return;const s="http://www.w3.org/2000/svg",a=c*3,f=(l,p)=>`${String(t-o*l-r*p)},${String(i-r*l+o*p)}`;if(e==="oval"){const l=document.createElementNS(s,"circle");return l.setAttribute("cx",String(t)),l.setAttribute("cy",String(i)),l.setAttribute("r",String(a/2)),l.setAttribute("fill",d),l}const u=e==="arrow",n=document.createElementNS(s,u?"polyline":"polygon"),g={triangle:[f(0,0),f(a,a/2),f(a,-a/2)],stealth:[f(0,0),f(a,a/2),f(a*.7,0),f(a,-a/2)],diamond:[f(-a/2,0),f(0,a/2),f(a/2,0),f(0,-a/2)],arrow:[f(a,a/2),f(0,0),f(a,-a/2)]}[e];return n.setAttribute("points",g.join(" ")),u?(n.setAttribute("fill","none"),n.setAttribute("stroke",d),n.setAttribute("stroke-width",String(c))):n.setAttribute("fill",d),n}function K(e,t,i,o){const r=t.path;if(!r)return;const c=t.frame.width*i,d=t.frame.height*i,s=r.w===0?0:c/r.w,a=r.h===0?0:d/r.h,f=r.steps.map(l=>l.op==="close"?"Z":l.op==="move"?`M${String(l.x*s)} ${String(l.y*a)}`:l.op==="line"?`L${String(l.x*s)} ${String(l.y*a)}`:`C${String(l.x1*s)} ${String(l.y1*a)} ${String(l.x2*s)} ${String(l.y2*a)} ${String(l.x*s)} ${String(l.y*a)}`).join(""),u="http://www.w3.org/2000/svg",n=document.createElementNS(u,"svg");n.setAttribute("width",String(Math.max(c,1))),n.setAttribute("height",String(Math.max(d,1))),Object.assign(n.style,{position:"absolute",left:"0px",top:"0px",overflow:"visible"});const g=document.createElementNS(u,"path");if(g.setAttribute("d",f),g.setAttribute("fill-rule","evenodd"),g.setAttribute("fill",colorCss(t.fill)),t.line!==void 0&&t.line!==null){g.setAttribute("stroke",colorCss(t.line)),g.setAttribute("stroke-width",String(o));const l=F(t.line_dash,o);l&&g.setAttribute("stroke-dasharray",l)}n.append(g),e.append(n)}function V(e,t,i){const o=t.geometry??"rect",r=t.frame.width*i,c=t.frame.height*i;o==="roundRect"?e.style.borderRadius=`${String(Math.min(r,c)*Math.min(.5,Math.max(0,t.adjustments?.[0]??z.roundRect?.[0]??0)))}px`:o==="ellipse"?e.style.borderRadius="50%":o==="triangle"?e.style.clipPath="polygon(50% 0, 100% 100%, 0 100%)":o==="rightArrow"&&(e.style.clipPath="polygon(0 25%, 60% 25%, 60% 0, 100% 50%, 60% 100%, 60% 75%, 0 75%)")}const Z={left:"borderLeft",right:"borderRight",top:"borderTop",bottom:"borderBottom"},O="http://www.w3.org/2000/svg";function Q(e,t,i,o){const r=i.width/$,c=i.height/$,d=o*$,s=M(t,r,c),a=document.createElementNS(O,"svg");a.setAttribute("viewBox",`0 0 ${String(r)} ${String(c)}`),a.setAttribute("width","100%"),a.setAttribute("height","100%"),Object.assign(a.style,{position:"absolute",inset:"0px",overflow:"visible"});const f=(n,g)=>{const l=document.createElementNS(O,n);for(const[p,m]of Object.entries(g))l.setAttribute(p,String(m));a.append(l)},u=n=>{f("path",{d:n.d,fill:n.fill===void 0?"none":colorCss(n.fill),stroke:n.width>0?colorCss(n.color):"none","stroke-width":n.width,"stroke-linejoin":"round"})};for(const n of[...s.grid,...s.shapes])u(n);for(const n of[...s.boxes,...s.keys])f("rect",{x:n.x,y:n.y,width:n.width,height:n.height,fill:colorCss(n.color)});for(const n of[...s.axes,...s.lines])u(n);for(const n of s.dots)f("circle",{cx:n.x,cy:n.y,r:n.r,fill:colorCss(n.color)});e.append(a);for(const n of s.words){const g=document.createElement("div");g.textContent=n.text,Object.assign(g.style,{position:"absolute",left:`${String(n.x*d)}px`,top:`${String(n.y*d)}px`,transform:`translate(${{start:"0",middle:"-50%",end:"-100%"}[n.anchor]}, -50%)`,fontSize:`${String(n.size*d)}px`,lineHeight:"1",whiteSpace:"nowrap",color:colorCss(n.color),fontFamily:"var(--ak-theme-minor)"}),e.append(g)}}function X(e,t,i,o){const r=document.createElement("table");Object.assign(r.style,{borderCollapse:"collapse",tableLayout:"fixed",width:`${String(t.columns.reduce((d,s)=>d+s,0)*i)}px`});const c=document.createElement("colgroup");for(const d of t.columns){const s=document.createElement("col");s.style.width=`${String(d*i)}px`,c.append(s)}r.append(c);for(const[d,s]of t.rows.entries()){const a=document.createElement("tr");a.style.height=`${String(s.height*i)}px`;for(const[f,u]of s.cells.entries()){if(u.spanned)continue;const n=document.createElement("td");n.dataset.akCell=`${String(d)},${String(f)}`,u.span_width&&(n.colSpan=u.span_width),u.span_height&&(n.rowSpan=u.span_height),n.style.padding="0px",n.style.verticalAlign={t:"top",ctr:"middle",b:"bottom"}[u.text.style.vertical_anchor],u.fill!==void 0&&(n.style.background=colorCss(u.fill));for(const[l,p]of Object.entries(Z)){const m=u.borders?.[l];m&&(n.style[p]=`${String(m.width*i)}px solid ${colorCss(m.color)}`)}const g=v(u.text,i,o);g.style.minHeight="0px",n.append(g),a.append(n)}r.append(a)}e.style.height="auto",e.append(r)}export function drawShape(e,t,i){const{k:o}=i;if(t.kind==="placeholder"&&t.text?.empty===!0&&!i.editing)return;const r=document.createElement("div");r.setAttribute(SHAPE_ATTR,`${e}/${t.name}`);const{left:c,top:d,width:s,height:a}=t.frame;Object.assign(r.style,{position:"absolute",left:`${String(c*o)}px`,top:`${String(d*o)}px`,width:`${String(s*o)}px`,height:`${String(a*o)}px`}),t.rotation!==void 0&&(r.style.transform=`rotate(${String(t.rotation)}deg)`);const f=(t.line_width??LINE_WIDTH)*o;if(t.chart)Q(r,t.chart,t.frame,o);else if(t.table)return X(r,t.table,o,_(i.lang)),r;if(t.kind==="autoshape"){if(t.geometry==="line")return W(r,t,o,f),r;if(t.path)return K(r,t,o,f),t.text&&r.append(v(t.text,o,_(i.lang))),r;r.style.background=colorCss(t.fill),V(r,t,o)}else t.fill!==void 0&&(r.style.background=colorCss(t.fill));if(t.line!==void 0&&t.line!==null&&(r.style.outline=`${String(f)}px ${t.line_dash===void 0||t.line_dash==="solid"?"solid":"dashed"} ${colorCss(t.line)}`),t.text?.style.auto_size==="shape"&&(r.style.height="auto",r.style.minHeight="0px",t.text.style.word_wrap||(r.style.width="max-content")),t.kind==="picture"&&t.media){r.style.overflow="hidden";const u=document.createElement("img");u.alt="",u.src=i.url(t.media.path);const n=t.media.crop??{left:0,top:0,right:0,bottom:0},g=1-n.left-n.right,l=1-n.top-n.bottom;Object.assign(u.style,{position:"absolute",width:`${String(100/g)}%`,height:`${String(100/l)}%`,left:`${String(-n.left/g*100)}%`,top:`${String(-n.top/l*100)}%`,maxWidth:"none"}),r.append(u)}else if(t.kind==="movie"&&t.media&&!i.playing)r.dataset.akFilm="";else if(t.kind==="movie"&&t.media){const u=document.createElement("video");u.src=i.url(t.media.path),u.muted=!0,u.playsInline=!0,u.preload="auto",t.media.poster!==void 0&&(u.currentTime=t.media.poster),Object.assign(u.style,{width:"100%",height:"100%",objectFit:"fill"}),r.append(u)}return t.text&&r.append(v(t.text,o,_(i.lang))),r}export function drawSlide(e,t){const i=document.createElement("div");i.dataset.akSlide=e.id,Object.assign(i.style,{position:"absolute",inset:"0px",background:colorCss(e.background),overflow:"hidden"});for(const o of e.shapes){const r=drawShape(e.id,o,t);r&&i.append(r)}return i}
2
+ import{ADJUSTMENT_DEFAULTS as z,chartDrawing as L,EMU_PER_PT as v,presetPath as I,Pt as R}from"@allyhub-next/slides-core";export const SHAPE_ATTR="data-ak-shape",LINE_WIDTH=R(.75),SINGLE_SPACING=1.2,MIN_FONT_SCALE=.25;export function themeCss(e){const t={};for(const[i,o]of Object.entries(e.colors))t[`--ak-theme-${i}`]=o;return t["--ak-theme-major"]=$(e.fonts.major),t["--ak-theme-minor"]=$(e.fonts.minor),t["--ak-theme-major-ea"]=$(e.fonts.major_east_asian),t["--ak-theme-minor-ea"]=$(e.fonts.minor_east_asian),t}const $=e=>e.includes(",")||e.includes('"')?e:`"${e}", "Noto Sans SC", sans-serif`;export const colorCss=e=>e==null?"transparent":typeof e=="string"?`var(--ak-theme-${e})`:e.rgb;const C=e=>e===void 0?void 0:e==="+mj-lt"?"var(--ak-theme-major)":e==="+mn-lt"?"var(--ak-theme-minor)":$(e),B={l:"left",ctr:"center",r:"right",just:"justify"},U={t:"flex-start",ctr:"center",b:"flex-end"},G=/[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\u2E80-\u2FDF\u3000-\u303F\uFF00-\uFFEF]/u,W=/[\u2018\u2019\u201C\u201D\u2026\u2014\u2013\u2025\u00B7]/u;export function eastAsianRuns(e,t){const i=[];for(const o of e){const n=G.test(o)||t&&W.test(o),d=i.at(-1);d?.ea===n?d.text+=o:i.push({text:o,ea:n})}return i}function M(e,t,i,o){if(!t)return;const n=C(t.name);n&&(e.style.fontFamily=n),t.size!==void 0&&(e.style.fontSize=`${String(t.size*i*o)}px`),t.bold!==void 0&&(e.style.fontWeight=t.bold?"700":"400"),t.italic!==void 0&&(e.style.fontStyle=t.italic?"italic":"normal"),(t.underline!==void 0||t.strike!==void 0||t.link)&&(e.style.textDecorationLine=[t.underline===!0||t.link!==void 0?"underline":"",t.strike===!0?"line-through":""].filter(d=>d!=="").join(" ")||"none"),t.highlight!==void 0&&(e.style.backgroundColor=t.highlight),t.baseline!==void 0&&t.baseline!==0&&(e.style.fontSize="0.66em",e.style.verticalAlign=`${String(t.baseline/.66)}em`),t.spacing!==void 0&&(e.style.letterSpacing=`${String(t.spacing*i*o)}px`),t.link!==void 0?e.style.color=colorCss("hlink"):t.rgb!==void 0?e.style.color=t.rgb:t.color!==void 0&&(e.style.color=colorCss(t.color))}function q(){if(document.getElementById("ak-bullet-style"))return;const e=document.createElement("style");e.id="ak-bullet-style",e.textContent="[data-ak-bullet]::before{content:attr(data-ak-bullet)}",document.head.append(e)}function J(e,t){const i=t[e.level]??t[0];if(!i)throw new Error("A text style has nine levels.");return{...i,...e.alignment===void 0?{}:{alignment:e.alignment},...e.line_spacing===void 0?{}:{line_spacing:e.line_spacing},...e.space_before===void 0?{}:{space_before:e.space_before},...e.space_after===void 0?{}:{space_after:e.space_after},...e.margin_left===void 0?{}:{margin_left:e.margin_left},...e.indent===void 0?{}:{indent:e.indent},...e.numbered===void 0?{}:{numbered:e.numbered},font:{...i.font,...e.font}}}export function numberText(e,t){const i=n=>(n>26?i(Math.floor((n-1)/26)):"")+String.fromCharCode(97+(n-1)%26),o=n=>{const d=[[1e3,"m"],[900,"cm"],[500,"d"],[400,"cd"],[100,"c"],[90,"xc"],[50,"l"],[40,"xl"],[10,"x"],[9,"ix"],[5,"v"],[4,"iv"],[1,"i"]];let a="",u=n;for(const[r,c]of d)for(;u>=r;)a+=c,u-=r;return a};return e==="arabicParenR"?`${String(t)})`:e==="alphaLcPeriod"?`${i(t)}.`:e==="alphaUcPeriod"?`${i(t).toUpperCase()}.`:e==="romanLcPeriod"?`${o(t)}.`:e==="romanUcPeriod"?`${o(t).toUpperCase()}.`:`${String(t)}.`}const K=e=>{const t=[...e?.link===void 0?[]:[`link="${e.link}"`],...e?.highlight===void 0?[]:[`highlight="${e.highlight}"`],...e?.baseline===void 0?[]:[`baseline="${String(e.baseline)}"`],...e?.strike===!0?['strike="true"']:[]];return t.length>0?t.join(" "):void 0};function F(e,t,i,o,n=!1){e.replaceChildren();const d=[];t.paragraphs.forEach((a,u)=>{const r=J(a,t.style.levels);d.length=a.level+1,r.numbered===void 0?d[a.level]=0:d[a.level]=(d[a.level]??0)+1;const c=document.createElement("div");c.dataset.akParagraph=String(u),c.dataset.akLevel=String(a.level);const l=r.font.size*i*o,s="lines"in r.line_spacing?String(r.line_spacing.lines*SINGLE_SPACING):`${String(r.line_spacing.fixed*i*o)}px`,f=a.runs.some(m=>m.text!==""&&m.text!=="\v")?r.bullet:void 0;Object.assign(c.style,{position:"relative",textAlign:B[r.alignment],paddingLeft:`${String(r.margin_left*i)}px`,textIndent:f?"0px":`${String(r.indent*i)}px`,marginTop:u===0?"0px":`${String(r.space_before*i*o)}px`,marginBottom:`${String(r.space_after*i*o)}px`,lineHeight:s,fontSize:`${String(l)}px`,minHeight:"lines"in r.line_spacing?`${String(l*r.line_spacing.lines*SINGLE_SPACING)}px`:s}),M(c,r.font,i,o);const b=r.numbered===void 0?f?.char:numberText(r.numbered,d[a.level]??1);if(b!==void 0){q();const m=document.createElement("span");m.dataset.akBullet=b,Object.assign(m.style,{position:"absolute",left:`${String((r.margin_left+r.indent)*i)}px`,...f?.font===void 0?{}:{fontFamily:C(f.font)}}),c.append(m)}for(const m of a.runs){const p=document.createElement("span");M(p,m.font,i,o);const x=m.font?.color??m.font?.rgb;x!==void 0&&(p.dataset.akColor=x);const y=K(m.font);y!==void 0&&(p.dataset.akAttrs=y),m.code?p.dataset.akCode="":m.font?.name!==void 0&&(p.dataset.akFont=m.font.name);const A=`var(--ak-theme-${(m.font?.name??r.font.name)==="+mj-lt"?"major":"minor"}-ea)`;for(const h of eastAsianRuns(m.text.replaceAll("\v",`
3
+ `),n)){if(!h.ea){p.append(h.text);continue}const w=document.createElement("span");w.style.fontFamily=A,w.textContent=h.text,p.append(w)}c.append(p)}e.append(c)})}const _=e=>e!==void 0&&/^(zh|ja|ko)(-|$)/iu.test(e);function k(e,t,i){const{style:o}=e,n=o.auto_size==="shape",d=document.createElement("div");d.dataset.akText="",d.dataset.akAutofit=o.auto_size,Object.assign(d.style,{position:n?"relative":"absolute",inset:n?"auto":"0px",minHeight:"100%",display:"flex",flexDirection:"column",justifyContent:U[o.vertical_anchor],padding:`${String(o.margins.top*t)}px ${String(o.margins.right*t)}px ${String(o.margins.bottom*t)}px ${String(o.margins.left*t)}px`,whiteSpace:o.word_wrap?"pre-wrap":"pre",overflowWrap:"break-word",boxSizing:"border-box"});const a=document.createElement("div");return a.dataset.akBody="",d.append(a),F(a,e,t,1,i),d.akText=e,i&&(d.dataset.akCjk=""),d}export function fitText(e,t){const i=e.akText,o=e.querySelector("[data-ak-body]");if(!i||!o||e.dataset.akAutofit!=="text")return 1;const n=e.clientHeight-parseFloat(getComputedStyle(e).paddingTop)-parseFloat(getComputedStyle(e).paddingBottom),d=r=>(F(o,i,t,r,e.dataset.akCjk!==void 0),o.scrollHeight<=n+.5);if(d(1))return 1;let a=MIN_FONT_SCALE,u=1;if(!d(a))return a;for(;u-a>.01;){const r=(a+u)/2;d(r)?a=r:u=r}return d(a),e.dataset.akFontScale=a.toFixed(2),a}function V(e,t,i,o){const n=t.frame.width*i,d=t.frame.height*i,a=t.flip?.h?n:0,u=t.flip?.v?d:0,r="http://www.w3.org/2000/svg",c=document.createElementNS(r,"svg");c.setAttribute("width",String(Math.max(n,1))),c.setAttribute("height",String(Math.max(d,1))),Object.assign(c.style,{position:"absolute",left:"0px",top:"0px",overflow:"visible"});const l=n-a,s=d-u,g=colorCss(t.line??"accent1"),f=h=>h===void 0||h==="none"||h==="arrow"?0:o*1.5,b=Math.hypot(l-a,s-u)||1,m=(l-a)/b,p=(s-u)/b,x=f(t.line_begin),y=f(t.line_end),S=document.createElementNS(r,"line");S.setAttribute("x1",String(a+m*x)),S.setAttribute("y1",String(u+p*x)),S.setAttribute("x2",String(l-m*y)),S.setAttribute("y2",String(s-p*y)),S.setAttribute("stroke",g),S.setAttribute("stroke-width",String(o));const A=N(t.line_dash,o);A&&S.setAttribute("stroke-dasharray",A),c.append(S);for(const[h,w,D,H,P]of[[t.line_begin,a,u,-m,-p],[t.line_end,l,s,m,p]]){const j=Q(h,w,D,H,P,o,g);j&&c.append(j)}e.append(c)}const Z={sysDash:[3,1],sysDot:[1,1],dash:[4,3],dashDot:[4,3,1,3],lgDash:[8,3],lgDashDot:[8,3,1,3],lgDashDotDot:[8,3,1,3,1,3]},N=(e,t)=>e&&Z[e]?.map(i=>String(i*t)).join(" ");function Q(e,t,i,o,n,d,a){if(e===void 0||e==="none")return;const u="http://www.w3.org/2000/svg",r=d*3,c=(f,b)=>`${String(t-o*f-n*b)},${String(i-n*f+o*b)}`;if(e==="oval"){const f=document.createElementNS(u,"circle");return f.setAttribute("cx",String(t)),f.setAttribute("cy",String(i)),f.setAttribute("r",String(r/2)),f.setAttribute("fill",a),f}const l=e==="arrow",s=document.createElementNS(u,l?"polyline":"polygon"),g={triangle:[c(0,0),c(r,r/2),c(r,-r/2)],stealth:[c(0,0),c(r,r/2),c(r*.7,0),c(r,-r/2)],diamond:[c(-r/2,0),c(0,r/2),c(r/2,0),c(0,-r/2)],arrow:[c(r,r/2),c(0,0),c(r,-r/2)]}[e];return s.setAttribute("points",g.join(" ")),l?(s.setAttribute("fill","none"),s.setAttribute("stroke",a),s.setAttribute("stroke-width",String(d))):s.setAttribute("fill",a),s}function X(e,t,i,o){const n=t.path;if(!n)return;const d=t.frame.width*i,a=t.frame.height*i,u=n.w===0?0:d/n.w,r=n.h===0?0:a/n.h,c=n.steps.map(f=>f.op==="close"?"Z":f.op==="move"?`M${String(f.x*u)} ${String(f.y*r)}`:f.op==="line"?`L${String(f.x*u)} ${String(f.y*r)}`:`C${String(f.x1*u)} ${String(f.y1*r)} ${String(f.x2*u)} ${String(f.y2*r)} ${String(f.x*u)} ${String(f.y*r)}`).join(""),l="http://www.w3.org/2000/svg",s=document.createElementNS(l,"svg");s.setAttribute("width",String(Math.max(d,1))),s.setAttribute("height",String(Math.max(a,1))),Object.assign(s.style,{position:"absolute",left:"0px",top:"0px",overflow:"visible"});const g=document.createElementNS(l,"path");if(g.setAttribute("d",c),g.setAttribute("fill-rule","evenodd"),g.setAttribute("fill",colorCss(t.fill)),t.fill_transparency!==void 0&&g.setAttribute("fill-opacity",String(1-t.fill_transparency)),t.gradient){const f=`ak-gradient-${String(tt++)}`;s.append(et(l,f,t.gradient,t.frame)),g.setAttribute("fill",`url(#${f})`)}if(t.line!==void 0&&t.line!==null){g.setAttribute("stroke",colorCss(t.line)),g.setAttribute("stroke-width",String(o));const f=N(t.line_dash,o);f&&g.setAttribute("stroke-dasharray",f)}s.append(g),e.append(s)}const E=(e,t)=>t===void 0||t===0?colorCss(e):`color-mix(in srgb, ${colorCss(e)} ${String((1-t)*100)}%, transparent)`,Y=e=>`linear-gradient(${String(e.angle+90)}deg, ${e.stops.map(t=>`${E(t.color,t.transparency)} ${String(t.at*100)}%`).join(", ")})`,O=e=>e.gradient?Y(e.gradient):e.fill===null||e.fill===void 0?"transparent":E(e.fill,e.fill_transparency);let tt=0;function et(e,t,i,o){const n=document.createElementNS(e,"linearGradient");n.id=t;const d=i.angle*Math.PI/180,a=Math.cos(d),u=Math.sin(d),r=(Math.abs(o.width*a)+Math.abs(o.height*u))/Math.max(o.width,o.height,1)/2;n.setAttribute("x1",String(.5-a*r)),n.setAttribute("y1",String(.5-u*r)),n.setAttribute("x2",String(.5+a*r)),n.setAttribute("y2",String(.5+u*r));for(const c of i.stops){const l=document.createElementNS(e,"stop");l.setAttribute("offset",String(c.at)),l.setAttribute("stop-color",colorCss(c.color)),c.transparency!==void 0&&l.setAttribute("stop-opacity",String(1-c.transparency)),n.append(l)}return n}function nt(e,t,i){const o=t.angle*Math.PI/180,n=t.distance*i;e.style.filter=`drop-shadow(${String(n*Math.cos(o))}px ${String(n*Math.sin(o))}px ${String(t.blur*i)}px ${E(t.color,t.transparency)})`}function it(e,t,i){const o=t.geometry??"rect",n=t.frame.width*i,d=t.frame.height*i;o==="roundRect"?e.style.borderRadius=`${String(Math.min(n,d)*Math.min(.5,Math.max(0,t.adjustments?.[0]??z.roundRect?.[0]??0)))}px`:o==="ellipse"&&(e.style.borderRadius="50%")}const ot={left:"borderLeft",right:"borderRight",top:"borderTop",bottom:"borderBottom"},T="http://www.w3.org/2000/svg";function rt(e,t,i,o){const n=i.width/v,d=i.height/v,a=o*v,u=L(t,n,d),r=document.createElementNS(T,"svg");r.setAttribute("viewBox",`0 0 ${String(n)} ${String(d)}`),r.setAttribute("width","100%"),r.setAttribute("height","100%"),Object.assign(r.style,{position:"absolute",inset:"0px",overflow:"visible"});const c=(s,g)=>{const f=document.createElementNS(T,s);for(const[b,m]of Object.entries(g))f.setAttribute(b,String(m));r.append(f)},l=s=>{c("path",{d:s.d,fill:s.fill===void 0?"none":colorCss(s.fill),stroke:s.width>0?colorCss(s.color):"none","stroke-width":s.width,"stroke-linejoin":"round"})};for(const s of[...u.grid,...u.shapes])l(s);for(const s of[...u.boxes,...u.keys])c("rect",{x:s.x,y:s.y,width:s.width,height:s.height,fill:colorCss(s.color)});for(const s of[...u.axes,...u.lines])l(s);for(const s of u.dots)c("circle",{cx:s.x,cy:s.y,r:s.r,fill:colorCss(s.color)});e.append(r);for(const s of u.words){const g=document.createElement("div");g.textContent=s.text,Object.assign(g.style,{position:"absolute",left:`${String(s.x*a)}px`,top:`${String(s.y*a)}px`,transform:`translate(${{start:"0",middle:"-50%",end:"-100%"}[s.anchor]}, -50%)`,fontSize:`${String(s.size*a)}px`,lineHeight:"1",whiteSpace:"nowrap",color:colorCss(s.color),fontFamily:"var(--ak-theme-minor)"}),e.append(g)}}function st(e,t,i,o){const n=document.createElement("table");Object.assign(n.style,{borderCollapse:"collapse",tableLayout:"fixed",width:`${String(t.columns.reduce((a,u)=>a+u,0)*i)}px`});const d=document.createElement("colgroup");for(const a of t.columns){const u=document.createElement("col");u.style.width=`${String(a*i)}px`,d.append(u)}n.append(d);for(const[a,u]of t.rows.entries()){const r=document.createElement("tr");r.style.height=`${String(u.height*i)}px`;for(const[c,l]of u.cells.entries()){if(l.spanned)continue;const s=document.createElement("td");s.dataset.akCell=`${String(a)},${String(c)}`,l.span_width&&(s.colSpan=l.span_width),l.span_height&&(s.rowSpan=l.span_height),s.style.padding="0px",s.style.verticalAlign={t:"top",ctr:"middle",b:"bottom"}[l.text.style.vertical_anchor],l.fill!==void 0&&(s.style.background=colorCss(l.fill));for(const[f,b]of Object.entries(ot)){const m=l.borders?.[f];m&&(s.style[b]=`${String(m.width*i)}px solid ${colorCss(m.color)}`)}const g=k(l.text,i,o);g.style.minHeight="0px",s.append(g),r.append(s)}n.append(r)}e.style.height="auto",e.append(n)}export function drawShape(e,t,i){const{k:o}=i;if(t.kind==="placeholder"&&t.text?.empty===!0&&!i.editing)return;const n=document.createElement("div");n.setAttribute(SHAPE_ATTR,`${e}/${t.name}`);const{left:d,top:a,width:u,height:r}=t.frame;Object.assign(n.style,{position:"absolute",left:`${String(d*o)}px`,top:`${String(a*o)}px`,width:`${String(u*o)}px`,height:`${String(r*o)}px`}),t.rotation!==void 0&&(n.style.transform=`rotate(${String(t.rotation)}deg)`);const c=(t.line_width??LINE_WIDTH)*o;if(t.chart)rt(n,t.chart,t.frame,o);else if(t.table)return st(n,t.table,o,_(i.lang)),n;if(t.shadow&&nt(n,t.shadow,o),t.kind==="autoshape"){if(t.geometry==="line")return V(n,t,o,c),n;const l=t.path??I(t.geometry,t.frame.width,t.frame.height);if(l)return X(n,{...t,path:l},o,c),t.text&&n.append(k(t.text,o,_(i.lang))),n;n.style.background=O(t),it(n,t,o)}else(t.fill!==void 0||t.gradient)&&(n.style.background=O(t));if(t.line!==void 0&&t.line!==null&&(n.style.outline=`${String(c)}px ${t.line_dash===void 0||t.line_dash==="solid"?"solid":"dashed"} ${colorCss(t.line)}`),t.text?.style.auto_size==="shape"&&(n.style.height="auto",n.style.minHeight="0px",t.text.style.word_wrap||(n.style.width="max-content")),t.kind==="picture"&&t.media){n.style.overflow="hidden";const l=document.createElement("img");l.alt="",l.src=i.url(t.media.path);const s=t.media.crop??{left:0,top:0,right:0,bottom:0},g=1-s.left-s.right,f=1-s.top-s.bottom;Object.assign(l.style,{position:"absolute",width:`${String(100/g)}%`,height:`${String(100/f)}%`,left:`${String(-s.left/g*100)}%`,top:`${String(-s.top/f*100)}%`,maxWidth:"none"}),n.append(l)}else if(t.kind==="movie"&&t.media&&!i.playing)n.dataset.akFilm="";else if(t.kind==="movie"&&t.media){const l=document.createElement("video");l.src=i.url(t.media.path),l.muted=!0,l.playsInline=!0,l.preload="auto",t.media.poster!==void 0&&(l.currentTime=t.media.poster),Object.assign(l.style,{width:"100%",height:"100%",objectFit:"fill"}),n.append(l)}return t.text&&n.append(k(t.text,o,_(i.lang))),n}export function drawSlide(e,t){const i=document.createElement("div");i.dataset.akSlide=e.id,Object.assign(i.style,{position:"absolute",inset:"0px",background:colorCss(e.background),overflow:"hidden"});for(const o of e.shapes){const n=drawShape(e.id,o,t);n&&i.append(n)}return i}
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- import{SHAPE_ATTR as V}from"./draw.js";const A=600,X=342900,U=8,Z=.25,G=120;function Q(t,r,a){const d=t.commonAncestorContainer,i=[];if(d instanceof Text)i.push(d);else{const c=document.createTreeWalker(d,NodeFilter.SHOW_TEXT);for(;c.nextNode();)c.currentNode instanceof Text&&t.intersectsNode(c.currentNode)&&i.push(c.currentNode)}const n=[];for(const c of i){const u=c===t.startContainer?t.startOffset:0,E=c===t.endContainer?t.endOffset:c.length;if(u>=E)continue;const m=u>0?c.splitText(u):c;E-u<m.length&&m.splitText(E-u);const o=document.createElement("span");r(o),m.replaceWith(o),o.append(m),n.push(o)}const[l]=n,f=n.at(-1);if(!l||!f)return;const g=document.createRange();g.setStartBefore(l),g.setEndAfter(f),a.removeAllRanges(),a.addRange(g)}function I(t){document.execCommand("insertText",!1,t)}function K(t,r){if(!(t instanceof Text))return;const a=new Intl.Segmenter(document.documentElement.lang||void 0,{granularity:"word"}).segment(t.data);for(const d of[r,r-1]){if(d<0||d>=t.length)continue;const i=a.containing(d);if(i?.isWordLike!==!0)continue;const n=document.createRange();return n.setStart(t,i.index),n.setEnd(t,i.index+i.segment.length),n}}function M(t){const r=t.closest("[data-ak-autofit='text']");if(!r)return;const a=1/Number(r.dataset.akFontScale??"1"),d=getComputedStyle(r),i=r.clientHeight-parseFloat(d.paddingTop)-parseFloat(d.paddingBottom),n=r.getBoundingClientRect().height/r.offsetHeight,l=c=>{t.style.setProperty("zoom",String(c));const u=t.firstElementChild?.getBoundingClientRect(),E=t.lastElementChild?.getBoundingClientRect();return!u||!E||E.bottom-u.top<=i*n+.5};if(l(a))return;let f=Z,g=a;for(;g-f>.01;){const c=(f+g)/2;l(c)?f=c:g=c}l(f)}const Y=(t,r)=>t.bold===r.bold&&t.italic===r.italic&&t.code===r.code&&t.color===r.color&&t.font===r.font;function ee(t){const r=getComputedStyle(t),a=[],d=n=>{const l=a.at(-1);l&&(Y(l,n)||n.text.trim()==="")?l.text+=n.text:a.push(n)},i=n=>{if(n instanceof HTMLBRElement){d({...te,text:"\v"});return}if(n.nodeType!==Node.TEXT_NODE){n.childNodes.forEach(i);return}const l=n.parentElement;if(!l)return;const f=getComputedStyle(l);d({text:n.textContent??"",bold:Number(f.fontWeight)>=A&&Number(r.fontWeight)<A,italic:f.fontStyle==="italic"&&r.fontStyle!=="italic",code:l.closest("[data-ak-code]")!==null,color:l.closest("[data-ak-color]")?.dataset.akColor,font:l.closest("[data-ak-font]")?.dataset.akFont})};return t.childNodes.forEach(i),a}const te={bold:!1,italic:!1,code:!1,color:void 0,font:void 0};function ne(t){const[,r="",a="",d=""]=/^(\s*)(.*?)(\s*)$/su.exec(t.text)??[];if(a===""||t.text==="\v")return t.text;let i=t.code?`\`${a}\``:a;const n=[...t.color===void 0?[]:[`color="${t.color}"`],...t.font===void 0?[]:[`font="${t.font}"`]];return n.length>0&&(i=`<span ${n.join(" ")}>${i}</span>`),t.italic&&(i=`*${i}*`),t.bold&&(i=`**${i}**`),`${r}${i}${d}`}function oe(t){const r=[...t.children].filter(a=>a instanceof HTMLElement);return r.length===0?[{text:t.innerText.trim(),level:0}]:r.map(a=>({text:ee(a).map(ne).join("").replace(/\v$/u,""),level:Number(a.dataset.akLevel??"0")||0}))}export function deckEditor(t,r){const a=n=>t.querySelector(`[${V}="${CSS.escape(n)}"]`);let d;const i=(n,l)=>{if(n.type==="deck-frame"){const e=a(n.shape);if(!e)return;if(e.dataset.akFileFrame??=JSON.stringify([e.style.left,e.style.top,e.style.width,e.style.height]),n.frame===null){const[p,h,$,J]=JSON.parse(e.dataset.akFileFrame);Object.assign(e.style,{left:p,top:h,width:$,height:J});return}const s=n.frame;Object.assign(e.style,{left:`${String(s.left*r)}px`,top:`${String(s.top*r)}px`,width:`${String(s.width*r)}px`,height:`${String(s.height*r)}px`});return}if(n.type==="deck-stop"){d?.stop();return}if(n.type==="deck-hold"){d?.hold();return}if(n.type==="deck-format"){d?.format(n);return}const f=a(n.shape),g=t.getBoundingClientRect(),c=n.at&&[g.left+n.at.x*g.width,g.top+n.at.y*g.height],u=f?[...f.querySelectorAll("[data-ak-cell]")]:[],E=c&&document.elementFromPoint(c[0],c[1]),m=u.find(e=>e.dataset.akCell===n.cell?.join(","))??(E?u.find(e=>e.contains(E)):void 0)??u[0],o=(m??f)?.querySelector("[data-ak-body]");if(!f||!o)return;d?.stop();const y=n.shape,O=m?.dataset.akCell?.split(",").map(Number),S=O?{cell:O}:{};if(o.children.length===0){const e=document.createElement("div");e.dataset.akParagraph="0",e.dataset.akLevel="0",e.append(document.createElement("br")),o.append(e)}o.contentEditable="true",o.spellcheck=!1,o.style.outline="none",o.style.cursor="text";const L=()=>oe(o),C=e=>{e instanceof InputEvent&&e.isComposing||(M(o),l({type:"deck-text",shape:y,paragraphs:L(),...S}))},F=e=>{e.preventDefault();const s=e.clipboardData?.getData("text/plain")??"";I(s)},q=e=>{const s=getSelection()?.anchorNode,p=(s instanceof Element?s:s?.parentElement)?.closest("[data-ak-level]");if(!p)return;const h=Number(p.dataset.akLevel??"0")+e;if(h<0||h>U)return;p.dataset.akLevel=String(h);const $=parseFloat(p.style.marginLeft)||0;p.style.marginLeft=`${String($+e*X*r)}px`,l({type:"deck-text",shape:y,paragraphs:L(),...S})},P=e=>{const s=e?.dataset.akCell?.split(",").map(Number);!s||e===m||(_(!1),i({type:"deck-edit",shape:y,cell:[s[0]??0,s[1]??0]},l))},B=e=>{e.stopPropagation(),e.key==="Escape"&&T(),e.key==="Tab"&&(e.preventDefault(),m?P(u[u.indexOf(m)+(e.shiftKey?-1:1)]):q(e.shiftKey?-1:1)),(e.metaKey||e.ctrlKey)&&e.key==="u"&&e.preventDefault()};let w;const W=e=>{w=u.find(s=>s!==m&&e.target instanceof Node&&s.contains(e.target)),w&&e.preventDefault()},D=e=>{e.stopPropagation(),P(w)},_=e=>{o.removeEventListener("input",C),o.removeEventListener("compositionend",C),o.removeEventListener("paste",F),o.removeEventListener("keydown",B),o.removeEventListener("blur",H),o.removeEventListener("focus",j),document.removeEventListener("selectionchange",R),clearTimeout(b),f.removeEventListener("mousedown",W),document.removeEventListener("click",D,!0),o.contentEditable="false",d=void 0,l({type:e?"deck-text-done":"deck-text",shape:y,paragraphs:L(),...S})},T=()=>{_(!0)};let v,N=!1,b;const R=()=>{const e=getSelection();if(!e||e.rangeCount===0)return;const s=e.getRangeAt(0);if(!o.contains(s.commonAncestorContainer))return;v=s.cloneRange();const p=s.startContainer instanceof Element?s.startContainer:s.startContainer.parentElement;l({type:"deck-selection",shape:y,words:!s.collapsed,bold:p?Number(getComputedStyle(p).fontWeight)>=A:!1,italic:p?getComputedStyle(p).fontStyle==="italic":!1})},H=()=>{b=setTimeout(()=>{N||T()},G)},j=()=>{N=!1,clearTimeout(b)},z=e=>{const s=getSelection();if(!s||!v)return;window.focus(),o.focus();const p=v.collapsed?K(v.startContainer,v.startOffset):v;p&&(v=p,s.removeAllRanges(),s.addRange(v),Q(v,h=>{e.bold!==void 0&&(h.style.fontWeight=e.bold?"700":"400"),e.italic!==void 0&&(h.style.fontStyle=e.italic?"italic":"normal"),e.color!==void 0&&(h.dataset.akColor=e.color,h.style.color=e.color.startsWith("#")?e.color:`var(--ak-theme-${e.color})`)},s),M(o),l({type:"deck-text",shape:y,paragraphs:L(),...S}),R())};o.addEventListener("input",C),o.addEventListener("compositionend",C),o.addEventListener("paste",F),o.addEventListener("keydown",B),o.addEventListener("blur",H),o.addEventListener("focus",j),document.addEventListener("selectionchange",R),m&&f.addEventListener("mousedown",W),document.addEventListener("click",D,!0),window.focus(),d={body:o,stop:T,format:z,hold:()=>{N=!0}},o.focus();const x=c?document.caretPositionFromPoint(c[0],c[1]):null,k=getSelection();if(k){if(k.removeAllRanges(),x&&o.contains(x.offsetNode)){const e=document.createRange();e.setStart(x.offsetNode,x.offset),e.collapse(!0),k.addRange(e);const s=n.word===!0?K(x.offsetNode,x.offset):void 0;s&&(k.removeAllRanges(),k.addRange(s))}else{const e=document.createRange();e.selectNodeContents(o),e.collapse(!1),k.addRange(e)}n.text!==void 0&&I(n.text)}};return i}
2
+ import{SHAPE_ATTR as V}from"./draw.js";const A=600,X=342900,U=8,Z=.25,G=120;function Q(e,s,l){const d=e.commonAncestorContainer,a=[];if(d instanceof Text)a.push(d);else{const c=document.createTreeWalker(d,NodeFilter.SHOW_TEXT);for(;c.nextNode();)c.currentNode instanceof Text&&e.intersectsNode(c.currentNode)&&a.push(c.currentNode)}const n=[];for(const c of a){const u=c===e.startContainer?e.startOffset:0,E=c===e.endContainer?e.endOffset:c.length;if(u>=E)continue;const m=u>0?c.splitText(u):c;E-u<m.length&&m.splitText(E-u);const o=document.createElement("span");s(o),m.replaceWith(o),o.append(m),n.push(o)}const[i]=n,f=n.at(-1);if(!i||!f)return;const g=document.createRange();g.setStartBefore(i),g.setEndAfter(f),l.removeAllRanges(),l.addRange(g)}function I(e){document.execCommand("insertText",!1,e)}function K(e,s){if(!(e instanceof Text))return;const l=new Intl.Segmenter(document.documentElement.lang||void 0,{granularity:"word"}).segment(e.data);for(const d of[s,s-1]){if(d<0||d>=e.length)continue;const a=l.containing(d);if(a?.isWordLike!==!0)continue;const n=document.createRange();return n.setStart(e,a.index),n.setEnd(e,a.index+a.segment.length),n}}function M(e){const s=e.closest("[data-ak-autofit='text']");if(!s)return;const l=1/Number(s.dataset.akFontScale??"1"),d=getComputedStyle(s),a=s.clientHeight-parseFloat(d.paddingTop)-parseFloat(d.paddingBottom),n=s.getBoundingClientRect().height/s.offsetHeight,i=c=>{e.style.setProperty("zoom",String(c));const u=e.firstElementChild?.getBoundingClientRect(),E=e.lastElementChild?.getBoundingClientRect();return!u||!E||E.bottom-u.top<=a*n+.5};if(i(l))return;let f=Z,g=l;for(;g-f>.01;){const c=(f+g)/2;i(c)?f=c:g=c}i(f)}const Y=(e,s)=>e.bold===s.bold&&e.italic===s.italic&&e.code===s.code&&e.color===s.color&&e.font===s.font&&e.attrs===s.attrs;function tt(e){const s=getComputedStyle(e),l=[],d=n=>{const i=l.at(-1);i&&(Y(i,n)||n.text.trim()==="")?i.text+=n.text:l.push(n)},a=n=>{if(n instanceof HTMLBRElement){d({...et,text:"\v"});return}if(n.nodeType!==Node.TEXT_NODE){n.childNodes.forEach(a);return}const i=n.parentElement;if(!i)return;const f=getComputedStyle(i);d({text:n.textContent??"",bold:Number(f.fontWeight)>=A&&Number(s.fontWeight)<A,italic:f.fontStyle==="italic"&&s.fontStyle!=="italic",code:i.closest("[data-ak-code]")!==null,color:i.closest("[data-ak-color]")?.dataset.akColor,font:i.closest("[data-ak-font]")?.dataset.akFont,attrs:i.closest("[data-ak-attrs]")?.dataset.akAttrs})};return e.childNodes.forEach(a),l}const et={bold:!1,italic:!1,code:!1,color:void 0,font:void 0,attrs:void 0};function nt(e){const[,s="",l="",d=""]=/^(\s*)(.*?)(\s*)$/su.exec(e.text)??[];if(l===""||e.text==="\v")return e.text;let a=e.code?`\`${l}\``:l;const n=[...e.color===void 0?[]:[`color="${e.color}"`],...e.font===void 0?[]:[`font="${e.font}"`],...e.attrs===void 0?[]:[e.attrs]];return n.length>0&&(a=`<span ${n.join(" ")}>${a}</span>`),e.italic&&(a=`*${a}*`),e.bold&&(a=`**${a}**`),`${s}${a}${d}`}function ot(e){const s=[...e.children].filter(l=>l instanceof HTMLElement);return s.length===0?[{text:e.innerText.trim(),level:0}]:s.map(l=>({text:tt(l).map(nt).join("").replace(/\v$/u,""),level:Number(l.dataset.akLevel??"0")||0}))}export function deckEditor(e,s){const l=n=>e.querySelector(`[${V}="${CSS.escape(n)}"]`);let d;const a=(n,i)=>{if(n.type==="deck-frame"){const t=l(n.shape);if(!t)return;if(t.dataset.akFileFrame??=JSON.stringify([t.style.left,t.style.top,t.style.width,t.style.height]),n.frame===null){const[p,h,$,J]=JSON.parse(t.dataset.akFileFrame);Object.assign(t.style,{left:p,top:h,width:$,height:J});return}const r=n.frame;Object.assign(t.style,{left:`${String(r.left*s)}px`,top:`${String(r.top*s)}px`,width:`${String(r.width*s)}px`,height:`${String(r.height*s)}px`});return}if(n.type==="deck-stop"){d?.stop();return}if(n.type==="deck-hold"){d?.hold();return}if(n.type==="deck-format"){d?.format(n);return}const f=l(n.shape),g=e.getBoundingClientRect(),c=n.at&&[g.left+n.at.x*g.width,g.top+n.at.y*g.height],u=f?[...f.querySelectorAll("[data-ak-cell]")]:[],E=c&&document.elementFromPoint(c[0],c[1]),m=u.find(t=>t.dataset.akCell===n.cell?.join(","))??(E?u.find(t=>t.contains(E)):void 0)??u[0],o=(m??f)?.querySelector("[data-ak-body]");if(!f||!o)return;d?.stop();const y=n.shape,O=m?.dataset.akCell?.split(",").map(Number),S=O?{cell:O}:{};if(o.children.length===0){const t=document.createElement("div");t.dataset.akParagraph="0",t.dataset.akLevel="0",t.append(document.createElement("br")),o.append(t)}o.contentEditable="true",o.spellcheck=!1,o.style.outline="none",o.style.cursor="text";const L=()=>ot(o),C=t=>{t instanceof InputEvent&&t.isComposing||(M(o),i({type:"deck-text",shape:y,paragraphs:L(),...S}))},F=t=>{t.preventDefault();const r=t.clipboardData?.getData("text/plain")??"";I(r)},q=t=>{const r=getSelection()?.anchorNode,p=(r instanceof Element?r:r?.parentElement)?.closest("[data-ak-level]");if(!p)return;const h=Number(p.dataset.akLevel??"0")+t;if(h<0||h>U)return;p.dataset.akLevel=String(h);const $=parseFloat(p.style.marginLeft)||0;p.style.marginLeft=`${String($+t*X*s)}px`,i({type:"deck-text",shape:y,paragraphs:L(),...S})},P=t=>{const r=t?.dataset.akCell?.split(",").map(Number);!r||t===m||(_(!1),a({type:"deck-edit",shape:y,cell:[r[0]??0,r[1]??0]},i))},B=t=>{t.stopPropagation(),t.key==="Escape"&&T(),t.key==="Tab"&&(t.preventDefault(),m?P(u[u.indexOf(m)+(t.shiftKey?-1:1)]):q(t.shiftKey?-1:1)),(t.metaKey||t.ctrlKey)&&t.key==="u"&&t.preventDefault()};let w;const W=t=>{w=u.find(r=>r!==m&&t.target instanceof Node&&r.contains(t.target)),w&&t.preventDefault()},D=t=>{t.stopPropagation(),P(w)},_=t=>{o.removeEventListener("input",C),o.removeEventListener("compositionend",C),o.removeEventListener("paste",F),o.removeEventListener("keydown",B),o.removeEventListener("blur",H),o.removeEventListener("focus",j),document.removeEventListener("selectionchange",R),clearTimeout(b),f.removeEventListener("mousedown",W),document.removeEventListener("click",D,!0),o.contentEditable="false",d=void 0,i({type:t?"deck-text-done":"deck-text",shape:y,paragraphs:L(),...S})},T=()=>{_(!0)};let v,N=!1,b;const R=()=>{const t=getSelection();if(!t||t.rangeCount===0)return;const r=t.getRangeAt(0);if(!o.contains(r.commonAncestorContainer))return;v=r.cloneRange();const p=r.startContainer instanceof Element?r.startContainer:r.startContainer.parentElement;i({type:"deck-selection",shape:y,words:!r.collapsed,bold:p?Number(getComputedStyle(p).fontWeight)>=A:!1,italic:p?getComputedStyle(p).fontStyle==="italic":!1})},H=()=>{b=setTimeout(()=>{N||T()},G)},j=()=>{N=!1,clearTimeout(b)},z=t=>{const r=getSelection();if(!r||!v)return;window.focus(),o.focus();const p=v.collapsed?K(v.startContainer,v.startOffset):v;p&&(v=p,r.removeAllRanges(),r.addRange(v),Q(v,h=>{t.bold!==void 0&&(h.style.fontWeight=t.bold?"700":"400"),t.italic!==void 0&&(h.style.fontStyle=t.italic?"italic":"normal"),t.color!==void 0&&(h.dataset.akColor=t.color,h.style.color=t.color.startsWith("#")?t.color:`var(--ak-theme-${t.color})`)},r),M(o),i({type:"deck-text",shape:y,paragraphs:L(),...S}),R())};o.addEventListener("input",C),o.addEventListener("compositionend",C),o.addEventListener("paste",F),o.addEventListener("keydown",B),o.addEventListener("blur",H),o.addEventListener("focus",j),document.addEventListener("selectionchange",R),m&&f.addEventListener("mousedown",W),document.addEventListener("click",D,!0),window.focus(),d={body:o,stop:T,format:z,hold:()=>{N=!0}},o.focus();const k=c?document.caretPositionFromPoint(c[0],c[1]):null,x=getSelection();if(x){if(x.removeAllRanges(),k&&o.contains(k.offsetNode)){const t=document.createRange();t.setStart(k.offsetNode,k.offset),t.collapse(!0),x.addRange(t);const r=n.word===!0?K(k.offsetNode,k.offset):void 0;r&&(x.removeAllRanges(),x.addRange(r))}else{const t=document.createRange();t.selectNodeContents(o),t.collapse(!1),x.addRange(t)}n.text!==void 0&&I(n.text)}};return a}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/slides-runtime",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -1,2 +1,2 @@
1
1
  /*! AllyHub. Copyright (c) 2026 AllyHub, Inc. All rights reserved. Use is subject to LICENSE.md. */
2
- export function graphicsPage(n,a={}){const s=n.summary;if(!s)throw new Error("A stage page draws for a render once a piece is loaded.");const p=[];return{timeline:s.timeline,signs:s.signs,reads:{messages:[...new Set(s.reads.messages.map(t=>t.key))],media:[...new Set(s.reads.media.map(t=>t.path))],data:[...new Set(s.reads.data.map(t=>t.path))]},...a.gpu===void 0?{}:{gpu:a.gpu},async frame(t,e){await n.seek(t,{...e.offset===void 0?{}:{offset:e.offset},...e.plane===void 0?{}:{plane:e.plane},...e.part===void 0?{}:{part:e.part}});const u=await n.stuck();if(u!==void 0)throw new Error(u);const o=()=>n.capture({format:e.format,...e.quality===void 0?{}:{quality:e.quality},alpha:e.alpha??!1}),d=e.reuse?await n.signature():void 0;if(e.reuse&&d!==void 0){const i=`${e.format}:${String(e.quality??"")}:${String(e.alpha??!1)}:${d}`,c=e.reuse.get(i);if(c)return e.stats&&e.stats.reused++,c;const r=o();return e.reuse.set(i,r),r.catch(()=>e.reuse?.delete(i)),e.stats&&e.stats.captured++,r}return e.stats&&e.stats.captured++,o()},partSign:(t,e)=>n.partSignature(t,e),async problems(){return[...await n.problems(),...p]},report(t){p.push(...t)},lines:()=>n.lines(),captionOptions:()=>n.captionOptions(),text:()=>Promise.resolve(s.text),inks:t=>n.inks(t),deck:()=>n.deck(),hideText:t=>n.hideText(t),covers:()=>Promise.resolve(s.covers.length),async cover(t){return await n.drawCover(t),n.capture({format:"png",alpha:!0})},print:(t,e)=>n.print(t,e),close:()=>n.close()}}
2
+ export function graphicsPage(n,r={}){const s=n.summary;if(!s)throw new Error("A stage page draws for a render once a piece is loaded.");const p=[];return{timeline:s.timeline,signs:s.signs,reads:{messages:[...new Set(s.reads.messages.map(t=>t.key))],media:[...new Set(s.reads.media.map(t=>t.path))],data:[...new Set(s.reads.data.map(t=>t.path))]},...r.gpu===void 0?{}:{gpu:r.gpu},async frame(t,e){await n.seek(t,{...e.offset===void 0?{}:{offset:e.offset},...e.plane===void 0?{}:{plane:e.plane},...e.part===void 0?{}:{part:e.part}});const u=await n.stuck();if(u!==void 0)throw new Error(u);const o=()=>n.capture({format:e.format,...e.quality===void 0?{}:{quality:e.quality},alpha:e.alpha??!1}),d=e.reuse?await n.signature():void 0;if(e.reuse&&d!==void 0){const i=`${e.format}:${String(e.quality??"")}:${String(e.alpha??!1)}:${d}`,c=e.reuse.get(i);if(c)return e.stats&&e.stats.reused++,c;const a=o();return e.reuse.set(i,a),a.catch(()=>e.reuse?.delete(i)),e.stats&&e.stats.captured++,a}return e.stats&&e.stats.captured++,o()},partSign:(t,e)=>n.partSignature(t,e),async problems(){return[...await n.problems(),...p]},report(t){p.push(...t)},lines:()=>n.lines(),captionOptions:()=>n.captionOptions(),text:()=>Promise.resolve(s.text),deck:()=>n.deck(),covers:()=>Promise.resolve(s.covers.length),async cover(t){return await n.drawCover(t),n.capture({format:"png",alpha:!0})},print:(t,e)=>n.print(t,e),close:()=>n.close()}}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@allyhub-next/stage",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {