@popcraft/kit 0.25.0 → 0.26.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 (229) hide show
  1. package/dist/chunks/{agent-45ZGYKTC.js → agent-NTEAEZBN.js} +1 -1
  2. package/dist/chunks/{build-K6QBTLT7.js → build-W5O2ZVN7.js} +2 -2
  3. package/dist/chunks/{builtin-ZS3HJHZL.js → builtin-KX2SGDND.js} +3 -3
  4. package/dist/chunks/{check-template-RZ7IO333.js → check-template-B2KKE6BW.js} +2 -2
  5. package/dist/chunks/{chunk-ZKHYC3QO.js → chunk-37WES5PM.js} +2 -2
  6. package/dist/chunks/chunk-45JABNLR.js +161 -0
  7. package/dist/chunks/chunk-4OGILN7Y.js +141 -0
  8. package/dist/chunks/{chunk-63X37RCC.js → chunk-5NWVUAWR.js} +4 -4
  9. package/dist/chunks/{chunk-QREG6HEK.js → chunk-67SLLJJB.js} +40 -40
  10. package/dist/chunks/chunk-6DV5JZ5M.js +121 -0
  11. package/dist/chunks/chunk-7Q67MXXL.js +140 -0
  12. package/dist/chunks/{chunk-R5CW4CNP.js → chunk-A6GPFR5O.js} +11 -11
  13. package/dist/chunks/chunk-AISWLDDO.js +895 -0
  14. package/dist/chunks/{chunk-ADZXK6SM.js → chunk-AQGECTRJ.js} +1 -1
  15. package/dist/chunks/chunk-ASWWZNTY.js +130 -0
  16. package/dist/chunks/chunk-BNEFANT2.js +134 -0
  17. package/dist/chunks/{chunk-REJO7GXO.js → chunk-CFEKYNGQ.js} +2 -2
  18. package/dist/chunks/{chunk-5HG4LWF5.js → chunk-D4HEDPVN.js} +161 -0
  19. package/dist/chunks/chunk-DRESZDOP.js +130 -0
  20. package/dist/chunks/{chunk-3W2MSVJA.js → chunk-EBLHS2EG.js} +5 -5
  21. package/dist/chunks/chunk-EHTLT6XJ.js +131 -0
  22. package/dist/chunks/{chunk-2AQK4IIV.js → chunk-EVFG2K4L.js} +1 -1
  23. package/dist/chunks/{chunk-6TJIEERG.js → chunk-F4NTIOTT.js} +26 -26
  24. package/dist/chunks/chunk-FC7B22QS.js +150 -0
  25. package/dist/chunks/{chunk-V6COW3DB.js → chunk-G6MIC23V.js} +1 -1
  26. package/dist/chunks/{chunk-4QBQ4RAA.js → chunk-GODXMHO3.js} +4 -4
  27. package/dist/chunks/chunk-GT22XGDH.js +152 -0
  28. package/dist/chunks/chunk-HL4M53ZR.js +143 -0
  29. package/dist/chunks/{chunk-MPI6SCA7.js → chunk-IDL5KKIC.js} +5 -5
  30. package/dist/chunks/{chunk-HR7HCFPX.js → chunk-IM6HORNC.js} +5 -5
  31. package/dist/chunks/{chunk-UVMU6CXR.js → chunk-IWCZDFXL.js} +17 -17
  32. package/dist/chunks/{chunk-OCSLBM6W.js → chunk-JXAJ6OST.js} +1 -1
  33. package/dist/chunks/{chunk-5WGMPGKY.js → chunk-KS7DVWDB.js} +1 -1
  34. package/dist/chunks/chunk-NHDBQ4G7.js +137 -0
  35. package/dist/chunks/chunk-NKPU5TF2.js +103 -0
  36. package/dist/chunks/chunk-NO734F3F.js +146 -0
  37. package/dist/chunks/{chunk-ASWAIYNC.js → chunk-NR2SFSJU.js} +3 -3
  38. package/dist/chunks/{chunk-CJY4TNOS.js → chunk-O3BEBIDN.js} +3 -1
  39. package/dist/chunks/{chunk-UDO3ZU5T.js → chunk-OR6HMJRM.js} +1 -1
  40. package/dist/chunks/chunk-OTICJQ4T.js +267 -0
  41. package/dist/chunks/chunk-PWZZRGWI.js +141 -0
  42. package/dist/chunks/{chunk-AE6S2M2B.js → chunk-QX4U3VTU.js} +25 -25
  43. package/dist/chunks/{chunk-TRUFIU5W.js → chunk-R3YD6VL6.js} +3 -3
  44. package/dist/chunks/{chunk-YSYZW4VZ.js → chunk-SFPM3UJA.js} +7 -7
  45. package/dist/chunks/chunk-SNXQM4UO.js +115 -0
  46. package/dist/chunks/chunk-T3LV66CQ.js +139 -0
  47. package/dist/chunks/chunk-TDGIO2S7.js +145 -0
  48. package/dist/chunks/chunk-TFNV2UP4.js +87 -0
  49. package/dist/chunks/chunk-UJZXKOTP.js +136 -0
  50. package/dist/chunks/{chunk-QAVWMRRM.js → chunk-V5HI55XO.js} +2 -2
  51. package/dist/chunks/chunk-VVNPBBPL.js +174 -0
  52. package/dist/chunks/{chunk-22RNC42G.js → chunk-YHA45NK5.js} +1 -1
  53. package/dist/chunks/{chunk-27EVM272.js → chunk-YPMT4Y4N.js} +2 -2
  54. package/dist/chunks/chunk-YRSDFRCX.js +122 -0
  55. package/dist/chunks/chunk-ZNARVSMD.js +140 -0
  56. package/dist/chunks/{chunk-3DWOQ4LW.js → chunk-ZTBKAGBN.js} +2 -2
  57. package/dist/chunks/{client-6DUSRTZG.js → client-25NJXQWL.js} +1 -1
  58. package/dist/chunks/{client-XYPBNSQ7.js → client-7AQTKZHV.js} +2 -2
  59. package/dist/chunks/{client-TRFNJJHQ.js → client-LWBTUXQK.js} +2 -2
  60. package/dist/chunks/{client-actions-SSUZUEG7.js → client-actions-3HIRRSOL.js} +4 -4
  61. package/dist/chunks/{dangerous-UX4DHJ7U.js → dangerous-XJOHEWL6.js} +3 -3
  62. package/dist/chunks/{editor-seams-V7ZP7XH3.js → editor-seams-4DREZRTT.js} +9 -9
  63. package/dist/chunks/{editor-store-OIHZT244.js → editor-store-C4VWC23J.js} +1 -1
  64. package/dist/chunks/{export-watermark-4NAP5RVM.js → export-watermark-OKGRZNOU.js} +5 -5
  65. package/dist/chunks/{eyedropper-QXEY7LVL.js → eyedropper-WZYSTUTM.js} +1 -1
  66. package/dist/chunks/{generate-media-JAEHWNF6.js → generate-media-DFSHOPOI.js} +2 -2
  67. package/dist/chunks/{host-IKFYVZS7.js → host-4ZE7SIWR.js} +6 -6
  68. package/dist/chunks/{integrations-U5X2BHVK.js → integrations-LPC35FKX.js} +1 -1
  69. package/dist/chunks/{kit-modules-BAUMECYQ.js → kit-modules-BAKTDLOZ.js} +1 -1
  70. package/dist/chunks/{libraries-Q5TCHWGI.js → libraries-ACERXG2O.js} +5 -5
  71. package/dist/chunks/{live-4XQEGNLA.js → live-ZIVBFX3G.js} +3 -3
  72. package/dist/chunks/{media-tool-OSQR45HY.js → media-tool-2ZPIQKJD.js} +1 -1
  73. package/dist/chunks/{new-file-VVLWHEJ4.js → new-file-XS3KCMGM.js} +3 -3
  74. package/dist/chunks/{plugin-44ZW5UEP.js → plugin-6RNMUP5I.js} +2 -2
  75. package/dist/chunks/{plugin-import-3ISLDX7T.js → plugin-import-UC5BHZFE.js} +13 -13
  76. package/dist/chunks/{presence-WVU4OIUA.js → presence-TLDOMBPD.js} +2 -2
  77. package/dist/chunks/{project-EG7XFEJU.js → project-NMPK4R5M.js} +1 -1
  78. package/dist/chunks/{publish-site-WFIX42D3.js → publish-site-R46ZILSS.js} +6 -6
  79. package/dist/chunks/{publish-store-6BS7OIP4.js → publish-store-MIPHEDLV.js} +4 -4
  80. package/dist/chunks/{raster-actions-37XUQSVZ.js → raster-actions-7EI5THLB.js} +1 -1
  81. package/dist/chunks/{runner-HZ7MU6ER.js → runner-I66TTKKZ.js} +16 -16
  82. package/dist/chunks/{store-PHWBXKNY.js → store-7WMR3JKP.js} +5 -5
  83. package/dist/chunks/{sync-IJNKHQRF.js → sync-OFINS45Q.js} +5 -5
  84. package/dist/chunks/{tabs-G6OTEGA5.js → tabs-PEH6VX3X.js} +8 -8
  85. package/dist/chunks/{team-M2EN4JT5.js → team-GGW3O32G.js} +1 -1
  86. package/dist/chunks/{tools-WDFCY4BH.js → tools-TKCA46ZS.js} +2 -2
  87. package/dist/chunks/{ui-commands-QHFGR33P.js → ui-commands-6K4PYKU5.js} +11 -11
  88. package/dist/chunks/{versions-S7COCZSQ.js → versions-KHRNQFGF.js} +5 -5
  89. package/dist/index.js +4 -4
  90. package/dist/seed/files.json +1 -1
  91. package/dist/templates/count.js +1 -1
  92. package/dist/templates/index.js +125 -101
  93. package/dist/templates/index.json +756 -0
  94. package/dist/templates/motion/landing-hero/index.js +4 -4
  95. package/dist/templates/motion/launch-trailer/document.js +125 -101
  96. package/dist/templates/motion/launch-trailer/index.js +4 -4
  97. package/dist/templates/motion/launch-trailer/scenes.js +3 -3
  98. package/dist/templates/motion/template-wall.js +2 -2
  99. package/dist/templates/print/holidays-christmas-church-newsletter.js +94 -0
  100. package/dist/templates/print/holidays-christmas-eve-invitation.js +94 -0
  101. package/dist/templates/print/holidays-christmas-gift-tags.js +94 -0
  102. package/dist/templates/print/holidays-diwali-party-invitation.js +95 -0
  103. package/dist/templates/print/holidays-easter-activity-sheet.js +94 -0
  104. package/dist/templates/print/holidays-easter-egg-hunt-flyer.js +94 -0
  105. package/dist/templates/print/holidays-eid-dinner-invitation.js +95 -0
  106. package/dist/templates/print/holidays-eid-gift-tags.js +94 -0
  107. package/dist/templates/print/holidays-halloween-party-invitation.js +95 -0
  108. package/dist/templates/print/holidays-halloween-treat-labels.js +94 -0
  109. package/dist/templates/print/holidays-halloween-trunk-or-treat-poster.js +94 -0
  110. package/dist/templates/print/holidays-hanukkah-activity-sheet.js +94 -0
  111. package/dist/templates/print/holidays-hanukkah-party-invitation.js +94 -0
  112. package/dist/templates/print/holidays-lunar-new-year-banquet-menu.js +95 -0
  113. package/dist/templates/print/holidays-new-years-eve-poster.js +94 -0
  114. package/dist/templates/print/holidays-thanksgiving-dinner-menu.js +94 -0
  115. package/dist/templates/print/holidays-thanksgiving-place-cards.js +94 -0
  116. package/dist/templates/print/holidays-valentines-dinner-menu.js +94 -0
  117. package/dist/templates/saas/email-decks.js +2 -2
  118. package/dist/templates/saas/index.js +37 -37
  119. package/dist/templates/saas/launch-kit.js +2 -2
  120. package/dist/templates/saas/launch-video.js +2 -2
  121. package/dist/templates/saas/stores.js +2 -2
  122. package/dist/templates/saas/style-bento.js +2 -2
  123. package/dist/templates/saas/style-dark.js +2 -2
  124. package/dist/templates/saas/style-editorial.js +2 -2
  125. package/dist/templates/saas/style-gradient.js +2 -2
  126. package/dist/templates/saas/style-pastel.js +2 -2
  127. package/dist/templates/saas/style-swiss.js +2 -2
  128. package/dist/templates/slideshow/index.js +3 -3
  129. package/dist/templates/social/holidays-diwali-sweet-shop-post.js +96 -0
  130. package/dist/templates/social/holidays-lunar-new-year-bakery-post.js +96 -0
  131. package/dist/templates/social/holidays-new-years-eve-shop-hours.js +96 -0
  132. package/dist/templates/social/holidays-thanksgiving-pie-orders-post.js +96 -0
  133. package/dist/templates/social/holidays-valentines-florist-post.js +96 -0
  134. package/dist/templates/themes/black-friday-coupons.js +2 -2
  135. package/dist/templates/themes/black-friday-neon.js +2 -2
  136. package/dist/templates/themes/blueprint.js +2 -2
  137. package/dist/templates/themes/broadsheet.js +2 -2
  138. package/dist/templates/themes/cyberpunk.js +2 -2
  139. package/dist/templates/themes/departure-board.js +2 -2
  140. package/dist/templates/themes/festival-presale-family-a.js +2 -2
  141. package/dist/templates/themes/festival-presale-family-b.js +2 -2
  142. package/dist/templates/themes/holidays-shared.js +172 -0
  143. package/dist/templates/themes/holidays.js +107 -1
  144. package/dist/templates/themes/index.js +72 -48
  145. package/dist/templates/themes/lunar-new-year.js +2 -2
  146. package/dist/templates/themes/noir.js +2 -2
  147. package/dist/templates/themes/psychedelic.js +2 -2
  148. package/dist/templates/themes/space-opera.js +2 -2
  149. package/dist/templates/themes/studio.js +3 -3
  150. package/dist/templates/themes/tour-tickets.js +2 -2
  151. package/dist/templates/themes/vaporwave.js +2 -2
  152. package/package.json +1 -1
  153. package/src/templates/print/holidays-christmas-church-newsletter.ts +246 -0
  154. package/src/templates/print/holidays-christmas-eve-invitation.ts +121 -0
  155. package/src/templates/print/holidays-christmas-gift-tags.ts +117 -0
  156. package/src/templates/print/holidays-diwali-party-invitation.ts +98 -0
  157. package/src/templates/print/holidays-easter-activity-sheet.ts +108 -0
  158. package/src/templates/print/holidays-easter-egg-hunt-flyer.ts +118 -0
  159. package/src/templates/print/holidays-eid-dinner-invitation.ts +104 -0
  160. package/src/templates/print/holidays-eid-gift-tags.ts +94 -0
  161. package/src/templates/print/holidays-halloween-party-invitation.ts +101 -0
  162. package/src/templates/print/holidays-halloween-treat-labels.ts +86 -0
  163. package/src/templates/print/holidays-halloween-trunk-or-treat-poster.ts +148 -0
  164. package/src/templates/print/holidays-hanukkah-activity-sheet.ts +112 -0
  165. package/src/templates/print/holidays-hanukkah-party-invitation.ts +112 -0
  166. package/src/templates/print/holidays-lunar-new-year-banquet-menu.ts +110 -0
  167. package/src/templates/print/holidays-new-years-eve-poster.ts +117 -0
  168. package/src/templates/print/holidays-thanksgiving-dinner-menu.ts +110 -0
  169. package/src/templates/print/holidays-thanksgiving-place-cards.ts +80 -0
  170. package/src/templates/print/holidays-valentines-dinner-menu.ts +95 -0
  171. package/src/templates/social/holidays-diwali-sweet-shop-post.ts +121 -0
  172. package/src/templates/social/holidays-lunar-new-year-bakery-post.ts +110 -0
  173. package/src/templates/social/holidays-new-years-eve-shop-hours.ts +118 -0
  174. package/src/templates/social/holidays-thanksgiving-pie-orders-post.ts +115 -0
  175. package/src/templates/social/holidays-valentines-florist-post.ts +102 -0
  176. package/src/templates/themes/holidays-shared.ts +903 -0
  177. package/src/templates/themes/holidays.ts +24 -1
  178. package/types/templates/src/print/holidays-christmas-church-newsletter.d.ts +2 -0
  179. package/types/templates/src/print/holidays-christmas-eve-invitation.d.ts +2 -0
  180. package/types/templates/src/print/holidays-christmas-gift-tags.d.ts +2 -0
  181. package/types/templates/src/print/holidays-diwali-party-invitation.d.ts +2 -0
  182. package/types/templates/src/print/holidays-easter-activity-sheet.d.ts +2 -0
  183. package/types/templates/src/print/holidays-easter-egg-hunt-flyer.d.ts +2 -0
  184. package/types/templates/src/print/holidays-eid-dinner-invitation.d.ts +2 -0
  185. package/types/templates/src/print/holidays-eid-gift-tags.d.ts +2 -0
  186. package/types/templates/src/print/holidays-halloween-party-invitation.d.ts +2 -0
  187. package/types/templates/src/print/holidays-halloween-treat-labels.d.ts +2 -0
  188. package/types/templates/src/print/holidays-halloween-trunk-or-treat-poster.d.ts +2 -0
  189. package/types/templates/src/print/holidays-hanukkah-activity-sheet.d.ts +2 -0
  190. package/types/templates/src/print/holidays-hanukkah-party-invitation.d.ts +2 -0
  191. package/types/templates/src/print/holidays-lunar-new-year-banquet-menu.d.ts +2 -0
  192. package/types/templates/src/print/holidays-new-years-eve-poster.d.ts +2 -0
  193. package/types/templates/src/print/holidays-thanksgiving-dinner-menu.d.ts +2 -0
  194. package/types/templates/src/print/holidays-thanksgiving-place-cards.d.ts +2 -0
  195. package/types/templates/src/print/holidays-valentines-dinner-menu.d.ts +2 -0
  196. package/types/templates/src/social/holidays-diwali-sweet-shop-post.d.ts +2 -0
  197. package/types/templates/src/social/holidays-lunar-new-year-bakery-post.d.ts +2 -0
  198. package/types/templates/src/social/holidays-new-years-eve-shop-hours.d.ts +2 -0
  199. package/types/templates/src/social/holidays-thanksgiving-pie-orders-post.d.ts +2 -0
  200. package/types/templates/src/social/holidays-valentines-florist-post.d.ts +2 -0
  201. package/types/templates/src/themes/holidays-shared.d.ts +374 -0
  202. package/dist/chunks/chunk-OWZLREWX.js +0 -18
  203. package/dist/chunks/{chunk-IFJTWD4O.js → chunk-2R3MZKA2.js} +3 -3
  204. package/dist/chunks/{chunk-P67L32AF.js → chunk-3DBNMCGN.js} +3 -3
  205. package/dist/chunks/{chunk-DZDTVMUO.js → chunk-3VHOXVMF.js} +3 -3
  206. package/dist/chunks/{chunk-2PQI2R5L.js → chunk-64RMGOTG.js} +0 -0
  207. package/dist/chunks/{chunk-7BDCMMSD.js → chunk-6Y46SDFE.js} +3 -3
  208. package/dist/chunks/{chunk-6VCQ4ZEG.js → chunk-AFARXTNQ.js} +3 -3
  209. package/dist/chunks/{chunk-ITSYENCT.js → chunk-BI3M4RUH.js} +3 -3
  210. package/dist/chunks/{chunk-25FM5JIR.js → chunk-BP7CHO7K.js} +3 -3
  211. package/dist/chunks/{chunk-D22534DX.js → chunk-DPTFZDOS.js} +3 -3
  212. package/dist/chunks/{chunk-JWLR6K62.js → chunk-FNUM5W3W.js} +3 -3
  213. package/dist/chunks/{chunk-JPH6HOYU.js → chunk-HJQU5POV.js} +3 -3
  214. package/dist/chunks/{chunk-HQYZ4URA.js → chunk-IJ65QZLL.js} +3 -3
  215. package/dist/chunks/{chunk-47VVF5TM.js → chunk-INT2OPPY.js} +8 -8
  216. package/dist/chunks/{chunk-AYVAHMWQ.js → chunk-JPMLUHZX.js} +3 -3
  217. package/dist/chunks/{chunk-LFYNAAAQ.js → chunk-LMRTRVPC.js} +3 -3
  218. package/dist/chunks/{chunk-HJIMF4NA.js → chunk-NGMCQZA6.js} +3 -3
  219. package/dist/chunks/{chunk-B3ASV6KS.js → chunk-PQBYL7AI.js} +3 -3
  220. package/dist/chunks/{chunk-NHXNUDC5.js → chunk-QD4QORNR.js} +3 -3
  221. package/dist/chunks/{chunk-P6TPDLAF.js → chunk-S3C6L5KF.js} +3 -3
  222. package/dist/chunks/{chunk-TIRPXUK2.js → chunk-S7L2D7NH.js} +3 -3
  223. package/dist/chunks/{chunk-QFGFR5FQ.js → chunk-TYOOL27R.js} +3 -3
  224. package/dist/chunks/{chunk-32V4D45K.js → chunk-TYW7EXV6.js} +3 -3
  225. package/dist/chunks/{chunk-3QIDCP4M.js → chunk-VOEAQIQT.js} +3 -3
  226. package/dist/chunks/{chunk-ASVDOX62.js → chunk-VVUQG4ME.js} +3 -3
  227. package/dist/chunks/{chunk-ZXZ22FKF.js → chunk-XTWKSMJC.js} +3 -3
  228. package/dist/chunks/{chunk-6NG5K7WN.js → chunk-YHEMML5Q.js} +3 -3
  229. package/dist/chunks/{chunk-MVFPEBMY.js → chunk-ZKRSVNY4.js} +3 -3
@@ -864,7 +864,7 @@ init_scene_graph();
864
864
  var licence = external_exports.enum(["commercial", "any"]).optional().describe("commercial (default): only licences that allow commercial use and edits (CC0, public domain, CC BY, CC BY-SA). any: every Creative Commons licence, including NC and ND.");
865
865
  var brief2 = (p) => ({ id: p.id, title: p.title, creator: p.credit.creator, licence: licenceLabel(p.credit), width: p.width, height: p.height, source: p.credit.sourceUrl });
866
866
  async function placeImportedPicture(ctx, imported, at, what, extra = {}) {
867
- const client = await import("./client-6DUSRTZG.js");
867
+ const client = await import("./client-25NJXQWL.js");
868
868
  if (at.fillLayerId) {
869
869
  const doc2 = ctx.doc();
870
870
  const target = nodeOrThrow(doc2, at.fillLayerId);
@@ -910,7 +910,7 @@ var photoSearch = defineCommand({
910
910
  }
911
911
  },
912
912
  run: async (args) => {
913
- const { searchStockPhotos } = await import("./client-6DUSRTZG.js");
913
+ const { searchStockPhotos } = await import("./client-25NJXQWL.js");
914
914
  const page = await searchStockPhotos(args.query, args.page ?? 1, { licence: args.licence });
915
915
  return {
916
916
  summary: `${page.results.length} photo${page.results.length === 1 ? "" : "s"} for \u201C${page.query}\u201D (page ${page.page} of ${page.pageCount || 1})`,
@@ -944,7 +944,7 @@ var photoInsert = defineCommand({
944
944
  run: async (args, ctx) => {
945
945
  if (!args.id && !args.query) throw new ToolError("Pass an id from search_photos, or a query.");
946
946
  if (args.id && !isPhotoId(args.id)) throw new ToolError(`"${args.id}" is not a photo id from search_photos.`);
947
- const client = await import("./client-6DUSRTZG.js");
947
+ const client = await import("./client-25NJXQWL.js");
948
948
  let photo;
949
949
  if (args.id) photo = await client.stockPhotoInfo(args.id);
950
950
  else {
@@ -982,7 +982,7 @@ var mediaList = defineCommand({
982
982
  }
983
983
  },
984
984
  run: async (args) => {
985
- const { listLibraryMedia } = await import("./client-TRFNJJHQ.js");
985
+ const { listLibraryMedia } = await import("./client-LWBTUXQK.js");
986
986
  const page = await listLibraryMedia(args);
987
987
  return { summary: `${page.items.length} media item${page.items.length === 1 ? "" : "s"}${page.nextCursor ? " (more)" : ""}`, data: { workspaceId: page.workspaceId, items: page.items.map(brief3), nextCursor: page.nextCursor } };
988
988
  }
@@ -1013,7 +1013,7 @@ var mediaInsert = defineCommand({
1013
1013
  run: async (args, ctx) => {
1014
1014
  const contentType = args.contentType ?? "image/*";
1015
1015
  if (!contentType.startsWith("image/")) throw new ToolError("insert_media places pictures; this item is not one.");
1016
- const { importLibraryPicture } = await import("./client-TRFNJJHQ.js");
1016
+ const { importLibraryPicture } = await import("./client-LWBTUXQK.js");
1017
1017
  const item = { hash: args.hash, fileKey: args.fileKey, fileName: args.name ?? "Media", contentType, size: 0, createdAt: "", fileCount: 1, source: null };
1018
1018
  const imported = await importLibraryPicture(item);
1019
1019
  return placeImportedPicture(ctx, imported, args, `\u201C${imported.name}\u201D`, { hash: imported.hash });
@@ -1034,7 +1034,7 @@ var mediaDownload = defineCommand({
1034
1034
  // The Library's right-click menu: saves the item's file to the computer.
1035
1035
  expose: { ui: { label: "Download", palette: false } },
1036
1036
  run: async (args) => {
1037
- const { libraryBlob, libraryFileName } = await import("./client-TRFNJJHQ.js");
1037
+ const { libraryBlob, libraryFileName } = await import("./client-LWBTUXQK.js");
1038
1038
  const { downloadBlob } = await import("./download-P52YK7FC.js");
1039
1039
  const item = { hash: args.hash, fileKey: args.fileKey, fileName: args.name ?? "media", contentType: args.contentType ?? "", size: 0, createdAt: "", fileCount: 1, source: null };
1040
1040
  const blob = await libraryBlob(item);
@@ -1065,7 +1065,7 @@ var mediaDelete = defineCommand({
1065
1065
  }
1066
1066
  },
1067
1067
  run: async (args) => {
1068
- const { deleteLibraryMedia } = await import("./client-TRFNJJHQ.js");
1068
+ const { deleteLibraryMedia } = await import("./client-LWBTUXQK.js");
1069
1069
  const out = await deleteLibraryMedia(args.workspace, args.hash);
1070
1070
  return { summary: `Deleted it from the library (it was in ${out.files} file${out.files === 1 ? "" : "s"})`, data: out };
1071
1071
  }
@@ -1079,13 +1079,13 @@ async function signedIn() {
1079
1079
  }
1080
1080
  async function publishedFile() {
1081
1081
  await signedIn();
1082
- const { openFileKey } = await import("./publish-site-WFIX42D3.js");
1082
+ const { openFileKey } = await import("./publish-site-R46ZILSS.js");
1083
1083
  const key = openFileKey();
1084
1084
  if (!key) throw new CommandError("This file is not saved to the cloud yet, so it has no site. Publish it first.", "failed");
1085
1085
  return key;
1086
1086
  }
1087
1087
  async function formsWithoutDatabase(key) {
1088
- const [{ useEditorStore }, { usesForms, formsGoNowhere }, { siteBackend }] = await Promise.all([import("./editor-store-OIHZT244.js"), import("./backend-HMDYWKKL.js"), import("./integrations-U5X2BHVK.js")]);
1088
+ const [{ useEditorStore }, { usesForms, formsGoNowhere }, { siteBackend }] = await Promise.all([import("./editor-store-C4VWC23J.js"), import("./backend-HMDYWKKL.js"), import("./integrations-LPC35FKX.js")]);
1089
1089
  const doc2 = useEditorStore.getState().document;
1090
1090
  if (!usesForms(doc2)) return false;
1091
1091
  return formsGoNowhere(doc2, await siteBackend(key).catch(() => void 0));
@@ -1121,7 +1121,7 @@ var publishSite = defineCommand({
1121
1121
  const { cleanSlug } = await import("./rules-YTGQFWTU.js");
1122
1122
  const address = p.address === void 0 ? void 0 : cleanSlug(p.address);
1123
1123
  if (address === null) throw new CommandError("That cannot be a site address: use 3 to 40 letters, digits and dashes.", "invalid_params");
1124
- const { publishOpenFile, NoScreens } = await import("./publish-site-WFIX42D3.js");
1124
+ const { publishOpenFile, NoScreens } = await import("./publish-site-R46ZILSS.js");
1125
1125
  try {
1126
1126
  const done = await publishOpenFile(address);
1127
1127
  ctx.notice(`Published version ${done.version}: ${done.url}`);
@@ -1176,7 +1176,7 @@ var publishListSites = defineCommand({
1176
1176
  },
1177
1177
  run: async (p) => {
1178
1178
  await signedIn();
1179
- const [{ workspaceSites }, { activeTeamWorkspaceId, useHyperyTeam }] = await Promise.all([import("./sites-W7OTY7KH.js"), import("./team-M2EN4JT5.js")]);
1179
+ const [{ workspaceSites }, { activeTeamWorkspaceId, useHyperyTeam }] = await Promise.all([import("./sites-W7OTY7KH.js"), import("./team-GGW3O32G.js")]);
1180
1180
  const workspaceId = p.workspaceId ?? activeTeamWorkspaceId() ?? useHyperyTeam.getState().personalWorkspaceId;
1181
1181
  if (!workspaceId) throw new CommandError("Your workspaces have not loaded yet. Try again in a moment.", "failed");
1182
1182
  const out = await workspaceSites(workspaceId);
@@ -1225,12 +1225,12 @@ var publishStatus = defineCommand({
1225
1225
  },
1226
1226
  run: async () => {
1227
1227
  await signedIn();
1228
- const [{ openFileKey }, { siteStatus }] = await Promise.all([import("./publish-site-WFIX42D3.js"), import("./sites-W7OTY7KH.js")]);
1228
+ const [{ openFileKey }, { siteStatus }] = await Promise.all([import("./publish-site-R46ZILSS.js"), import("./sites-W7OTY7KH.js")]);
1229
1229
  const key = openFileKey();
1230
1230
  const status = await siteStatus(key);
1231
1231
  const site = status.site;
1232
- const backend = key ? await (await import("./integrations-U5X2BHVK.js")).siteBackend(key).catch(() => null) : null;
1233
- const destinations = key ? await (await import("./integrations-U5X2BHVK.js")).listDestinations(key).catch(() => []) : [];
1232
+ const backend = key ? await (await import("./integrations-LPC35FKX.js")).siteBackend(key).catch(() => null) : null;
1233
+ const destinations = key ? await (await import("./integrations-LPC35FKX.js")).listDestinations(key).catch(() => []) : [];
1234
1234
  return {
1235
1235
  summary: !status.configured ? "This server does not publish websites" : !site ? "Not published yet" : site.currentVersion === null ? `Offline (${site.versions.length} versions kept) \u2014 ${site.url}` : `Version ${site.currentVersion} is online at ${site.url}`,
1236
1236
  data: { ...statusData(status), database: backend?.database ? { provider: backend.database.connection.provider, account: backend.database.connection.account, target: backend.database.target.map((t) => t.name), visitorsCanSignIn: backend.database.signIn } : null, destinations: destinations.map((d) => ({ destinationId: d.id, provider: d.connection.provider, account: d.connection.account, kind: d.capability, target: d.target.map((t) => t.name), lastSent: d.lastDeploy })) }
@@ -1261,7 +1261,7 @@ var publishStore = defineCommand({
1261
1261
  },
1262
1262
  run: async (p, ctx) => {
1263
1263
  await signedIn();
1264
- const { deployOpenStore } = await import("./publish-store-6BS7OIP4.js");
1264
+ const { deployOpenStore } = await import("./publish-store-MIPHEDLV.js");
1265
1265
  const done = await deployOpenStore(ctx.doc(), ctx.pageId(), { destinationId: p.destinationId }).catch((e) => {
1266
1266
  throw new CommandError(e instanceof Error ? e.message : String(e), "failed");
1267
1267
  });
@@ -1290,7 +1290,7 @@ var integrationList = defineCommand({
1290
1290
  }
1291
1291
  },
1292
1292
  run: async ({ capability }) => {
1293
- const [{ cloudUser }, { integrationsWorkspaceId, listWorkspaceIntegrations }] = await Promise.all([import("./session-FZCE76T4.js"), import("./integrations-U5X2BHVK.js")]);
1293
+ const [{ cloudUser }, { integrationsWorkspaceId, listWorkspaceIntegrations }] = await Promise.all([import("./session-FZCE76T4.js"), import("./integrations-LPC35FKX.js")]);
1294
1294
  if (!cloudUser()) throw new CommandError("You are not signed in: integrations belong to your account's workspace.", "denied");
1295
1295
  const workspaceId = integrationsWorkspaceId();
1296
1296
  if (!workspaceId) throw new CommandError("Your workspaces have not loaded yet. Try again in a moment.", "failed");
@@ -1331,7 +1331,7 @@ var integrationOpen = defineCommand({
1331
1331
  }
1332
1332
  });
1333
1333
  async function openFile() {
1334
- const [{ cloudUser }, { openFileKey }] = await Promise.all([import("./session-FZCE76T4.js"), import("./publish-site-WFIX42D3.js")]);
1334
+ const [{ cloudUser }, { openFileKey }] = await Promise.all([import("./session-FZCE76T4.js"), import("./publish-site-R46ZILSS.js")]);
1335
1335
  if (!cloudUser()) throw new CommandError("You are not signed in.", "denied");
1336
1336
  const key = openFileKey();
1337
1337
  if (!key) throw new CommandError("This file is not saved to the cloud yet. Publish it first (publish_site).", "failed");
@@ -1357,7 +1357,7 @@ var integrationListResources = defineCommand({
1357
1357
  }
1358
1358
  },
1359
1359
  run: async ({ connectionId, capability, path }) => {
1360
- const { listResources } = await import("./integrations-U5X2BHVK.js");
1360
+ const { listResources } = await import("./integrations-LPC35FKX.js");
1361
1361
  const list = await listResources(connectionId, capability, asPath2(path));
1362
1362
  return {
1363
1363
  summary: list.level ? `${list.resources.length} at the ${list.level.label.toLowerCase()} level${list.canCreate ? " (a new one can be made)" : ""}` : "Nothing further to pick: the path is complete",
@@ -1392,7 +1392,7 @@ var integrationAddDestination = defineCommand({
1392
1392
  },
1393
1393
  run: async (p, ctx) => {
1394
1394
  const key = await openFile();
1395
- const { addDestination, createDestination, createResource } = await import("./integrations-U5X2BHVK.js");
1395
+ const { addDestination, createDestination, createResource } = await import("./integrations-LPC35FKX.js");
1396
1396
  let made;
1397
1397
  if (p.create) made = await createDestination(key, p.capability, void 0, p.connectionId);
1398
1398
  else {
@@ -1429,7 +1429,7 @@ var integrationDeploy = defineCommand({
1429
1429
  },
1430
1430
  run: async (p, ctx) => {
1431
1431
  const key = await openFile();
1432
- const { deployDestination, listDestinations } = await import("./integrations-U5X2BHVK.js");
1432
+ const { deployDestination, listDestinations } = await import("./integrations-LPC35FKX.js");
1433
1433
  const all = await listDestinations(key);
1434
1434
  const dest = p.destinationId ? all.find((d) => d.id === p.destinationId) : all.length === 1 ? all[0] : void 0;
1435
1435
  if (!dest) throw new CommandError(all.length ? `Say which destination: ${all.map((d) => `${d.id} (${d.target.map((t) => t.name).join(" / ")})`).join(", ")}.` : "This file has no destination yet. Add one first (add_site_destination).", "invalid_params");
@@ -1463,7 +1463,7 @@ var integrationAttachDatabase = defineCommand({
1463
1463
  },
1464
1464
  run: async (p, ctx) => {
1465
1465
  const key = await openFile();
1466
- const { attachDatabase, createDatabase, createResource, listResources } = await import("./integrations-U5X2BHVK.js");
1466
+ const { attachDatabase, createDatabase, createResource, listResources } = await import("./integrations-LPC35FKX.js");
1467
1467
  if (p.create) return attached(await createDatabase(key, void 0, p.connectionId), ctx);
1468
1468
  if (!p.connectionId || !p.target) throw new CommandError("Say connectionId and target, or create: true.", "invalid_params");
1469
1469
  let target = asPath2(p.target);
@@ -1502,7 +1502,7 @@ var integrationSubmissions = defineCommand({
1502
1502
  },
1503
1503
  run: async ({ form, limit }) => {
1504
1504
  const key = await openFile();
1505
- const { listSubmissions } = await import("./integrations-U5X2BHVK.js");
1505
+ const { listSubmissions } = await import("./integrations-LPC35FKX.js");
1506
1506
  const rows = await listSubmissions(key, { form, limit: limit ?? 20 });
1507
1507
  return { summary: rows.length ? `${rows.length} ${rows.length === 1 ? "submission" : "submissions"}, the newest ${new Date(rows[0].createdAt).toISOString()}` : "Nothing has been sent yet", data: { submissions: rows } };
1508
1508
  }
@@ -1527,7 +1527,7 @@ var integrationSetSignIn = defineCommand({
1527
1527
  },
1528
1528
  run: async ({ on }, ctx) => {
1529
1529
  const key = await openFile();
1530
- const { setSignIn } = await import("./integrations-U5X2BHVK.js");
1530
+ const { setSignIn } = await import("./integrations-LPC35FKX.js");
1531
1531
  const done = await setSignIn(key, on);
1532
1532
  ctx.notice(on ? "Visitors can sign in." : "Sign-in is off.");
1533
1533
  return { summary: on ? "Visitors can now create accounts and sign in on the published site" : "Sign-in is off for the published site", data: { signIn: !!done.database?.signIn } };
@@ -1539,7 +1539,7 @@ var integrationConfirmCommands = [integrationAddDestination, integrationDeploy,
1539
1539
  init_define_POPCRAFT_COMPONENT_IDS();
1540
1540
  async function cloudFile() {
1541
1541
  const [{ syncStatus }, { cloudUser }] = await Promise.all([
1542
- import("./sync-IJNKHQRF.js"),
1542
+ import("./sync-OFINS45Q.js"),
1543
1543
  import("./session-FZCE76T4.js")
1544
1544
  ]);
1545
1545
  const link2 = syncStatus().link;
@@ -1691,11 +1691,11 @@ var fileDuplicate = defineCommand({
1691
1691
  },
1692
1692
  run: async (_p, ctx) => {
1693
1693
  const [{ syncStatus }, { cloudApi }, { isDesktopTabs }, { createFileInTab }, { openNewCloudFile }, { v4: uuid }] = await Promise.all([
1694
- import("./sync-IJNKHQRF.js"),
1694
+ import("./sync-OFINS45Q.js"),
1695
1695
  import("./api-GWG3RH2R.js"),
1696
1696
  import("./tab-mode-H7FXWBQN.js"),
1697
- import("./tabs-G6OTEGA5.js"),
1698
- import("./sync-IJNKHQRF.js"),
1697
+ import("./tabs-PEH6VX3X.js"),
1698
+ import("./sync-OFINS45Q.js"),
1699
1699
  import("./dist-node-PFCYBZF7.js")
1700
1700
  ]);
1701
1701
  const doc2 = ctx.doc();
@@ -4311,7 +4311,7 @@ var viewCopyLink = defineCommand({
4311
4311
  },
4312
4312
  run: async (args, ctx) => {
4313
4313
  const [{ syncStatus }, { fileUrl }, { withDeepLink }] = await Promise.all([
4314
- import("./sync-IJNKHQRF.js"),
4314
+ import("./sync-OFINS45Q.js"),
4315
4315
  import("./api-GWG3RH2R.js"),
4316
4316
  import("./deep-link-2GZ3XM5I.js")
4317
4317
  ]);
@@ -4636,7 +4636,7 @@ var pageGo = defineCommand({
4636
4636
  ] }
4637
4637
  },
4638
4638
  run: async ({ to }) => {
4639
- const { useEditorStore } = await import("./editor-store-OIHZT244.js");
4639
+ const { useEditorStore } = await import("./editor-store-C4VWC23J.js");
4640
4640
  useEditorStore.getState().goToPrintPage(to);
4641
4641
  return { summary: typeof to === "number" ? `Page ${to + 1}` : `${to} page` };
4642
4642
  }
@@ -4670,7 +4670,7 @@ var pageSetup = defineCommand({
4670
4670
  }
4671
4671
  },
4672
4672
  run: async (args) => {
4673
- const { useEditorStore } = await import("./editor-store-OIHZT244.js");
4673
+ const { useEditorStore } = await import("./editor-store-C4VWC23J.js");
4674
4674
  useEditorStore.getState().applyPageSetup(args);
4675
4675
  return { summary: `Page setup updated${args.kind ? ` (${args.kind.toLowerCase()})` : ""}` };
4676
4676
  }
@@ -5429,7 +5429,7 @@ async function docAtTime(doc2, ids, time2) {
5429
5429
  let frameId;
5430
5430
  if (time2 === void 0) {
5431
5431
  try {
5432
- const { useEditorStore } = await import("./editor-store-OIHZT244.js");
5432
+ const { useEditorStore } = await import("./editor-store-C4VWC23J.js");
5433
5433
  const st = useEditorStore.getState();
5434
5434
  const target = st.transport?.target;
5435
5435
  if (st.mode !== "ANIMATE" || target?.kind !== "frame") return doc2;
@@ -5807,7 +5807,7 @@ async function runAnimationExport(format, args, ctx) {
5807
5807
  const filename = exportFileName(args.filename || targetName(doc2, target), format);
5808
5808
  const [{ exportAnimation }, { memoryDestination }] = await Promise.all([import("./video-7B5R5APU.js"), import("./destination-HXYQZTLQ.js")]);
5809
5809
  if (format === "lottie" || format === "dotlottie") return runLottieExport(renderer, doc2, spec, filename, ctx, memoryDestination, args.stateMachine);
5810
- const planWatermark = format !== "png" && await (await import("./export-watermark-4NAP5RVM.js")).exportWatermark();
5810
+ const planWatermark = format !== "png" && await (await import("./export-watermark-OKGRZNOU.js")).exportWatermark();
5811
5811
  if (format !== "png") spec = { ...spec, watermark: planWatermark || args.watermark !== false };
5812
5812
  const dest = ctx.destination ? await ctx.destination(filename, FORMAT_MIME[format]) : memoryDestination(filename, FORMAT_MIME[format]);
5813
5813
  let stats;
@@ -5893,7 +5893,7 @@ var exportLottie = animationCommand((args) => args.container === "lottie" ? "dot
5893
5893
  });
5894
5894
  async function exportSite(doc2, pageId2, packaging, styling = "css", siteUrl) {
5895
5895
  const [{ completeSite, nextFilesOf, shareImageFiles, staticFilesOf, NoSiteRuntime, bytesOf }, { fileBase }, { zipFiles }, { downloadBlob }] = await Promise.all([
5896
- import("./project-EG7XFEJU.js"),
5896
+ import("./project-NMPK4R5M.js"),
5897
5897
  import("./web-QXDK5GSS.js"),
5898
5898
  import("./zip-export-QEIUQPMP.js"),
5899
5899
  import("./download-P52YK7FC.js")
@@ -5982,7 +5982,7 @@ var exportStorefront = defineCommand({
5982
5982
  const [{ storefrontInputs }, { STOREFRONT_TARGETS }, { bytesOf }, { fileBase, flatten }, { zipFiles }, { downloadBlob }] = await Promise.all([
5983
5983
  import("./storefront-prepare-N6SPU7SQ.js"),
5984
5984
  import("./storefront-QILVHEM6.js"),
5985
- import("./project-EG7XFEJU.js"),
5985
+ import("./project-NMPK4R5M.js"),
5986
5986
  import("./web-QXDK5GSS.js"),
5987
5987
  import("./zip-export-QEIUQPMP.js"),
5988
5988
  import("./download-P52YK7FC.js")
@@ -6377,7 +6377,7 @@ var visionRegenerateImage = defineCommand({
6377
6377
  const id = args.id ?? ctx.selection()[0];
6378
6378
  if (!id) throw new ToolError("Select a generated image to regenerate.");
6379
6379
  nodeOrThrow(ctx.doc(), id);
6380
- const { regenerateImage } = await import("./client-actions-SSUZUEG7.js");
6380
+ const { regenerateImage } = await import("./client-actions-3HIRRSOL.js");
6381
6381
  regenerateImage(id, args.count);
6382
6382
  return { summary: args.count > 1 ? `Regenerating ${args.count} variants` : "Regenerating the image", data: { id, count: args.count } };
6383
6383
  }
@@ -9343,7 +9343,7 @@ var designWriteScript = defineCommand({
9343
9343
  if (args.frame && !target) throw new ToolError(`"${args.frame}" is not part of a design built from a script. Leave out \`frame\` to make a new one.`);
9344
9344
  const prev = target?.designScript;
9345
9345
  if (target && prev && !args.discardEdits) {
9346
- const { hashRoots } = await import("./build-K6QBTLT7.js");
9346
+ const { hashRoots } = await import("./build-W5O2ZVN7.js");
9347
9347
  if (hashRoots(doc2, prev.roots) !== prev.builtHash) {
9348
9348
  throw new ToolError(`"${target.name}" was edited by hand since its script built it, and a rebuild would lose those edits. Either make the change with editing tools, fold the edits into the script, or pass discardEdits: true.`);
9349
9349
  }
@@ -9351,7 +9351,7 @@ var designWriteScript = defineCommand({
9351
9351
  const size2 = args.size ?? prev?.size;
9352
9352
  if (!size2) throw new ToolError('Give the size to build at: a preset id like "ig-story" or "web-desktop", or { width, height }.');
9353
9353
  const name2 = args.name ?? target?.name ?? "Design";
9354
- const { buildDesign, placeDesign, templateOfBuild } = await import("./build-K6QBTLT7.js");
9354
+ const { buildDesign, placeDesign, templateOfBuild } = await import("./build-W5O2ZVN7.js");
9355
9355
  const built = await buildDesign(args.script, size2, name2, designRecorder());
9356
9356
  if (built.error) throw new ToolError(scriptError(args.script, built.error));
9357
9357
  if (!built.doc) throw new ToolError("The script built nothing.");
@@ -9423,7 +9423,7 @@ var designGetScript = defineCommand({
9423
9423
  if (!start2) throw new ToolError("Select a design, or name its frame.");
9424
9424
  const target = designFrameOf(doc2, start2);
9425
9425
  if (!target?.designScript) throw new ToolError(`"${doc2.nodes[start2]?.name ?? start2}" was not built from a script.`);
9426
- const { hashRoots } = await import("./build-K6QBTLT7.js");
9426
+ const { hashRoots } = await import("./build-W5O2ZVN7.js");
9427
9427
  const s = target.designScript;
9428
9428
  const editedByHand = hashRoots(doc2, s.roots) !== s.builtHash;
9429
9429
  return {
@@ -9536,7 +9536,7 @@ var scriptRun = defineCommand({
9536
9536
  // A script is not the turn the user is watching: confirm-tier tools are refused inside it (dispatch, `nested`).
9537
9537
  actor: { ...ctx.actor, nested: true, label: "Script" },
9538
9538
  // A look_at inside the script sees the document as the script has left it so far, not as it was before.
9539
- use: ((name2) => name2 === "render" && ctx.can("render") ? (async (ids, options) => (await import("./agent-45ZGYKTC.js")).renderDocument(staged, ids, options)) : ctx.use(name2))
9539
+ use: ((name2) => name2 === "render" && ctx.can("render") ? (async (ids, options) => (await import("./agent-NTEAEZBN.js")).renderDocument(staged, ids, options)) : ctx.use(name2))
9540
9540
  };
9541
9541
  let calls = 0;
9542
9542
  const images = [];
@@ -10356,7 +10356,7 @@ var docImportFile = defineCommand({
10356
10356
  const file = new File([body], args.name);
10357
10357
  if (file.size > MAX_BYTES) throw new ToolError(`"${args.name}" is larger than ${MAX_BYTES / 1024 / 1024} MB.`);
10358
10358
  const [{ buildImportedDocument }, { mergeImportedDocument }] = await Promise.all([
10359
- import("./plugin-import-3ISLDX7T.js"),
10359
+ import("./plugin-import-UC5BHZFE.js"),
10360
10360
  import("./import-merge-KVTO4W42.js")
10361
10361
  ]);
10362
10362
  const built = await buildImportedDocument(file);
@@ -0,0 +1,121 @@
1
+ import { createRequire as __popcraftRequire } from 'node:module';
2
+ import { fileURLToPath as __popcraftPath } from 'node:url';
3
+ import { dirname as __popcraftDirname } from 'node:path';
4
+ const require = __popcraftRequire(import.meta.url);
5
+ const __filename = __popcraftPath(import.meta.url);
6
+ const __dirname = __popcraftDirname(__filename);
7
+ import {
8
+ archPath,
9
+ crescent,
10
+ disc,
11
+ draw,
12
+ eightStar,
13
+ fanous,
14
+ polyP,
15
+ printVariant,
16
+ starPath,
17
+ tilePattern
18
+ } from "./chunk-AISWLDDO.js";
19
+ import {
20
+ SERIF
21
+ } from "./chunk-X23ZWFW2.js";
22
+ import {
23
+ defineTemplate
24
+ } from "./chunk-A44WEVKR.js";
25
+ import {
26
+ Kit,
27
+ preset
28
+ } from "./chunk-T3SGRYUX.js";
29
+ import {
30
+ init_define_POPCRAFT_COMPONENT_IDS
31
+ } from "./chunk-6VMOKHMF.js";
32
+
33
+ // templates/src/print/holidays-eid-gift-tags.ts
34
+ init_define_POPCRAFT_COMPONENT_IDS();
35
+ var NAME = "Eid gift tags sheet";
36
+ var TW = 158;
37
+ var TH = 256;
38
+ var PAD = { top: 60, right: 48, bottom: 44, left: 48 };
39
+ var DESIGNS = ["Lantern", "Crescent", "Star", "Arch"];
40
+ var LOOK = {
41
+ Lantern: { tag: "mint", ink: "tealInk", art: "gold", art2: "tealInk" },
42
+ Crescent: { tag: "teal", ink: "sand", art: "gold", art2: "sand" },
43
+ Star: { tag: "lilac", ink: "plumInk", art: "gold", art2: "plumInk" },
44
+ Arch: { tag: "sand", ink: "tealInk", art: "teal", art2: "gold" }
45
+ };
46
+ var tagShape = () => polyP([{ x: 28, y: 0 }, { x: TW - 28, y: 0 }, { x: TW, y: 28 }, { x: TW, y: TH }, { x: 0, y: TH }, { x: 0, y: 28 }]);
47
+ function picture(d, cx, cy) {
48
+ const L = LOOK[d];
49
+ if (d === "Lantern") {
50
+ const f = fanous(cx, cy - 46, 92);
51
+ return [{ name: "Lantern glass", paths: f.glass, color: "amber" }, { name: "Lantern frame", paths: f.frame, color: L.art2, o: { strokeWidth: 1.2 } }, { name: "Lantern", paths: f.metal, color: L.art }];
52
+ }
53
+ if (d === "Crescent") return [{ name: "Crescent", paths: [crescent(cx - 4, cy, 34, 0.5, 1, -0.5)], color: L.art }, { name: "Star", paths: [starPath(cx + 22, cy - 16, 9, 3.6)], color: L.art }, { name: "Little stars", paths: [starPath(cx - 30, cy + 30, 4, 1.6), starPath(cx + 30, cy + 26, 3, 1.2)], color: L.art2 }];
54
+ if (d === "Star") return [{ name: "Big star", paths: [eightStar(cx, cy, 36)], color: L.art }, { name: "Star heart", paths: [eightStar(cx, cy, 20)], color: L.tag }, { name: "Star dot", paths: [disc(cx, cy, 8)], color: L.art2 }];
55
+ return [{ name: "Window", paths: [archPath(cx, 64, cy + 40, cy - 6, cy - 50)], color: L.art }, { name: "Window light", paths: [archPath(cx, 44, cy + 32, cy, cy - 34)], color: "amber" }, { name: "Sill", paths: [polyP([{ x: cx - 40, y: cy + 40 }, { x: cx + 40, y: cy + 40 }, { x: cx + 34, y: cy + 48 }, { x: cx - 34, y: cy + 48 }])], color: L.art2 }];
56
+ }
57
+ function border(w, h) {
58
+ const B = 12, band = 30;
59
+ const place = (x0, y0, x1, y1) => {
60
+ const t = tilePattern(x1 - x0, y1 - y0, 30);
61
+ return t.stars.map((p) => ({ ...p, points: p.points.map((q) => ({ ...q, x: q.x + x0, y: q.y + y0 })) }));
62
+ };
63
+ return [
64
+ { name: "Border", paths: place(-B, -B, w + B, band), color: "border" },
65
+ { name: "Border", paths: place(-B, h - band, w + B, h + B), color: "border" }
66
+ ];
67
+ }
68
+ var holidays_eid_gift_tags_default = defineTemplate({
69
+ id: "print-holidays-eid-gift-tags",
70
+ meta: {
71
+ name: NAME,
72
+ description: "Twelve Eid gift tags for Eidi envelopes and presents on one sheet: tall tags with clipped corners and a ribbon hole in mint, lilac, sand and deep teal, each with a lantern, a crescent and star, an eight-pointed star or an arched window, a greeting and \u201CTo\u201D and \u201CFrom\u201D lines. One component set, so a colour change reaches every tag. US Letter with bleed, and an A4 copy",
73
+ category: "sticker",
74
+ tags: ["eid", "eid al-fitr", "eid al-adha", "eid mubarak", "eidi", "gift tags", "labels", "presents", "lantern", "crescent", "islamic geometric", "printable", "diy", "print"],
75
+ platforms: ["print"],
76
+ formats: ["card"],
77
+ useCases: ["greeting"],
78
+ created: "2026-10-10",
79
+ updated: "2026-10-10"
80
+ },
81
+ stableNumbers: true,
82
+ build() {
83
+ const k = new Kit(NAME, preset("us-letter"));
84
+ k.quantizeGeometry = true;
85
+ k.brand(
86
+ { paper: "#FBF7EF", text: "#123F45", onPaper: "#5A6E6F", primary: "#1C5A63", onPrimary: "#FFFFFF" },
87
+ { name: "The Siddiqui family" }
88
+ );
89
+ k.palette({ mint: "#CFEAD9", teal: "#1C5A63", lilac: "#DCCDEE", sand: "#F1E2C4", gold: "#D9A93E", amber: "#F2B54A", tealInk: "#123F45", plumInk: "#40285E", border: "#E3D4AE" });
90
+ k.textStyle("Head 30", { ...SERIF, size: 30, fontWeight: 600, letterSpacing: -0.4, lineHeight: 34 });
91
+ k.textStyle("Note 11", { size: 11, fontWeight: 500, lineHeight: 16 });
92
+ k.textStyle("Greeting 17", { ...SERIF, size: 17, fontWeight: 700, lineHeight: 21 });
93
+ k.textStyle("Tag word 8.5", { size: 8.5, fontWeight: 700, letterSpacing: 1.8, lineHeight: 15 });
94
+ k.variantSet("Eid tag", "Design", DESIGNS, { width: TW, height: TH, padding: { top: 150, right: 14, bottom: 16, left: 14 }, gap: 4, align: "CENTER", props: { Greeting: "Eid Mubarak", To: "TO: ____________", From: "FROM: __________" } }, (d, id) => {
95
+ const L = LOOK[d];
96
+ k.vector(id, TW, TH, [tagShape()], L.tag, { name: "Tag", absolute: { x: 0, y: 0 } });
97
+ k.vector(id, 14, 14, [disc(7, 7, 7)], "paper", { name: "Ribbon hole", absolute: { x: TW / 2 - 7, y: 14 } });
98
+ k.vector(id, 20, 20, [disc(10, 10, 10)], [], { name: "Hole ring", absolute: { x: TW / 2 - 10, y: 11 }, stroke: { color: L.art, width: 1.4 } });
99
+ draw(k, id, picture(d, TW / 2, 92));
100
+ k.propText(id, "Greeting", { style: "Greeting 17", color: L.ink, align: "CENTER", width: "FILL", name: "Greeting" });
101
+ k.propText(id, "To", { style: "Tag word 8.5", color: L.ink, align: "CENTER", width: "FILL", name: "To" });
102
+ k.propText(id, "From", { style: "Tag word 8.5", color: L.ink, align: "CENTER", width: "FILL", name: "From" });
103
+ });
104
+ const sheet = k.sheet;
105
+ const { width: W, height: H } = k.node(sheet);
106
+ k.flowSheet(sheet, 18, PAD, "paper", "MIN", "CENTER");
107
+ draw(k, sheet, border(W, H));
108
+ k.text(sheet, "Eid gift tags", { style: "Head 30", color: "text", align: "CENTER", width: "FILL", name: "Title" });
109
+ const grid = k.stack(sheet, { direction: "HORIZONTAL", wrap: true, gap: 18, width: "FILL", justify: "CENTER", name: "Tags" });
110
+ k.patch(grid, { counterAxisSpacing: 18 });
111
+ const greet = ["Eid Mubarak", "Eid Saeed", "Your Eidi!", "With love", "Eid Mubarak", "For you", "Happy Eid", "Eid Mubarak", "Eid Saeed", "With love", "Your Eidi!", "Happy Eid"];
112
+ greet.forEach((g, i) => k.instance(grid, `Eid tag/${DESIGNS[(i + Math.floor(i / 4)) % 4]}`, { Greeting: g }, { name: "Eid tag" }));
113
+ k.text(sheet, "Print on card, cut round each tag, punch the hole and thread a ribbon. From {{brand.name}}", { style: "Note 11", color: "text", align: "CENTER", width: "FILL", name: "Note" });
114
+ k.variants(sheet, [printVariant("a4", { art: border, pad: PAD, masterWidth: W })]);
115
+ return k.finish();
116
+ }
117
+ });
118
+
119
+ export {
120
+ holidays_eid_gift_tags_default
121
+ };
@@ -0,0 +1,140 @@
1
+ import { createRequire as __popcraftRequire } from 'node:module';
2
+ import { fileURLToPath as __popcraftPath } from 'node:url';
3
+ import { dirname as __popcraftDirname } from 'node:path';
4
+ const require = __popcraftRequire(import.meta.url);
5
+ const __filename = __popcraftPath(import.meta.url);
6
+ const __dirname = __popcraftDirname(__filename);
7
+ import {
8
+ cloudCurl,
9
+ coin,
10
+ disc,
11
+ draw,
12
+ firecrackers,
13
+ plum,
14
+ redLantern,
15
+ redraw,
16
+ restyleAll,
17
+ scaleGaps,
18
+ starPath
19
+ } from "./chunk-AISWLDDO.js";
20
+ import {
21
+ SERIF
22
+ } from "./chunk-X23ZWFW2.js";
23
+ import {
24
+ verticalPadding
25
+ } from "./chunk-EK5CFFJO.js";
26
+ import {
27
+ defineTemplate
28
+ } from "./chunk-A44WEVKR.js";
29
+ import {
30
+ Kit,
31
+ preset
32
+ } from "./chunk-T3SGRYUX.js";
33
+ import {
34
+ init_define_POPCRAFT_COMPONENT_IDS
35
+ } from "./chunk-6VMOKHMF.js";
36
+
37
+ // templates/src/social/holidays-lunar-new-year-bakery-post.ts
38
+ init_define_POPCRAFT_COMPONENT_IDS();
39
+ var NAME = "Lunar New Year bakery post";
40
+ function art(w, h, safe = { top: 0, bottom: 0 }) {
41
+ const s = w / 1080;
42
+ const fl = firecrackers(40 * s, -10, 9, 60 * s);
43
+ const mx = w - 250 * s, my = h - 260 * s - safe.bottom * 0.4, R = 210 * s;
44
+ const ring = Array.from({ length: 10 }, (_, i) => {
45
+ const a = i * Math.PI / 5;
46
+ return plum(mx + Math.cos(a) * R * 0.7, my + Math.sin(a) * R * 0.7, 34 * s, a);
47
+ });
48
+ const coins = [0, 1, 2, 3].map((i) => coin(mx + Math.cos(i * Math.PI / 2 + Math.PI / 4) * R * 0.32, my + Math.sin(i * Math.PI / 2 + Math.PI / 4) * R * 0.32, 26 * s));
49
+ const top = safe.top * 0.6;
50
+ const lanterns = [[0.75, 150, 110], [0.87, 70, 150], [0.97, 200, 100]].map(([x, drop, lw]) => redLantern(w * x, -10, lw * s, top + drop * s));
51
+ const clouds = [...cloudCurl(70 * s, h - 96 * s - safe.bottom * 0.4, 230 * s, 1), ...cloudCurl(300 * s, h - 60 * s - safe.bottom * 0.4, 170 * s, 1)];
52
+ const lantern = { body: lanterns.flatMap((l) => l.body), ribs: lanterns.flatMap((l) => l.ribs), caps: lanterns.flatMap((l) => l.caps), tassel: lanterns.flatMap((l) => l.tassel), cord: lanterns.flatMap((l) => l.cord) };
53
+ const sparks = [[0.3, 0.06], [0.52, 0.04], [0.62, 0.09]].map(([x, y]) => starPath(w * x, safe.top * 0.6 + h * y * (1350 / h), 10 * s, 4 * s, 4));
54
+ return [
55
+ { name: "Firecracker cords", paths: fl.cord, color: "gold", o: { strokeWidth: 3 * s } },
56
+ { name: "Firecrackers", paths: fl.crackers, color: "red" },
57
+ { name: "Firecracker tips", paths: fl.tips, color: "gold" },
58
+ { name: "Sparks", paths: sparks, color: "gold" },
59
+ { name: "Medallion", paths: [disc(mx, my, R)], color: "red" },
60
+ { name: "Medallion rim", paths: [disc(mx, my, R * 0.93)], color: "gold", o: { strokeWidth: 4 * s } },
61
+ { name: "Cut blossoms", paths: ring.flatMap((p) => p.petals), color: "cream" },
62
+ { name: "Blossom hearts", paths: ring.flatMap((p) => p.heart), color: "gold" },
63
+ { name: "Coins", paths: coins.flatMap((c) => c.coin), color: "gold" },
64
+ { name: "Coin holes", paths: coins.flatMap((c) => c.hole), color: "red" },
65
+ { name: "Lantern cords", paths: lantern.cord, color: "gold", o: { strokeWidth: 2.4 * s } },
66
+ { name: "Lantern", paths: lantern.body, color: "red" },
67
+ { name: "Lantern ribs", paths: lantern.ribs, color: "gold", o: { strokeWidth: 2 * s } },
68
+ { name: "Lantern caps", paths: [...lantern.caps, ...lantern.tassel], color: "gold" },
69
+ { name: "Clouds", paths: clouds, color: "red", o: { strokeWidth: 5 * s } }
70
+ ];
71
+ }
72
+ var holidays_lunar_new_year_bakery_post_default = defineTemplate({
73
+ id: "social-holidays-lunar-new-year-bakery-post",
74
+ meta: {
75
+ name: NAME,
76
+ description: "A neighbourhood bakery\u2019s Lunar New Year post in red and gold papercut on cream: firecrackers down both edges, a papercut medallion of plum blossom and coins with a red lantern, \u201CNew Year treats are here\u201D in a heavy red serif, three treats with prices and the days the bakery closes to celebrate. 4:5 for the feed and 9:16 for stories",
77
+ category: "social",
78
+ tags: ["lunar new year", "chinese new year", "spring festival", "bakery", "pineapple tarts", "holiday hours", "small business", "papercut", "red and gold", "lantern", "instagram", "story", "post"],
79
+ platforms: ["instagram", "facebook"],
80
+ formats: ["portrait-post", "story"],
81
+ useCases: ["sale", "announcement"],
82
+ created: "2026-10-10",
83
+ updated: "2026-10-10"
84
+ },
85
+ stableNumbers: true,
86
+ build() {
87
+ const k = new Kit(NAME, preset("ig-portrait"));
88
+ k.quantizeGeometry = true;
89
+ k.brand(
90
+ { paper: "#FFF3DC", text: "#3A1410", onPaper: "#A50F23", primary: "#C8102E", onPrimary: "#FFF3DC", line: "#EBCB9A" },
91
+ { name: "Lucky Star Bakery", site: "luckystarbakery.com" }
92
+ );
93
+ k.palette({ red: "#C8102E", gold: "#E2A72E", cream: "#FFF3DC" });
94
+ k.textStyle("Kicker 26", { size: 26, fontWeight: 800, letterSpacing: 5, lineHeight: 34 });
95
+ k.textStyle("Title 100", { ...SERIF, size: 100, fontWeight: 800, letterSpacing: -2.8, lineHeight: 96 });
96
+ k.textStyle("Treat 31", { ...SERIF, size: 31, fontWeight: 600, lineHeight: 38 });
97
+ k.textStyle("Price 31", { size: 31, fontWeight: 800, lineHeight: 38, fontFeatures: { tnum: 1 } });
98
+ k.textStyle("Foot 26", { size: 26, fontWeight: 800, lineHeight: 34 });
99
+ k.textStyle("Body 26", { size: 26, fontWeight: 500, lineHeight: 35 });
100
+ k.component("Treat", { direction: "HORIZONTAL", gap: 20, width: 560, justify: "SPACE_BETWEEN", padding: { top: 10, right: 0, bottom: 10, left: 0 }, props: { Treat: "Treat", Price: "$0" } }, (id) => {
101
+ k.propText(id, "Treat", { style: "Treat 31", color: "text", autoWidth: true, name: "Treat name" });
102
+ k.propText(id, "Price", { style: "Price 31", color: "onPaper", autoWidth: true, name: "Treat price" });
103
+ });
104
+ const sheet = k.sheet;
105
+ const { width: W, height: H } = k.node(sheet);
106
+ k.flowSheet(sheet, 0, { top: 150, right: 436, bottom: 90, left: 84 }, "paper", "MIN", "MIN");
107
+ draw(k, sheet, art(W, H));
108
+ k.text(sheet, "GONG HEI FAT CHOY", { style: "Kicker 26", color: "onPaper", width: "FILL", name: "Kicker" });
109
+ k.stack(sheet, { height: 14, name: "Gap" });
110
+ k.text(sheet, "New Year treats are here", { style: "Title 100", color: "onPaper", width: "FILL", name: "Title" });
111
+ k.stack(sheet, { height: 26, name: "Gap" });
112
+ const list = k.stack(sheet, { width: 560, name: "Treats" });
113
+ for (const [i, [n, p]] of [["Pineapple tarts, box of 12", "$16"], ["Almond cookies, tin", "$12"], ["Nian gao, coconut", "$9"]].entries()) {
114
+ k.instance(list, "Treat", { Treat: n, Price: p }, { name: "Treat", width: "FILL" });
115
+ if (i < 2) k.rect(list, "FILL", 2, "line", { name: "Rule" });
116
+ }
117
+ k.stack(sheet, { height: 22, name: "Gap" });
118
+ k.text(sheet, "Closed Saturday 6 and Sunday 7 February to celebrate with our families. Pre-order by the 4th.", { style: "Body 26", color: "text", width: "FILL", name: "Body" });
119
+ k.stack(sheet, { height: 14, name: "Gap" });
120
+ k.text(sheet, "{{brand.name}} \xB7 {{brand.site}}", { style: "Foot 26", color: "onPaper", width: "FILL", name: "Foot" });
121
+ k.textStyle("Title 112", { ...SERIF, size: 112, fontWeight: 800, letterSpacing: -3, lineHeight: 106 });
122
+ const story = {
123
+ preset: "ig-story",
124
+ adjust: (kit, id) => {
125
+ const { width: w, height: h } = kit.node(id);
126
+ const safe = verticalPadding(84);
127
+ redraw(kit, id, art(w, h, { top: safe.top - 84, bottom: safe.bottom - 84 }));
128
+ kit.patch(id, { padding: { top: safe.top + 60, right: w - safe.left - 560, bottom: safe.bottom, left: safe.left } });
129
+ restyleAll(kit, id, [["Title", "Title 112"]]);
130
+ scaleGaps(kit, id, 1.3);
131
+ }
132
+ };
133
+ k.variants(sheet, [story]);
134
+ return k.finish();
135
+ }
136
+ });
137
+
138
+ export {
139
+ holidays_lunar_new_year_bakery_post_default
140
+ };