@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.
- package/dist/chunks/{agent-45ZGYKTC.js → agent-NTEAEZBN.js} +1 -1
- package/dist/chunks/{build-K6QBTLT7.js → build-W5O2ZVN7.js} +2 -2
- package/dist/chunks/{builtin-ZS3HJHZL.js → builtin-KX2SGDND.js} +3 -3
- package/dist/chunks/{check-template-RZ7IO333.js → check-template-B2KKE6BW.js} +2 -2
- package/dist/chunks/{chunk-ZKHYC3QO.js → chunk-37WES5PM.js} +2 -2
- package/dist/chunks/chunk-45JABNLR.js +161 -0
- package/dist/chunks/chunk-4OGILN7Y.js +141 -0
- package/dist/chunks/{chunk-63X37RCC.js → chunk-5NWVUAWR.js} +4 -4
- package/dist/chunks/{chunk-QREG6HEK.js → chunk-67SLLJJB.js} +40 -40
- package/dist/chunks/chunk-6DV5JZ5M.js +121 -0
- package/dist/chunks/chunk-7Q67MXXL.js +140 -0
- package/dist/chunks/{chunk-R5CW4CNP.js → chunk-A6GPFR5O.js} +11 -11
- package/dist/chunks/chunk-AISWLDDO.js +895 -0
- package/dist/chunks/{chunk-ADZXK6SM.js → chunk-AQGECTRJ.js} +1 -1
- package/dist/chunks/chunk-ASWWZNTY.js +130 -0
- package/dist/chunks/chunk-BNEFANT2.js +134 -0
- package/dist/chunks/{chunk-REJO7GXO.js → chunk-CFEKYNGQ.js} +2 -2
- package/dist/chunks/{chunk-5HG4LWF5.js → chunk-D4HEDPVN.js} +161 -0
- package/dist/chunks/chunk-DRESZDOP.js +130 -0
- package/dist/chunks/{chunk-3W2MSVJA.js → chunk-EBLHS2EG.js} +5 -5
- package/dist/chunks/chunk-EHTLT6XJ.js +131 -0
- package/dist/chunks/{chunk-2AQK4IIV.js → chunk-EVFG2K4L.js} +1 -1
- package/dist/chunks/{chunk-6TJIEERG.js → chunk-F4NTIOTT.js} +26 -26
- package/dist/chunks/chunk-FC7B22QS.js +150 -0
- package/dist/chunks/{chunk-V6COW3DB.js → chunk-G6MIC23V.js} +1 -1
- package/dist/chunks/{chunk-4QBQ4RAA.js → chunk-GODXMHO3.js} +4 -4
- package/dist/chunks/chunk-GT22XGDH.js +152 -0
- package/dist/chunks/chunk-HL4M53ZR.js +143 -0
- package/dist/chunks/{chunk-MPI6SCA7.js → chunk-IDL5KKIC.js} +5 -5
- package/dist/chunks/{chunk-HR7HCFPX.js → chunk-IM6HORNC.js} +5 -5
- package/dist/chunks/{chunk-UVMU6CXR.js → chunk-IWCZDFXL.js} +17 -17
- package/dist/chunks/{chunk-OCSLBM6W.js → chunk-JXAJ6OST.js} +1 -1
- package/dist/chunks/{chunk-5WGMPGKY.js → chunk-KS7DVWDB.js} +1 -1
- package/dist/chunks/chunk-NHDBQ4G7.js +137 -0
- package/dist/chunks/chunk-NKPU5TF2.js +103 -0
- package/dist/chunks/chunk-NO734F3F.js +146 -0
- package/dist/chunks/{chunk-ASWAIYNC.js → chunk-NR2SFSJU.js} +3 -3
- package/dist/chunks/{chunk-CJY4TNOS.js → chunk-O3BEBIDN.js} +3 -1
- package/dist/chunks/{chunk-UDO3ZU5T.js → chunk-OR6HMJRM.js} +1 -1
- package/dist/chunks/chunk-OTICJQ4T.js +267 -0
- package/dist/chunks/chunk-PWZZRGWI.js +141 -0
- package/dist/chunks/{chunk-AE6S2M2B.js → chunk-QX4U3VTU.js} +25 -25
- package/dist/chunks/{chunk-TRUFIU5W.js → chunk-R3YD6VL6.js} +3 -3
- package/dist/chunks/{chunk-YSYZW4VZ.js → chunk-SFPM3UJA.js} +7 -7
- package/dist/chunks/chunk-SNXQM4UO.js +115 -0
- package/dist/chunks/chunk-T3LV66CQ.js +139 -0
- package/dist/chunks/chunk-TDGIO2S7.js +145 -0
- package/dist/chunks/chunk-TFNV2UP4.js +87 -0
- package/dist/chunks/chunk-UJZXKOTP.js +136 -0
- package/dist/chunks/{chunk-QAVWMRRM.js → chunk-V5HI55XO.js} +2 -2
- package/dist/chunks/chunk-VVNPBBPL.js +174 -0
- package/dist/chunks/{chunk-22RNC42G.js → chunk-YHA45NK5.js} +1 -1
- package/dist/chunks/{chunk-27EVM272.js → chunk-YPMT4Y4N.js} +2 -2
- package/dist/chunks/chunk-YRSDFRCX.js +122 -0
- package/dist/chunks/chunk-ZNARVSMD.js +140 -0
- package/dist/chunks/{chunk-3DWOQ4LW.js → chunk-ZTBKAGBN.js} +2 -2
- package/dist/chunks/{client-6DUSRTZG.js → client-25NJXQWL.js} +1 -1
- package/dist/chunks/{client-XYPBNSQ7.js → client-7AQTKZHV.js} +2 -2
- package/dist/chunks/{client-TRFNJJHQ.js → client-LWBTUXQK.js} +2 -2
- package/dist/chunks/{client-actions-SSUZUEG7.js → client-actions-3HIRRSOL.js} +4 -4
- package/dist/chunks/{dangerous-UX4DHJ7U.js → dangerous-XJOHEWL6.js} +3 -3
- package/dist/chunks/{editor-seams-V7ZP7XH3.js → editor-seams-4DREZRTT.js} +9 -9
- package/dist/chunks/{editor-store-OIHZT244.js → editor-store-C4VWC23J.js} +1 -1
- package/dist/chunks/{export-watermark-4NAP5RVM.js → export-watermark-OKGRZNOU.js} +5 -5
- package/dist/chunks/{eyedropper-QXEY7LVL.js → eyedropper-WZYSTUTM.js} +1 -1
- package/dist/chunks/{generate-media-JAEHWNF6.js → generate-media-DFSHOPOI.js} +2 -2
- package/dist/chunks/{host-IKFYVZS7.js → host-4ZE7SIWR.js} +6 -6
- package/dist/chunks/{integrations-U5X2BHVK.js → integrations-LPC35FKX.js} +1 -1
- package/dist/chunks/{kit-modules-BAUMECYQ.js → kit-modules-BAKTDLOZ.js} +1 -1
- package/dist/chunks/{libraries-Q5TCHWGI.js → libraries-ACERXG2O.js} +5 -5
- package/dist/chunks/{live-4XQEGNLA.js → live-ZIVBFX3G.js} +3 -3
- package/dist/chunks/{media-tool-OSQR45HY.js → media-tool-2ZPIQKJD.js} +1 -1
- package/dist/chunks/{new-file-VVLWHEJ4.js → new-file-XS3KCMGM.js} +3 -3
- package/dist/chunks/{plugin-44ZW5UEP.js → plugin-6RNMUP5I.js} +2 -2
- package/dist/chunks/{plugin-import-3ISLDX7T.js → plugin-import-UC5BHZFE.js} +13 -13
- package/dist/chunks/{presence-WVU4OIUA.js → presence-TLDOMBPD.js} +2 -2
- package/dist/chunks/{project-EG7XFEJU.js → project-NMPK4R5M.js} +1 -1
- package/dist/chunks/{publish-site-WFIX42D3.js → publish-site-R46ZILSS.js} +6 -6
- package/dist/chunks/{publish-store-6BS7OIP4.js → publish-store-MIPHEDLV.js} +4 -4
- package/dist/chunks/{raster-actions-37XUQSVZ.js → raster-actions-7EI5THLB.js} +1 -1
- package/dist/chunks/{runner-HZ7MU6ER.js → runner-I66TTKKZ.js} +16 -16
- package/dist/chunks/{store-PHWBXKNY.js → store-7WMR3JKP.js} +5 -5
- package/dist/chunks/{sync-IJNKHQRF.js → sync-OFINS45Q.js} +5 -5
- package/dist/chunks/{tabs-G6OTEGA5.js → tabs-PEH6VX3X.js} +8 -8
- package/dist/chunks/{team-M2EN4JT5.js → team-GGW3O32G.js} +1 -1
- package/dist/chunks/{tools-WDFCY4BH.js → tools-TKCA46ZS.js} +2 -2
- package/dist/chunks/{ui-commands-QHFGR33P.js → ui-commands-6K4PYKU5.js} +11 -11
- package/dist/chunks/{versions-S7COCZSQ.js → versions-KHRNQFGF.js} +5 -5
- package/dist/index.js +4 -4
- package/dist/seed/files.json +1 -1
- package/dist/templates/count.js +1 -1
- package/dist/templates/index.js +125 -101
- package/dist/templates/index.json +756 -0
- package/dist/templates/motion/landing-hero/index.js +4 -4
- package/dist/templates/motion/launch-trailer/document.js +125 -101
- 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/holidays-christmas-church-newsletter.js +94 -0
- package/dist/templates/print/holidays-christmas-eve-invitation.js +94 -0
- package/dist/templates/print/holidays-christmas-gift-tags.js +94 -0
- package/dist/templates/print/holidays-diwali-party-invitation.js +95 -0
- package/dist/templates/print/holidays-easter-activity-sheet.js +94 -0
- package/dist/templates/print/holidays-easter-egg-hunt-flyer.js +94 -0
- package/dist/templates/print/holidays-eid-dinner-invitation.js +95 -0
- package/dist/templates/print/holidays-eid-gift-tags.js +94 -0
- package/dist/templates/print/holidays-halloween-party-invitation.js +95 -0
- package/dist/templates/print/holidays-halloween-treat-labels.js +94 -0
- package/dist/templates/print/holidays-halloween-trunk-or-treat-poster.js +94 -0
- package/dist/templates/print/holidays-hanukkah-activity-sheet.js +94 -0
- package/dist/templates/print/holidays-hanukkah-party-invitation.js +94 -0
- package/dist/templates/print/holidays-lunar-new-year-banquet-menu.js +95 -0
- package/dist/templates/print/holidays-new-years-eve-poster.js +94 -0
- package/dist/templates/print/holidays-thanksgiving-dinner-menu.js +94 -0
- package/dist/templates/print/holidays-thanksgiving-place-cards.js +94 -0
- package/dist/templates/print/holidays-valentines-dinner-menu.js +94 -0
- package/dist/templates/saas/email-decks.js +2 -2
- package/dist/templates/saas/index.js +37 -37
- package/dist/templates/saas/launch-kit.js +2 -2
- package/dist/templates/saas/launch-video.js +2 -2
- package/dist/templates/saas/stores.js +2 -2
- package/dist/templates/saas/style-bento.js +2 -2
- package/dist/templates/saas/style-dark.js +2 -2
- package/dist/templates/saas/style-editorial.js +2 -2
- package/dist/templates/saas/style-gradient.js +2 -2
- package/dist/templates/saas/style-pastel.js +2 -2
- package/dist/templates/saas/style-swiss.js +2 -2
- package/dist/templates/slideshow/index.js +3 -3
- package/dist/templates/social/holidays-diwali-sweet-shop-post.js +96 -0
- package/dist/templates/social/holidays-lunar-new-year-bakery-post.js +96 -0
- package/dist/templates/social/holidays-new-years-eve-shop-hours.js +96 -0
- package/dist/templates/social/holidays-thanksgiving-pie-orders-post.js +96 -0
- package/dist/templates/social/holidays-valentines-florist-post.js +96 -0
- package/dist/templates/themes/black-friday-coupons.js +2 -2
- package/dist/templates/themes/black-friday-neon.js +2 -2
- package/dist/templates/themes/blueprint.js +2 -2
- package/dist/templates/themes/broadsheet.js +2 -2
- package/dist/templates/themes/cyberpunk.js +2 -2
- package/dist/templates/themes/departure-board.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-shared.js +172 -0
- package/dist/templates/themes/holidays.js +107 -1
- package/dist/templates/themes/index.js +72 -48
- package/dist/templates/themes/lunar-new-year.js +2 -2
- package/dist/templates/themes/noir.js +2 -2
- package/dist/templates/themes/psychedelic.js +2 -2
- package/dist/templates/themes/space-opera.js +2 -2
- package/dist/templates/themes/studio.js +3 -3
- package/dist/templates/themes/tour-tickets.js +2 -2
- package/dist/templates/themes/vaporwave.js +2 -2
- package/package.json +1 -1
- package/src/templates/print/holidays-christmas-church-newsletter.ts +246 -0
- package/src/templates/print/holidays-christmas-eve-invitation.ts +121 -0
- package/src/templates/print/holidays-christmas-gift-tags.ts +117 -0
- package/src/templates/print/holidays-diwali-party-invitation.ts +98 -0
- package/src/templates/print/holidays-easter-activity-sheet.ts +108 -0
- package/src/templates/print/holidays-easter-egg-hunt-flyer.ts +118 -0
- package/src/templates/print/holidays-eid-dinner-invitation.ts +104 -0
- package/src/templates/print/holidays-eid-gift-tags.ts +94 -0
- package/src/templates/print/holidays-halloween-party-invitation.ts +101 -0
- package/src/templates/print/holidays-halloween-treat-labels.ts +86 -0
- package/src/templates/print/holidays-halloween-trunk-or-treat-poster.ts +148 -0
- package/src/templates/print/holidays-hanukkah-activity-sheet.ts +112 -0
- package/src/templates/print/holidays-hanukkah-party-invitation.ts +112 -0
- package/src/templates/print/holidays-lunar-new-year-banquet-menu.ts +110 -0
- package/src/templates/print/holidays-new-years-eve-poster.ts +117 -0
- package/src/templates/print/holidays-thanksgiving-dinner-menu.ts +110 -0
- package/src/templates/print/holidays-thanksgiving-place-cards.ts +80 -0
- package/src/templates/print/holidays-valentines-dinner-menu.ts +95 -0
- package/src/templates/social/holidays-diwali-sweet-shop-post.ts +121 -0
- package/src/templates/social/holidays-lunar-new-year-bakery-post.ts +110 -0
- package/src/templates/social/holidays-new-years-eve-shop-hours.ts +118 -0
- package/src/templates/social/holidays-thanksgiving-pie-orders-post.ts +115 -0
- package/src/templates/social/holidays-valentines-florist-post.ts +102 -0
- package/src/templates/themes/holidays-shared.ts +903 -0
- package/src/templates/themes/holidays.ts +24 -1
- package/types/templates/src/print/holidays-christmas-church-newsletter.d.ts +2 -0
- package/types/templates/src/print/holidays-christmas-eve-invitation.d.ts +2 -0
- package/types/templates/src/print/holidays-christmas-gift-tags.d.ts +2 -0
- package/types/templates/src/print/holidays-diwali-party-invitation.d.ts +2 -0
- package/types/templates/src/print/holidays-easter-activity-sheet.d.ts +2 -0
- package/types/templates/src/print/holidays-easter-egg-hunt-flyer.d.ts +2 -0
- package/types/templates/src/print/holidays-eid-dinner-invitation.d.ts +2 -0
- package/types/templates/src/print/holidays-eid-gift-tags.d.ts +2 -0
- package/types/templates/src/print/holidays-halloween-party-invitation.d.ts +2 -0
- package/types/templates/src/print/holidays-halloween-treat-labels.d.ts +2 -0
- package/types/templates/src/print/holidays-halloween-trunk-or-treat-poster.d.ts +2 -0
- package/types/templates/src/print/holidays-hanukkah-activity-sheet.d.ts +2 -0
- package/types/templates/src/print/holidays-hanukkah-party-invitation.d.ts +2 -0
- package/types/templates/src/print/holidays-lunar-new-year-banquet-menu.d.ts +2 -0
- package/types/templates/src/print/holidays-new-years-eve-poster.d.ts +2 -0
- package/types/templates/src/print/holidays-thanksgiving-dinner-menu.d.ts +2 -0
- package/types/templates/src/print/holidays-thanksgiving-place-cards.d.ts +2 -0
- package/types/templates/src/print/holidays-valentines-dinner-menu.d.ts +2 -0
- package/types/templates/src/social/holidays-diwali-sweet-shop-post.d.ts +2 -0
- package/types/templates/src/social/holidays-lunar-new-year-bakery-post.d.ts +2 -0
- package/types/templates/src/social/holidays-new-years-eve-shop-hours.d.ts +2 -0
- package/types/templates/src/social/holidays-thanksgiving-pie-orders-post.d.ts +2 -0
- package/types/templates/src/social/holidays-valentines-florist-post.d.ts +2 -0
- package/types/templates/src/themes/holidays-shared.d.ts +374 -0
- package/dist/chunks/chunk-OWZLREWX.js +0 -18
- package/dist/chunks/{chunk-IFJTWD4O.js → chunk-2R3MZKA2.js} +3 -3
- package/dist/chunks/{chunk-P67L32AF.js → chunk-3DBNMCGN.js} +3 -3
- package/dist/chunks/{chunk-DZDTVMUO.js → chunk-3VHOXVMF.js} +3 -3
- package/dist/chunks/{chunk-2PQI2R5L.js → chunk-64RMGOTG.js} +0 -0
- package/dist/chunks/{chunk-7BDCMMSD.js → chunk-6Y46SDFE.js} +3 -3
- package/dist/chunks/{chunk-6VCQ4ZEG.js → chunk-AFARXTNQ.js} +3 -3
- package/dist/chunks/{chunk-ITSYENCT.js → chunk-BI3M4RUH.js} +3 -3
- package/dist/chunks/{chunk-25FM5JIR.js → chunk-BP7CHO7K.js} +3 -3
- package/dist/chunks/{chunk-D22534DX.js → chunk-DPTFZDOS.js} +3 -3
- package/dist/chunks/{chunk-JWLR6K62.js → chunk-FNUM5W3W.js} +3 -3
- package/dist/chunks/{chunk-JPH6HOYU.js → chunk-HJQU5POV.js} +3 -3
- package/dist/chunks/{chunk-HQYZ4URA.js → chunk-IJ65QZLL.js} +3 -3
- package/dist/chunks/{chunk-47VVF5TM.js → chunk-INT2OPPY.js} +8 -8
- package/dist/chunks/{chunk-AYVAHMWQ.js → chunk-JPMLUHZX.js} +3 -3
- package/dist/chunks/{chunk-LFYNAAAQ.js → chunk-LMRTRVPC.js} +3 -3
- package/dist/chunks/{chunk-HJIMF4NA.js → chunk-NGMCQZA6.js} +3 -3
- package/dist/chunks/{chunk-B3ASV6KS.js → chunk-PQBYL7AI.js} +3 -3
- package/dist/chunks/{chunk-NHXNUDC5.js → chunk-QD4QORNR.js} +3 -3
- package/dist/chunks/{chunk-P6TPDLAF.js → chunk-S3C6L5KF.js} +3 -3
- package/dist/chunks/{chunk-TIRPXUK2.js → chunk-S7L2D7NH.js} +3 -3
- package/dist/chunks/{chunk-QFGFR5FQ.js → chunk-TYOOL27R.js} +3 -3
- package/dist/chunks/{chunk-32V4D45K.js → chunk-TYW7EXV6.js} +3 -3
- package/dist/chunks/{chunk-3QIDCP4M.js → chunk-VOEAQIQT.js} +3 -3
- package/dist/chunks/{chunk-ASVDOX62.js → chunk-VVUQG4ME.js} +3 -3
- package/dist/chunks/{chunk-ZXZ22FKF.js → chunk-XTWKSMJC.js} +3 -3
- package/dist/chunks/{chunk-6NG5K7WN.js → chunk-YHEMML5Q.js} +3 -3
- package/dist/chunks/{chunk-MVFPEBMY.js → chunk-ZKRSVNY4.js} +3 -3
|
@@ -0,0 +1,146 @@
|
|
|
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
|
+
along,
|
|
9
|
+
disc,
|
|
10
|
+
draw,
|
|
11
|
+
egg,
|
|
12
|
+
eggBands,
|
|
13
|
+
grass,
|
|
14
|
+
polyP,
|
|
15
|
+
printVariant,
|
|
16
|
+
quad,
|
|
17
|
+
rabbit,
|
|
18
|
+
rectPath,
|
|
19
|
+
tulip
|
|
20
|
+
} from "./chunk-AISWLDDO.js";
|
|
21
|
+
import {
|
|
22
|
+
SERIF
|
|
23
|
+
} from "./chunk-X23ZWFW2.js";
|
|
24
|
+
import {
|
|
25
|
+
defineTemplate
|
|
26
|
+
} from "./chunk-A44WEVKR.js";
|
|
27
|
+
import {
|
|
28
|
+
Kit,
|
|
29
|
+
preset
|
|
30
|
+
} from "./chunk-T3SGRYUX.js";
|
|
31
|
+
import {
|
|
32
|
+
init_define_POPCRAFT_COMPONENT_IDS
|
|
33
|
+
} from "./chunk-6VMOKHMF.js";
|
|
34
|
+
|
|
35
|
+
// templates/src/print/holidays-easter-egg-hunt-flyer.ts
|
|
36
|
+
init_define_POPCRAFT_COMPONENT_IDS();
|
|
37
|
+
var NAME = "Easter egg hunt flyer";
|
|
38
|
+
var PAD = { top: 236, right: 56, bottom: 316, left: 56 };
|
|
39
|
+
function hill(w, y, amp, phase, bottom, B) {
|
|
40
|
+
return polyP([{ x: -B, y: bottom + B }, ...Array.from({ length: 17 }, (_, i) => ({ x: -B + (w + 2 * B) * i / 16, y: y + Math.sin(i * 0.5 + phase) * amp })), { x: w + B, y: bottom + B }]);
|
|
41
|
+
}
|
|
42
|
+
function art(w, h) {
|
|
43
|
+
const s = w / 816, B = 12;
|
|
44
|
+
const sun = { x: w - 120 * s, y: 70 * s };
|
|
45
|
+
const rays = Array.from({ length: 14 }, (_, i) => {
|
|
46
|
+
const a = i * Math.PI / 7;
|
|
47
|
+
return polyP([{ x: sun.x + Math.cos(a - 0.09) * 70 * s, y: sun.y + Math.sin(a - 0.09) * 70 * s }, { x: sun.x + Math.cos(a) * 112 * s, y: sun.y + Math.sin(a) * 112 * s }, { x: sun.x + Math.cos(a + 0.09) * 70 * s, y: sun.y + Math.sin(a + 0.09) * 70 * s }]);
|
|
48
|
+
});
|
|
49
|
+
const cloud = (x, y, k) => [disc(x, y, 46 * k * s, 26 * k * s), disc(x + 40 * k * s, y - 14 * k * s, 36 * k * s, 30 * k * s), disc(x + 82 * k * s, y + 2 * k * s, 40 * k * s, 22 * k * s), rectPath(x - 30 * k * s, y + 4 * k * s, 140 * k * s, 22 * k * s)];
|
|
50
|
+
const g = h - 330 * s;
|
|
51
|
+
const eggs = [[0.12, 0.83, 54, -0.3, "zigzag", "eggPink"], [0.3, 0.9, 46, 0.25, "dots", "eggYellow"], [0.52, 0.86, 58, -0.1, "waves", "eggBlue"], [0.7, 0.93, 44, 0.35, "zigzag", "eggLilac"], [0.9, 0.85, 50, -0.2, "dots", "eggPink"], [0.42, 0.96, 40, -0.4, "zigzag", "eggYellow"]];
|
|
52
|
+
const flags = { eggPink: [], eggYellow: [], eggBlue: [], eggLilac: [] };
|
|
53
|
+
const string = [];
|
|
54
|
+
const cols = ["eggPink", "eggYellow", "eggBlue", "eggLilac"];
|
|
55
|
+
for (let span = 0; span < 2; span++) {
|
|
56
|
+
const a = { x: -B + span * (w + 2 * B) / 2, y: 150 * s }, c = { x: -B + (span + 1) * (w + 2 * B) / 2, y: 150 * s }, m = { x: (a.x + c.x) / 2, y: 210 * s };
|
|
57
|
+
string.push(quad(a, m, c, 16));
|
|
58
|
+
for (let i = 1; i < 9; i++) {
|
|
59
|
+
const t = i / 9, p = along(a, m, c, t), q = along(a, m, c, t + 0.07);
|
|
60
|
+
const dx = q.p.x - p.p.x, dy = q.p.y - p.p.y;
|
|
61
|
+
flags[cols[(i + span) % 4]].push(polyP([p.p, q.p, { x: (p.p.x + q.p.x) / 2 - dy * 0.9, y: (p.p.y + q.p.y) / 2 + Math.abs(dx) * 1.3 }]));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const out = [
|
|
65
|
+
{ name: "Sun rays", paths: rays, color: "sun", o: { opacity: 0.7 } },
|
|
66
|
+
{ name: "Sun", paths: [disc(sun.x, sun.y, 60 * s)], color: "sun" },
|
|
67
|
+
{ name: "Clouds", paths: cloud(60 * s, 82 * s, 1), color: "cloud" },
|
|
68
|
+
{ name: "Clouds", paths: cloud(380 * s, 46 * s, 0.7), color: "cloud" },
|
|
69
|
+
{ name: "Bunting string", paths: string, color: "eggInk", o: { strokeWidth: 1.6 * s } },
|
|
70
|
+
...cols.map((cname) => ({ name: "Bunting", paths: flags[cname], color: cname })),
|
|
71
|
+
{ name: "Far hill", paths: [hill(w, g + 70 * s, 18 * s, 0.3, h, B)], color: "hillFar" },
|
|
72
|
+
{ name: "Hedge", paths: Array.from({ length: 9 }, (_, i) => disc(w * (0.58 + i * 0.055), g + 96 * s - i % 2 * 8 * s, 34 * s, 28 * s)), color: "hedge" },
|
|
73
|
+
{ name: "Mid hill", paths: [hill(w, g + 150 * s, 14 * s, 2, h, B)], color: "hillMid" },
|
|
74
|
+
{ name: "Near hill", paths: [hill(w, g + 220 * s, 10 * s, 4.2, h, B)], color: "hillNear" }
|
|
75
|
+
];
|
|
76
|
+
const r = rabbit(w * 0.84, g + 120 * s, 120 * s, -1);
|
|
77
|
+
out.push({ name: "Rabbit", paths: r.body, color: "rabbit" }, { name: "Rabbit tail", paths: r.tail, color: "cloud" });
|
|
78
|
+
const tl = [tulip(w * 0.04, h - 70 * s, 120 * s, 0.05), tulip(w * 0.08, h - 60 * s, 96 * s, -0.08), tulip(w * 0.96, h - 64 * s, 110 * s, -0.05), tulip(w * 0.62, h - 30 * s, 84 * s, 0.06)];
|
|
79
|
+
out.push({ name: "Tulip stems", paths: tl.flatMap((t) => t.stem), color: "stem", o: { strokeWidth: 4 * s } }, { name: "Tulip leaves", paths: tl.flatMap((t) => t.leaves), color: "stem" }, { name: "Tulips", paths: tl.flatMap((t) => t.cup), color: "tulip" });
|
|
80
|
+
for (const [x, y, sz, t, kind, col] of eggs) {
|
|
81
|
+
const cx = w * x, cy = h * y;
|
|
82
|
+
const b = eggBands(cx, cy, sz * 0.78 * s, sz * s, t, kind);
|
|
83
|
+
out.push({ name: "Egg", paths: [egg(cx, cy, sz * 0.78 * s, sz * s, t)], color: col }, { name: "Egg bands", paths: b.lines, color: "eggInk", o: { strokeWidth: 2.6 * s } }, { name: "Egg dots", paths: b.dots, color: "cloud" });
|
|
84
|
+
}
|
|
85
|
+
out.push({ name: "Grass", paths: grass(-B, w + B, h + B, 44 * s, 31, 70), color: "hillNear" });
|
|
86
|
+
return out;
|
|
87
|
+
}
|
|
88
|
+
var holidays_easter_egg_hunt_flyer_default = defineTemplate({
|
|
89
|
+
id: "print-holidays-easter-egg-hunt-flyer",
|
|
90
|
+
meta: {
|
|
91
|
+
name: NAME,
|
|
92
|
+
description: "A flyer for a neighbourhood Easter egg hunt in spring pastels cut like paper: sun and clouds, \u201CThe Great Egg Hunt\u201D in chunky type, the age groups and start times as cards, what to bring and what else is on, and layered hills with painted eggs hidden in the grass, tulips and a rabbit. US Letter with bleed, and an A4 copy",
|
|
93
|
+
category: "flyer",
|
|
94
|
+
tags: ["easter", "egg hunt", "spring", "kids", "family", "community", "church", "park", "eggs", "bunny", "tulips", "pastel", "flyer", "poster", "print", "event"],
|
|
95
|
+
platforms: ["print"],
|
|
96
|
+
formats: ["flyer", "poster"],
|
|
97
|
+
useCases: ["event", "announcement"],
|
|
98
|
+
created: "2026-10-10",
|
|
99
|
+
updated: "2026-10-10"
|
|
100
|
+
},
|
|
101
|
+
stableNumbers: true,
|
|
102
|
+
build() {
|
|
103
|
+
const k = new Kit(NAME, preset("us-letter"));
|
|
104
|
+
k.quantizeGeometry = true;
|
|
105
|
+
k.brand(
|
|
106
|
+
{ paper: "#EAF4FB", text: "#3B2A5C", onPaper: "#6A3FA8", primary: "#7B4FB8", onPrimary: "#FFFFFF", card: "#FFFFFF", onCard: "#3B2A5C" },
|
|
107
|
+
{ name: "Linden Park Neighbours" }
|
|
108
|
+
);
|
|
109
|
+
k.palette({ sun: "#FFD36B", cloud: "#FFFFFF", hillFar: "#B9DFA6", hillMid: "#8CCB83", hillNear: "#5FAE6A", hedge: "#4E9A5C", rabbit: "#C9B39C", stem: "#4E8F55", tulip: "#F27A8E", eggPink: "#F7A6C1", eggYellow: "#FFE07A", eggBlue: "#9ED4F2", eggLilac: "#C8B2EE", eggInk: "#7B4FB8" });
|
|
110
|
+
k.textStyle("Kicker 15", { size: 15, fontWeight: 700, letterSpacing: 3.5, lineHeight: 20 });
|
|
111
|
+
k.textStyle("Title 84", { size: 96, fontWeight: 900, letterSpacing: -3.6, lineHeight: 90 });
|
|
112
|
+
k.textStyle("When 22", { ...SERIF, size: 22, fontWeight: 600, lineHeight: 28 });
|
|
113
|
+
k.textStyle("Age 13", { size: 13, fontWeight: 800, letterSpacing: 1.6, lineHeight: 17 });
|
|
114
|
+
k.textStyle("Time 26", { size: 26, fontWeight: 900, lineHeight: 30, fontFeatures: { tnum: 1 } });
|
|
115
|
+
k.textStyle("Where 13", { ...SERIF, size: 13, fontWeight: 400, fontStyle: "italic", lineHeight: 17 });
|
|
116
|
+
k.textStyle("Body 15", { ...SERIF, size: 15, fontWeight: 400, lineHeight: 21 });
|
|
117
|
+
k.component("Age group", { gap: 2, width: 212, padding: { top: 14, right: 16, bottom: 14, left: 16 }, fill: "card", radius: 18, align: "CENTER", props: { Ages: "AGES 0\u20133", Time: "10:00", Where: "The toddler meadow" } }, (id) => {
|
|
118
|
+
k.propText(id, "Ages", { style: "Age 13", color: "onCard", align: "CENTER", width: "FILL", name: "Ages" });
|
|
119
|
+
k.propText(id, "Time", { style: "Time 26", color: "onCard", align: "CENTER", width: "FILL", name: "Time" });
|
|
120
|
+
k.propText(id, "Where", { style: "Where 13", color: "onCard", align: "CENTER", width: "FILL", name: "Where" });
|
|
121
|
+
});
|
|
122
|
+
const sheet = k.sheet;
|
|
123
|
+
const { width: W, height: H } = k.node(sheet);
|
|
124
|
+
k.flowSheet(sheet, 0, PAD, "paper", "MIN", "CENTER");
|
|
125
|
+
draw(k, sheet, art(W, H));
|
|
126
|
+
const c = { align: "CENTER", width: "FILL" };
|
|
127
|
+
k.text(sheet, "BRING A BASKET TO", { style: "Kicker 15", color: "onPaper", ...c, name: "Kicker" });
|
|
128
|
+
k.stack(sheet, { height: 8, name: "Gap" });
|
|
129
|
+
k.text(sheet, "The Great Egg Hunt", { style: "Title 84", color: "text", ...c, name: "Title" });
|
|
130
|
+
k.stack(sheet, { height: 14, name: "Gap" });
|
|
131
|
+
k.text(sheet, "Saturday 27 March \xB7 from 10 am \xB7 Linden Park bandstand", { style: "When 22", color: "text", ...c, name: "When" });
|
|
132
|
+
k.stack(sheet, { height: 22, name: "Gap" });
|
|
133
|
+
const ages = k.stack(sheet, { direction: "HORIZONTAL", gap: 16, width: "HUG", name: "Age groups" });
|
|
134
|
+
for (const [a, t, wh] of [["AGES 0\u20133", "10:00", "The toddler meadow"], ["AGES 4\u20137", "10:20", "Round the bandstand"], ["AGES 8\u201311", "10:40", "The whole park. Good luck"]]) k.instance(ages, "Age group", { Ages: a, Time: t, Where: wh }, { name: "Age group" });
|
|
135
|
+
k.stack(sheet, { height: 22, name: "Gap" });
|
|
136
|
+
k.text(sheet, "Free for every child. Over 1,500 eggs hidden, one golden egg per hunt with a prize, face painting, and hot cross buns from the bake stall. Rain or shine: if it pours, we move to the scout hut.", { style: "Body 15", color: "text", ...c, name: "Body" });
|
|
137
|
+
k.stack(sheet, { height: 12, name: "Gap" });
|
|
138
|
+
k.text(sheet, "Hosted by {{brand.name}} \xB7 lindenparkneighbours.org", { style: "Age 13", color: "onPaper", ...c, name: "Host" });
|
|
139
|
+
k.variants(sheet, [printVariant("a4", { art, pad: PAD, masterWidth: W })]);
|
|
140
|
+
return k.finish();
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export {
|
|
145
|
+
holidays_easter_egg_hunt_flyer_default
|
|
146
|
+
};
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
hostEnv,
|
|
10
10
|
plain,
|
|
11
11
|
registerBuiltinCommands
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-67SLLJJB.js";
|
|
13
13
|
import {
|
|
14
14
|
storeOpsSeam
|
|
15
15
|
} from "./chunk-5JFDKTA6.js";
|
|
@@ -572,7 +572,7 @@ var commands = [
|
|
|
572
572
|
const [{ storefrontInputs }, { STOREFRONT_TARGETS }, { bytesOf }, { zipFiles }, { EXPORT_NODE_CAP }] = await Promise.all([
|
|
573
573
|
import("./storefront-prepare-N6SPU7SQ.js"),
|
|
574
574
|
import("./storefront-QILVHEM6.js"),
|
|
575
|
-
import("./project-
|
|
575
|
+
import("./project-NMPK4R5M.js"),
|
|
576
576
|
import("./zip-export-QEIUQPMP.js"),
|
|
577
577
|
import("./tree-QLKVB5X2.js")
|
|
578
578
|
]);
|
|
@@ -769,7 +769,7 @@ var pluginRun = defineCommand({
|
|
|
769
769
|
}
|
|
770
770
|
},
|
|
771
771
|
run: async (p, ctx) => {
|
|
772
|
-
const { runPlugin } = await import("./host-
|
|
772
|
+
const { runPlugin } = await import("./host-4ZE7SIWR.js");
|
|
773
773
|
await runPlugin(p.pluginId, p.commandId);
|
|
774
774
|
ctx.notice(`Started ${p.pluginId}.`);
|
|
775
775
|
return {
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "./chunk-6XGGSKFB.js";
|
|
14
14
|
import {
|
|
15
15
|
activeHyperyTeamId
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-EVFG2K4L.js";
|
|
17
17
|
import {
|
|
18
18
|
accessToken
|
|
19
19
|
} from "./chunk-ZTNA7M3C.js";
|
|
@@ -95,6 +95,8 @@ var AiClientError = class extends Error {
|
|
|
95
95
|
this.code = code;
|
|
96
96
|
this.status = status;
|
|
97
97
|
}
|
|
98
|
+
code;
|
|
99
|
+
status;
|
|
98
100
|
};
|
|
99
101
|
var needsReauth = (e) => e instanceof AiClientError && (e.code === "ai_reauth" || e.code === "ai_scope" || e.code === "unauthenticated");
|
|
100
102
|
function ensureAvailable() {
|
|
@@ -0,0 +1,267 @@
|
|
|
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
|
+
disc,
|
|
9
|
+
draw,
|
|
10
|
+
flame,
|
|
11
|
+
flourishComponent,
|
|
12
|
+
pine,
|
|
13
|
+
polyP,
|
|
14
|
+
rectPath,
|
|
15
|
+
specksIn,
|
|
16
|
+
starPath
|
|
17
|
+
} from "./chunk-AISWLDDO.js";
|
|
18
|
+
import {
|
|
19
|
+
SERIF
|
|
20
|
+
} from "./chunk-X23ZWFW2.js";
|
|
21
|
+
import {
|
|
22
|
+
rng
|
|
23
|
+
} from "./chunk-BNVLVZUT.js";
|
|
24
|
+
import {
|
|
25
|
+
defineTemplate
|
|
26
|
+
} from "./chunk-A44WEVKR.js";
|
|
27
|
+
import {
|
|
28
|
+
Kit,
|
|
29
|
+
preset
|
|
30
|
+
} from "./chunk-T3SGRYUX.js";
|
|
31
|
+
import {
|
|
32
|
+
init_define_POPCRAFT_COMPONENT_IDS
|
|
33
|
+
} from "./chunk-6VMOKHMF.js";
|
|
34
|
+
|
|
35
|
+
// templates/src/print/holidays-christmas-church-newsletter.ts
|
|
36
|
+
init_define_POPCRAFT_COMPONENT_IDS();
|
|
37
|
+
var NAME = "Christmas church newsletter";
|
|
38
|
+
var W = 816;
|
|
39
|
+
var H = 1056;
|
|
40
|
+
var B = 12;
|
|
41
|
+
var M = 48;
|
|
42
|
+
var SERVICES = [
|
|
43
|
+
["Sun 29 Nov", "10:00", "Advent Sunday Eucharist, with the lighting of the first candle"],
|
|
44
|
+
["Sun 13 Dec", "18:00", "Nine Lessons and Carols by candlelight, with the choir"],
|
|
45
|
+
["Sun 20 Dec", "16:00", "Christingle for families, with oranges and candles"],
|
|
46
|
+
["Thu 24 Dec", "16:00", "Crib service. Come dressed as a shepherd, a sheep or a star"],
|
|
47
|
+
["Thu 24 Dec", "23:30", "Midnight Mass"],
|
|
48
|
+
["Fri 25 Dec", "10:00", "Christmas Day family communion (about 50 minutes)"]
|
|
49
|
+
];
|
|
50
|
+
var DIARY = [
|
|
51
|
+
["Wed 2", "Giving tree goes up in the porch: take a tag, bring the gift back by 13 Dec"],
|
|
52
|
+
["Sat 5", "Christmas fair, 10\u20132 in the hall. Cakes, books, a raffle and Santa"],
|
|
53
|
+
["Tue 8", "Wreath-making with the flower team, 7 pm, greenery and cookies provided"],
|
|
54
|
+
["Fri 11", "Riverside Elementary nativity in church, 2 pm (all welcome)"],
|
|
55
|
+
["Sat 19", "Carol singing round the streets, meet on the church steps at 5 pm"],
|
|
56
|
+
["Mon 21", "Hall decorated for Christmas Day lunch, 10 am, many hands needed"],
|
|
57
|
+
["Sun 27", "One said service at 10:00, then the hall is closed until 4 Jan"]
|
|
58
|
+
];
|
|
59
|
+
function banner(w, top, h) {
|
|
60
|
+
const sx = w * 0.82, sy = top + h * 0.28;
|
|
61
|
+
const rays = [];
|
|
62
|
+
for (let i = 0; i < 16; i++) {
|
|
63
|
+
const a = i * Math.PI / 8, long = i === 4 ? h * 0.4 : i === 12 ? h * 0.6 : i % 4 === 0 ? h * 0.3 : h * 0.2;
|
|
64
|
+
const p = (r, da) => ({ x: sx + Math.cos(a + da) * r, y: sy + Math.sin(a + da) * r });
|
|
65
|
+
rays.push(polyP([p(8, -0.18), p(long, 0), p(8, 0.18)]));
|
|
66
|
+
}
|
|
67
|
+
const ground = top + h;
|
|
68
|
+
const hills = (y, amp, phase) => polyP([{ x: -B, y: ground }, ...Array.from({ length: 21 }, (_, i) => ({ x: -B + (w + 2 * B) * i / 20, y: y + Math.sin(i * 0.55 + phase) * amp + Math.sin(i * 1.3 + phase) * amp * 0.3 })), { x: w + B, y: ground }]);
|
|
69
|
+
const st = { x: w * 0.82 - w * 0.065, y: ground - h * 0.3, w: w * 0.13 };
|
|
70
|
+
const stable = [polyP([{ x: st.x - 14, y: st.y }, { x: st.x + st.w / 2, y: st.y - h * 0.13 }, { x: st.x + st.w + 14, y: st.y }]), rectPath(st.x, st.y, st.w, h * 0.22)];
|
|
71
|
+
const door = [rectPath(st.x + st.w * 0.36, st.y + h * 0.06, st.w * 0.28, h * 0.16)];
|
|
72
|
+
const star = (list) => list.map(([x, y], i) => starPath(w * x, top + h * y, i % 3 ? 3.2 : 5, i % 3 ? 1.3 : 2));
|
|
73
|
+
const trees = [0.08, 0.12, 0.9, 0.94].map((x, i) => polyP([{ x: w * x, y: ground - h * (0.36 + i % 2 * 0.06) }, { x: w * x + 16, y: ground - h * 0.12 }, { x: w * x - 16, y: ground - h * 0.12 }]));
|
|
74
|
+
return [
|
|
75
|
+
{ name: "Night", paths: [rectPath(-B, -B, w + 2 * B, top + h + B - B)], color: "night" },
|
|
76
|
+
{ name: "Rays", paths: rays, color: "gold", o: { opacity: 0.85 } },
|
|
77
|
+
{ name: "Star", paths: [starPath(sx, sy, 20, 7, 8)], color: "cream" },
|
|
78
|
+
{ name: "Stars", paths: star([[0.88, 0.18], [0.95, 0.46], [0.62, 0.1], [0.82, 0.6], [0.58, 0.5], [0.66, 0.66]]), color: "cream", o: { opacity: 0.8 } },
|
|
79
|
+
{ name: "Stars", paths: star([[0.06, 0.05], [0.22, 0.07], [0.42, 0.04], [0.32, 0.09]]), color: "cream", o: { opacity: 0.8 } },
|
|
80
|
+
{ name: "Stars", paths: star([[0.06, 0.6], [0.24, 0.56], [0.38, 0.62], [0.48, 0.54]]), color: "cream", o: { opacity: 0.8 } },
|
|
81
|
+
{ name: "Far hills", paths: [hills(ground - h * 0.3, 10, 0.4)], color: "hillFar" },
|
|
82
|
+
{ name: "Trees", paths: trees, color: "hillNear" },
|
|
83
|
+
{ name: "Stable", paths: stable, color: "hillNear" },
|
|
84
|
+
{ name: "Door light", paths: door, color: "gold" },
|
|
85
|
+
{ name: "Near hills", paths: [hills(ground - h * 0.12, 7, 2.1)], color: "hillNear" }
|
|
86
|
+
];
|
|
87
|
+
}
|
|
88
|
+
function wreath(cx, cy) {
|
|
89
|
+
const rx = 84, ry = 26;
|
|
90
|
+
const ring = Array.from({ length: 22 }, (_, i) => {
|
|
91
|
+
const a = i * 2 * Math.PI / 22, p = { x: cx + Math.cos(a) * rx, y: cy + Math.sin(a) * ry };
|
|
92
|
+
return pine({ x: p.x - Math.sin(a) * 14, y: p.y + Math.cos(a) * 5 }, { x: p.x, y: p.y - 4 }, { x: p.x + Math.sin(a) * 16, y: p.y - Math.cos(a) * 6 }, { needle: 11, seed: 60 + i, density: 0.35 });
|
|
93
|
+
});
|
|
94
|
+
const candle = (a, hgt) => {
|
|
95
|
+
const x = cx + Math.cos(a) * rx * 0.86, y = cy + Math.sin(a) * ry * 0.86;
|
|
96
|
+
return { body: rectPath(x - 7, y - hgt, 14, hgt), x, top: y - hgt };
|
|
97
|
+
};
|
|
98
|
+
const back = [candle(-Math.PI * 0.88, 56), candle(-Math.PI * 0.38, 54)], front = [candle(Math.PI * 0.62, 62), candle(Math.PI * 0.12, 60)];
|
|
99
|
+
const centre = { body: rectPath(cx - 8, cy - 86, 16, 86), x: cx, top: cy - 86 };
|
|
100
|
+
return [
|
|
101
|
+
{ name: "Wreath back", paths: ring.slice(11).flatMap((r) => [...r.dark, ...r.light]), color: "pine", o: { strokeWidth: 2 } },
|
|
102
|
+
{ name: "Candles back", paths: back.map((c) => c.body), color: "purple" },
|
|
103
|
+
{ name: "Christ candle", paths: [centre.body], color: "wax", o: { stroke: { color: "line", width: 1 } } },
|
|
104
|
+
{ name: "Wreath front", paths: ring.slice(0, 11).flatMap((r) => [...r.dark, ...r.light]), color: "pineLight", o: { strokeWidth: 2 } },
|
|
105
|
+
{ name: "Candles front", paths: [front[1].body], color: "purple" },
|
|
106
|
+
{ name: "Rose candle", paths: [front[0].body], color: "rose" },
|
|
107
|
+
{ name: "Berries", paths: [0.3, 1.1, 1.9, 2.6, 3.5, 4.4, 5.2].map((a) => disc(cx + Math.cos(a) * rx, cy + Math.sin(a) * ry + 2, 3.2)), color: "primary" },
|
|
108
|
+
{ name: "Flame", paths: [flame(front[1].x, front[1].top - 2, 10, 22)], color: "gold" }
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
function street(w, top, h) {
|
|
112
|
+
const r = rng(77);
|
|
113
|
+
const houses = [], snow = [], windows = [];
|
|
114
|
+
let x = -B;
|
|
115
|
+
while (x < w + B) {
|
|
116
|
+
const hw = 70 + r() * 60, hh = h * (0.32 + r() * 0.16), roof = 26 + r() * 22, y = top + h - hh;
|
|
117
|
+
if (Math.abs(x + hw / 2 - w * 0.5) < 80) {
|
|
118
|
+
x += 90;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
houses.push(polyP([{ x, y: top + h + B }, { x, y }, { x: x + hw / 2, y: y - roof }, { x: x + hw, y }, { x: x + hw, y: top + h + B }]));
|
|
122
|
+
snow.push(polyP([{ x: x - 4, y: y + 2 }, { x: x + hw / 2, y: y - roof - 3 }, { x: x + hw + 4, y: y + 2 }, { x: x + hw / 2, y: y - roof + 6 }]));
|
|
123
|
+
for (let i = 0; i < 2; i++) if (r() > 0.3) windows.push(rectPath(x + hw * (0.22 + i * 0.36), y + hh * 0.22, hw * 0.18, hw * 0.2));
|
|
124
|
+
x += hw + 6 + r() * 10;
|
|
125
|
+
}
|
|
126
|
+
const cx = w * 0.5, base = top + h + B;
|
|
127
|
+
const church = [rectPath(cx - 70, top + h * 0.42, 140, h * 0.58 + B), polyP([{ x: cx - 80, y: top + h * 0.43 }, { x: cx, y: top + h * 0.2 }, { x: cx + 80, y: top + h * 0.43 }]), rectPath(cx - 20, top - h * 0.02, 40, h * 0.5), polyP([{ x: cx - 24, y: top }, { x: cx, y: top - h * 0.3 }, { x: cx + 24, y: top }])];
|
|
128
|
+
const glass = [{ closed: true, points: [{ x: cx - 16, y: base - B - 10 }, { x: cx - 16, y: top + h * 0.62 }, { x: cx, y: top + h * 0.52 }, { x: cx + 16, y: top + h * 0.62 }, { x: cx + 16, y: base - B - 10 }] }, rectPath(cx - 6, top + h * 0.04, 12, 22)];
|
|
129
|
+
return [
|
|
130
|
+
{ name: "Street sky", paths: [rectPath(-B, top - h * 0.36, w + 2 * B, h * 1.36 + B)], color: "night" },
|
|
131
|
+
{ name: "Street stars", paths: [0.6, 0.7, 0.8, 0.9, 0.96].map((f, i) => starPath(w * f, top - h * (0.22 - i % 2 * 0.1), 4, 1.6)), color: "cream", o: { opacity: 0.8 } },
|
|
132
|
+
{ name: "Spire star", paths: [starPath(cx, top - h * 0.36 + 2, 9, 3.4, 8)], color: "gold" },
|
|
133
|
+
{ name: "Houses", paths: houses, color: "hillFar" },
|
|
134
|
+
{ name: "Roof snow", paths: snow, color: "cream", o: { opacity: 0.85 } },
|
|
135
|
+
{ name: "Windows", paths: windows, color: "gold" },
|
|
136
|
+
{ name: "Church", paths: church, color: "hillNear" },
|
|
137
|
+
{ name: "Church windows", paths: glass, color: "gold" }
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
|
+
var holidays_christmas_church_newsletter_default = defineTemplate({
|
|
141
|
+
id: "print-holidays-christmas-church-newsletter",
|
|
142
|
+
meta: {
|
|
143
|
+
name: NAME,
|
|
144
|
+
description: "A two-sided parish newsletter for Advent and Christmas on US Letter: a woodcut night banner of the star over the stable, the vicar\u2019s letter beside every Christmas service, the giving tree, the month\u2019s diary, a Christmas Day lunch for neighbours, carol singing, a children\u2019s corner and notices. Service times and diary dates are components; the banner runs into the bleed",
|
|
145
|
+
category: "newspaper",
|
|
146
|
+
tags: ["christmas", "advent", "church", "parish", "newsletter", "services", "carols", "nativity", "community", "congregation", "bulletin", "print"],
|
|
147
|
+
platforms: ["print"],
|
|
148
|
+
formats: ["document"],
|
|
149
|
+
useCases: ["newsletter", "event"],
|
|
150
|
+
created: "2026-10-10",
|
|
151
|
+
updated: "2026-10-10"
|
|
152
|
+
},
|
|
153
|
+
sequence: true,
|
|
154
|
+
stableNumbers: true,
|
|
155
|
+
build() {
|
|
156
|
+
const k = new Kit(NAME, preset("us-letter"));
|
|
157
|
+
k.quantizeGeometry = true;
|
|
158
|
+
k.brand(
|
|
159
|
+
{ paper: "#F6F0E3", text: "#1D2433", onPaper: "#8C2B2B", primary: "#8C2B2B", onPrimary: "#FFF8EC", line: "#CBBFA6", card: "#EDE3CF", onCard: "#1D2433" },
|
|
160
|
+
{ name: "St Columba\u2019s, Riverside", site: "stcolumbariverside.org", phone: "(503) 555-0172" }
|
|
161
|
+
);
|
|
162
|
+
k.palette({ wax: "#FFFDF6", purple: "#5B3A7A", rose: "#D88FA6", pine: "#2F5A43", pineLight: "#4F7D5E", night: "#18233A", gold: "#E2B95A", cream: "#FFF8EC", hillFar: "#2A3A5A", hillNear: "#0F1626", tint: "#EDE3CF", fibre: "#B9A984" });
|
|
163
|
+
k.textStyle("Mast 64", { ...SERIF, size: 64, fontWeight: 700, letterSpacing: -1.6, lineHeight: 64 });
|
|
164
|
+
k.textStyle("Mast sub 12", { size: 12, fontWeight: 600, letterSpacing: 2.4, lineHeight: 16 });
|
|
165
|
+
k.textStyle("Parish 17", { ...SERIF, size: 17, fontWeight: 400, fontStyle: "italic", lineHeight: 22 });
|
|
166
|
+
k.textStyle("Head 24", { ...SERIF, size: 24, fontWeight: 700, letterSpacing: -0.3, lineHeight: 28 });
|
|
167
|
+
k.textStyle("Head 18", { ...SERIF, size: 18, fontWeight: 700, lineHeight: 22 });
|
|
168
|
+
k.textStyle("Kicker 10", { size: 10, fontWeight: 700, letterSpacing: 2, lineHeight: 14 });
|
|
169
|
+
k.textStyle("Body 12", { ...SERIF, size: 12, fontWeight: 400, lineHeight: 17.5 });
|
|
170
|
+
k.textStyle("Body i 12", { ...SERIF, size: 12, fontWeight: 400, fontStyle: "italic", lineHeight: 17.5 });
|
|
171
|
+
k.textStyle("Row 11", { size: 11, fontWeight: 600, lineHeight: 15, fontFeatures: { tnum: 1 } });
|
|
172
|
+
k.textStyle("Row text 11", { ...SERIF, size: 11.5, fontWeight: 400, lineHeight: 15 });
|
|
173
|
+
k.textStyle("Foot 10", { size: 10, fontWeight: 500, letterSpacing: 0.6, lineHeight: 14 });
|
|
174
|
+
flourishComponent(k, "Star rule", "primary", starPath(0, 0, 10, 4.2), { rule: 40 });
|
|
175
|
+
k.component("Service", { direction: "HORIZONTAL", gap: 10, width: 300, padding: { top: 7, right: 0, bottom: 7, left: 0 }, props: { Day: "Sun 1 Dec", Time: "10:00", What: "Service" } }, (id) => {
|
|
176
|
+
const when = k.stack(id, { width: 74, gap: 1, name: "When" });
|
|
177
|
+
k.propText(when, "Day", { style: "Row 11", color: "onCard", name: "Day" });
|
|
178
|
+
k.propText(when, "Time", { style: "Row 11", color: "onCard", name: "Time" });
|
|
179
|
+
k.propText(id, "What", { style: "Row text 11", color: "onCard", width: "FILL", name: "What" });
|
|
180
|
+
});
|
|
181
|
+
k.component("Diary date", { direction: "HORIZONTAL", gap: 12, width: 440, padding: { top: 6, right: 0, bottom: 6, left: 0 }, props: { Date: "Mon 1", What: "What is on" } }, (id) => {
|
|
182
|
+
k.propText(id, "Date", { style: "Row 11", color: "onPaper", width: 52, name: "Date" });
|
|
183
|
+
k.propText(id, "What", { style: "Row text 11", color: "text", width: "FILL", name: "What" });
|
|
184
|
+
});
|
|
185
|
+
const sectionHead = (parent, kicker, title, style = "Head 24", on = "paper") => {
|
|
186
|
+
k.text(parent, kicker, { style: "Kicker 10", color: on === "card" ? "onCard" : "onPaper", width: "FILL", name: "Kicker" });
|
|
187
|
+
k.text(parent, title, { style, color: on === "card" ? "onCard" : "text", width: "FILL", name: "Heading" });
|
|
188
|
+
};
|
|
189
|
+
const one = k.sheet;
|
|
190
|
+
k.nameSheet(one, "Side one");
|
|
191
|
+
const BANNER = 300;
|
|
192
|
+
k.flowSheet(one, 18, { top: 36, right: M, bottom: M, left: M }, "paper", "MIN", "MIN");
|
|
193
|
+
draw(k, one, banner(W, 0, BANNER));
|
|
194
|
+
const mast = k.stack(one, { width: "FILL", height: BANNER - 36, gap: 6, name: "Masthead" });
|
|
195
|
+
k.text(mast, "ADVENT & CHRISTMAS 2026 \xB7 ISSUE 48", { style: "Mast sub 12", color: "gold", autoWidth: true, name: "Issue" });
|
|
196
|
+
k.text(mast, "The Lamplighter", { style: "Mast 64", color: "cream", autoWidth: true, name: "Title" });
|
|
197
|
+
k.text(mast, "News and services from {{brand.name}}", { style: "Parish 17", color: "cream", autoWidth: true, name: "Parish" });
|
|
198
|
+
const cols = k.stack(one, { direction: "HORIZONTAL", gap: 30, width: "FILL", name: "Columns" });
|
|
199
|
+
const left = k.stack(cols, { width: "FILL", gap: 10, name: "Letter" });
|
|
200
|
+
sectionHead(left, "FROM THE RECTORY", "Make room");
|
|
201
|
+
for (const [i, p] of [
|
|
202
|
+
"Every year somebody asks me why we bother with Advent when the shops have had Christmas since Halloween. My answer is that Advent is the season of making room: in the diary, in the house, in ourselves, for a child who arrived to a town with no space for him.",
|
|
203
|
+
"This December, I want to ask each of us to make a little room for someone else. Take a tag from the giving tree. Bring a neighbour to the carol service, especially one who has not set foot in church since their own school nativity. Come and peel potatoes on Christmas morning, and stay for lunch.",
|
|
204
|
+
"The candle we light on Advent Sunday is small. By Christmas there are five, and the church is full of light. That is how it works: one at a time, and together. I look forward to seeing you, and to meeting whoever you bring."
|
|
205
|
+
].entries()) k.text(left, p, { style: i === 2 ? "Body 12" : "Body 12", color: "text", width: "FILL", name: "Paragraph" });
|
|
206
|
+
k.text(left, "The Rev. Ruth Adeyemi, Rector", { style: "Body i 12", color: "text", width: "FILL", name: "Signature" });
|
|
207
|
+
k.instance(left, "Star rule", {}, { name: "Divider" });
|
|
208
|
+
sectionHead(left, "THE GIVING TREE", "Two hundred tags, two hundred gifts", "Head 18");
|
|
209
|
+
k.text(left, "Each tag on the tree in the porch names a gift asked for by a family the Riverside Food Bank supports: a winter coat, a football, a set of felt-tips. Take a tag, wrap the gift, tie the tag on, and bring it back by Sunday 13 December. Last year all 184 went.", { style: "Body 12", color: "text", width: "FILL", name: "Paragraph" });
|
|
210
|
+
const right = k.stack(cols, { width: 300, gap: 4, padding: 18, fill: "card", name: "Services box" });
|
|
211
|
+
sectionHead(right, "COME AND CELEBRATE", "Christmas services", "Head 18", "card");
|
|
212
|
+
k.stack(right, { height: 4, name: "Gap" });
|
|
213
|
+
for (const [day, time, what] of SERVICES) {
|
|
214
|
+
k.instance(right, "Service", { Day: day, Time: time, What: what }, { name: "Service", width: "FILL" });
|
|
215
|
+
k.rect(right, "FILL", 1, "line", { name: "Hairline" });
|
|
216
|
+
}
|
|
217
|
+
k.stack(right, { height: 6, name: "Gap" });
|
|
218
|
+
k.text(right, "Every service has a step-free way in by the north door, a loop for hearing aids and large-print sheets. Children are always welcome, noise and all.", { style: "Body i 12", color: "onCard", width: "FILL", name: "Access" });
|
|
219
|
+
const wr = k.stack(one, { direction: "HORIZONTAL", gap: 26, width: "FILL", padding: { top: 16, right: 20, bottom: 16, left: 12 }, align: "CENTER", stroke: { color: "line", width: 1 }, name: "Wreath feature" });
|
|
220
|
+
const wa = k.stack(wr, { width: 210, height: 150, name: "Wreath art" });
|
|
221
|
+
draw(k, wa, wreath(105, 112));
|
|
222
|
+
const wt = k.stack(wr, { width: "FILL", gap: 6, name: "Wreath text" });
|
|
223
|
+
k.text(wt, "THE ADVENT WREATH", { style: "Kicker 10", color: "onPaper", width: "FILL", name: "Kicker" });
|
|
224
|
+
k.text(wt, "One more candle each Sunday", { style: "Head 18", color: "text", width: "FILL", name: "Heading" });
|
|
225
|
+
k.text(wt, "Hope on 29 November, peace on 6 December, joy on the 13th (the rose-pink one), love on the 20th, and the white Christ candle in the middle at midnight on Christmas Eve. Children who would like to light one, see the sacristan before the service.", { style: "Body 12", color: "text", width: "FILL", name: "Paragraph" });
|
|
226
|
+
const two = k.addSheet(preset("us-letter"), "Side two");
|
|
227
|
+
k.flowSheet(two, 18, { top: 76, right: M, bottom: M, left: M }, "paper", "MIN", "MIN");
|
|
228
|
+
draw(k, two, [
|
|
229
|
+
{ name: "Band", paths: [rectPath(-B, -B, W + 2 * B, 40 + B)], color: "night" },
|
|
230
|
+
{ name: "Band stars", paths: [0.1, 0.3, 0.5, 0.7, 0.9].map((x) => starPath(W * x, 20, 6, 2.4, 8)), color: "gold" },
|
|
231
|
+
...[0, 1].map((i) => ({ name: "Fibre", paths: specksIn({ x: -B, y: 940 + i * 60, w: W + 2 * B, h: 60 }, 900, 30 + i, 1.6), color: "fibre", o: { opacity: 0.4 } }))
|
|
232
|
+
]);
|
|
233
|
+
const row = k.stack(two, { direction: "HORIZONTAL", gap: 30, width: "FILL", name: "Columns" });
|
|
234
|
+
const diary = k.stack(row, { width: "FILL", gap: 2, name: "Diary" });
|
|
235
|
+
sectionHead(diary, "DECEMBER AT ST COLUMBA\u2019S", "Diary");
|
|
236
|
+
k.stack(diary, { height: 6, name: "Gap" });
|
|
237
|
+
for (const [d, what] of DIARY) {
|
|
238
|
+
k.instance(diary, "Diary date", { Date: d, What: what }, { name: "Diary date", width: "FILL" });
|
|
239
|
+
k.rect(diary, "FILL", 1, "line", { name: "Hairline" });
|
|
240
|
+
}
|
|
241
|
+
const side = k.stack(row, { width: 250, gap: 10, padding: 18, fill: "primary", name: "Lunch box" });
|
|
242
|
+
k.text(side, "CHRISTMAS DAY", { style: "Kicker 10", color: "onPrimary", width: "FILL", name: "Kicker" });
|
|
243
|
+
k.text(side, "Lunch for anyone on their own", { style: "Head 18", color: "onPrimary", width: "FILL", name: "Heading" });
|
|
244
|
+
k.text(side, "Turkey or nut roast with everything, pie, crackers and carols round the tree, in the hall from 12:30. It is free, and there is a lift there and back. Tell Margaret by 18 December, or tell us about a neighbour and we will ask them.", { style: "Body 12", color: "onPrimary", width: "FILL", name: "Paragraph" });
|
|
245
|
+
k.text(side, "Margaret Holt \xB7 (503) 555-0139", { style: "Row 11", color: "onPrimary", width: "FILL", name: "Contact" });
|
|
246
|
+
k.instance(two, "Star rule", {}, { name: "Divider" });
|
|
247
|
+
const row2 = k.stack(two, { direction: "HORIZONTAL", gap: 30, width: "FILL", name: "Columns" });
|
|
248
|
+
const carols = k.stack(row2, { width: "FILL", gap: 8, name: "Carols" });
|
|
249
|
+
sectionHead(carols, "SATURDAY 19 DECEMBER", "Carols round Riverside", "Head 18");
|
|
250
|
+
k.text(carols, "We sing our way down Alder Street to the care home on Birch Lane, where the residents choose the next three. Torches and tambourines welcome. Collecting for the Riverside Food Bank; hot chocolate in the hall afterwards.", { style: "Body 12", color: "text", width: "FILL", name: "Paragraph" });
|
|
251
|
+
const kids = k.stack(row2, { width: "FILL", gap: 8, name: "Kids" });
|
|
252
|
+
sectionHead(kids, "CHILDREN\u2019S CORNER", "Find the five stars", "Head 18");
|
|
253
|
+
k.text(kids, "Five paper stars are hiding in church this Advent, one on each Sunday. Find them all, tell Mrs. Okoro at the door, and collect a chocolate coin and a sticker for your Christingle.", { style: "Body 12", color: "text", width: "FILL", name: "Paragraph" });
|
|
254
|
+
const notices = k.stack(two, { width: "FILL", gap: 6, padding: 16, fill: "card", name: "Notices" });
|
|
255
|
+
k.text(notices, "NOTICES", { style: "Kicker 10", color: "onCard", width: "FILL", name: "Kicker" });
|
|
256
|
+
k.text(notices, "The office is closed from 24 December to 4 January; for funerals and emergencies call the rectory. Flowers in memory of loved ones can be given for Christmas: $10 in an envelope marked with their name. The hall heating is fixed, thank you to all who gave.", { style: "Body 12", color: "onCard", width: "FILL", name: "Paragraph" });
|
|
257
|
+
draw(k, two, street(W, H - 250, 250));
|
|
258
|
+
const foot = k.stack(two, { width: "FILL", height: "FILL", justify: "MAX", align: "MIN", gap: 6, padding: { top: 0, right: 0, bottom: 150, left: 0 }, name: "Foot" });
|
|
259
|
+
k.text(foot, "All are welcome, whoever and wherever you are.", { style: "Parish 17", color: "cream", width: 320, name: "Welcome" });
|
|
260
|
+
k.text(foot, "{{brand.name}} \xB7 220 Alder Street, Portland OR 97202\n{{brand.phone}} \xB7 {{brand.site}}", { style: "Foot 10", color: "cream", width: 320, name: "Footer" });
|
|
261
|
+
return k.finish();
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
export {
|
|
266
|
+
holidays_christmas_church_newsletter_default
|
|
267
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
burst,
|
|
9
|
+
coupe,
|
|
10
|
+
disc,
|
|
11
|
+
draw,
|
|
12
|
+
flourishComponent,
|
|
13
|
+
polyP,
|
|
14
|
+
printVariant,
|
|
15
|
+
sparkle,
|
|
16
|
+
specksIn
|
|
17
|
+
} from "./chunk-AISWLDDO.js";
|
|
18
|
+
import {
|
|
19
|
+
SERIF
|
|
20
|
+
} from "./chunk-X23ZWFW2.js";
|
|
21
|
+
import {
|
|
22
|
+
defineTemplate
|
|
23
|
+
} from "./chunk-A44WEVKR.js";
|
|
24
|
+
import {
|
|
25
|
+
Kit,
|
|
26
|
+
preset
|
|
27
|
+
} from "./chunk-T3SGRYUX.js";
|
|
28
|
+
import {
|
|
29
|
+
init_define_POPCRAFT_COMPONENT_IDS
|
|
30
|
+
} from "./chunk-6VMOKHMF.js";
|
|
31
|
+
|
|
32
|
+
// templates/src/print/holidays-new-years-eve-poster.ts
|
|
33
|
+
init_define_POPCRAFT_COMPONENT_IDS();
|
|
34
|
+
var NAME = "New Year\u2019s Eve dance poster";
|
|
35
|
+
function art(w, h) {
|
|
36
|
+
const s = w / 1728, B = 12 * s * 2;
|
|
37
|
+
const fw = [[0.2, 0.11, 0.15, "gold", 22], [0.74, 0.09, 0.19, "rose", 26], [0.48, 0.17, 0.08, "silver", 16], [0.92, 0.19, 0.065, "gold", 14], [0.07, 0.2, 0.06, "silver", 12]];
|
|
38
|
+
const bursts = fw.map(([x, y, r, c, n], i) => ({ c, b: burst(w * x, h * y, w * r, n, 11 + i) }));
|
|
39
|
+
const by = (c) => bursts.filter((b) => b.c === c).map((b) => b.b);
|
|
40
|
+
const cx = w / 2, oy = h + 40 * s;
|
|
41
|
+
const rays = [];
|
|
42
|
+
for (let i = 0; i < 26; i += 2) {
|
|
43
|
+
const a0 = Math.PI + i * Math.PI / 26, a1 = Math.PI + (i + 1) * Math.PI / 26, R = h * 0.36;
|
|
44
|
+
rays.push(polyP([{ x: cx, y: oy }, { x: cx + Math.cos(a0) * R, y: oy + Math.sin(a0) * R }, { x: cx + Math.cos(a1) * R, y: oy + Math.sin(a1) * R }]));
|
|
45
|
+
}
|
|
46
|
+
const left = coupe(cx - 250 * s, h - 70 * s, 400 * s, 0.26), right = coupe(cx + 250 * s, h - 70 * s, 400 * s, -0.26);
|
|
47
|
+
const bubbles = [[-40, 420], [-10, 455], [30, 440], [60, 470], [5, 395], [-70, 445], [90, 420], [-20, 375]].map(([x, y], i) => disc(cx + x * s, h - y * s, (i % 3 ? 5 : 8) * s));
|
|
48
|
+
const fizz = [[-90, 466, 20], [110, 450, 24], [-480, 300, 16], [490, 330, 18]].map(([x, y, r]) => sparkle(cx + x * s, h - y * s, r * s));
|
|
49
|
+
return [
|
|
50
|
+
{ name: "Sunburst", paths: rays, color: "gold", o: { opacity: 0.07 } },
|
|
51
|
+
...[0, 1].map((i) => ({ name: "Stardust", paths: specksIn({ x: -B, y: -B + i * h * 0.13, w: w + 2 * B, h: h * 0.13 }, 1400 * s * s, 70 + i, 4 * s), color: "silver", o: { opacity: 0.5 } })),
|
|
52
|
+
{ name: "Gold rays", paths: by("gold").flatMap((b) => b.rays), color: "gold", o: { strokeWidth: 5 * s } },
|
|
53
|
+
{ name: "Gold sparks", paths: by("gold").flatMap((b) => b.sparks), color: "gold" },
|
|
54
|
+
{ name: "Rose rays", paths: by("rose").flatMap((b) => b.rays), color: "rose", o: { strokeWidth: 5 * s } },
|
|
55
|
+
{ name: "Rose sparks", paths: by("rose").flatMap((b) => b.sparks), color: "rose" },
|
|
56
|
+
{ name: "Silver rays", paths: by("silver").flatMap((b) => b.rays), color: "silver", o: { strokeWidth: 4 * s } },
|
|
57
|
+
{ name: "Silver sparks", paths: by("silver").flatMap((b) => b.sparks), color: "silver" },
|
|
58
|
+
{ name: "Wine", paths: [...left.wine, ...right.wine], color: "gold", o: { opacity: 0.85 } },
|
|
59
|
+
{ name: "Glasses", paths: [...left.glass, ...right.glass], color: "silver", o: { strokeWidth: 6 * s } },
|
|
60
|
+
{ name: "Bubbles", paths: bubbles, color: "gold" },
|
|
61
|
+
{ name: "Fizz", paths: fizz, color: "gold" }
|
|
62
|
+
];
|
|
63
|
+
}
|
|
64
|
+
var PAD = { top: 720, right: 140, bottom: 560, left: 140 };
|
|
65
|
+
var holidays_new_years_eve_poster_default = defineTemplate({
|
|
66
|
+
id: "print-holidays-new-years-eve-poster",
|
|
67
|
+
meta: {
|
|
68
|
+
name: NAME,
|
|
69
|
+
description: "A black-and-gold poster for a New Year\u2019s Eve dance at a neighbourhood ballroom: fireworks in gold, rose and silver, \u201CMidnight\u201D set huge in a serif italic over spaced capitals, doors, the toast and the last dance in a row, and two clinking coupes over an Art Deco sunburst. 18 \xD7 24 inches with bleed, and a US Letter flyer",
|
|
70
|
+
category: "poster",
|
|
71
|
+
tags: ["new year\u2019s eve", "new year", "nye", "party", "dance", "ballroom", "fireworks", "champagne", "art deco", "gold", "poster", "flyer", "print", "event"],
|
|
72
|
+
platforms: ["print"],
|
|
73
|
+
formats: ["poster", "flyer"],
|
|
74
|
+
useCases: ["event", "announcement"],
|
|
75
|
+
created: "2026-10-10",
|
|
76
|
+
updated: "2026-10-10"
|
|
77
|
+
},
|
|
78
|
+
stableNumbers: true,
|
|
79
|
+
build() {
|
|
80
|
+
const k = new Kit(NAME, preset("poster-18x24"));
|
|
81
|
+
k.quantizeGeometry = true;
|
|
82
|
+
k.brand(
|
|
83
|
+
{ paper: "#0F0E14", text: "#F7EDD6", onPaper: "#D9B66C", primary: "#D9B66C", onPrimary: "#0F0E14" },
|
|
84
|
+
{ name: "The Marlowe Ballroom", site: "marloweballroom.com" }
|
|
85
|
+
);
|
|
86
|
+
k.palette({ gold: "#D9B66C", rose: "#E8939F", silver: "#CBD3E4" });
|
|
87
|
+
k.textStyle("Kicker 40", { size: 40, fontWeight: 600, letterSpacing: 12, lineHeight: 52 });
|
|
88
|
+
k.textStyle("Title 300", { ...SERIF, size: 300, fontWeight: 400, fontStyle: "italic", letterSpacing: -9, lineHeight: 290 });
|
|
89
|
+
k.textStyle("Sub 76", { size: 76, fontWeight: 300, letterSpacing: 22, lineHeight: 92 });
|
|
90
|
+
k.textStyle("Line 46", { ...SERIF, size: 46, fontWeight: 400, lineHeight: 62 });
|
|
91
|
+
k.textStyle("Fact label 26", { size: 26, fontWeight: 700, letterSpacing: 6, lineHeight: 34 });
|
|
92
|
+
k.textStyle("Fact 56", { ...SERIF, size: 56, fontWeight: 600, lineHeight: 64 });
|
|
93
|
+
k.textStyle("Foot 34", { size: 34, fontWeight: 600, letterSpacing: 4, lineHeight: 44 });
|
|
94
|
+
flourishComponent(k, "Diamond rule", "primary", polyP([{ x: 0, y: 6 }, { x: 6, y: 0 }, { x: 12, y: 6 }, { x: 6, y: 12 }]), { rule: 120, size: 22, gap: 18 });
|
|
95
|
+
const sheet = k.sheet;
|
|
96
|
+
const { width: W, height: H } = k.node(sheet);
|
|
97
|
+
k.flowSheet(sheet, 0, PAD, "paper", "MIN", "CENTER");
|
|
98
|
+
draw(k, sheet, art(W, H));
|
|
99
|
+
const c = { align: "CENTER", width: "FILL" };
|
|
100
|
+
k.text(sheet, "NEW YEAR\u2019S EVE \xB7 THURSDAY 31 DECEMBER", { style: "Kicker 40", color: "onPaper", ...c, name: "Kicker" });
|
|
101
|
+
k.stack(sheet, { height: 40, name: "Gap" });
|
|
102
|
+
k.text(sheet, "Midnight", { style: "Title 300", color: "text", ...c, name: "Title" });
|
|
103
|
+
k.text(sheet, "AT THE MARLOWE", { style: "Sub 76", color: "text", ...c, name: "Sub" });
|
|
104
|
+
k.stack(sheet, { height: 60, name: "Gap" });
|
|
105
|
+
k.instance(sheet, "Diamond rule", {}, { name: "Divider" });
|
|
106
|
+
k.stack(sheet, { height: 60, name: "Gap" });
|
|
107
|
+
k.text(sheet, "Live swing from the Dellwood Seven, a dance floor that stays open till one, a midnight toast and a balloon drop. Black tie optional, dancing shoes essential.", { style: "Line 46", color: "text", ...c, name: "Body" });
|
|
108
|
+
k.stack(sheet, { height: 70, name: "Gap" });
|
|
109
|
+
const facts = k.stack(sheet, { direction: "HORIZONTAL", gap: 40, width: "HUG", name: "Facts" });
|
|
110
|
+
for (const [l, v] of [["DOORS", "8 pm"], ["THE TOAST", "Midnight"], ["TICKETS", "$45 \xB7 $25"]]) {
|
|
111
|
+
const f = k.stack(facts, { gap: 6, width: 380, align: "CENTER", name: "Fact" });
|
|
112
|
+
k.text(f, l, { style: "Fact label 26", color: "onPaper", align: "CENTER", width: "FILL", name: "Fact label" });
|
|
113
|
+
k.text(f, v, { style: "Fact 56", color: "text", align: "CENTER", width: "FILL", name: "Fact value" });
|
|
114
|
+
}
|
|
115
|
+
k.stack(sheet, { height: 70, name: "Gap" });
|
|
116
|
+
k.text(sheet, "{{brand.name}} \xB7 214 Front Street \xB7 {{brand.site}}", { style: "Foot 34", color: "onPaper", ...c, name: "Foot" });
|
|
117
|
+
k.textStyle("Kicker 19", { size: 19, fontWeight: 600, letterSpacing: 5.6, lineHeight: 25 });
|
|
118
|
+
k.textStyle("Title 140", { ...SERIF, size: 122, fontWeight: 400, fontStyle: "italic", letterSpacing: -3.6, lineHeight: 116 });
|
|
119
|
+
k.textStyle("Sub 36", { size: 36, fontWeight: 300, letterSpacing: 10, lineHeight: 44 });
|
|
120
|
+
k.textStyle("Line 21", { ...SERIF, size: 21, fontWeight: 400, lineHeight: 29 });
|
|
121
|
+
k.textStyle("Foot 16", { size: 16, fontWeight: 600, letterSpacing: 1.8, lineHeight: 21 });
|
|
122
|
+
k.textStyle("Fact label 12", { size: 12, fontWeight: 700, letterSpacing: 2.8, lineHeight: 16 });
|
|
123
|
+
k.textStyle("Fact 26", { ...SERIF, size: 26, fontWeight: 600, lineHeight: 30 });
|
|
124
|
+
k.variants(sheet, [printVariant("us-letter", {
|
|
125
|
+
art,
|
|
126
|
+
pad: PAD,
|
|
127
|
+
masterWidth: W,
|
|
128
|
+
styles: [["Kicker", "Kicker 19"], ["Title", "Title 140"], ["Sub", "Sub 36"], ["Body", "Line 21"], ["Foot", "Foot 16"], ["Fact label", "Fact label 12"], ["Fact value", "Fact 26"]],
|
|
129
|
+
more: (kit, id, s) => {
|
|
130
|
+
kit.patch(id, { padding: { top: 280, right: Math.round(140 * s), bottom: Math.round(560 * s), left: Math.round(140 * s) } });
|
|
131
|
+
for (const n of kit.named(id, "Fact")) kit.patch(n, { width: Math.round(380 * s) });
|
|
132
|
+
for (const n of kit.named(id, "Facts")) kit.patch(n, { itemSpacing: Math.round(40 * s) });
|
|
133
|
+
}
|
|
134
|
+
})]);
|
|
135
|
+
return k.finish();
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
export {
|
|
140
|
+
holidays_new_years_eve_poster_default
|
|
141
|
+
};
|