@popcraft/kit 0.30.0 → 0.32.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 (201) hide show
  1. package/dist/chunks/{agent-CGSIEC2R.js → agent-LNZDZLDR.js} +1 -1
  2. package/dist/chunks/{build-AUXXY3JX.js → build-AKMRSWRB.js} +2 -2
  3. package/dist/chunks/{builtin-Q5UN4DWS.js → builtin-KY56DU2Y.js} +3 -3
  4. package/dist/chunks/{check-template-2EKU4JL7.js → check-template-OYCBJNDF.js} +2 -2
  5. package/dist/chunks/{chunk-YT6TGRM4.js → chunk-2PEG56PC.js} +40 -26
  6. package/dist/chunks/{chunk-KOKO3HTP.js → chunk-3NI5OGFT.js} +1 -1
  7. package/dist/chunks/{chunk-TQPKOPCW.js → chunk-3ZO43HDI.js} +2 -2
  8. package/dist/chunks/{chunk-MJ6VIF3D.js → chunk-4X5G4QPZ.js} +1 -1
  9. package/dist/chunks/{chunk-3MAEAHID.js → chunk-6CRT7IDI.js} +2 -2
  10. package/dist/chunks/chunk-6S72I27Z.js +194 -0
  11. package/dist/chunks/chunk-7DKGI65Y.js +305 -0
  12. package/dist/chunks/chunk-APBRV4W6.js +71 -0
  13. package/dist/chunks/{chunk-AN3H4JWT.js → chunk-APVJKUJP.js} +4 -4
  14. package/dist/chunks/chunk-CGNNKKW7.js +70 -0
  15. package/dist/chunks/{chunk-IPEOO7PN.js → chunk-CKBPEGTH.js} +2 -2
  16. package/dist/chunks/chunk-COJM27N2.js +73 -0
  17. package/dist/chunks/chunk-CVB5F7FJ.js +92 -0
  18. package/dist/chunks/{chunk-DVX7UAKA.js → chunk-DQ7AF2R5.js} +1 -1
  19. package/dist/chunks/{chunk-UHQTNURS.js → chunk-DVD56API.js} +5 -5
  20. package/dist/chunks/{chunk-UM6QUOOH.js → chunk-DZIPU2Q4.js} +3 -3
  21. package/dist/chunks/{chunk-7QYQVENQ.js → chunk-FC2FGSU2.js} +5 -5
  22. package/dist/chunks/{chunk-T2GF6JE3.js → chunk-GAZ57RX2.js} +1 -1
  23. package/dist/chunks/{chunk-R3D5OMSG.js → chunk-GF6N47NL.js} +1 -1
  24. package/dist/chunks/{chunk-3DNAX4HN.js → chunk-HBPURYPZ.js} +2 -2
  25. package/dist/chunks/{chunk-7J4MGACN.js → chunk-HN2A65AT.js} +10 -10
  26. package/dist/chunks/{chunk-HST5H23G.js → chunk-JRQ4ZPRK.js} +1 -1
  27. package/dist/chunks/chunk-LP7LPUQJ.js +81 -0
  28. package/dist/chunks/chunk-M2LWLS56.js +65 -0
  29. package/dist/chunks/{chunk-GT5X67P7.js → chunk-MFPMMKHP.js} +7 -7
  30. package/dist/chunks/{chunk-LE33OZ4V.js → chunk-N2RBQBUE.js} +43 -43
  31. package/dist/chunks/{chunk-DUYDXAR5.js → chunk-O3W7HYS7.js} +1 -1
  32. package/dist/chunks/chunk-OXI222BA.js +54 -0
  33. package/dist/chunks/chunk-P23KECK3.js +57 -0
  34. package/dist/chunks/{chunk-LNQN4PGS.js → chunk-P5M5QCAJ.js} +24 -24
  35. package/dist/chunks/{chunk-X3HT5IHG.js → chunk-POZOGQG7.js} +11 -11
  36. package/dist/chunks/{chunk-K7OOOI7B.js → chunk-QGE2XW66.js} +4 -4
  37. package/dist/chunks/{chunk-STG7FEIQ.js → chunk-S4Y3VMQH.js} +3 -3
  38. package/dist/chunks/chunk-UBT4DZYW.js +304 -0
  39. package/dist/chunks/chunk-UJTTWR5P.js +71 -0
  40. package/dist/chunks/{chunk-652VC4P7.js → chunk-UNAAYJKD.js} +39 -39
  41. package/dist/chunks/{chunk-AXKXWL35.js → chunk-WKKHCEXN.js} +5 -5
  42. package/dist/chunks/chunk-X22CGIKE.js +75 -0
  43. package/dist/chunks/chunk-X4UI5JKC.js +74 -0
  44. package/dist/chunks/chunk-XQJ2VVC6.js +69 -0
  45. package/dist/chunks/{chunk-CQ6QGYKJ.js → chunk-YI7HCLNY.js} +1 -1
  46. package/dist/chunks/{chunk-CVWIMZTL.js → chunk-YOYWFBRJ.js} +53 -53
  47. package/dist/chunks/chunk-ZBFR7DBR.js +70 -0
  48. package/dist/chunks/{chunk-KO24NRJ5.js → chunk-ZW7KTUDU.js} +2 -2
  49. package/dist/chunks/chunk-ZY3DR3P6.js +63 -0
  50. package/dist/chunks/chunk-ZYNF7B6N.js +70 -0
  51. package/dist/chunks/{client-NBSGVJPN.js → client-ORABD53R.js} +2 -2
  52. package/dist/chunks/{client-5YPZUV5L.js → client-YF3PYAFZ.js} +2 -2
  53. package/dist/chunks/{client-3FYDPRVC.js → client-YOSPARZX.js} +1 -1
  54. package/dist/chunks/{client-actions-J2SQWW4O.js → client-actions-LYJHQ4IE.js} +4 -4
  55. package/dist/chunks/{dangerous-3EDPWONV.js → dangerous-VCZB63L6.js} +3 -3
  56. package/dist/chunks/{editor-seams-NG3BESM6.js → editor-seams-4PF6BD4R.js} +9 -9
  57. package/dist/chunks/{editor-store-NDV4IXDK.js → editor-store-UAEROYSB.js} +1 -1
  58. package/dist/chunks/{export-watermark-SNBNUS3L.js → export-watermark-2N7ALJXN.js} +5 -5
  59. package/dist/chunks/{eyedropper-L5DVFZV5.js → eyedropper-3P75IZGM.js} +1 -1
  60. package/dist/chunks/{generate-media-ASNNFDML.js → generate-media-DYXU4BZL.js} +2 -2
  61. package/dist/chunks/{host-5DYGKFJ7.js → host-J4QG5WB7.js} +6 -6
  62. package/dist/chunks/{integrations-2BG5XVX3.js → integrations-KGJ2HE6V.js} +1 -1
  63. package/dist/chunks/{kit-modules-NMONCEP4.js → kit-modules-4HQU5EI2.js} +1 -1
  64. package/dist/chunks/{libraries-QV4QPEYK.js → libraries-NIRTR2IA.js} +5 -5
  65. package/dist/chunks/{live-EI26E2RB.js → live-XZKNAJ2I.js} +3 -3
  66. package/dist/chunks/{media-tool-OVVKBD3N.js → media-tool-YFIYMYI5.js} +1 -1
  67. package/dist/chunks/{new-file-DX5L4NF6.js → new-file-RNWHN4S6.js} +3 -3
  68. package/dist/chunks/{plugin-P6FYIVKR.js → plugin-AN5GLVH5.js} +2 -2
  69. package/dist/chunks/{plugin-import-V2ORN2OW.js → plugin-import-J5ZNYSIY.js} +13 -13
  70. package/dist/chunks/{presence-YNIJGI73.js → presence-YNSLRFAM.js} +2 -2
  71. package/dist/chunks/{project-UK457FEX.js → project-HSN7DOPK.js} +1 -1
  72. package/dist/chunks/{publish-site-E4A557HC.js → publish-site-T2C4IDD2.js} +6 -6
  73. package/dist/chunks/{publish-store-U5SDQCU4.js → publish-store-I2FOGDDF.js} +4 -4
  74. package/dist/chunks/{raster-actions-4E7H3G62.js → raster-actions-IVIGDYQU.js} +1 -1
  75. package/dist/chunks/{runner-DHWGPGPD.js → runner-IOXTGHBT.js} +16 -16
  76. package/dist/chunks/{store-CUL3XS5L.js → store-ZVOK3773.js} +5 -5
  77. package/dist/chunks/{sync-U23VGFOY.js → sync-XT2ZCTVE.js} +5 -5
  78. package/dist/chunks/{tabs-K6MESOUX.js → tabs-RIIW7KNI.js} +8 -8
  79. package/dist/chunks/{team-7APVVP43.js → team-KM3FZ6AU.js} +1 -1
  80. package/dist/chunks/{team-client-XTH5DXVW.js → team-client-2EXJKRDB.js} +1 -1
  81. package/dist/chunks/{tools-PE6DEYSG.js → tools-5ISIPPXP.js} +2 -2
  82. package/dist/chunks/{ui-commands-WQJFLB5K.js → ui-commands-GYCIF7UQ.js} +11 -11
  83. package/dist/chunks/{versions-Y4F3IO37.js → versions-JCQTXXUB.js} +5 -5
  84. package/dist/fonts/chars.txt +1 -1
  85. package/dist/index.js +4 -4
  86. package/dist/seed/files.json +1 -1
  87. package/dist/seed/popcraft.comic-nested.json.gz +0 -0
  88. package/dist/seed/popcraft.comic-pinup.json.gz +0 -0
  89. package/dist/templates/count.js +1 -1
  90. package/dist/templates/index.js +226 -210
  91. package/dist/templates/index.json +663 -0
  92. package/dist/templates/motion/landing-hero/index.js +4 -4
  93. package/dist/templates/motion/launch-trailer/document.js +226 -210
  94. package/dist/templates/motion/launch-trailer/index.js +4 -4
  95. package/dist/templates/motion/launch-trailer/scenes.js +3 -3
  96. package/dist/templates/motion/template-wall.js +2 -2
  97. package/dist/templates/print/comic-hero-cascade.js +100 -0
  98. package/dist/templates/print/comic-hero-chase.js +100 -0
  99. package/dist/templates/print/comic-hero-cover-modern.js +100 -0
  100. package/dist/templates/print/comic-hero-grid-break.js +100 -0
  101. package/dist/templates/print/comic-hero-interrogation.js +100 -0
  102. package/dist/templates/print/comic-hero-issue.js +109 -0
  103. package/dist/templates/print/comic-hero-manga-action.js +100 -0
  104. package/dist/templates/print/comic-hero-nested.js +100 -0
  105. package/dist/templates/print/comic-hero-overlap.js +100 -0
  106. package/dist/templates/print/comic-hero-parallel.js +100 -0
  107. package/dist/templates/print/comic-hero-pinup.js +100 -0
  108. package/dist/templates/print/comic-hero-widescreen.js +100 -0
  109. package/dist/templates/print/comic-modern-issue.js +4 -4
  110. package/dist/templates/saas/email-decks.js +2 -2
  111. package/dist/templates/saas/index.js +62 -62
  112. package/dist/templates/saas/launch-kit.js +5 -5
  113. package/dist/templates/saas/launch-video.js +2 -2
  114. package/dist/templates/saas/stores.js +4 -4
  115. package/dist/templates/slideshow/index.js +3 -3
  116. package/dist/templates/themes/bauhaus.js +2 -2
  117. package/dist/templates/themes/black-friday-coupons.js +2 -2
  118. package/dist/templates/themes/blueprint.js +2 -2
  119. package/dist/templates/themes/claymation.js +2 -2
  120. package/dist/templates/themes/comic-book.js +5 -5
  121. package/dist/{chunks/chunk-ATEECJLR.js → templates/themes/comic-hero-art.js} +11 -9
  122. package/dist/templates/themes/comic-hero-page.js +67 -0
  123. package/dist/templates/themes/comic-hero.js +97 -1
  124. package/dist/{chunks/chunk-ODXZPZKI.js → templates/themes/comic-indie-art.js} +7 -9
  125. package/dist/templates/themes/comic-indie-page.js +47 -0
  126. package/dist/templates/themes/comic-indie.js +85 -1
  127. package/dist/templates/themes/cyberpunk.js +2 -2
  128. package/dist/templates/themes/everyday.js +2 -2
  129. package/dist/templates/themes/festival-presale-family-a.js +2 -2
  130. package/dist/templates/themes/festival-presale-family-b.js +2 -2
  131. package/dist/templates/themes/holidays.js +11 -11
  132. package/dist/templates/themes/index.js +127 -111
  133. package/dist/templates/themes/lunar-new-year.js +2 -2
  134. package/dist/templates/themes/manuscript.js +2 -2
  135. package/dist/templates/themes/memories.js +5 -5
  136. package/dist/templates/themes/noir.js +2 -2
  137. package/dist/templates/themes/printshop.js +14 -14
  138. package/dist/templates/themes/psychedelic.js +2 -2
  139. package/dist/templates/themes/space-opera.js +2 -2
  140. package/dist/templates/themes/studio.js +2 -2
  141. package/dist/templates/themes/tour-tickets.js +2 -2
  142. package/package.json +1 -1
  143. package/src/templates/print/comic-hero-cascade.ts +42 -0
  144. package/src/templates/print/comic-hero-chase.ts +42 -0
  145. package/src/templates/print/comic-hero-cover-modern.ts +34 -0
  146. package/src/templates/print/comic-hero-grid-break.ts +39 -0
  147. package/src/templates/print/comic-hero-interrogation.ts +41 -0
  148. package/src/templates/print/comic-hero-issue.ts +44 -0
  149. package/src/templates/print/comic-hero-manga-action.ts +38 -0
  150. package/src/templates/print/comic-hero-nested.ts +39 -0
  151. package/src/templates/print/comic-hero-overlap.ts +40 -0
  152. package/src/templates/print/comic-hero-parallel.ts +40 -0
  153. package/src/templates/print/comic-hero-pinup.ts +29 -0
  154. package/src/templates/print/comic-hero-widescreen.ts +35 -0
  155. package/src/templates/themes/comic-hero-art.ts +66 -0
  156. package/src/templates/themes/comic-hero-page.ts +326 -0
  157. package/src/templates/themes/comic-hero.ts +15 -2
  158. package/src/templates/themes/comic-indie-art.ts +73 -0
  159. package/src/templates/themes/comic-indie-page.ts +182 -0
  160. package/src/templates/themes/comic-indie.ts +280 -2
  161. package/types/templates/src/print/comic-hero-cascade.d.ts +5 -0
  162. package/types/templates/src/print/comic-hero-chase.d.ts +5 -0
  163. package/types/templates/src/print/comic-hero-cover-modern.d.ts +5 -0
  164. package/types/templates/src/print/comic-hero-grid-break.d.ts +5 -0
  165. package/types/templates/src/print/comic-hero-interrogation.d.ts +5 -0
  166. package/types/templates/src/print/comic-hero-issue.d.ts +2 -0
  167. package/types/templates/src/print/comic-hero-manga-action.d.ts +5 -0
  168. package/types/templates/src/print/comic-hero-nested.d.ts +5 -0
  169. package/types/templates/src/print/comic-hero-overlap.d.ts +5 -0
  170. package/types/templates/src/print/comic-hero-parallel.d.ts +5 -0
  171. package/types/templates/src/print/comic-hero-pinup.d.ts +5 -0
  172. package/types/templates/src/print/comic-hero-widescreen.d.ts +5 -0
  173. package/types/templates/src/themes/comic-hero-art.d.ts +318 -0
  174. package/types/templates/src/themes/comic-hero-page.d.ts +177 -0
  175. package/types/templates/src/themes/comic-indie-art.d.ts +371 -0
  176. package/types/templates/src/themes/comic-indie-page.d.ts +125 -0
  177. package/dist/chunks/{chunk-BAZUZXS6.js → chunk-2BVGM5PJ.js} +3 -3
  178. package/dist/chunks/{chunk-WXY6LWRB.js → chunk-2J3PCCBE.js} +3 -3
  179. package/dist/chunks/{chunk-RH6WJNB4.js → chunk-2ZOSBENB.js} +3 -3
  180. package/dist/chunks/{chunk-FLXSWF6O.js → chunk-5GSRWIV2.js} +3 -3
  181. package/dist/chunks/{chunk-2WCMIJSA.js → chunk-5NGWNEKU.js} +3 -3
  182. package/dist/chunks/{chunk-IUK367P7.js → chunk-5PSOLUKI.js} +0 -0
  183. package/dist/chunks/{chunk-RUBJMQMF.js → chunk-7A3MIEOO.js} +3 -3
  184. package/dist/chunks/{chunk-R66IPFG4.js → chunk-7D46BJKY.js} +32 -32
  185. package/dist/chunks/{chunk-6H5ULKBL.js → chunk-7KFQX6N5.js} +3 -3
  186. package/dist/chunks/{chunk-EWGXFNXM.js → chunk-DF5IDTZB.js} +3 -3
  187. package/dist/chunks/{chunk-VT7UU3UP.js → chunk-ESV3AAQ4.js} +3 -3
  188. package/dist/chunks/{chunk-UJORPKRW.js → chunk-GN5W7TJD.js} +3 -3
  189. package/dist/chunks/{chunk-HQAHQJHQ.js → chunk-IPRJUV2O.js} +9 -9
  190. package/dist/chunks/{chunk-JVKC6UFV.js → chunk-KWXWK2LA.js} +3 -3
  191. package/dist/chunks/{chunk-PN6KHUSF.js → chunk-LOQNCZFE.js} +3 -3
  192. package/dist/chunks/{chunk-AKCMEBIQ.js → chunk-MNN76UQS.js} +12 -12
  193. package/dist/chunks/{chunk-ZRK4E77C.js → chunk-OGZJE5X2.js} +3 -3
  194. package/dist/chunks/{chunk-OTJJNSLB.js → chunk-PEDQKANG.js} +3 -3
  195. package/dist/chunks/{chunk-LDIYJJ24.js → chunk-PTRN7H4N.js} +11 -11
  196. package/dist/chunks/{chunk-J3XCBROI.js → chunk-QQMSM7EK.js} +3 -3
  197. package/dist/chunks/{chunk-FRFW37G6.js → chunk-TBIZI5NH.js} +3 -3
  198. package/dist/chunks/{chunk-BSX52WVT.js → chunk-UTFC2DI3.js} +8 -8
  199. package/dist/chunks/{chunk-GTR25NJ5.js → chunk-XIIFQUWN.js} +3 -3
  200. package/dist/chunks/{chunk-PGUAHUFE.js → chunk-XTFV46GB.js} +9 -9
  201. package/dist/chunks/{chunk-4ENF3NH3.js → chunk-ZLVYZPUR.js} +28 -28
@@ -0,0 +1,305 @@
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
+ STORY,
9
+ caption,
10
+ display,
11
+ folio,
12
+ frameOf,
13
+ indieMeta,
14
+ indieSetup,
15
+ pageGrid,
16
+ panel,
17
+ rectFrame,
18
+ rows,
19
+ say,
20
+ sfx,
21
+ slantTier,
22
+ tier,
23
+ tierBox
24
+ } from "./chunk-6S72I27Z.js";
25
+ import {
26
+ defineTemplate
27
+ } from "./chunk-HLBQLOTA.js";
28
+ import {
29
+ Kit,
30
+ preset
31
+ } from "./chunk-2P7ISWIA.js";
32
+ import {
33
+ init_define_POPCRAFT_COMPONENT_IDS
34
+ } from "./chunk-FFS4SO7R.js";
35
+
36
+ // templates/src/themes/comic-indie.ts
37
+ init_define_POPCRAFT_COMPONENT_IDS();
38
+ var DRAW = /* @__PURE__ */ new Map();
39
+ var page = (id, name, description, tags, size, draw) => {
40
+ DRAW.set(id, draw);
41
+ return defineTemplate({
42
+ id,
43
+ meta: indieMeta(name, description, tags),
44
+ stableNumbers: true,
45
+ build() {
46
+ const k = new Kit(name, preset(size));
47
+ indieSetup(k);
48
+ draw(k);
49
+ folio(k, k.sheet, name);
50
+ return k.finish();
51
+ }
52
+ });
53
+ };
54
+ function stripTitle(k, sheet, W, title) {
55
+ const t = k.stack(sheet, { width: W, height: 30, direction: "HORIZONTAL", align: "CENTER", gap: 12, name: "Title bar" });
56
+ k.text(t, "Alder Street", { style: display(k, "Title"), color: "text", name: "Series" });
57
+ k.text(t, title, { style: display(k, "Credit"), color: "text", name: "Strip title" });
58
+ }
59
+ var gagFour = page("comic-gag-four", "Four-panel gag", "Four shots of one kitchen and one thing that changes: Theo carries in more and more boxes until Juno notices, and he offers her the tape", ["strip", "gag", "four-panel"], "comic-strip", (k) => {
60
+ const g = 10, { W, H } = pageGrid(k, k.sheet, 20, g);
61
+ stripTitle(k, k.sheet, W, "Boxes");
62
+ const h = H - 30 - g, t = tierBox(k, k.sheet, W, h, "Strip");
63
+ const [a, b, c, d] = slantTier(W, h, [1, 1, 1, 1], 10, g);
64
+ panel(k, t, a, "gag-1", { ground: "g1", name: "Setup" });
65
+ panel(k, t, b, "gag-2", { ground: "g2", name: "Setup again" });
66
+ panel(k, t, c, "gag-3", { ground: "g3", name: "Turn" });
67
+ panel(k, t, d, "gag-4", { ground: "g4", name: "Punchline" });
68
+ say(k, t, "Morning!", { x: a.x + 160, y: 10, width: 90, to: { x: a.x + a.width * 0.62, y: 70 } });
69
+ say(k, t, "Just a few more.", { x: b.x + 150, y: 10, width: 110, to: { x: b.x + b.width * 0.6, y: 80 } });
70
+ say(k, t, 'Theo. How many is "a few"?', { x: c.x + 10, y: 10, width: 128, to: { x: c.x + c.width * 0.6, y: 90 } });
71
+ caption(k, t, "Monday.", { x: 8, y: h - 34, width: 70 });
72
+ say(k, t, "I got you your own tape?", { x: d.x + 16, y: 10, width: 128, to: { x: d.x + d.width * 0.55, y: 110 } });
73
+ });
74
+ var stripDaily = page("comic-strip-daily", "Daily strip", "A three-beat strip: Mrs Okafor from downstairs arrives with a huge tomato plant, hands it over, and leaves Juno holding it", ["strip", "gag", "daily"], "comic-strip", (k) => {
75
+ const g = 10, { W, H } = pageGrid(k, k.sheet, 20, g);
76
+ stripTitle(k, k.sheet, W, "The plant");
77
+ const h = H - 30 - g, t = tierBox(k, k.sheet, W, h, "Strip");
78
+ const [a, b, c] = tier(W, h, [1, 1, 1], g);
79
+ panel(k, t, a, "strip-1", { ground: "g1", name: "The knock" });
80
+ panel(k, t, b, "strip-2", { ground: "g3", name: "The handover" });
81
+ panel(k, t, c, "strip-3", { ground: "g2", name: "Holding it" });
82
+ say(k, t, "He says you will need someone to look after.", { x: a.x + a.width - 180, y: 12, width: 168, to: { x: a.x + a.width * 0.7, y: 120 } });
83
+ say(k, t, "Mrs Okafor, I can barely keep a cactus alive.", { x: b.x + 12, y: 12, width: 168, to: { x: b.x + b.width * 0.3, y: 140 } });
84
+ say(k, t, "Water it. Talk to it. You will learn.", { x: b.x + b.width - 140, y: h - 80, width: 128, to: { x: b.x + b.width * 0.72, y: 120 } });
85
+ caption(k, t, "Three weeks until he goes.", { x: c.x + 12, y: h - 40, width: 170 });
86
+ });
87
+ var talkingHeads = page("comic-talking-heads", "Talking heads page", "The conversation on the sofa: a two-shot, then Juno and Theo in alternating closeups across slanted gutters, and the two-shot again with them closer", ["dialogue", "restraint"], "comic-page", (k) => {
88
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
89
+ const [h1, h2, h3, h4] = rows(H, g, [24, 27, 27, 22]);
90
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
91
+ panel(k, t1, rectFrame(0, 0, W, h1), "talk-1", { ground: "g1", name: "Two-shot" });
92
+ caption(k, t1, "The night the boxes came, we finally talked about it.", { x: 12, y: 12, width: 220 });
93
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
94
+ const [a, b] = slantTier(W, h2, [1, 1], 18, g);
95
+ panel(k, t2, a, "talk-2", { ground: "g2", name: "Theo" });
96
+ panel(k, t2, b, "talk-3", { ground: "g4", name: "Juno" });
97
+ say(k, t2, "It is a good job, Ju. I would be stupid not to.", { x: 12, y: 12, width: 168, to: { x: a.width * 0.55, y: h2 * 0.45 } });
98
+ say(k, t2, "I know.", { x: W - 108, y: 14, width: 90, to: { x: b.x + b.width * 0.4, y: h2 * 0.5 } });
99
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
100
+ const [c, d] = slantTier(W, h3, [1, 1], -18, g);
101
+ panel(k, t3, c, "talk-4", { ground: "g3", name: "Theo turns" });
102
+ panel(k, t3, d, "talk-5", { ground: "g1", name: "Juno looks away" });
103
+ say(k, t3, "You could say you will miss me.", { x: 14, y: 12, width: 128, to: { x: c.width * 0.5, y: h3 * 0.5 } });
104
+ say(k, t3, "I am saying it. Quietly.", { x: W - 140, y: h3 - 74, width: 128, to: { x: d.x + d.width * 0.4, y: h3 * 0.45 } });
105
+ const t4 = tierBox(k, k.sheet, W, h4, "Tier 4");
106
+ panel(k, t4, rectFrame(0, 0, W, h4), "talk-6", { ground: "g2", name: "Closer" });
107
+ say(k, t4, "Rooftop party. Before you go.", { x: W - 186, y: 12, width: 168, to: { x: W * 0.55, y: h4 * 0.6 } });
108
+ });
109
+ var silent = page("comic-silent", "Silent page", "Juno walks it off: down Alder Street, past the corner shop, along the canal to a bench under an orange sky, carried by the pictures alone", ["grid", "silent", "wordless"], "comic-page", (k) => {
110
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
111
+ const [h1, h2, h3, h4] = rows(H, g, [26, 23, 23, 28]);
112
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
113
+ panel(k, t1, rectFrame(0, 0, W, h1), "silent-1", { ground: "g1", name: "Out the door" });
114
+ caption(k, t1, "Alder Street, 7:42 pm.", { x: 12, y: 12, width: 150 });
115
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
116
+ const [a, b] = tier(W, h2, [3, 2], g);
117
+ panel(k, t2, a, "silent-2", { ground: "g2", name: "Corner shop" });
118
+ panel(k, t2, b, "silent-3", { ground: "g4", name: "The fence" });
119
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
120
+ const [c, d] = tier(W, h3, [2, 3], g);
121
+ panel(k, t3, c, "silent-4", { ground: "g3", name: "The bridge" });
122
+ panel(k, t3, d, "silent-5", { ground: "g1", name: "The boat" });
123
+ say(k, t3, "Hi, ducks.", { x: d.x + 14, y: 12, width: 90, to: { x: c.x + c.width * 0.5, y: h3 * 0.5 } });
124
+ sfx(k, t3, "quack", { x: W - 104, y: h3 - 62, w: 92, h: 52, deg: -6, seed: 3 });
125
+ const t4 = tierBox(k, k.sheet, W, h4, "Tier 4");
126
+ panel(k, t4, rectFrame(0, 0, W, h4), "silent-6", { ground: "g2", name: "The bench" });
127
+ });
128
+ var negativeSpace = page("comic-negative-space", "Negative space page", "Three small frames in a dark stairwell: Juno alone on the stairs, Mrs Okafor sitting down beside her with plums, the two of them seen from above", ["minimal", "quiet"], "comic-page", (k) => {
129
+ const g = 0, { W, H } = pageGrid(k, k.sheet, 36, g);
130
+ const [h1, h2, h3] = rows(H, g, [40, 26, 34]);
131
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
132
+ const f1 = rectFrame(36, 40, 200, h1 - 80);
133
+ panel(k, t1, f1, "neg-1", { ground: "g3", name: "Alone" });
134
+ caption(k, t1, "Some things you cannot walk off.", { x: 260, y: h1 - 90, width: 180 });
135
+ const t2 = tierBox(k, k.sheet, W, h2, "Black band", "text");
136
+ const f2 = rectFrame(W - 236, 24, 200, h2 - 48);
137
+ panel(k, t2, f2, "neg-2", { ground: "g1", name: "Plums", keyline: true });
138
+ say(k, t2, "Sit. Eat a plum. Tell me.", { x: 120, y: 40, width: 128, to: { x: f2.x + 60, y: f2.y + 50 } });
139
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
140
+ const f3 = rectFrame(0, 50, W, h3 - 100);
141
+ panel(k, t3, f3, "neg-3", { ground: "g4", name: "From above" });
142
+ say(k, t3, "He is leaving, and I keep acting like he is already gone.", { x: 18, y: 4, width: 168, to: { x: W * 0.45, y: h3 * 0.6 } });
143
+ });
144
+ var riso = page("comic-riso", "Risograph page", "The flashback in two inks and a screen: four summers ago, the sofa up the stairs, noodles by candlelight, the terracotta wall, the spare key and the first seedling", ["riso", "zine", "flashback", "duotone"], "comic-page", (k) => {
145
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
146
+ const [h1, h2, h3] = rows(H, g, [34, 30, 36]);
147
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
148
+ panel(k, t1, rectFrame(0, 0, W, h1), "riso-1", { ground: "g2", name: "The sofa" });
149
+ caption(k, t1, "Four summers ago.", { x: 12, y: 12, width: 130 });
150
+ say(k, t1, "Pivot! PIVOT!", { x: W - 112, y: 16, width: 96, to: { x: W * 0.6, y: h1 * 0.4 } });
151
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
152
+ const [a, b, c] = tier(W, h2, [1, 1, 1], g);
153
+ panel(k, t2, a, "riso-2", { ground: "g1", name: "Noodles", tone: true });
154
+ panel(k, t2, b, "riso-3", { ground: "g3", name: "The wall" });
155
+ panel(k, t2, c, "riso-4", { ground: "g4", name: "The key" });
156
+ say(k, t2, "For emergencies. And sugar.", { x: c.x + 10, y: 10, width: 96, to: { x: c.x + c.width * 0.3, y: h2 * 0.3 } });
157
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
158
+ const [d, e] = tier(W, h3, [1, 2], g);
159
+ panel(k, t3, d, "riso-5", { ground: "g2", name: "The seedling", tone: true });
160
+ panel(k, t3, e, "riso-6", { ground: "g1", name: "First morning" });
161
+ caption(k, t3, "We did not own a bed yet. We owned a sofa.", { x: e.x + 12, y: h3 - 48, width: 220 });
162
+ });
163
+ var zine = page("comic-zine", "Quarter-fold zine", "Making the party flyer: drawing it on the floor, cutting out the sun, the pink print shop, warm copies, a lamp post and Mrs Okafor reading hers", ["zine", "mini-comic", "diy"], "comic-page", (k) => {
164
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
165
+ const hs = rows(H, g, [1, 1, 1]);
166
+ const pairs = [["zine-1", "zine-2"], ["zine-3", "zine-4"], ["zine-5", "zine-6"]];
167
+ const words = ["Rooftop. Saturday. Bring a chair.", "Make it hot pink.", "Everyone is invited. Even you, Mrs O."];
168
+ pairs.forEach(([l, r], i) => {
169
+ const t = tierBox(k, k.sheet, W, hs[i], `Mini pages ${i * 2 + 1}\u2013${i * 2 + 2}`);
170
+ const [a, b] = tier(W, hs[i], [1, 1], g);
171
+ panel(k, t, a, l, { ground: i % 2 ? "g3" : "g1", name: `Page ${i * 2 + 1}` });
172
+ panel(k, t, b, r, { ground: i % 2 ? "g4" : "g2", name: `Page ${i * 2 + 2}` });
173
+ if (i === 1) say(k, t, words[i], { x: 12, y: 12, width: 110, to: { x: a.width * 0.5, y: hs[i] * 0.5 } });
174
+ else caption(k, t, words[i], { x: i ? b.x + 12 : 12, y: 12, width: 160 });
175
+ });
176
+ });
177
+ var webtoon = page("comic-webtoon", "Vertical scroll (webtoon)", "Up to the roof in one column of full-width beats: through the hatch, the string lights, the chairs and the plant, the lights coming on, and the finished roof", ["webtoon", "vertical", "scroll", "digital"], "comic-page", (k) => {
178
+ const g = 26, { W, H } = pageGrid(k, k.sheet, 36, g);
179
+ const hs = rows(H, g, [22, 17, 17, 12, 32]);
180
+ const beats = [["web-1", "Through the hatch", "g1"], ["web-2", "Lights up", "g2"], ["web-3", "Chairs", "g4"], ["web-4", "On", "g3"], ["web-5", "Ready", "g1"]];
181
+ beats.forEach(([art, name, ground], i) => {
182
+ const t = tierBox(k, k.sheet, W, hs[i], `Beat ${i + 1}`);
183
+ panel(k, t, rectFrame(0, 0, W, hs[i]), art, { ground, name });
184
+ if (i === 0) say(k, t, "Mind the tar, it is still warm.", { x: W - 150, y: 12, width: 128, to: { x: W * 0.45, y: hs[i] * 0.5 } });
185
+ if (i === 1) say(k, t, "Higher. No, the other higher.", { x: 14, y: 12, width: 128, to: { x: W * 0.5, y: hs[i] * 0.5 } });
186
+ if (i === 4) caption(k, t, "It looked like somewhere you would want to stay.", { x: 12, y: hs[i] - 46, width: 230 });
187
+ });
188
+ });
189
+ var manga = page("comic-manga-page", "Manga page", "The party, read right to left: dancing under the lights, Mrs Okafor out-dancing everyone, the first raindrop, the scramble, one big umbrella", ["manga", "panels", "right-to-left"], "manga-page", (k) => {
190
+ const g = 8, { W, H } = pageGrid(k, k.sheet, 36, g);
191
+ const [h1, h2, h3] = rows(H, g, [30, 34, 36]);
192
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
193
+ panel(k, t1, rectFrame(0, 0, W, h1), "manga-1", { ground: "g1", name: "The party" });
194
+ caption(k, t1, "Saturday. Everyone came.", { x: 12, y: 12, width: 150 });
195
+ say(k, t1, "You call that dancing? Watch.", { x: W - 150, y: 12, width: 128, to: { x: W * 0.62, y: h1 * 0.55 } });
196
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
197
+ const [left, right] = slantTier(W, h2, [2, 3], 22, g);
198
+ panel(k, t2, right, "manga-2", { ground: "g2", name: "Mrs Okafor dances" });
199
+ panel(k, t2, left, "manga-3", { ground: "g4", name: "First drop" });
200
+ sfx(k, t2, "plip", { x: 20, y: h2 - 72, w: 96, h: 56, deg: 8, seed: 5 });
201
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
202
+ const [l3, r3] = slantTier(W, h3, [3, 2], -22, g);
203
+ panel(k, t3, r3, "manga-5", { ground: "g3", name: "The umbrella" });
204
+ panel(k, t3, l3, "manga-4", { ground: "g1", name: "Scramble" });
205
+ sfx(k, t3, "fwump", { x: r3.x + 30, y: 14, w: 110, h: 60, deg: -8, seed: 9 });
206
+ say(k, t3, "The records! Save the records!", { x: 14, y: h3 - 76, width: 128, to: { x: l3.width * 0.5, y: h3 * 0.4 } });
207
+ });
208
+ var iconGrid = page("comic-icon-grid", "Modular page", "A fine grid of the flat as it was: two mugs, the spare key, the tomatoes, the records, a packed box, the painted wall, two toothbrushes, the empty sofa, an open window", ["modular", "grid", "still life"], "comic-page", (k) => {
209
+ const g = 10, { W, H } = pageGrid(k, k.sheet, 36, g);
210
+ const cell = Math.floor((W - 2 * g) / 3);
211
+ const head = 56, foot = H - head - 3 * cell - 4 * g;
212
+ const t0 = tierBox(k, k.sheet, W, head, "Heading");
213
+ caption(k, t0, "Everything that was ours, the week before he left.", { x: 0, y: 10, width: 300 });
214
+ const grounds = ["g1", "g2", "g3"];
215
+ for (let r = 0; r < 3; r++) {
216
+ const t = tierBox(k, k.sheet, W, cell, `Row ${r + 1}`);
217
+ tier(W, cell, [1, 1, 1], g).forEach((f, c) => panel(k, t, f, `icon-${r * 3 + c + 1}`, { ground: grounds[(c + r) % 3], name: `Object ${r * 3 + c + 1}` }));
218
+ if (r === 2) say(k, t, "You are keeping the sofa.", { x: W - 140, y: 10, width: 128, to: { x: W - 100, y: cell * 0.7 } });
219
+ }
220
+ tierBox(k, k.sheet, W, foot, "Footer");
221
+ });
222
+ var hourglass = page("comic-hourglass", "Symbol page (hourglass)", "The goodbye at sunset, in frames that make an hourglass: the roof edge, the spare key, a hand closing round it at the waist, her head on his shoulder, two silhouettes against the sky", ["symbol", "architecture", "sunset"], "comic-page", (k) => {
223
+ const g = 10, { W, H } = pageGrid(k, k.sheet, 36, g);
224
+ const [h1, h2, h3, h4, h5] = rows(H, g, [22, 18, 16, 18, 26]);
225
+ const inset = W * 0.22, waist = W * 0.32;
226
+ const t1 = tierBox(k, k.sheet, W, h1, "Top");
227
+ panel(k, t1, rectFrame(0, 0, W, h1), "hour-1", { ground: "g1", name: "The edge" });
228
+ caption(k, t1, "The last night.", { x: 12, y: 12, width: 120 });
229
+ const t2 = tierBox(k, k.sheet, W, h2, "Narrowing");
230
+ panel(k, t2, frameOf([{ x: 0, y: 0 }, { x: W, y: 0 }, { x: W - inset, y: h2 }, { x: inset, y: h2 }]), "hour-2", { ground: "g2", name: "The key" });
231
+ say(k, t2, "So the place still has someone with a spare.", { x: W - 180, y: 6, width: 168, to: { x: W * 0.5, y: h2 * 0.6 } });
232
+ const t3 = tierBox(k, k.sheet, W, h3, "Waist");
233
+ panel(k, t3, rectFrame(Math.round((W - waist) / 2), 0, Math.round(waist), h3), "hour-3", { ground: "g3", name: "Her hand" });
234
+ const t4 = tierBox(k, k.sheet, W, h4, "Widening");
235
+ panel(k, t4, frameOf([{ x: inset, y: 0 }, { x: W - inset, y: 0 }, { x: W, y: h4 }, { x: 0, y: h4 }]), "hour-4", { ground: "g4", name: "Her head on his shoulder" });
236
+ const t5 = tierBox(k, k.sheet, W, h5, "Bottom");
237
+ panel(k, t5, rectFrame(0, 0, W, h5), "hour-5", { ground: "g2", name: "Two silhouettes" });
238
+ say(k, t5, "Same time next summer?", { x: W * 0.5 - 64, y: 14, width: 128, to: { x: W * 0.5, y: h5 * 0.7 } });
239
+ });
240
+ var backmatter = page("comic-backmatter", "Back matter (letters page)", "The letters page that closes the issue: a masthead, a reader's letter, two small panels of what came after, the reply and the indicia", ["back-matter", "letters"], "comic-page", (k) => {
241
+ const g = 14, { W, H } = pageGrid(k, k.sheet, 36, g);
242
+ const t0 = tierBox(k, k.sheet, W, 56, "Masthead");
243
+ k.text(t0, "Letters to Alder Street", { style: display(k, "Masthead"), color: "text", name: "Masthead", width: "FILL" });
244
+ const letter = k.stack(k.sheet, { width: W, gap: 6, name: "Letter" });
245
+ k.text(letter, "Dear Alder Street,", { style: display(k, "Credit"), color: "text", name: "Salutation" });
246
+ k.text(letter, "I shared a flat with my best friend for five years, and when she moved for work I did exactly what Juno did: packed nothing, said nothing, and walked a long way round the block. Reading this issue on the bus, I had to put it down twice. Is there going to be a next summer? Please say yes. And please tell me the tomato plant made it.", { style: display(k, "Body"), color: "text", width: "FILL", name: "Letter body" });
247
+ k.text(letter, "\u2014 A reader in a flat that is too quiet now", { style: display(k, "Credit"), color: "onPaper", name: "Signature" });
248
+ const ph = 190, t = tierBox(k, k.sheet, W, ph, "After");
249
+ const [a, b] = tier(W, ph, [1, 1], g);
250
+ panel(k, t, a, "back-1", { ground: "g1", name: "The train" });
251
+ panel(k, t, b, "back-2", { ground: "g3", name: "Watering" });
252
+ caption(k, t, "After.", { x: 10, y: ph - 36, width: 70 });
253
+ say(k, t, "It made it.", { x: b.x + b.width - 108, y: 10, width: 96, to: { x: b.x + b.width * 0.4, y: ph * 0.5 } });
254
+ const reply = k.stack(k.sheet, { width: W, gap: 6, name: "Reply" });
255
+ k.text(reply, "We say yes. The plant had forty-one tomatoes, Mrs Okafor counted. Theo sends a postcard every month and the spare key still hangs by the door. Next summer starts in issue two. Write to us, and tell us about the people you shared a kitchen with.", { style: display(k, "Body"), color: "text", width: "FILL", name: "Reply body" });
256
+ const used = 56 + ph + 4 * g + 270;
257
+ const ind = k.stack(k.sheet, { width: W, height: Math.max(40, H - used), justify: "MAX", name: "Indicia" });
258
+ k.text(ind, "LAST SUMMER ON ALDER STREET No. 1. Story, art and letters by the Alder Street team. Printed on recycled stock.", { style: display(k, "Credit"), color: "onPaper", width: "FILL", name: "Indicia text" });
259
+ });
260
+ function issueCover(k, sheet) {
261
+ const { W, H } = pageGrid(k, sheet, 0, 0);
262
+ const t = tierBox(k, sheet, W, H, "Cover");
263
+ const b = k.doc.settings?.bleed?.left ?? 0;
264
+ panel(k, t, rectFrame(-b, -b, W + 2 * b, H + 2 * b), "hour-1", { ground: "g1", name: "Cover art" });
265
+ caption(k, t, `${STORY.series} \xB7 ${STORY.issue}`, { x: 36, y: 36, width: 200, name: "Issue" });
266
+ caption(k, t, STORY.title, { x: 36, y: H - 110, width: 300, name: "Cover title" });
267
+ }
268
+ var ISSUE = [
269
+ ["comic-talking-heads", "Page 1"],
270
+ ["comic-silent", "Page 2"],
271
+ ["comic-negative-space", "Page 3"],
272
+ ["comic-riso", "Page 4"],
273
+ ["comic-zine", "Page 5"],
274
+ ["comic-webtoon", "Page 6"],
275
+ ["comic-icon-grid", "Page 7"],
276
+ ["comic-hourglass", "Page 8"],
277
+ ["comic-backmatter", "Letters"]
278
+ ];
279
+ var wholeIssue = defineTemplate({
280
+ id: "comic-indie-issue",
281
+ meta: indieMeta("Whole comic issue (Alder Street)", `"${STORY.title}", the whole indie issue in one file: the cover and every page of the story in facing pages, ready to print as a booklet`, ["book", "issue", "story", "indie"]),
282
+ sequence: true,
283
+ stableNumbers: true,
284
+ build() {
285
+ const k = new Kit("Whole comic issue (Alder Street)", preset("comic-page"));
286
+ indieSetup(k);
287
+ k.doc = { ...k.doc, settings: { ...k.doc.settings, facingPages: true } };
288
+ const front = k.sheet;
289
+ k.nameSheet(front, "Front cover");
290
+ issueCover(k, front);
291
+ k.setCover(front);
292
+ for (const [id, name] of ISSUE) {
293
+ const sheet = k.addSheet(preset("comic-page"), name);
294
+ DRAW.get(id)(k);
295
+ folio(k, sheet, name);
296
+ }
297
+ return k.finish();
298
+ }
299
+ });
300
+ var pack = [gagFour, stripDaily, talkingHeads, silent, negativeSpace, riso, zine, webtoon, manga, iconGrid, hourglass, backmatter, wholeIssue];
301
+ var comic_indie_default = pack;
302
+
303
+ export {
304
+ comic_indie_default
305
+ };
@@ -0,0 +1,71 @@
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
+ FOLIO,
9
+ caption,
10
+ comicMeta,
11
+ comicSetup,
12
+ folio,
13
+ pageGrid,
14
+ panel,
15
+ rectFrame,
16
+ rows,
17
+ say,
18
+ sfx,
19
+ tier,
20
+ tierBox
21
+ } from "./chunk-UBT4DZYW.js";
22
+ import {
23
+ defineTemplate
24
+ } from "./chunk-HLBQLOTA.js";
25
+ import {
26
+ Kit,
27
+ preset
28
+ } from "./chunk-2P7ISWIA.js";
29
+ import {
30
+ init_define_POPCRAFT_COMPONENT_IDS
31
+ } from "./chunk-FFS4SO7R.js";
32
+
33
+ // templates/src/print/comic-hero-overlap.ts
34
+ init_define_POPCRAFT_COMPONENT_IDS();
35
+ var comic_hero_overlap_default = defineTemplate({
36
+ id: "comic-overlap",
37
+ meta: comicMeta("Overlapping page", 'Page six of "Nightstar: Blackout": the fist fight, with frames laid over each other on paper keylines: the punch lands, the backhand lands harder, and Nightstar goes through a bus window before standing up again', ["overlap", "keyline", "fight", "sound effects"]),
38
+ stableNumbers: true,
39
+ build() {
40
+ const k = new Kit("Overlapping page", preset("comic-page"));
41
+ comicSetup(k);
42
+ drawPage(k);
43
+ return k.finish();
44
+ }
45
+ });
46
+ function drawPage(k) {
47
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
48
+ const [h1, h2, h3] = rows(H - FOLIO, g, [30, 40, 30]);
49
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
50
+ const [a, b] = tier(W, h1, [3, 2], g);
51
+ panel(k, t1, a, "over-1", { ground: "heroG1", name: "The charge" });
52
+ panel(k, t1, rectFrame(b.x - 40, 14, b.width + 40, h1 - 14), "over-2", { ground: "heroG2", name: "The punch", keyline: 7 });
53
+ caption(k, t1, "Round two.", { x: 10, y: 10, width: 110 });
54
+ sfx(k, t1, "Thwakk!", { x: W - 220, y: h1 - 96, w: 200, h: 86, deg: -8, seed: 5 });
55
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
56
+ panel(k, t2, rectFrame(0, 0, W, h2), "over-3", { ground: "heroG3", name: "The backhand" });
57
+ panel(k, t2, rectFrame(Math.round(W * 0.6), 20, Math.round(W * 0.4) - 12, h2 - 40), "over-4", { ground: "heroG1", name: "Through the bus", keyline: 8 });
58
+ sfx(k, t2, "Wham!", { x: 14, y: h2 - 120, w: 210, h: 100, deg: -6, fill: "primary", seed: 8 });
59
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
60
+ const [c, d] = tier(W, h3, [3, 2], g);
61
+ panel(k, t3, c, "over-5", { ground: "heroG2", name: "Back up" });
62
+ panel(k, t3, d, "over-6", { ground: "heroG3", name: "The grin" });
63
+ say(k, t3, "That all you\u2019ve got?", { x: 12, y: 12, width: 128, to: { x: c.width * 0.18, y: h3 * 0.4 } });
64
+ say(k, t3, "Not even close.", { x: W - 108, y: h3 - 70, width: 96, to: { x: d.x + d.width * 0.5, y: h3 * 0.45 } });
65
+ folio(k, k.sheet, "Nightstar: Blackout \u2014 page 6");
66
+ }
67
+
68
+ export {
69
+ comic_hero_overlap_default,
70
+ drawPage
71
+ };
@@ -14,14 +14,14 @@ import {
14
14
  newFileRefusal,
15
15
  reportNewFileBlocked,
16
16
  setCloudLink
17
- } from "./chunk-IPEOO7PN.js";
17
+ } from "./chunk-CKBPEGTH.js";
18
18
  import {
19
19
  parseDeepLink,
20
20
  withDeepLink
21
21
  } from "./chunk-YGCKTKQG.js";
22
22
  import {
23
23
  activeTeamWorkspaceId
24
- } from "./chunk-HST5H23G.js";
24
+ } from "./chunk-JRQ4ZPRK.js";
25
25
  import {
26
26
  ApiError,
27
27
  api,
@@ -29,7 +29,7 @@ import {
29
29
  } from "./chunk-PJY3DG52.js";
30
30
  import {
31
31
  attachPresence
32
- } from "./chunk-CQ6QGYKJ.js";
32
+ } from "./chunk-YI7HCLNY.js";
33
33
  import {
34
34
  isPersistableDocument,
35
35
  isUnsavedPlaceholder,
@@ -40,7 +40,7 @@ import {
40
40
  setCollabHistory,
41
41
  storedDocument,
42
42
  useEditorStore
43
- } from "./chunk-AXKXWL35.js";
43
+ } from "./chunk-WKKHCEXN.js";
44
44
  import {
45
45
  accessToken,
46
46
  cloudUser,
@@ -0,0 +1,70 @@
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
+ FOLIO,
9
+ caption,
10
+ comicMeta,
11
+ comicSetup,
12
+ folio,
13
+ pageGrid,
14
+ panel,
15
+ rectFrame,
16
+ rows,
17
+ say,
18
+ sfx,
19
+ tier,
20
+ tierBox
21
+ } from "./chunk-UBT4DZYW.js";
22
+ import {
23
+ defineTemplate
24
+ } from "./chunk-HLBQLOTA.js";
25
+ import {
26
+ Kit,
27
+ preset
28
+ } from "./chunk-2P7ISWIA.js";
29
+ import {
30
+ init_define_POPCRAFT_COMPONENT_IDS
31
+ } from "./chunk-FFS4SO7R.js";
32
+
33
+ // templates/src/print/comic-hero-nested.ts
34
+ init_define_POPCRAFT_COMPONENT_IDS();
35
+ var comic_hero_nested_default = defineTemplate({
36
+ id: "comic-nested",
37
+ meta: comicMeta("Nested page", 'Page seven of "Nightstar: Blackout": Voltrix drinks the whole grid in one big frame, with two inset close-ups nested inside it, while the skyline goes dark block by block and Rosa spots the cable that feeds him', ["nested", "inset", "keyline", "sound effects"]),
38
+ stableNumbers: true,
39
+ build() {
40
+ const k = new Kit("Nested page", preset("comic-page"));
41
+ comicSetup(k);
42
+ drawPage(k);
43
+ return k.finish();
44
+ }
45
+ });
46
+ function drawPage(k) {
47
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
48
+ const [h1, h2] = rows(H - FOLIO, g, [54, 46]);
49
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
50
+ panel(k, t1, rectFrame(0, 0, W, h1), "nest-1", { ground: "heroG1", name: "The overload" });
51
+ const s = Math.round(W * 0.3);
52
+ panel(k, t1, rectFrame(16, h1 - s - 16, s, s), "nest-2", { ground: "heroG2", name: "The coils", keyline: 6 });
53
+ panel(k, t1, rectFrame(W - s - 16, h1 - s - 16, s, s), "nest-3", { ground: "heroG3", name: "The glare", keyline: 6 });
54
+ caption(k, t1, "11:58 p.m. He doesn\u2019t want power. He wants all of it.", { x: 10, y: 10, width: 230 });
55
+ sfx(k, t1, "Vrrmm!", { x: W - 230, y: 14, w: 200, h: 96, deg: 6, seed: 13 });
56
+ say(k, t1, "More!", { x: 16 + s - 40, y: h1 - s - 70, width: 96, to: { x: 16 + s * 0.5, y: h1 - s * 0.6 } });
57
+ say(k, t1, "Too bright. Can\u2019t get close.", { x: W - s - 120, y: h1 - s - 90, width: 128, to: { x: W - s * 0.5, y: h1 - s * 0.6 }, thought: true });
58
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
59
+ const [a, b] = tier(W, h2, [3, 2], g);
60
+ panel(k, t2, a, "nest-4", { ground: "heroG2", name: "The blackout" });
61
+ panel(k, t2, b, "nest-5", { ground: "heroG3", name: "The cable" });
62
+ caption(k, t2, "Block by block, the city goes dark.", { x: 10, y: 10, width: 200 });
63
+ say(k, t2, "That cable... it feeds him.", { x: b.x + 6, y: 12, width: 128, to: { x: b.x + b.width * 0.4, y: h2 * 0.35 }, thought: true });
64
+ folio(k, k.sheet, "Nightstar: Blackout \u2014 page 7");
65
+ }
66
+
67
+ export {
68
+ comic_hero_nested_default,
69
+ drawPage
70
+ };
@@ -6,7 +6,7 @@ const __filename = __popcraftPath(import.meta.url);
6
6
  const __dirname = __popcraftDirname(__filename);
7
7
  import {
8
8
  activeTeamWorkspaceId
9
- } from "./chunk-HST5H23G.js";
9
+ } from "./chunk-JRQ4ZPRK.js";
10
10
  import {
11
11
  ApiError,
12
12
  GUEST_FILE_LIMIT,
@@ -18,7 +18,7 @@ import {
18
18
  } from "./chunk-SYJZXGA7.js";
19
19
  import {
20
20
  markLibraryDocument
21
- } from "./chunk-AXKXWL35.js";
21
+ } from "./chunk-WKKHCEXN.js";
22
22
  import {
23
23
  cloudEnabled,
24
24
  cloudUser
@@ -0,0 +1,73 @@
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
+ FOLIO,
9
+ caption,
10
+ comicMeta,
11
+ comicSetup,
12
+ folio,
13
+ pageGrid,
14
+ panel,
15
+ rows,
16
+ say,
17
+ sfx,
18
+ slantTier,
19
+ tier,
20
+ tierBox
21
+ } from "./chunk-UBT4DZYW.js";
22
+ import {
23
+ defineTemplate
24
+ } from "./chunk-HLBQLOTA.js";
25
+ import {
26
+ Kit,
27
+ preset
28
+ } from "./chunk-2P7ISWIA.js";
29
+ import {
30
+ init_define_POPCRAFT_COMPONENT_IDS
31
+ } from "./chunk-FFS4SO7R.js";
32
+
33
+ // templates/src/print/comic-hero-chase.ts
34
+ init_define_POPCRAFT_COMPONENT_IDS();
35
+ var comic_hero_chase_default = defineTemplate({
36
+ id: "comic-chase",
37
+ meta: comicMeta("Chase page", 'Page two of "Nightstar: Blackout": Voltrix tears open a substation, Nightstar watches from a gargoyle, and the chase runs across the rooftops on slanted gutters to a lightning bolt and an exploding water tower', ["chase", "slanted", "rooftops", "sound effects"]),
38
+ stableNumbers: true,
39
+ build() {
40
+ const k = new Kit("Chase page", preset("comic-page"));
41
+ comicSetup(k);
42
+ drawPage(k);
43
+ return k.finish();
44
+ }
45
+ });
46
+ function drawPage(k) {
47
+ const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g);
48
+ const [h1, h2, h3] = rows(H - FOLIO, g, [30, 34, 36]);
49
+ const t1 = tierBox(k, k.sheet, W, h1, "Tier 1");
50
+ const [a] = tier(W, h1, [1], g);
51
+ panel(k, t1, a, "chase-1", { ground: "heroG1", name: "The substation" });
52
+ caption(k, t1, "Midnight. The Eastside substation.", { x: 10, y: 10, width: 200 });
53
+ say(k, t1, "The whole grid. All of it. Mine.", { x: W - 180, y: 12, width: 160, to: { x: W * 0.5, y: h1 * 0.36 } });
54
+ const t2 = tierBox(k, k.sheet, W, h2, "Tier 2");
55
+ const [b, c] = slantTier(W, h2, [2, 3], 22, g);
56
+ panel(k, t2, b, "chase-2", { ground: "heroG2", name: "On the ledge" });
57
+ panel(k, t2, c, "chase-3", { ground: "heroG3", name: "Through the wall" });
58
+ say(k, t2, "Not tonight, Voltrix.", { x: 12, y: 12, width: 110, to: { x: b.width * 0.45, y: h2 * 0.3 }, thought: true });
59
+ sfx(k, t2, "Krakk!", { x: W - 210, y: h2 - 110, w: 190, h: 96, deg: -8, seed: 4 });
60
+ const t3 = tierBox(k, k.sheet, W, h3, "Tier 3");
61
+ const [d, e, f] = slantTier(W, h3, [3, 2, 3], -20, g);
62
+ panel(k, t3, d, "chase-4", { ground: "heroG1", name: "The leap" });
63
+ panel(k, t3, e, "chase-5", { ground: "heroG2", name: "Voltrix looks back" });
64
+ panel(k, t3, f, "chase-6", { ground: "heroG3", name: "The bolt" });
65
+ say(k, t3, "Keep up, hero!", { x: e.x + 4, y: 12, width: 96, to: { x: e.x + e.width * 0.5, y: h3 * 0.4 } });
66
+ sfx(k, t3, "Zzrakk!", { x: f.x + 10, y: h3 - 100, w: 200, h: 90, deg: 6, fill: "primary", seed: 11 });
67
+ folio(k, k.sheet, "Nightstar: Blackout \u2014 page 2");
68
+ }
69
+
70
+ export {
71
+ comic_hero_chase_default,
72
+ drawPage
73
+ };