Skip to the content

Koyomi Calendars暦

Calendar pages as SVG: a day as an icon in 18 original designs, a whole month as a poster or a desk pad, and the page turning from one day to the next.

Koyomi is the Japanese word 暦 for the calendar. About the name

Contents

Reference · /themes/heavy

themeconstant

The heavy design's drawing, for the package's own renderer: heavy black outline, ring slots over the top edge, black header rule.

Most code wants calendarIcon from this file instead, which draws with it.

Import it

import { theme } from "@johnmorrisdotca/koyomi-calendars/themes/heavy";

Definition

const theme: Def = {
    box: [38, 60, 352, 320],
    numeral: "centre",
    layout: () => ({ page: HEAVY, yearZone: HEAVY }),
    draw: ({ p, dark, l }) => {
        const k = dark ? { line: "#f2f2f2", body: "#161616", ink: "#f2f2f2" } : { line: "#000000", body: "#ffffff", ink: "#000000" };
        const ring = (cx: number) => rect(cx - 23.5, 69, 47, 63, 23.5, k.line) + rect(cx - 10.5, 82, 21, 40, 10.5, k.body);
        const [x, y, w, h] = l.page;
        const ms = fit(p.monthUp, 44, 220, 0.84);
        const [mb, db, yb] = stack(y, y + h, [[ms * CAP, 0], [90 * CAP, 12], ...(p.year ? [[25 * CAP, 12] as const] : [])]);
        return (rect(55.5, 104.5, 317, 257, 14, k.body, `stroke="${k.line}" stroke-width="21"`) +
            `<path d="M46 174h336" stroke="${k.line}" stroke-width="19"/>` +
            ring(106.75) + ring(178.25) + ring(249.75) + ring(321.25) +
            part("month", tx(x + w / 2, mb!, p.monthUp, ms, k.ink, 900, { family: BLACK })) +
            part("day", dayText(x + w / 2, db!, p.day, 90, k.ink, 900, { family: BLACK })) +
            part("year", tx(x + w / 2, yb!, p.year, 25, k.ink, 900, { family: BLACK, opacity: 0.55 })));
    },
}

Members

NameTypeDescription
boxRect

The drawing's own coordinate box: x, y, width, height.

numeral"centre"

Where the day sits in its page. Every theme centres it; a look that places it otherwise says so here, for 1, 9, 30 and 31 alike.

layout(year: boolean, weekend?: boolean) => CalendarLayout

The layout with a year and without one (the drawing is re-centred when the year is absent), and, for a theme with a weekend page, as that page.

draw(c: Ctx) => string
rings (optional)readonly [x: number, y: number, width: number] | undefined

Where rings stand: x, y and width of the page's top edge, in the drawing's units. A theme without it ignores rings.

weekend (optional)true | undefined

The theme has a weekend page (weekend: "split").

extras (optional)((input: ExtrasInput) => Extras) | undefined

Works out the extra data a tear-off page draws. A theme without it is given none.

Examples

import { theme } from "@johnmorrisdotca/koyomi-calendars/themes/heavy";

console.log(theme.box.length);
4

What it prints (run when this page was built)

View sourceEdit on GitHubMade from the source of @johnmorrisdotca/koyomi-calendars 0.3.0.