From 185610ee61c59766e0b3d7959c704f3cae51884d Mon Sep 17 00:00:00 2001 From: vl Date: Mon, 21 Sep 2026 23:07:06 +0200 Subject: [PATCH] feat: move the week down the right-hand side of the panel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A bottom strip gave each day a 114px column, and that width was what capped the type size. A side band gives 142px of usable width and a 68px row, so the hours go from 19pt to 22pt, the day labels from 20 to 23, and each day fits on one line — "Mar 11:00–18:00" reads at a glance where a column had to be read downwards. Right rather than left, for two reasons the renders make plain: on the left the logo is pushed into the middle and loses its place as a signature, and the eye meets the week before the day's status. OUVERT is what has to be read first from the pavement. The times stay whole. Only the spaces around the dash go, which is enough to hold 22pt without abbreviating anything: a shop's opening hour is not a detail to shorten. The idea came from the shop owner, and testing it surfaced a defect that had been in production all along. Rendering the worst case the data model allows — three periods in a day, none on a round hour — showed the day's hours wrapping, pushing the layout down, and the English line of the banner falling off the bottom edge. A panel does not scroll and does not reflow: what does not fit is lost. Type size is now fitted to the space available, with a floor below which it will not go, and nothing may leave its box. The width estimate is deliberately crude: measuring glyphs would mean loading the font in that module and would still be an estimate, since the renderer applies its own kerning. Erring small costs a point of type, erring large costs a broken screen. Three periods a day will reportedly never happen. The protection stays anyway — it costs nothing and removes the need to remember. `npm run screen:fonts` renders every arrangement and both alternative typefaces, including the worst case, because choosing type for a 1-bit panel is done by looking at it thresholded. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_012cSY9pVhZmJUKNN7wf1Myd --- lib/screen/fit.test.ts | 37 +++++++ lib/screen/fit.ts | 34 ++++++ lib/screen/fonts.ts | 54 +++++++--- lib/screen/layout.ts | 11 ++ lib/screen/render.test.ts | 18 ++++ lib/screen/render.ts | 186 +++++++++++++++++++++++++++++---- package-lock.json | 33 ++++++ package.json | 6 +- public/fonts/atkinson-400.woff | Bin 0 -> 14024 bytes public/fonts/atkinson-700.woff | Bin 0 -> 14292 bytes public/fonts/plex-400.woff | Bin 0 -> 22104 bytes public/fonts/plex-600.woff | Bin 0 -> 23876 bytes public/fonts/plex-700.woff | Bin 0 -> 22280 bytes scripts/typography-preview.ts | 123 ++++++++++++++++++++++ 14 files changed, 466 insertions(+), 36 deletions(-) create mode 100644 lib/screen/fit.test.ts create mode 100644 lib/screen/fit.ts create mode 100644 public/fonts/atkinson-400.woff create mode 100644 public/fonts/atkinson-700.woff create mode 100644 public/fonts/plex-400.woff create mode 100644 public/fonts/plex-600.woff create mode 100644 public/fonts/plex-700.woff create mode 100644 scripts/typography-preview.ts diff --git a/lib/screen/fit.test.ts b/lib/screen/fit.test.ts new file mode 100644 index 0000000..c3f5774 --- /dev/null +++ b/lib/screen/fit.test.ts @@ -0,0 +1,37 @@ +import { describe, expect, it } from 'vitest'; + +import { fitFontSize } from './fit'; + +const options = { available: 500, preferred: 36, minimum: 20 }; + +describe('fitFontSize', () => { + it('keeps the preferred size when the text is short', () => { + expect(fitFontSize('10:00 – 18:30', options)).toBe(36); + }); + + it('shrinks a long line rather than letting it wrap', () => { + // Three periods, none on a round hour: the case that overflowed. + const crowded = '09:30 – 12:00 · 13:30 – 16:00 · 17:00 – 19:30'; + const size = fitFontSize(crowded, options); + expect(size).toBeLessThan(36); + expect(size * crowded.length * 0.54).toBeLessThanOrEqual(options.available); + }); + + it('never goes below the floor, however long the text', () => { + expect(fitFontSize('a'.repeat(500), options)).toBe(20); + }); + + it('keeps the preferred size for empty text', () => { + expect(fitFontSize('', options)).toBe(36); + }); + + it('returns whole pixels', () => { + expect(Number.isInteger(fitFontSize('10:00 – 13:00 · 14:00', options))).toBe(true); + }); + + it('gives more room a larger size', () => { + const narrow = fitFontSize('10:00 – 13:00 · 14:00 – 18:30', { ...options, available: 300 }); + const wide = fitFontSize('10:00 – 13:00 · 14:00 – 18:30', { ...options, available: 700 }); + expect(wide).toBeGreaterThan(narrow); + }); +}); diff --git a/lib/screen/fit.ts b/lib/screen/fit.ts new file mode 100644 index 0000000..3a8eeb9 --- /dev/null +++ b/lib/screen/fit.ts @@ -0,0 +1,34 @@ +/** + * Choosing a type size that fits the space available. + * + * The panel cannot scroll and cannot reflow gracefully: text that does not fit + * is text that spills over a neighbour or falls off the bottom edge. The shop + * can legitimately enter three opening periods in a day, none of them on a + * round hour, and write a long message on top — a combination that overflowed + * both the week strip and the bottom banner before this existed. + * + * The width estimate is deliberately crude. Measuring glyphs properly would + * mean loading the font here and would still be an estimate, because the + * renderer applies its own kerning. Erring small costs a point of type; erring + * large costs a broken screen. + */ + +/** Average glyph width as a fraction of the type size, for Inter's digits and lowercase. */ +const WIDTH_RATIO = 0.54; + +export type FitOptions = { + /** The width the text has to live in, in pixels. */ + available: number; + /** The size to use when the text is short enough. */ + preferred: number; + /** Never go below this: smaller stops being readable from the pavement. */ + minimum: number; +}; + +export function fitFontSize(text: string, { available, preferred, minimum }: FitOptions): number { + if (text.length === 0) { + return preferred; + } + const fitting = available / (text.length * WIDTH_RATIO); + return Math.max(minimum, Math.min(preferred, Math.floor(fitting))); +} diff --git a/lib/screen/fonts.ts b/lib/screen/fonts.ts index 0c46c1e..998e32d 100644 --- a/lib/screen/fonts.ts +++ b/lib/screen/fonts.ts @@ -13,27 +13,49 @@ import { SANS, SERIF } from './layout'; * redraws, so they have to be reproducible. Vendored files make that true; an * install tree or a CDN would not. */ -const FILES: { file: string; name: string; weight: Font['weight'] }[] = [ - { file: 'inter-400.woff', name: SANS, weight: 400 }, - { file: 'inter-600.woff', name: SANS, weight: 600 }, - { file: 'inter-700.woff', name: SANS, weight: 700 }, - { file: 'source-serif-600.woff', name: SERIF, weight: 600 }, -]; +/** + * The sans families the panel can be set in. + * + * More than one exists because choosing a typeface for a 1-bit panel is done + * by looking at it thresholded, not by reading its specimen: anti-aliasing is + * what most screen faces rely on, and there is none here. + */ +export const SANS_FAMILIES = { + inter: ['inter-400.woff', 'inter-600.woff', 'inter-700.woff'], + atkinson: ['atkinson-400.woff', 'atkinson-700.woff', 'atkinson-700.woff'], + plex: ['plex-400.woff', 'plex-600.woff', 'plex-700.woff'], +} as const; -let cached: Font[] | null = null; +export type SansFamily = keyof typeof SANS_FAMILIES; -export async function loadScreenFonts(): Promise { - if (cached) { - return cached; +const WEIGHTS: Font['weight'][] = [400, 600, 700]; + +const cache = new Map(); + +export async function loadScreenFonts(family: SansFamily = 'inter'): Promise { + const hit = cache.get(family); + if (hit) { + return hit; } + const directory = path.join(process.cwd(), 'public', 'fonts'); - cached = await Promise.all( - FILES.map(async ({ file, name, weight }) => ({ - name, + const files = SANS_FAMILIES[family]; + + const fonts = await Promise.all([ + ...files.map(async (file, index) => ({ + name: SANS, data: await readFile(path.join(directory, file)), - weight, + weight: WEIGHTS[index] ?? 400, style: 'normal' as const, })), - ); - return cached; + (async () => ({ + name: SERIF, + data: await readFile(path.join(directory, 'source-serif-600.woff')), + weight: 600 as Font['weight'], + style: 'normal' as const, + }))(), + ]); + + cache.set(family, fonts); + return fonts; } diff --git a/lib/screen/layout.ts b/lib/screen/layout.ts index 5286ba5..bdffa0a 100644 --- a/lib/screen/layout.ts +++ b/lib/screen/layout.ts @@ -14,6 +14,17 @@ export const BLACK = '#000000'; export const WHITE = '#ffffff'; export const PADDING = 24; + +/** + * Where the week sits. + * + * A bottom band gives each day a 114px column, and that width is what caps + * the type size. A side band gives roughly 230px and a 68px row instead — + * twice the room in both directions, at the cost of narrowing the main block. + */ +export type WeekPlacement = 'bottom' | 'right' | 'left'; + +export const SIDE_BAND_WIDTH = 232; export const HEADER_HEIGHT = 76; export const WEEK_HEIGHT = 112; export const BANNER_HEIGHT = 84; diff --git a/lib/screen/render.test.ts b/lib/screen/render.test.ts index 8b82657..d806c98 100644 --- a/lib/screen/render.test.ts +++ b/lib/screen/render.test.ts @@ -122,6 +122,24 @@ describe('screenTree', () => { expect(withoutLogo).toContain('ITA ITO'); }); + it('keeps the hours whole in the week, tightening only the dash', () => { + const tree = JSON.stringify(screenTree(PAYLOAD)); + // A shop's opening hour is not a detail to abbreviate: 11:00 stays 11:00. + expect(tree).toContain('10:00–13:00'); + expect(tree).toContain('14:00–18:30'); + expect(tree).not.toContain('10–13'); + // The main block has the room for the spaced form, and it is the line + // someone actually reads for today. + expect(tree).toContain('10:00 – 13:00 · 14:00 – 18:30'); + }); + + it('draws the week down the right-hand side by default', () => { + const tree = JSON.stringify(screenTree(PAYLOAD)); + // The band is the default arrangement; the bottom strip remains available. + expect(tree).toContain('"width":232'); + expect(JSON.stringify(screenTree(PAYLOAD, null, 'bottom'))).not.toContain('"width":232'); + }); + it('omits the hours line on a day with no hours', () => { const tree = JSON.stringify( screenTree({ ...PAYLOAD, today: { ...PAYLOAD.today, hours_text: '' } }), diff --git a/lib/screen/render.ts b/lib/screen/render.ts index 2afad75..2732913 100644 --- a/lib/screen/render.ts +++ b/lib/screen/render.ts @@ -13,12 +13,14 @@ import satori from 'satori'; import type { ScreenPayload, ScreenWeekDay } from './contract'; -import { loadScreenFonts } from './fonts'; +import { loadScreenFonts, type SansFamily } from './fonts'; +import { fitFontSize } from './fit'; import { h, type ElementNode } from './h'; import { LOGO_HEIGHT, LOGO_WIDTH, loadLogoDataUri } from './logo'; import { BANNER_HEIGHT, BLACK, + SIDE_BAND_WIDTH, HEADER_HEIGHT, PADDING, RULE, @@ -28,26 +30,124 @@ import { SERIF, WEEK_HEIGHT, WHITE, + type WeekPlacement, } from './layout'; -export function screenTree(payload: ScreenPayload, logo: string | null = null): ElementNode { +export function screenTree( + payload: ScreenPayload, + logo: string | null = null, + placement: WeekPlacement = 'right', +): ElementNode { + const root = { + display: 'flex', + width: SCREEN_WIDTH, + height: SCREEN_HEIGHT, + backgroundColor: WHITE, + color: BLACK, + fontFamily: SANS, + } as const; + + if (placement === 'bottom') { + return h( + 'div', + { style: { ...root, flexDirection: 'column' } }, + header(payload, logo), + main(payload, SCREEN_WIDTH), + weekStrip(payload.week), + banner(payload), + ); + } + + const column = h( + 'div', + { style: { display: 'flex', flexDirection: 'column', flexGrow: 1, flexBasis: 0 } }, + header(payload, logo), + main(payload, SCREEN_WIDTH - SIDE_BAND_WIDTH), + banner(payload), + ); + const band = weekBand(payload.week, placement); + + return h( + 'div', + { style: { ...root, flexDirection: 'row' } }, + ...(placement === 'left' ? [band, column] : [column, band]), + ); +} + +/** + * The week as a side band: one row per day, the label and the hours on the + * same line. A row is 68px tall and the band 232px wide, so the type can be + * a third larger than the bottom strip allows. + */ +function weekBand(week: ScreenWeekDay[], placement: 'right' | 'left'): ElementNode { return h( 'div', { style: { display: 'flex', flexDirection: 'column', - width: SCREEN_WIDTH, - height: SCREEN_HEIGHT, - backgroundColor: WHITE, - color: BLACK, - fontFamily: SANS, + width: SIDE_BAND_WIDTH, + ...(placement === 'right' + ? { borderLeft: `${RULE}px solid ${BLACK}` } + : { borderRight: `${RULE}px solid ${BLACK}` }), }, }, - header(payload, logo), - main(payload), - weekStrip(payload.week), - banner(payload), + ...week.map((day) => weekRow(day)), + ); +} + +function weekRow(day: ScreenWeekDay): ElementNode { + const inverted = day.is_today; + const lines = day.is_closed ? ['—'] : day.hours_text.split(' · ').map(tightHours); + + return h( + 'div', + { + style: { + display: 'flex', + alignItems: 'center', + flexGrow: 1, + flexBasis: 0, + paddingLeft: 14, + paddingRight: 14, + backgroundColor: inverted ? BLACK : WHITE, + color: inverted ? WHITE : BLACK, + overflow: 'hidden', + }, + }, + h( + 'div', + { style: { display: 'flex', width: 62, fontSize: 23, fontWeight: 700 } }, + `${day.label_fr}${day.is_exception ? '*' : ''}`, + ), + h( + 'div', + { + style: { + display: 'flex', + flexDirection: 'column', + alignItems: 'flex-end', + flexGrow: 1, + }, + }, + ...lines.map((line) => + h( + 'div', + { + style: { + display: 'flex', + // A row is 68px tall; three lines have to share it. + fontSize: Math.min( + lines.length >= 3 ? 17 : 22, + fitFontSize(line, { available: 142, preferred: 22, minimum: 14 }), + ), + lineHeight: 1.2, + }, + }, + line, + ), + ), + ), ); } @@ -81,7 +181,7 @@ function header(payload: ScreenPayload, logo: string | null): ElementNode { ); } -function main(payload: ScreenPayload): ElementNode { +function main(payload: ScreenPayload, width: number): ElementNode { const { today } = payload; return h( 'div', @@ -103,7 +203,20 @@ function main(payload: ScreenPayload): ElementNode { today.hours_text ? h( 'div', - { style: { display: 'flex', fontSize: 36, fontWeight: 600, marginTop: 10 } }, + { + style: { + display: 'flex', + // Three periods with no round hour would otherwise wrap and push + // the banner off the bottom edge. + fontSize: fitFontSize(today.hours_text, { + available: width - 2 * PADDING, + preferred: 36, + minimum: 22, + }), + fontWeight: 600, + marginTop: 10, + }, + }, today.hours_text, ) : null, @@ -147,7 +260,7 @@ function weekColumn(day: ScreenWeekDay): ElementNode { // block, but here it is the difference between fitting and clipping. const lines = day.is_closed ? ['—'] - : day.hours_text.split(' · ').map((slot) => slot.replace(' – ', '–')); + : day.hours_text.split(' · ').map(tightHours); return h( 'div', @@ -169,11 +282,21 @@ function weekColumn(day: ScreenWeekDay): ElementNode { }, h( 'div', - { style: { display: 'flex', fontSize: 19, fontWeight: 700, marginBottom: 6 } }, + { style: { display: 'flex', fontSize: 20, fontWeight: 700, marginBottom: 5 } }, `${day.label_fr}${day.is_exception ? '*' : ''}`, ), ...lines.map((line) => - h('div', { style: { display: 'flex', fontSize: 16, lineHeight: 1.35 } }, line), + h( + 'div', + { + style: { + display: 'flex', + fontSize: fitFontSize(line, { available: 102, preferred: 19, minimum: 14 }), + lineHeight: 1.3, + }, + }, + line, + ), ), ); } @@ -202,12 +325,37 @@ function banner(payload: ScreenPayload): ElementNode | null { ); } +export type RenderOptions = { + /** Which sans family to set the panel in; see lib/screen/fonts.ts. */ + family?: SansFamily; + /** Where the week sits; see lib/screen/layout.ts. */ + placement?: WeekPlacement; +}; + /** Renders the payload to an SVG string, exactly 800x480. */ -export async function renderScreenSvg(payload: ScreenPayload): Promise { - const [fonts, logo] = await Promise.all([loadScreenFonts(), loadLogoDataUri()]); - return satori(screenTree(payload, logo) as unknown as React.ReactNode, { +export async function renderScreenSvg( + payload: ScreenPayload, + options: RenderOptions = {}, +): Promise { + const [fonts, logo] = await Promise.all([ + loadScreenFonts(options.family), + loadLogoDataUri(), + ]); + return satori(screenTree(payload, logo, options.placement) as unknown as React.ReactNode, { width: SCREEN_WIDTH, height: SCREEN_HEIGHT, fonts, }); } + +/** + * The week's own spelling of an opening period. + * + * Only the spaces around the dash go: "10:00–18:30" instead of + * "10:00 – 18:30". The times themselves stay whole — a shop's opening hour is + * not a detail to abbreviate — and losing two spaces is enough to hold 22pt + * in a 142px column. + */ +function tightHours(slot: string): string { + return slot.replace(' – ', '–'); +} diff --git a/package-lock.json b/package-lock.json index 8e91960..031cb1b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,7 +29,10 @@ }, "devDependencies": { "@eslint/js": "^9.39.5", + "@fontsource/atkinson-hyperlegible": "^5.3.0", + "@fontsource/ibm-plex-sans": "^5.3.0", "@fontsource/inter": "^5.3.0", + "@fontsource/silkscreen": "^5.3.0", "@fontsource/source-serif-4": "^5.3.0", "@playwright/test": "^1.63.0", "@tailwindcss/postcss": "^4.3.3", @@ -1113,6 +1116,26 @@ "url": "https://github.com/sponsors/ayuhito" } }, + "node_modules/@fontsource/atkinson-hyperlegible": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/atkinson-hyperlegible/-/atkinson-hyperlegible-5.3.0.tgz", + "integrity": "sha512-Sp8Ve8+rQmENY2Lv02VH7sLpntzTTvnncnJMTbRE7DX6TLxGraN4ykZfzaUWIoCFmaomwkvNiqmlPkrKBuDoSA==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, + "node_modules/@fontsource/ibm-plex-sans": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/ibm-plex-sans/-/ibm-plex-sans-5.3.0.tgz", + "integrity": "sha512-CbE4CbbEEZJX860XyUiRpsksXIQR8Rp2XDva2VO53NJox9tVNtusrysd2x5YkUEY3ErQ66W1IiiQL8/wihhw5w==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@fontsource/inter": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@fontsource/inter/-/inter-5.3.0.tgz", @@ -1123,6 +1146,16 @@ "url": "https://github.com/sponsors/ayuhito" } }, + "node_modules/@fontsource/silkscreen": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@fontsource/silkscreen/-/silkscreen-5.3.0.tgz", + "integrity": "sha512-M1NQ3LQH0LFNvyFPd/piHEGMImPPtpLglNnLC6Vdcq9kL0jNIOtTQmksAWCc4enbDnw1OnIpZtjNEfRqYm/QmA==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@fontsource/source-serif-4": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/@fontsource/source-serif-4/-/source-serif-4-5.3.0.tgz", diff --git a/package.json b/package.json index 87bb39d..cb763fd 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,8 @@ "e2e": "playwright test", "holidays:sync": "tsx scripts/sync-holidays.ts", "translate:test": "tsx scripts/test-translation.ts", - "e2e:ui": "playwright test --ui" + "e2e:ui": "playwright test --ui", + "screen:fonts": "tsx scripts/typography-preview.ts" }, "dependencies": { "@fontsource-variable/inter": "^5.3.0", @@ -44,7 +45,10 @@ }, "devDependencies": { "@eslint/js": "^9.39.5", + "@fontsource/atkinson-hyperlegible": "^5.3.0", + "@fontsource/ibm-plex-sans": "^5.3.0", "@fontsource/inter": "^5.3.0", + "@fontsource/silkscreen": "^5.3.0", "@fontsource/source-serif-4": "^5.3.0", "@playwright/test": "^1.63.0", "@tailwindcss/postcss": "^4.3.3", diff --git a/public/fonts/atkinson-400.woff b/public/fonts/atkinson-400.woff new file mode 100644 index 0000000000000000000000000000000000000000..815fbf57c766e6df08da7e3ffa2ef1e71b262434 GIT binary patch literal 14024 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 literal 0 HcmV?d00001 diff --git a/public/fonts/atkinson-700.woff b/public/fonts/atkinson-700.woff new file mode 100644 index 0000000000000000000000000000000000000000..e9495ca6f8090f4a52cdca2f0495b6e02d950caf GIT binary patch literal 14292 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 K78Q^b`Tziz^yl~h literal 0 HcmV?d00001 diff --git a/scripts/typography-preview.ts b/scripts/typography-preview.ts new file mode 100644 index 0000000..46e1082 --- /dev/null +++ b/scripts/typography-preview.ts @@ -0,0 +1,123 @@ +/** + * Renders the panel in each candidate typeface, at 1 bit, plus a magnified + * crop of the week strip — the smallest text on the screen and the only part + * whose legibility is in question. + * + * npm run screen:fonts + * + * Choosing a face for a 1-bit panel is done by looking at it thresholded. A + * specimen sheet shows anti-aliased outlines the panel will never render. + */ + +import { mkdir, writeFile } from 'node:fs/promises'; +import path from 'node:path'; + +import sharp from 'sharp'; + +import type { ScreenPayload } from '../lib/screen/contract'; +import { encodeScreen } from '../lib/screen/encode'; +import type { SansFamily } from '../lib/screen/fonts'; +import type { WeekPlacement } from '../lib/screen/layout'; +import { renderScreenSvg } from '../lib/screen/render'; + +const PAYLOAD: ScreenPayload = { + schema: 1, + generated_at: '2026-09-22T12:00:00+02:00', + shop_name: 'ITA ITO', + logo_url: '', + today: { + date_fr: 'Mercredi 23 septembre', + date_en: 'Wednesday 23 September', + status: 'OPEN', + status_fr: 'OUVERT', + status_en: 'OPEN', + hours_text: '11:00 – 18:00', + next_change_fr: 'Ferme à 18:00', + next_change_en: 'Closes at 6:00 pm', + is_exception: false, + }, + week: [ + { label_fr: 'Lun', label_en: 'Mon', hours_text: '', is_today: false, is_closed: true, is_exception: false }, + { label_fr: 'Mar', label_en: 'Tue', hours_text: '11:00 – 18:00', is_today: false, is_closed: false, is_exception: false }, + { label_fr: 'Mer', label_en: 'Wed', hours_text: '11:00 – 18:00', is_today: true, is_closed: false, is_exception: false }, + { label_fr: 'Jeu', label_en: 'Thu', hours_text: '11:00 – 13:00 · 14:00 – 18:00', is_today: false, is_closed: false, is_exception: false }, + { label_fr: 'Ven', label_en: 'Fri', hours_text: '14:00 – 18:00', is_today: false, is_closed: false, is_exception: true }, + { label_fr: 'Sam', label_en: 'Sat', hours_text: '10:00 – 17:00', is_today: false, is_closed: false, is_exception: false }, + { label_fr: 'Dim', label_en: 'Sun', hours_text: '', is_today: false, is_closed: true, is_exception: false }, + ], + banner: { + kind: 'MESSAGE', + text_fr: 'Fermeture exceptionnelle jeudi matin', + text_en: 'Exceptionally closed on Thursday morning', + }, +}; + +/** + * The worst case the data model allows: three slots in a day, none of them on + * a round hour, so nothing can be shortened. If a layout survives this it + * survives anything the shop can enter. + */ +const CROWDED: ScreenPayload = { + ...PAYLOAD, + today: { + ...PAYLOAD.today, + hours_text: '09:30 – 12:00 · 13:30 – 16:00 · 17:00 – 19:30', + next_change_fr: 'Ferme à 12:00', + next_change_en: 'Closes at 12:00 pm', + }, + week: PAYLOAD.week.map((day, index) => + index === 2 + ? { ...day, hours_text: '09:30 – 12:00 · 13:30 – 16:00 · 17:00 – 19:30' } + : index === 3 + ? { ...day, hours_text: '10:30 – 18:30' } + : day, + ), +}; + +const VARIANTS: { + key: string; + label: string; + family: SansFamily; + placement: WeekPlacement; + payload?: ScreenPayload; +}[] = [ + { key: 'bas', label: 'Bande en bas (actuelle)', family: 'inter', placement: 'bottom' }, + { key: 'droite', label: 'Bande à droite', family: 'inter', placement: 'right' }, + { key: 'gauche', label: 'Bande à gauche', family: 'inter', placement: 'left' }, + { key: 'limite-droite', label: 'Pire cas, bande à droite', family: 'inter', placement: 'right', payload: CROWDED }, + { key: 'limite-bas', label: 'Pire cas, bande en bas', family: 'inter', placement: 'bottom', payload: CROWDED }, +]; + +async function main(): Promise { + const directory = path.join(process.cwd(), '.preview', 'fonts'); + await mkdir(directory, { recursive: true }); + + for (const { key, label, family, placement, payload } of VARIANTS) { + const png = encodeScreen( + await renderScreenSvg(payload ?? PAYLOAD, { family, placement }), + 'png', + ); + await writeFile(path.join(directory, `${key}.png`), png); + + // Magnified with nearest-neighbour on the week area: the point is to see + // the pixels the panel will actually set, not a smoothed impression. + const crop = + placement === 'bottom' + ? { left: 0, top: 284, width: 800, height: 116 } + : placement === 'right' + ? { left: 800 - 232, top: 0, width: 232, height: 480 } + : { left: 0, top: 0, width: 232, height: 480 }; + + await sharp(png) + .extract(crop) + .resize({ width: crop.width * 2, kernel: 'nearest' }) + .toFile(path.join(directory, `${key}-zoom.png`)); + + console.log(`${label.padEnd(26)} -> .preview/fonts/${key}.png (+ -zoom.png)`); + } +} + +main().catch((error: unknown) => { + console.error(error); + process.exitCode = 1; +});