Commit Graph
124 Commits
Author SHA1 Message Date
Linus Rath 2c34afce2d fix: listen on the HOSTNAME and PORT from .env.local with npm start #1441 2026-10-30 00:01:29 +01:00
Linus Rath 06b18e1fa0 chore: release 1.19.0 2026-10-29 21:23:14 +01:00
Linus Rath 47bfd754f7 ci: check the main screens for accessibility regressions on every push
A Playwright job on the perf guard's production build runs axe-core's
WCAG 2.2 A/AA rules on the mail list, reading pane, composer, calendar,
contacts and Settings > Accessibility, and fails when a screen has more
serious or critical violations than scripts/a11y-guard/budget.json
allows (all zero today). Two more checks cover what axe can't see: the
keyboard focus outline stays visible in Windows contrast themes, and
single-key shortcuts don't act on the mail behind an open dialog.

axe-core is vendored next to the spec (MPL-2.0, see NOTICE), so the
check adds no dependency. `A11Y_GUARD_UPDATE=1 npm run test:a11y-guard`
rewrites the budget.
2026-10-29 20:02:10 +01:00
Linus Rath 5aa44a5bfe chore: update vitest to 5, jsdom to 30 and typescript to 6 2026-10-29 14:00:54 +01:00
Linus Rath 4aea0976a4 chore: update dependencies, postal-mime 4 and jest-dom 7 2026-10-29 01:52:40 +01:00
Linus Rath b0d1a97bb3 chore: release 1.18.0 2026-10-26 21:37:16 +01:00
Linus Rath ff3e088cbb fix: update undici to 7.30.1 for a decompression denial of service (GHSA-xjj6-f33q-929c) 2026-10-26 14:52:04 +01:00
Linus Rath a7cfa5b160 fix: rebuild the plugin sandbox while npm run dev runs, and build it for the integration image 2026-10-25 02:26:18 +01:00
Linus Rath e38e326efb perf: load plugin frames as a plain page instead of a Next app
Every plugin iframe loaded /plugin-sandbox, a force-dynamic Next page.
Each frame then fetched, parsed and hydrated Next's client router on top
of React and the runtime, and the server rendered the page once per
frame, one after another when a dozen plugins started together.
Sandboxed frames have opaque origins, so the browser's code cache never
helps, and they run on the host page's main thread: with 12 plugins
the frames took 2.5-3 s to come up after the app had loaded.

The sandbox routes now return a small HTML page with the UI kit's
stylesheet and the runtime as an ES module, both built ahead of time:

- `scripts/build-plugin-sandbox.mjs` bundles the runtime with esbuild
  and compiles `plugin-kit.css` with the app's Tailwind setup into
  `public/plugin-sandbox-assets/`, with a manifest. Named Tabler imports
  are pointed at the icons' own files, so the full icon set stays in a
  chunk that only loads for an icon name the kit doesn't ship.
- `npm run build`, `npm run dev`, the Dockerfile and the perf-guard
  workflow run it before `next build`.
- `lib/plugin-sandbox/sandbox-document.ts` writes the page; proxy.ts
  still sets the sandbox CSP and the script carries its nonce.
- The assets are served from public/ with CORS and immutable caching.

A frame on an idle page is ready in 255 ms instead of 362 ms, eleven at
once in 1.0 s instead of 2.1 s.
2026-10-25 02:01:47 +01:00
Linus Rath 5872bf20e9 chore: release 1.17.2 2026-10-24 22:46:52 +02:00
Linus Rath 8a31a83bc9 fix: update next.js and dompurify for published advisories 2026-10-22 23:39:03 +02:00
Linus Rath 2be5408be5 chore: release 1.17.1 2026-10-22 23:22:40 +02:00
Linus Rath 0650067884 chore: update vitest and vite to clear npm audit findings 2026-10-21 23:42:21 +02:00
Linus Rath ba44434401 chore: release 1.17.0 2026-10-21 23:28:02 +02:00
Linus Rath 2196a4e4f4 chore: revert the 1.17.0 release 2026-10-20 17:32:54 +02:00
Linus Rath df2e4eeb13 chore: release 1.17.0 2026-10-20 17:26:41 +02:00
Linus Rath f858ab713a chore: release 1.16.0 2026-10-19 21:19:36 +02:00
Linus Rath fc22f111ef chore: release 1.15.0 2026-10-15 23:58:21 +02:00
Linus Rath 0b99371f61 ci: fail when opening, searching or switching folders renders more than budgeted 2026-10-15 05:16:54 +02:00
Linus Rath 5f2d26f2e1 chore: release 1.14.2 2026-10-12 07:49:08 +02:00
Linus Rath 2534c4fde5 chore: release 1.14.1 2026-10-11 22:36:24 +02:00
Linus Rath a248144e54 chore: release 1.14.0 2026-10-11 21:08:32 +02:00
Linus Rath 3d48b12204 chore: release 1.13.0 2026-10-07 20:37:49 +02:00
dealerweb 2b5110e0e4 feat: mention a recipient by first name with @ in the message body
Typing @ at the start of a word in the rich-text body offers the To and
Cc recipients (contact groups expanded) and inserts the chosen one's
first name as plain text. The name comes from the display name; with a
firstname.lastname@ address, the address tells which word of the name is
the first name, and without a name the address supplies it. A bare
initial keeps the mailbox name (@m.mustermann), and recipients who share
a first name get their full name. Bcc recipients are never offered -
naming one in the text would disclose them to everyone else.

The list only opens while a recipient matches, so Enter and Escape
otherwise keep their usual meaning. While it is open, Escape closes the
list rather than the composer, which handles Escape in the capture phase,
and the list closes when the editor loses focus.

Built on @tiptap/suggestion, at the version of the other TipTap packages.
2026-09-30 22:43:59 +02:00
Linus Rath c9900d3df5 chore: release 1.12.0 2026-09-30 21:27:25 +02:00
Linus Rath e2a4145939 chore: release 1.11.2 2026-09-26 22:18:23 +02:00
Linus Rath e82391c846 chore: release 1.11.1 2026-09-26 21:56:13 +02:00
Linus Rath e752355311 chore: release 1.11.0 2026-09-23 21:18:21 +02:00
Linus Rath 2d8de2a817 chore: release 1.11.0-beta.3 2026-09-23 18:16:47 +02:00
Linus Rath ba081bd634 chore: drop unused dependencies and declare direct imports
Remove packages nothing imports any more (`@tiptap/extension-image`,
`asn1js`, `pkijs`, `pvtsutils`, `sonner`, `webcrypto-liner`) and the
`elliptic` override, which only applied through `webcrypto-liner`.

`sharp`, `undici`, `@tiptap/extension-paragraph` and
`@tiptap/extension-heading` were imported directly but only resolved as
transitive dependencies of next, jsdom and starter-kit. List them
explicitly and point the `undici` override at `$undici` so both stay in
step.
2026-09-22 19:41:36 +02:00
Linus Rath 7d3f3c2f4d chore: release 1.11.0-beta.2 (Bulwark Lite pre-release) 2026-09-21 20:54:05 +02:00
Linus Rath 7b07d25386 chore: release 1.11.0-beta.1 (Bulwark Lite pre-release)
Keep the latest Docker tags on the stable release when a GitHub release is marked as a pre-release, so auto-updating deployments on :latest do not pick up beta builds.
2026-09-19 15:04:49 +02:00
Linus Rath 043343e3ec fix: correct author name in package.json 2026-09-19 14:15:04 +02:00
Linus Rath f23d87ad60 fix: update author email in package.json 2026-09-19 14:13:50 +02:00
Linus Rath d7548a4bab refactor: migrate icon set from Lucide to Tabler Icons 2026-09-19 13:32:41 +02:00
Linus Rath fdfcb1711e feat: add Bulwark Lite build for Stalwart Applications 2026-09-19 00:53:53 +02:00
Linus Rath 5de98bc04b feat: add Bulwark Lite static export build 2026-09-17 23:54:33 +02:00
Linus Rath 321188f08a chore: fix npm audit findings 2026-09-17 23:15:27 +02:00
Linus Rath f12d056522 chore: update version to 1.10.0 2026-09-17 22:53:58 +02:00
Linus Rath 93b8d99ff9 fix(): refill missing managed bundles from the server #636 2026-09-07 16:52:20 +02:00
Linus Rath 2f1192bb32 chore: update version to 1.9.2 2026-08-26 22:17:07 +02:00
Linus Rath b1271827e8 chore: update version to 1.9.1 2026-08-26 19:40:16 +02:00
Linus Rath e5d5847169 chore: update version to 1.9.0 2026-08-25 21:03:52 +02:00
Stefan Hildebrandt b3d7f988fa fix(typecheck): regenerate route types and skip stale dev validator
`npm run typecheck` failed with 8 TS2307 errors from Next's generated
route validators referencing old page paths (e.g. calendar/page.js) after
routes moved to catch-all segments. Two causes:

- The production validator (.next/types) was stale. Prepend `next typegen`
  so `tsc` always runs against freshly generated route types.
- The dev validator (.next/dev/types) is a turbopack-dev-only artifact that
  is absent from clean/CI checkouts and goes stale locally. `next typegen`
  force-re-adds it to tsconfig `include`, so exclude it instead (exclude
  overrides include), leaving route typing to the maintained .next/types.

tsc still catches real type errors; verified `npm run typecheck` is clean
and idempotent.
2026-08-09 23:00:53 +02:00
Linus Rath a066108d35 chore: update version to 1.8.1 2026-08-07 01:56:25 +02:00
Linus Rath b50f71fa5c chore: update version to 1.8.0 2026-08-06 19:32:26 +02:00
Mathy Vanvoorden f56ca594dc fix: restore animations and replace tailwind.config.ts
- tailwind.config.ts is not actually being used so removed
- moved animate-fade-in to globals.css
- added tw-animate-css package to make animate-in work
- added a definition for animate-shake as it doesn't exist in tw-animate-css
2026-07-29 15:59:45 +02:00
Linus Rath 7511d8ea78 chore: update version to 1.7.8 2026-07-22 19:43:09 +02:00
Linus Rath 4ad9267a2d chore: bump dompurify to 3.4.12 and next-intl to 4.13.3, npm audit fix for dev deps 2026-07-21 23:23:14 +02:00
Shuki Vaknin 5716d91115 feat(folders): drag-and-drop reorder for all folders 2026-07-21 20:56:38 +02:00