@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.
- package/dist/chunks/{agent-CGSIEC2R.js → agent-LNZDZLDR.js} +1 -1
- package/dist/chunks/{build-AUXXY3JX.js → build-AKMRSWRB.js} +2 -2
- package/dist/chunks/{builtin-Q5UN4DWS.js → builtin-KY56DU2Y.js} +3 -3
- package/dist/chunks/{check-template-2EKU4JL7.js → check-template-OYCBJNDF.js} +2 -2
- package/dist/chunks/{chunk-YT6TGRM4.js → chunk-2PEG56PC.js} +40 -26
- package/dist/chunks/{chunk-KOKO3HTP.js → chunk-3NI5OGFT.js} +1 -1
- package/dist/chunks/{chunk-TQPKOPCW.js → chunk-3ZO43HDI.js} +2 -2
- package/dist/chunks/{chunk-MJ6VIF3D.js → chunk-4X5G4QPZ.js} +1 -1
- package/dist/chunks/{chunk-3MAEAHID.js → chunk-6CRT7IDI.js} +2 -2
- package/dist/chunks/chunk-6S72I27Z.js +194 -0
- package/dist/chunks/chunk-7DKGI65Y.js +305 -0
- package/dist/chunks/chunk-APBRV4W6.js +71 -0
- package/dist/chunks/{chunk-AN3H4JWT.js → chunk-APVJKUJP.js} +4 -4
- package/dist/chunks/chunk-CGNNKKW7.js +70 -0
- package/dist/chunks/{chunk-IPEOO7PN.js → chunk-CKBPEGTH.js} +2 -2
- package/dist/chunks/chunk-COJM27N2.js +73 -0
- package/dist/chunks/chunk-CVB5F7FJ.js +92 -0
- package/dist/chunks/{chunk-DVX7UAKA.js → chunk-DQ7AF2R5.js} +1 -1
- package/dist/chunks/{chunk-UHQTNURS.js → chunk-DVD56API.js} +5 -5
- package/dist/chunks/{chunk-UM6QUOOH.js → chunk-DZIPU2Q4.js} +3 -3
- package/dist/chunks/{chunk-7QYQVENQ.js → chunk-FC2FGSU2.js} +5 -5
- package/dist/chunks/{chunk-T2GF6JE3.js → chunk-GAZ57RX2.js} +1 -1
- package/dist/chunks/{chunk-R3D5OMSG.js → chunk-GF6N47NL.js} +1 -1
- package/dist/chunks/{chunk-3DNAX4HN.js → chunk-HBPURYPZ.js} +2 -2
- package/dist/chunks/{chunk-7J4MGACN.js → chunk-HN2A65AT.js} +10 -10
- package/dist/chunks/{chunk-HST5H23G.js → chunk-JRQ4ZPRK.js} +1 -1
- package/dist/chunks/chunk-LP7LPUQJ.js +81 -0
- package/dist/chunks/chunk-M2LWLS56.js +65 -0
- package/dist/chunks/{chunk-GT5X67P7.js → chunk-MFPMMKHP.js} +7 -7
- package/dist/chunks/{chunk-LE33OZ4V.js → chunk-N2RBQBUE.js} +43 -43
- package/dist/chunks/{chunk-DUYDXAR5.js → chunk-O3W7HYS7.js} +1 -1
- package/dist/chunks/chunk-OXI222BA.js +54 -0
- package/dist/chunks/chunk-P23KECK3.js +57 -0
- package/dist/chunks/{chunk-LNQN4PGS.js → chunk-P5M5QCAJ.js} +24 -24
- package/dist/chunks/{chunk-X3HT5IHG.js → chunk-POZOGQG7.js} +11 -11
- package/dist/chunks/{chunk-K7OOOI7B.js → chunk-QGE2XW66.js} +4 -4
- package/dist/chunks/{chunk-STG7FEIQ.js → chunk-S4Y3VMQH.js} +3 -3
- package/dist/chunks/chunk-UBT4DZYW.js +304 -0
- package/dist/chunks/chunk-UJTTWR5P.js +71 -0
- package/dist/chunks/{chunk-652VC4P7.js → chunk-UNAAYJKD.js} +39 -39
- package/dist/chunks/{chunk-AXKXWL35.js → chunk-WKKHCEXN.js} +5 -5
- package/dist/chunks/chunk-X22CGIKE.js +75 -0
- package/dist/chunks/chunk-X4UI5JKC.js +74 -0
- package/dist/chunks/chunk-XQJ2VVC6.js +69 -0
- package/dist/chunks/{chunk-CQ6QGYKJ.js → chunk-YI7HCLNY.js} +1 -1
- package/dist/chunks/{chunk-CVWIMZTL.js → chunk-YOYWFBRJ.js} +53 -53
- package/dist/chunks/chunk-ZBFR7DBR.js +70 -0
- package/dist/chunks/{chunk-KO24NRJ5.js → chunk-ZW7KTUDU.js} +2 -2
- package/dist/chunks/chunk-ZY3DR3P6.js +63 -0
- package/dist/chunks/chunk-ZYNF7B6N.js +70 -0
- package/dist/chunks/{client-NBSGVJPN.js → client-ORABD53R.js} +2 -2
- package/dist/chunks/{client-5YPZUV5L.js → client-YF3PYAFZ.js} +2 -2
- package/dist/chunks/{client-3FYDPRVC.js → client-YOSPARZX.js} +1 -1
- package/dist/chunks/{client-actions-J2SQWW4O.js → client-actions-LYJHQ4IE.js} +4 -4
- package/dist/chunks/{dangerous-3EDPWONV.js → dangerous-VCZB63L6.js} +3 -3
- package/dist/chunks/{editor-seams-NG3BESM6.js → editor-seams-4PF6BD4R.js} +9 -9
- package/dist/chunks/{editor-store-NDV4IXDK.js → editor-store-UAEROYSB.js} +1 -1
- package/dist/chunks/{export-watermark-SNBNUS3L.js → export-watermark-2N7ALJXN.js} +5 -5
- package/dist/chunks/{eyedropper-L5DVFZV5.js → eyedropper-3P75IZGM.js} +1 -1
- package/dist/chunks/{generate-media-ASNNFDML.js → generate-media-DYXU4BZL.js} +2 -2
- package/dist/chunks/{host-5DYGKFJ7.js → host-J4QG5WB7.js} +6 -6
- package/dist/chunks/{integrations-2BG5XVX3.js → integrations-KGJ2HE6V.js} +1 -1
- package/dist/chunks/{kit-modules-NMONCEP4.js → kit-modules-4HQU5EI2.js} +1 -1
- package/dist/chunks/{libraries-QV4QPEYK.js → libraries-NIRTR2IA.js} +5 -5
- package/dist/chunks/{live-EI26E2RB.js → live-XZKNAJ2I.js} +3 -3
- package/dist/chunks/{media-tool-OVVKBD3N.js → media-tool-YFIYMYI5.js} +1 -1
- package/dist/chunks/{new-file-DX5L4NF6.js → new-file-RNWHN4S6.js} +3 -3
- package/dist/chunks/{plugin-P6FYIVKR.js → plugin-AN5GLVH5.js} +2 -2
- package/dist/chunks/{plugin-import-V2ORN2OW.js → plugin-import-J5ZNYSIY.js} +13 -13
- package/dist/chunks/{presence-YNIJGI73.js → presence-YNSLRFAM.js} +2 -2
- package/dist/chunks/{project-UK457FEX.js → project-HSN7DOPK.js} +1 -1
- package/dist/chunks/{publish-site-E4A557HC.js → publish-site-T2C4IDD2.js} +6 -6
- package/dist/chunks/{publish-store-U5SDQCU4.js → publish-store-I2FOGDDF.js} +4 -4
- package/dist/chunks/{raster-actions-4E7H3G62.js → raster-actions-IVIGDYQU.js} +1 -1
- package/dist/chunks/{runner-DHWGPGPD.js → runner-IOXTGHBT.js} +16 -16
- package/dist/chunks/{store-CUL3XS5L.js → store-ZVOK3773.js} +5 -5
- package/dist/chunks/{sync-U23VGFOY.js → sync-XT2ZCTVE.js} +5 -5
- package/dist/chunks/{tabs-K6MESOUX.js → tabs-RIIW7KNI.js} +8 -8
- package/dist/chunks/{team-7APVVP43.js → team-KM3FZ6AU.js} +1 -1
- package/dist/chunks/{team-client-XTH5DXVW.js → team-client-2EXJKRDB.js} +1 -1
- package/dist/chunks/{tools-PE6DEYSG.js → tools-5ISIPPXP.js} +2 -2
- package/dist/chunks/{ui-commands-WQJFLB5K.js → ui-commands-GYCIF7UQ.js} +11 -11
- package/dist/chunks/{versions-Y4F3IO37.js → versions-JCQTXXUB.js} +5 -5
- package/dist/fonts/chars.txt +1 -1
- package/dist/index.js +4 -4
- package/dist/seed/files.json +1 -1
- package/dist/seed/popcraft.comic-nested.json.gz +0 -0
- package/dist/seed/popcraft.comic-pinup.json.gz +0 -0
- package/dist/templates/count.js +1 -1
- package/dist/templates/index.js +226 -210
- package/dist/templates/index.json +663 -0
- package/dist/templates/motion/landing-hero/index.js +4 -4
- package/dist/templates/motion/launch-trailer/document.js +226 -210
- package/dist/templates/motion/launch-trailer/index.js +4 -4
- package/dist/templates/motion/launch-trailer/scenes.js +3 -3
- package/dist/templates/motion/template-wall.js +2 -2
- package/dist/templates/print/comic-hero-cascade.js +100 -0
- package/dist/templates/print/comic-hero-chase.js +100 -0
- package/dist/templates/print/comic-hero-cover-modern.js +100 -0
- package/dist/templates/print/comic-hero-grid-break.js +100 -0
- package/dist/templates/print/comic-hero-interrogation.js +100 -0
- package/dist/templates/print/comic-hero-issue.js +109 -0
- package/dist/templates/print/comic-hero-manga-action.js +100 -0
- package/dist/templates/print/comic-hero-nested.js +100 -0
- package/dist/templates/print/comic-hero-overlap.js +100 -0
- package/dist/templates/print/comic-hero-parallel.js +100 -0
- package/dist/templates/print/comic-hero-pinup.js +100 -0
- package/dist/templates/print/comic-hero-widescreen.js +100 -0
- package/dist/templates/print/comic-modern-issue.js +4 -4
- package/dist/templates/saas/email-decks.js +2 -2
- package/dist/templates/saas/index.js +62 -62
- package/dist/templates/saas/launch-kit.js +5 -5
- package/dist/templates/saas/launch-video.js +2 -2
- package/dist/templates/saas/stores.js +4 -4
- package/dist/templates/slideshow/index.js +3 -3
- package/dist/templates/themes/bauhaus.js +2 -2
- package/dist/templates/themes/black-friday-coupons.js +2 -2
- package/dist/templates/themes/blueprint.js +2 -2
- package/dist/templates/themes/claymation.js +2 -2
- package/dist/templates/themes/comic-book.js +5 -5
- package/dist/{chunks/chunk-ATEECJLR.js → templates/themes/comic-hero-art.js} +11 -9
- package/dist/templates/themes/comic-hero-page.js +67 -0
- package/dist/templates/themes/comic-hero.js +97 -1
- package/dist/{chunks/chunk-ODXZPZKI.js → templates/themes/comic-indie-art.js} +7 -9
- package/dist/templates/themes/comic-indie-page.js +47 -0
- package/dist/templates/themes/comic-indie.js +85 -1
- package/dist/templates/themes/cyberpunk.js +2 -2
- package/dist/templates/themes/everyday.js +2 -2
- package/dist/templates/themes/festival-presale-family-a.js +2 -2
- package/dist/templates/themes/festival-presale-family-b.js +2 -2
- package/dist/templates/themes/holidays.js +11 -11
- package/dist/templates/themes/index.js +127 -111
- package/dist/templates/themes/lunar-new-year.js +2 -2
- package/dist/templates/themes/manuscript.js +2 -2
- package/dist/templates/themes/memories.js +5 -5
- package/dist/templates/themes/noir.js +2 -2
- package/dist/templates/themes/printshop.js +14 -14
- package/dist/templates/themes/psychedelic.js +2 -2
- package/dist/templates/themes/space-opera.js +2 -2
- package/dist/templates/themes/studio.js +2 -2
- package/dist/templates/themes/tour-tickets.js +2 -2
- package/package.json +1 -1
- package/src/templates/print/comic-hero-cascade.ts +42 -0
- package/src/templates/print/comic-hero-chase.ts +42 -0
- package/src/templates/print/comic-hero-cover-modern.ts +34 -0
- package/src/templates/print/comic-hero-grid-break.ts +39 -0
- package/src/templates/print/comic-hero-interrogation.ts +41 -0
- package/src/templates/print/comic-hero-issue.ts +44 -0
- package/src/templates/print/comic-hero-manga-action.ts +38 -0
- package/src/templates/print/comic-hero-nested.ts +39 -0
- package/src/templates/print/comic-hero-overlap.ts +40 -0
- package/src/templates/print/comic-hero-parallel.ts +40 -0
- package/src/templates/print/comic-hero-pinup.ts +29 -0
- package/src/templates/print/comic-hero-widescreen.ts +35 -0
- package/src/templates/themes/comic-hero-art.ts +66 -0
- package/src/templates/themes/comic-hero-page.ts +326 -0
- package/src/templates/themes/comic-hero.ts +15 -2
- package/src/templates/themes/comic-indie-art.ts +73 -0
- package/src/templates/themes/comic-indie-page.ts +182 -0
- package/src/templates/themes/comic-indie.ts +280 -2
- package/types/templates/src/print/comic-hero-cascade.d.ts +5 -0
- package/types/templates/src/print/comic-hero-chase.d.ts +5 -0
- package/types/templates/src/print/comic-hero-cover-modern.d.ts +5 -0
- package/types/templates/src/print/comic-hero-grid-break.d.ts +5 -0
- package/types/templates/src/print/comic-hero-interrogation.d.ts +5 -0
- package/types/templates/src/print/comic-hero-issue.d.ts +2 -0
- package/types/templates/src/print/comic-hero-manga-action.d.ts +5 -0
- package/types/templates/src/print/comic-hero-nested.d.ts +5 -0
- package/types/templates/src/print/comic-hero-overlap.d.ts +5 -0
- package/types/templates/src/print/comic-hero-parallel.d.ts +5 -0
- package/types/templates/src/print/comic-hero-pinup.d.ts +5 -0
- package/types/templates/src/print/comic-hero-widescreen.d.ts +5 -0
- package/types/templates/src/themes/comic-hero-art.d.ts +318 -0
- package/types/templates/src/themes/comic-hero-page.d.ts +177 -0
- package/types/templates/src/themes/comic-indie-art.d.ts +371 -0
- package/types/templates/src/themes/comic-indie-page.d.ts +125 -0
- package/dist/chunks/{chunk-BAZUZXS6.js → chunk-2BVGM5PJ.js} +3 -3
- package/dist/chunks/{chunk-WXY6LWRB.js → chunk-2J3PCCBE.js} +3 -3
- package/dist/chunks/{chunk-RH6WJNB4.js → chunk-2ZOSBENB.js} +3 -3
- package/dist/chunks/{chunk-FLXSWF6O.js → chunk-5GSRWIV2.js} +3 -3
- package/dist/chunks/{chunk-2WCMIJSA.js → chunk-5NGWNEKU.js} +3 -3
- package/dist/chunks/{chunk-IUK367P7.js → chunk-5PSOLUKI.js} +0 -0
- package/dist/chunks/{chunk-RUBJMQMF.js → chunk-7A3MIEOO.js} +3 -3
- package/dist/chunks/{chunk-R66IPFG4.js → chunk-7D46BJKY.js} +32 -32
- package/dist/chunks/{chunk-6H5ULKBL.js → chunk-7KFQX6N5.js} +3 -3
- package/dist/chunks/{chunk-EWGXFNXM.js → chunk-DF5IDTZB.js} +3 -3
- package/dist/chunks/{chunk-VT7UU3UP.js → chunk-ESV3AAQ4.js} +3 -3
- package/dist/chunks/{chunk-UJORPKRW.js → chunk-GN5W7TJD.js} +3 -3
- package/dist/chunks/{chunk-HQAHQJHQ.js → chunk-IPRJUV2O.js} +9 -9
- package/dist/chunks/{chunk-JVKC6UFV.js → chunk-KWXWK2LA.js} +3 -3
- package/dist/chunks/{chunk-PN6KHUSF.js → chunk-LOQNCZFE.js} +3 -3
- package/dist/chunks/{chunk-AKCMEBIQ.js → chunk-MNN76UQS.js} +12 -12
- package/dist/chunks/{chunk-ZRK4E77C.js → chunk-OGZJE5X2.js} +3 -3
- package/dist/chunks/{chunk-OTJJNSLB.js → chunk-PEDQKANG.js} +3 -3
- package/dist/chunks/{chunk-LDIYJJ24.js → chunk-PTRN7H4N.js} +11 -11
- package/dist/chunks/{chunk-J3XCBROI.js → chunk-QQMSM7EK.js} +3 -3
- package/dist/chunks/{chunk-FRFW37G6.js → chunk-TBIZI5NH.js} +3 -3
- package/dist/chunks/{chunk-BSX52WVT.js → chunk-UTFC2DI3.js} +8 -8
- package/dist/chunks/{chunk-GTR25NJ5.js → chunk-XIIFQUWN.js} +3 -3
- package/dist/chunks/{chunk-PGUAHUFE.js → chunk-XTFV46GB.js} +9 -9
- package/dist/chunks/{chunk-4ENF3NH3.js → chunk-ZLVYZPUR.js} +28 -28
|
@@ -1,5 +1,283 @@
|
|
|
1
|
-
// Comic indie pack: one warm slice-of-life
|
|
1
|
+
// Comic indie pack: "Last Summer on Alder Street", one warm slice-of-life story told across twelve comic formats
|
|
2
|
+
// (generated art, editable lettering). Juno and Theo have shared a flat on Alder Street for four years; Theo is
|
|
3
|
+
// moving away at the end of the summer. The boxes appear, the neighbour brings a tomato plant, they talk, Juno walks
|
|
4
|
+
// it off, they remember moving in, throw a rooftop party that gets rained on, and say goodbye at sunset. The letters
|
|
5
|
+
// page closes the issue. Every source in it, in gallery order.
|
|
2
6
|
import type { TemplateSource } from '../build'
|
|
7
|
+
import { defineTemplate } from '../build'
|
|
8
|
+
import { Kit, preset } from '../kit'
|
|
9
|
+
import type { IndieArtId } from './comic-indie-art'
|
|
10
|
+
import { STORY, caption, folio, display, frameOf, indieMeta, indieSetup, pageGrid, panel, rectFrame, rows, say, sfx, slantTier, tier, tierBox } from './comic-indie-page'
|
|
3
11
|
|
|
4
|
-
|
|
12
|
+
/** Each page's drawing, by template id, so the whole issue can draw the same pages into one book. */
|
|
13
|
+
const DRAW = new Map<string, (k: Kit) => void>()
|
|
14
|
+
|
|
15
|
+
const page = (id: string, name: string, description: string, tags: string[], size: string, draw: (k: Kit) => void) => {
|
|
16
|
+
DRAW.set(id, draw)
|
|
17
|
+
return defineTemplate({
|
|
18
|
+
id, meta: indieMeta(name, description, tags), stableNumbers: true,
|
|
19
|
+
build() { const k = new Kit(name, preset(size)); indieSetup(k); draw(k); folio(k, k.sheet, name); return k.finish() },
|
|
20
|
+
})
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A strip's title bar: the series name, left, and the strip's own title. */
|
|
24
|
+
function stripTitle(k: Kit, sheet: string, W: number, title: string) {
|
|
25
|
+
const t = k.stack(sheet, { width: W, height: 30, direction: 'HORIZONTAL', align: 'CENTER', gap: 12, name: 'Title bar' })
|
|
26
|
+
k.text(t, 'Alder Street', { style: display(k, 'Title'), color: 'text', name: 'Series' })
|
|
27
|
+
k.text(t, title, { style: display(k, 'Credit'), color: 'text', name: 'Strip title' })
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const 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 => {
|
|
31
|
+
const g = 10, { W, H } = pageGrid(k, k.sheet, 20, g)
|
|
32
|
+
stripTitle(k, k.sheet, W, 'Boxes')
|
|
33
|
+
const h = H - 30 - g, t = tierBox(k, k.sheet, W, h, 'Strip')
|
|
34
|
+
const [a, b, c, d] = slantTier(W, h, [1, 1, 1, 1], 10, g)
|
|
35
|
+
panel(k, t, a, 'gag-1', { ground: 'g1', name: 'Setup' })
|
|
36
|
+
panel(k, t, b, 'gag-2', { ground: 'g2', name: 'Setup again' })
|
|
37
|
+
panel(k, t, c, 'gag-3', { ground: 'g3', name: 'Turn' })
|
|
38
|
+
panel(k, t, d, 'gag-4', { ground: 'g4', name: 'Punchline' })
|
|
39
|
+
say(k, t, 'Morning!', { x: a.x + 160, y: 10, width: 90, to: { x: a.x + a.width * 0.62, y: 70 } })
|
|
40
|
+
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 } })
|
|
41
|
+
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 } })
|
|
42
|
+
caption(k, t, 'Monday.', { x: 8, y: h - 34, width: 70 })
|
|
43
|
+
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 } })
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
const 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 => {
|
|
47
|
+
const g = 10, { W, H } = pageGrid(k, k.sheet, 20, g)
|
|
48
|
+
stripTitle(k, k.sheet, W, 'The plant')
|
|
49
|
+
const h = H - 30 - g, t = tierBox(k, k.sheet, W, h, 'Strip')
|
|
50
|
+
const [a, b, c] = tier(W, h, [1, 1, 1], g)
|
|
51
|
+
panel(k, t, a, 'strip-1', { ground: 'g1', name: 'The knock' })
|
|
52
|
+
panel(k, t, b, 'strip-2', { ground: 'g3', name: 'The handover' })
|
|
53
|
+
panel(k, t, c, 'strip-3', { ground: 'g2', name: 'Holding it' })
|
|
54
|
+
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 } })
|
|
55
|
+
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 } })
|
|
56
|
+
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 } })
|
|
57
|
+
caption(k, t, 'Three weeks until he goes.', { x: c.x + 12, y: h - 40, width: 170 })
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
const 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 => {
|
|
61
|
+
const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
62
|
+
const [h1, h2, h3, h4] = rows(H, g, [24, 27, 27, 22])
|
|
63
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Tier 1')
|
|
64
|
+
panel(k, t1, rectFrame(0, 0, W, h1), 'talk-1', { ground: 'g1', name: 'Two-shot' })
|
|
65
|
+
caption(k, t1, 'The night the boxes came, we finally talked about it.', { x: 12, y: 12, width: 220 })
|
|
66
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Tier 2')
|
|
67
|
+
const [a, b] = slantTier(W, h2, [1, 1], 18, g)
|
|
68
|
+
panel(k, t2, a, 'talk-2', { ground: 'g2', name: 'Theo' })
|
|
69
|
+
panel(k, t2, b, 'talk-3', { ground: 'g4', name: 'Juno' })
|
|
70
|
+
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 } })
|
|
71
|
+
say(k, t2, 'I know.', { x: W - 108, y: 14, width: 90, to: { x: b.x + b.width * 0.4, y: h2 * 0.5 } })
|
|
72
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Tier 3')
|
|
73
|
+
const [c, d] = slantTier(W, h3, [1, 1], -18, g)
|
|
74
|
+
panel(k, t3, c, 'talk-4', { ground: 'g3', name: 'Theo turns' })
|
|
75
|
+
panel(k, t3, d, 'talk-5', { ground: 'g1', name: 'Juno looks away' })
|
|
76
|
+
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 } })
|
|
77
|
+
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 } })
|
|
78
|
+
const t4 = tierBox(k, k.sheet, W, h4, 'Tier 4')
|
|
79
|
+
panel(k, t4, rectFrame(0, 0, W, h4), 'talk-6', { ground: 'g2', name: 'Closer' })
|
|
80
|
+
say(k, t4, 'Rooftop party. Before you go.', { x: W - 186, y: 12, width: 168, to: { x: W * 0.55, y: h4 * 0.6 } })
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
const 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 => {
|
|
84
|
+
const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
85
|
+
const [h1, h2, h3, h4] = rows(H, g, [26, 23, 23, 28])
|
|
86
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Tier 1')
|
|
87
|
+
panel(k, t1, rectFrame(0, 0, W, h1), 'silent-1', { ground: 'g1', name: 'Out the door' })
|
|
88
|
+
caption(k, t1, 'Alder Street, 7:42 pm.', { x: 12, y: 12, width: 150 })
|
|
89
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Tier 2')
|
|
90
|
+
const [a, b] = tier(W, h2, [3, 2], g)
|
|
91
|
+
panel(k, t2, a, 'silent-2', { ground: 'g2', name: 'Corner shop' })
|
|
92
|
+
panel(k, t2, b, 'silent-3', { ground: 'g4', name: 'The fence' })
|
|
93
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Tier 3')
|
|
94
|
+
const [c, d] = tier(W, h3, [2, 3], g)
|
|
95
|
+
panel(k, t3, c, 'silent-4', { ground: 'g3', name: 'The bridge' })
|
|
96
|
+
panel(k, t3, d, 'silent-5', { ground: 'g1', name: 'The boat' })
|
|
97
|
+
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 } })
|
|
98
|
+
sfx(k, t3, 'quack', { x: W - 104, y: h3 - 62, w: 92, h: 52, deg: -6, seed: 3 })
|
|
99
|
+
const t4 = tierBox(k, k.sheet, W, h4, 'Tier 4')
|
|
100
|
+
panel(k, t4, rectFrame(0, 0, W, h4), 'silent-6', { ground: 'g2', name: 'The bench' })
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
const 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 => {
|
|
104
|
+
const g = 0, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
105
|
+
const [h1, h2, h3] = rows(H, g, [40, 26, 34])
|
|
106
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Tier 1')
|
|
107
|
+
const f1 = rectFrame(36, 40, 200, h1 - 80)
|
|
108
|
+
panel(k, t1, f1, 'neg-1', { ground: 'g3', name: 'Alone' })
|
|
109
|
+
caption(k, t1, 'Some things you cannot walk off.', { x: 260, y: h1 - 90, width: 180 })
|
|
110
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Black band', 'text')
|
|
111
|
+
const f2 = rectFrame(W - 236, 24, 200, h2 - 48)
|
|
112
|
+
panel(k, t2, f2, 'neg-2', { ground: 'g1', name: 'Plums', keyline: true })
|
|
113
|
+
say(k, t2, 'Sit. Eat a plum. Tell me.', { x: 120, y: 40, width: 128, to: { x: f2.x + 60, y: f2.y + 50 } })
|
|
114
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Tier 3')
|
|
115
|
+
const f3 = rectFrame(0, 50, W, h3 - 100)
|
|
116
|
+
panel(k, t3, f3, 'neg-3', { ground: 'g4', name: 'From above' })
|
|
117
|
+
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 } })
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
const 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 => {
|
|
121
|
+
const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
122
|
+
const [h1, h2, h3] = rows(H, g, [34, 30, 36])
|
|
123
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Tier 1')
|
|
124
|
+
panel(k, t1, rectFrame(0, 0, W, h1), 'riso-1', { ground: 'g2', name: 'The sofa' })
|
|
125
|
+
caption(k, t1, 'Four summers ago.', { x: 12, y: 12, width: 130 })
|
|
126
|
+
say(k, t1, 'Pivot! PIVOT!', { x: W - 112, y: 16, width: 96, to: { x: W * 0.6, y: h1 * 0.4 } })
|
|
127
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Tier 2')
|
|
128
|
+
const [a, b, c] = tier(W, h2, [1, 1, 1], g)
|
|
129
|
+
panel(k, t2, a, 'riso-2', { ground: 'g1', name: 'Noodles', tone: true })
|
|
130
|
+
panel(k, t2, b, 'riso-3', { ground: 'g3', name: 'The wall' })
|
|
131
|
+
panel(k, t2, c, 'riso-4', { ground: 'g4', name: 'The key' })
|
|
132
|
+
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 } })
|
|
133
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Tier 3')
|
|
134
|
+
const [d, e] = tier(W, h3, [1, 2], g)
|
|
135
|
+
panel(k, t3, d, 'riso-5', { ground: 'g2', name: 'The seedling', tone: true })
|
|
136
|
+
panel(k, t3, e, 'riso-6', { ground: 'g1', name: 'First morning' })
|
|
137
|
+
caption(k, t3, 'We did not own a bed yet. We owned a sofa.', { x: e.x + 12, y: h3 - 48, width: 220 })
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
const 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 => {
|
|
141
|
+
const g = 12, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
142
|
+
const hs = rows(H, g, [1, 1, 1])
|
|
143
|
+
const pairs: [string, string][] = [['zine-1', 'zine-2'], ['zine-3', 'zine-4'], ['zine-5', 'zine-6']]
|
|
144
|
+
const words = ['Rooftop. Saturday. Bring a chair.', 'Make it hot pink.', 'Everyone is invited. Even you, Mrs O.']
|
|
145
|
+
pairs.forEach(([l, r], i) => {
|
|
146
|
+
const t = tierBox(k, k.sheet, W, hs[i], `Mini pages ${i * 2 + 1}–${i * 2 + 2}`)
|
|
147
|
+
const [a, b] = tier(W, hs[i], [1, 1], g)
|
|
148
|
+
panel(k, t, a, l as IndieArtId, { ground: i % 2 ? 'g3' : 'g1', name: `Page ${i * 2 + 1}` })
|
|
149
|
+
panel(k, t, b, r as IndieArtId, { ground: i % 2 ? 'g4' : 'g2', name: `Page ${i * 2 + 2}` })
|
|
150
|
+
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 } })
|
|
151
|
+
else caption(k, t, words[i], { x: i ? b.x + 12 : 12, y: 12, width: 160 })
|
|
152
|
+
})
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
const 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 => {
|
|
156
|
+
const g = 26, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
157
|
+
const hs = rows(H, g, [22, 17, 17, 12, 32])
|
|
158
|
+
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']] as const
|
|
159
|
+
beats.forEach(([art, name, ground], i) => {
|
|
160
|
+
const t = tierBox(k, k.sheet, W, hs[i], `Beat ${i + 1}`)
|
|
161
|
+
panel(k, t, rectFrame(0, 0, W, hs[i]), art, { ground, name })
|
|
162
|
+
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 } })
|
|
163
|
+
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 } })
|
|
164
|
+
if (i === 4) caption(k, t, 'It looked like somewhere you would want to stay.', { x: 12, y: hs[i] - 46, width: 230 })
|
|
165
|
+
})
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
const 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 => {
|
|
169
|
+
const g = 8, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
170
|
+
const [h1, h2, h3] = rows(H, g, [30, 34, 36])
|
|
171
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Tier 1')
|
|
172
|
+
panel(k, t1, rectFrame(0, 0, W, h1), 'manga-1', { ground: 'g1', name: 'The party' })
|
|
173
|
+
caption(k, t1, 'Saturday. Everyone came.', { x: 12, y: 12, width: 150 })
|
|
174
|
+
say(k, t1, 'You call that dancing? Watch.', { x: W - 150, y: 12, width: 128, to: { x: W * 0.62, y: h1 * 0.55 } })
|
|
175
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Tier 2')
|
|
176
|
+
const [left, right] = slantTier(W, h2, [2, 3], 22, g)
|
|
177
|
+
panel(k, t2, right, 'manga-2', { ground: 'g2', name: 'Mrs Okafor dances' })
|
|
178
|
+
panel(k, t2, left, 'manga-3', { ground: 'g4', name: 'First drop' })
|
|
179
|
+
sfx(k, t2, 'plip', { x: 20, y: h2 - 72, w: 96, h: 56, deg: 8, seed: 5 })
|
|
180
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Tier 3')
|
|
181
|
+
const [l3, r3] = slantTier(W, h3, [3, 2], -22, g)
|
|
182
|
+
panel(k, t3, r3, 'manga-5', { ground: 'g3', name: 'The umbrella' })
|
|
183
|
+
panel(k, t3, l3, 'manga-4', { ground: 'g1', name: 'Scramble' })
|
|
184
|
+
sfx(k, t3, 'fwump', { x: r3.x + 30, y: 14, w: 110, h: 60, deg: -8, seed: 9 })
|
|
185
|
+
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 } })
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
const 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 => {
|
|
189
|
+
const g = 10, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
190
|
+
const cell = Math.floor((W - 2 * g) / 3)
|
|
191
|
+
const head = 56, foot = H - head - 3 * cell - 4 * g
|
|
192
|
+
const t0 = tierBox(k, k.sheet, W, head, 'Heading')
|
|
193
|
+
caption(k, t0, 'Everything that was ours, the week before he left.', { x: 0, y: 10, width: 300 })
|
|
194
|
+
const grounds = ['g1', 'g2', 'g3'] as const
|
|
195
|
+
for (let r = 0; r < 3; r++) {
|
|
196
|
+
const t = tierBox(k, k.sheet, W, cell, `Row ${r + 1}`)
|
|
197
|
+
tier(W, cell, [1, 1, 1], g).forEach((f, c) => panel(k, t, f, `icon-${r * 3 + c + 1}` as IndieArtId, { ground: grounds[(c + r) % 3], name: `Object ${r * 3 + c + 1}` }))
|
|
198
|
+
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 } })
|
|
199
|
+
}
|
|
200
|
+
tierBox(k, k.sheet, W, foot, 'Footer')
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
const 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 => {
|
|
204
|
+
const g = 10, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
205
|
+
const [h1, h2, h3, h4, h5] = rows(H, g, [22, 18, 16, 18, 26])
|
|
206
|
+
const inset = W * 0.22, waist = W * 0.32
|
|
207
|
+
const t1 = tierBox(k, k.sheet, W, h1, 'Top')
|
|
208
|
+
panel(k, t1, rectFrame(0, 0, W, h1), 'hour-1', { ground: 'g1', name: 'The edge' })
|
|
209
|
+
caption(k, t1, 'The last night.', { x: 12, y: 12, width: 120 })
|
|
210
|
+
const t2 = tierBox(k, k.sheet, W, h2, 'Narrowing')
|
|
211
|
+
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' })
|
|
212
|
+
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 } })
|
|
213
|
+
const t3 = tierBox(k, k.sheet, W, h3, 'Waist')
|
|
214
|
+
panel(k, t3, rectFrame(Math.round((W - waist) / 2), 0, Math.round(waist), h3), 'hour-3', { ground: 'g3', name: 'Her hand' })
|
|
215
|
+
const t4 = tierBox(k, k.sheet, W, h4, 'Widening')
|
|
216
|
+
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' })
|
|
217
|
+
const t5 = tierBox(k, k.sheet, W, h5, 'Bottom')
|
|
218
|
+
panel(k, t5, rectFrame(0, 0, W, h5), 'hour-5', { ground: 'g2', name: 'Two silhouettes' })
|
|
219
|
+
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 } })
|
|
220
|
+
})
|
|
221
|
+
|
|
222
|
+
const 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 => {
|
|
223
|
+
const g = 14, { W, H } = pageGrid(k, k.sheet, 36, g)
|
|
224
|
+
const t0 = tierBox(k, k.sheet, W, 56, 'Masthead')
|
|
225
|
+
k.text(t0, 'Letters to Alder Street', { style: display(k, 'Masthead'), color: 'text', name: 'Masthead', width: 'FILL' })
|
|
226
|
+
const letter = k.stack(k.sheet, { width: W, gap: 6, name: 'Letter' })
|
|
227
|
+
k.text(letter, 'Dear Alder Street,', { style: display(k, 'Credit'), color: 'text', name: 'Salutation' })
|
|
228
|
+
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' })
|
|
229
|
+
k.text(letter, '— A reader in a flat that is too quiet now', { style: display(k, 'Credit'), color: 'onPaper', name: 'Signature' })
|
|
230
|
+
const ph = 190, t = tierBox(k, k.sheet, W, ph, 'After')
|
|
231
|
+
const [a, b] = tier(W, ph, [1, 1], g)
|
|
232
|
+
panel(k, t, a, 'back-1', { ground: 'g1', name: 'The train' })
|
|
233
|
+
panel(k, t, b, 'back-2', { ground: 'g3', name: 'Watering' })
|
|
234
|
+
caption(k, t, 'After.', { x: 10, y: ph - 36, width: 70 })
|
|
235
|
+
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 } })
|
|
236
|
+
const reply = k.stack(k.sheet, { width: W, gap: 6, name: 'Reply' })
|
|
237
|
+
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' })
|
|
238
|
+
const used = 56 + ph + 4 * g + 270
|
|
239
|
+
const ind = k.stack(k.sheet, { width: W, height: Math.max(40, H - used), justify: 'MAX', name: 'Indicia' })
|
|
240
|
+
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' })
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
/** The front cover of the whole issue: the goodbye on the roof, full bleed, under the masthead. */
|
|
244
|
+
function issueCover(k: Kit, sheet: string) {
|
|
245
|
+
const { W, H } = pageGrid(k, sheet, 0, 0)
|
|
246
|
+
const t = tierBox(k, sheet, W, H, 'Cover')
|
|
247
|
+
// Full bleed: the art runs past the trim on every side, so the guillotine never leaves a white edge.
|
|
248
|
+
const b = k.doc.settings?.bleed?.left ?? 0
|
|
249
|
+
panel(k, t, rectFrame(-b, -b, W + 2 * b, H + 2 * b), 'hour-1', { ground: 'g1', name: 'Cover art' })
|
|
250
|
+
caption(k, t, `${STORY.series} · ${STORY.issue}`, { x: 36, y: 36, width: 200, name: 'Issue' })
|
|
251
|
+
caption(k, t, STORY.title, { x: 36, y: H - 110, width: 300, name: 'Cover title' })
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** The pages of the whole issue, in story order: every page-sized format in the series. */
|
|
255
|
+
const ISSUE: [string, string][] = [
|
|
256
|
+
['comic-talking-heads', 'Page 1'], ['comic-silent', 'Page 2'], ['comic-negative-space', 'Page 3'], ['comic-riso', 'Page 4'],
|
|
257
|
+
['comic-zine', 'Page 5'], ['comic-webtoon', 'Page 6'], ['comic-icon-grid', 'Page 7'], ['comic-hourglass', 'Page 8'], ['comic-backmatter', 'Letters'],
|
|
258
|
+
]
|
|
259
|
+
|
|
260
|
+
const wholeIssue = defineTemplate({
|
|
261
|
+
id: 'comic-indie-issue',
|
|
262
|
+
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']),
|
|
263
|
+
sequence: true,
|
|
264
|
+
stableNumbers: true,
|
|
265
|
+
build() {
|
|
266
|
+
const k = new Kit('Whole comic issue (Alder Street)', preset('comic-page'))
|
|
267
|
+
indieSetup(k)
|
|
268
|
+
k.doc = { ...k.doc, settings: { ...k.doc.settings, facingPages: true } }
|
|
269
|
+
const front = k.sheet
|
|
270
|
+
k.nameSheet(front, 'Front cover')
|
|
271
|
+
issueCover(k, front)
|
|
272
|
+
k.setCover(front)
|
|
273
|
+
for (const [id, name] of ISSUE) {
|
|
274
|
+
const sheet = k.addSheet(preset('comic-page'), name)
|
|
275
|
+
DRAW.get(id)!(k)
|
|
276
|
+
folio(k, sheet, name)
|
|
277
|
+
}
|
|
278
|
+
return k.finish()
|
|
279
|
+
},
|
|
280
|
+
})
|
|
281
|
+
|
|
282
|
+
const pack: readonly TemplateSource[] = [gagFour, stripDaily, talkingHeads, silent, negativeSpace, riso, zine, webtoon, manga, iconGrid, hourglass, backmatter, wholeIssue]
|
|
5
283
|
export default pack
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Kit } from '../kit.js';
|
|
2
|
+
declare const _default: import("../../../packages/kit/src/index.js").TemplateSource;
|
|
3
|
+
export default _default;
|
|
4
|
+
/** This page's drawing onto the kit's last sheet: shared with the whole issue (comic-hero-issue). */
|
|
5
|
+
export declare function drawPage(k: Kit): void;
|