Commit Graph
2009 Commits
Author SHA1 Message Date
Devon HudsonandClaude Opus 5.5 6d30f3be66 Show the errors of pinned registration fields above the form
The registration form doesn't render a username pinned by the invite,
and shows a pinned email address as text, so errors the server reports
on either field weren't shown at all: the form just came back. The
invitee never chose these values, so "This username is already taken"
would mean nothing to them either. Each pinned field with an error now
gets its own message above the form, saying the invite can't be used
and to let whoever sent it know: a policy which refuses the address or
the username would refuse a new invite just the same.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CZdGaj9bJcn5QeeUw8YXoF
2026-10-13 15:30:54 +02:00
Devon HudsonandClaude Opus 5.5 68aac69cbe Explain an invalid invite link when password registration is disabled
With password registration disabled, opening an invite link whose token
is unknown, revoked, expired or used redirected to the upstream
provider or to `/login`, so the invitee never learned that the link was
the problem. The page now stays, with the "invite invalid" alert above
the provider buttons and the sign-in link. A valid token which isn't
passwordless can't register there, so it still redirects.

Posting a token which has become invalid re-renders the page with only
the token's error, instead of validating the rest of the form, which
would tell whether a username exists even with registration closed. The
page submits a token only when it resolved, and the re-rendered form
drops it, so that the next submission is an ordinary registration
rather than the same error.

A blank token is no token, on the link and on the form alike, and
spaces around one are ignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CZdGaj9bJcn5QeeUw8YXoF
2026-10-13 15:30:54 +02:00
Quentin Gliech fd43ca5ae7 Pre-fill the registration form from an invite link
`/register?token=…` now resolves the invite code server-side and hands what it
was issued for to the form island through a `data-invite` attribute: a pinned
email address is shown as the line announcing where the verification code goes
rather than as an input, a pinned username isn't shown at all, and a
`passwordless` code replaces the password fields with a notice and relabels the
submit button. A code the server refused only reports that, as an error above
the form.

Because a passwordless code is a way to register on its own, the shortcuts
which send the page to the upstream provider or to `/login` when password
registration is disabled are skipped when the link carries one.

The code itself travels back on submission through a hidden field, so a form
which comes back with errors keeps its shape, and so does the redirect the page
sends the user to when the CSRF token has expired.
2026-10-13 15:30:54 +02:00
Quentin Gliech be866612a5 Enforce invite code constraints server-side when registering
The registration form can now carry an invite code, in a hidden `token` field,
and the code is resolved before anything else, so that:

 - an unknown, revoked, expired or exhausted code is rejected with an error on
   the field, and re-rendering the form keeps the code
 - a code which pins a username or an email address only lets that identity
   register, an empty field meaning the user accepted what the code pins
 - a `passwordless` code skips the password entirely and requires an email
   address to verify, even when the server otherwise doesn't, and is a way to
   register on its own when password registration is disabled

The code is also consumed whenever one was used, not only when the server
requires one.
2026-10-13 15:30:54 +02:00
Quentin Gliech 14ba102309 Check the username availability as it is typed in the registration form
Once the username input settles, the field queries `usernameAvailable`
and reports next to it whether the name is available, taken or rejected
by the registration policy. In the two-step layout, continuing is held
back while a settled verdict says the name can't be used. The island now
declares the GraphQL endpoint on its mount node and brings its own query
client.
2026-10-13 15:30:54 +02:00
Quentin Gliech a6d1122b1f Add a usernameAvailable GraphQL query for anonymous lookups
Exposes a new query telling whether a given username is available for
registration, and if not, why: already taken, or rejected by the
registration policy. A username reserved on the homeserver side is
deliberately reported as taken, mirroring the ambiguity of the
registration form, which doesn't tell the two apart either.

Because the query reveals whether a username exists, it is rate-limited
per requester, configurable through the new
`rate_limiting.username_availability` option.
2026-10-13 15:30:54 +02:00
Quentin Gliech 1c68fc986a Render the registration form with React
The server-rendered registration form is replaced by a React island mounted
on `/register`, which renders the CAPTCHA in-page, gives live password
complexity feedback, and lays out the upstream provider buttons and the
sign-in link the way `/login` does. The island owns the whole form, so every
variant of the page is rendered from the mount data alone, and the user fills
it in one step. Server-side validation errors are threaded back into it
through the mount node, so a rejected submission re-renders with the errors
attached to the fields they belong to, until the user edits them.

`RegisterContext` resolves the provider names and the sign-in link server-side
so that the island only has to render them. The sign-in link is derived from
the post-auth action in the query string instead of the `PostAuthContext`
loaded from the database, which drops a round trip from both the GET and the
invalid-form re-render.

Registering now requires JavaScript, including on the variant with upstream
providers only and on the one without a CAPTCHA: the <noscript> block shows a
notice instead of a duplicate form, which could not work anyway when a CAPTCHA
is configured. While the script loads, the page shows a skeleton of the form
to avoid layout shifts, and a hidden error notice is revealed if it fails to
boot. The server-rendered CAPTCHA component and its entrypoint are removed
with their only consumer.
2026-10-13 14:02:33 +02:00
Quentin Gliech 6857910db4 Reserve the space of the password confirmation message
The message appears when the confirmation field loses focus, which shifted the
button below it under the click that moved the focus away.
2026-10-13 14:02:33 +02:00
Quentin Gliech c78d038f85 Move the "or" separator styles into a CSS module
The class becomes `or-separator`, as the global `.separator` also matched the
footer's separator. The module is imported by `templates.css` for the SSR
`field.separator()` macro.
2026-10-13 14:02:33 +02:00
github-actions[bot] 15e27bed51 Translations updates 2026-10-06 15:13:57 +00:00
dependabot[bot] c8fb006cfa build(deps-dev): bump storybook
Bumps the storybook group with 1 update in the / directory: [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core).


Updates `storybook` from 10.5.3 to 10.6.0
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.6.0/code/core)

---
updated-dependencies:
- dependency-name: storybook
  dependency-version: 10.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-05 11:44:30 +00:00
dependabot[bot] d5a61a46e1 build(deps-dev): bump the vite group across 1 directory with 2 updates
Bumps the vite group with 2 updates in the / directory: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `@vitejs/plugin-react` from 6.0.4 to 6.1.1
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.1.1/packages/plugin-react)

Updates `vite` from 8.1.5 to 8.3.0
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@8.3.0/packages/vite)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: vite
- dependency-name: vite
  dependency-version: 8.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: vite
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-05 11:14:48 +00:00
Olivier 'reivilibre 57f1314889 build(deps): bump the fontsource group across 1 directory with 2 updates (#6018) 2026-10-05 12:10:33 +01:00
dependabot[bot] ab359fd4cf build(deps): bump the fontsource group across 1 directory with 2 updates
Bumps the fontsource group with 2 updates in the / directory: [@fontsource/inconsolata](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/inconsolata) and [@fontsource/inter](https://github.com/fontsource/font-files/tree/HEAD/fonts/google/inter).


Updates `@fontsource/inconsolata` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/inconsolata)

Updates `@fontsource/inter` from 5.2.8 to 5.3.0
- [Changelog](https://github.com/fontsource/font-files/blob/main/CHANGELOG.md)
- [Commits](https://github.com/fontsource/font-files/commits/HEAD/fonts/google/inter)

---
updated-dependencies:
- dependency-name: "@fontsource/inconsolata"
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: fontsource
- dependency-name: "@fontsource/inter"
  dependency-version: 5.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: fontsource
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-05 10:18:47 +00:00
dependabot[bot] 30c3077f78 build(deps): bump the i18next group across 1 directory with 3 updates
Bumps the i18next group with 3 updates in the / directory: [i18next](https://github.com/i18next/i18next), [react-i18next](https://github.com/i18next/react-i18next) and [i18next-cli](https://github.com/i18next/i18next-cli).


Updates `i18next` from 26.3.6 to 26.4.2
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v26.3.6...v26.4.2)

Updates `react-i18next` from 17.0.10 to 17.0.14
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.10...v17.0.14)

Updates `i18next-cli` from 1.66.2 to 1.74.1
- [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-cli/compare/v1.66.2...v1.74.1)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 26.4.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: i18next
- dependency-name: i18next-cli
  dependency-version: 1.74.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: i18next
- dependency-name: react-i18next
  dependency-version: 17.0.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: i18next
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-05 10:18:27 +00:00
dependabot[bot] 4b3e5a7191 build(deps): bump the react group with 2 updates
Bumps the react group with 2 updates: [react](https://github.com/react/react/tree/HEAD/packages/react) and [react-dom](https://github.com/react/react/tree/HEAD/packages/react-dom).


Updates `react` from 19.2.7 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react)

Updates `react-dom` from 19.2.7 to 19.3.0
- [Release notes](https://github.com/react/react/releases)
- [Changelog](https://github.com/react/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/react/react/commits/v19.3.0/packages/react-dom)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: react
- dependency-name: react-dom
  dependency-version: 19.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: react
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-10-01 14:13:21 +00:00
github-actions[bot] a3ea612459 Translations updates 2026-09-29 16:11:53 +00:00
github-actions[bot] b67a480af8 Translations updates 2026-09-22 19:00:00 +00:00
Eric Eastwood 763d82b24c Automatic merge back to main (#5989) 2026-09-21 11:49:10 -05:00
Quentin Gliech 8cda28a734 Add a shared boot helper for React islands (#5975) 2026-09-16 10:56:12 +02:00
github-actions[bot] 5dbef45e9f Translations updates 2026-09-15 14:59:01 +00:00
Quentin Gliech 05d2f37423 Add a shared boot helper for React islands
The helper parses the mount node's dataset, waits for the i18n setup
before the first render, and swaps the page to a server-rendered error
notice when booting fails. This fixes the account app staying on its
loading screen forever when fetching the locale data fails, and gives
upcoming server-rendered pages with React islands a common entry point.
Waiting on the setup requires `setupI18n` to return the initialisation
promise, so it now does.
2026-09-15 15:08:00 +02:00
Quentin Gliech 179f1f9b1d Extract the password complexity feedback out of PasswordCreationDoubleInput
The strength meter, the improvement hints and the too-weak error move to
a `PasswordComplexityFeedback` component backed by a
`usePasswordComplexity` hook, so that forms which lay out their password
fields differently can reuse them. `PasswordCreationDoubleInput` takes
the minimum complexity as a plain number instead of a `SiteConfig`
fragment; its two callers already query `siteConfig`, so they pass the
field directly.
2026-09-15 15:08:00 +02:00
github-actions[bot] 98af240ce3 Translations updates 2026-09-08 20:25:07 +00:00
Quentin Gliech cd2ef4cbd7 Merge main into quenting/react-captcha 2026-09-08 12:38:14 +02:00
github-actions[bot] b0c53acf07 Translations updates 2026-09-02 21:24:07 +00:00
github-actions[bot] 39220b7ae7 Translations updates 2026-08-26 08:30:00 +00:00
github-actions[bot] 507893cdc4 Translations updates 2026-08-25 16:49:23 +00:00
matrixbot 7473ef34ed Automatic merge back to main (#5925) 2026-08-17 22:00:58 +02:00
github-actions[bot] 9539e8a38e Translations updates 2026-08-17 19:24:12 +00:00
Quentin Gliech 119f3244d6 Remove all the remaining inline <script> tag (#5912) 2026-08-14 16:26:39 +02:00
Quentin Gliech ee1a104705 Render the CAPTCHA widgets with React on server-rendered pages
Instead of provider-specific markup and script tags in the head, the
captcha.form() template macro now emits a placeholder element carrying
the CAPTCHA configuration in data attributes, on which a new entrypoint
mounts the React Captcha component. The widget still injects its hidden
response field inside the form, so the server-side verification flow is
unchanged.

This is the first use of inline React components to progressively
enhance server-rendered pages.
2026-08-14 15:47:19 +02:00
Quentin Gliech d0370a6b3f Simplify the Captcha component back down
The previous commit grew a load timeout, script-tag eviction, an error
boundary and a retry button, and swapped the imperative `CaptchaHandle`
ref for an `onValidChange` callback. None of that is needed to mount a
widget on a server-rendered page, and some of it does not work: removing
the `<script>` tag does not stop a load the browser has already started,
and the timeout deletes the global onload callback, so an SDK which is
merely slow ends up calling into nothing.

Go back to exposing validity through a ref, and keep only the
per-provider placeholder heights, which are what stops the page jumping
once the widget renders. Whatever a React form needs to react to the
captcha being solved belongs with that form.
2026-08-14 15:47:19 +02:00
Quentin Gliech 182e08d0cb Add a React component to render CAPTCHA widgets
Adds a reusable Captcha React component along with the type
definitions for the supported providers (hCaptcha, Cloudflare
Turnstile, Google reCAPTCHA). The provider SDKs are lazy-loaded by the
component itself, suspending the tree while they load, and evicted on
failure so a retry can re-attempt the load. The widgets report
solved/expired state through an `onValidChange` callback.
2026-08-10 16:51:37 +02:00
Quentin Gliech 5d7a66557a Load frontend translations with dynamic imports instead of fetch
`import.meta.glob` now generates lazy loaders for the locale JSON modules
rather than hashed asset URLs, so `Backend.read` awaits an `import()` instead
of doing a `fetch`. This puts translation loading under the `script-src` CSP
directive instead of `connect-src`, and lets the browser preload them as
modules, which the `<link rel="preload" as="fetch">` hint never really did
because of the credentials-mode mismatch.

Dynamic imports are cached for the lifetime of the page, so locale
hot-reloading now triggers a full page reload in dev instead of asking i18next
to re-read its resources.
2026-08-07 17:59:26 +02:00
Quentin Gliech 28ffb064bf Move the Swagger UI OAuth2 redirect script to a frontend entrypoint 2026-08-07 12:24:36 +02:00
Quentin Gliech ded9de23db Move the form_post auto-submit script to a frontend entrypoint 2026-08-07 10:25:04 +02:00
dependabot[bot] bc2587bd2e build(deps-dev): bump storybook
Bumps the storybook group with 1 update in the / directory: [storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/core).


Updates `storybook` from 10.4.6 to 10.5.3
- [Release notes](https://github.com/storybookjs/storybook/releases)
- [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md)
- [Commits](https://github.com/storybookjs/storybook/commits/v10.5.3/code/core)

---
updated-dependencies:
- dependency-name: storybook
  dependency-version: 10.5.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: storybook
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-07 07:59:31 +00:00
Quentin Gliech 300ede9fe8 Regenerate src/routeTree.gen.ts 2026-08-07 09:39:09 +02:00
dependabot[bot] 6ed06dde73 build(deps): bump the tanstack-router group across 1 directory with 2 updates
Bumps the tanstack-router group with 2 updates in the / directory: [@tanstack/react-router](https://github.com/TanStack/router/tree/HEAD/packages/react-router) and [@tanstack/router-plugin](https://github.com/TanStack/router/tree/HEAD/packages/router-plugin).


Updates `@tanstack/react-router` from 1.170.17 to 1.170.18
- [Release notes](https://github.com/TanStack/router/releases)
- [Changelog](https://github.com/TanStack/router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/TanStack/router/commits/@tanstack/react-router@1.170.18/packages/react-router)

Updates `@tanstack/router-plugin` from 1.168.19 to 1.168.23
- [Release notes](https://github.com/TanStack/router/releases)
- [Changelog](https://github.com/TanStack/router/blob/main/packages/router-plugin/CHANGELOG.md)
- [Commits](https://github.com/TanStack/router/commits/@tanstack/router-plugin@1.168.23/packages/router-plugin)

---
updated-dependencies:
- dependency-name: "@tanstack/react-router"
  dependency-version: 1.170.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: tanstack-router
- dependency-name: "@tanstack/router-plugin"
  dependency-version: 1.168.22
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: tanstack-router
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-06 19:51:31 +00:00
Quentin Gliech e58527d807 Revert "build(deps-dev): bump the graphql-codegen group across 1 directory with 2 updates"
This reverts commit dca32d3871.
2026-08-06 17:03:04 +02:00
Quentin Gliech c8609fbce5 build(deps-dev): bump the graphql-codegen group with 2 updates (#5900) 2026-08-05 13:48:20 +02:00
Quentin Gliech ee0db1548a build(deps): bump the i18next group with 3 updates (#5899) 2026-08-05 13:37:14 +02:00
dependabot[bot] dca32d3871 build(deps-dev): bump the graphql-codegen group across 1 directory with 2 updates
Bumps the graphql-codegen group with 2 updates in the / directory: [@graphql-codegen/cli](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/graphql-codegen-cli) and [@graphql-codegen/client-preset](https://github.com/dotansimha/graphql-code-generator/tree/HEAD/packages/presets/client).


Updates `@graphql-codegen/cli` from 7.1.3 to 7.2.0
- [Release notes](https://github.com/dotansimha/graphql-code-generator/releases)
- [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/graphql-codegen-cli/CHANGELOG.md)
- [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/cli@7.2.0/packages/graphql-codegen-cli)

Updates `@graphql-codegen/client-preset` from 6.0.1 to 6.1.0
- [Release notes](https://github.com/dotansimha/graphql-code-generator/releases)
- [Changelog](https://github.com/dotansimha/graphql-code-generator/blob/master/packages/presets/client/CHANGELOG.md)
- [Commits](https://github.com/dotansimha/graphql-code-generator/commits/@graphql-codegen/client-preset@6.1.0/packages/presets/client)

---
updated-dependencies:
- dependency-name: "@graphql-codegen/cli"
  dependency-version: 7.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: graphql-codegen
- dependency-name: "@graphql-codegen/client-preset"
  dependency-version: 6.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: graphql-codegen
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 11:34:26 +00:00
dependabot[bot] c9e44c8bb8 build(deps): bump the i18next group across 1 directory with 3 updates
Bumps the i18next group with 3 updates in the / directory: [i18next](https://github.com/i18next/i18next), [react-i18next](https://github.com/i18next/react-i18next) and [i18next-cli](https://github.com/i18next/i18next-cli).


Updates `i18next` from 26.3.4 to 26.3.6
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6)

Updates `react-i18next` from 17.0.8 to 17.0.10
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.8...v17.0.10)

Updates `i18next-cli` from 1.65.0 to 1.66.2
- [Changelog](https://github.com/i18next/i18next-cli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-cli/compare/v1.65.0...v1.66.2)

---
updated-dependencies:
- dependency-name: i18next
  dependency-version: 26.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: i18next
- dependency-name: i18next-cli
  dependency-version: 1.66.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: i18next
- dependency-name: react-i18next
  dependency-version: 17.0.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: i18next
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 11:12:26 +00:00
dependabot[bot] 3c1c0705b8 build(deps-dev): bump the vite group across 1 directory with 2 updates
Bumps the vite group with 2 updates in the / directory: [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) and [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `@vitejs/plugin-react` from 6.0.3 to 6.0.4
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@6.0.4/packages/plugin-react)

Updates `vite` from 8.1.3 to 8.1.5
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v8.1.5/packages/vite)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 6.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vite
- dependency-name: vite
  dependency-version: 8.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: vite
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 11:11:26 +00:00
Quentin Gliech 2a2741ee00 Read javascript entrypoints configuration from data attributes (#5886) 2026-08-05 13:05:37 +02:00
github-actions[bot] 24b2bc3c57 Translations updates 2026-08-04 18:03:18 +00:00
Quentin Gliech a1bfbb6cdd Read the entrypoint configuration from data attributes
Instead of injecting configuration through inline <script> tags setting
window globals, server-rendered templates now carry the configuration
as data attributes on the entrypoint mount node, validated client-side
with a valibot schema over element.dataset. This removes all inline
scripts from the templates, which is friendlier to CSP, and gives the
frontend runtime-validated, typed configuration.

The DOM read and the wiring now happen in the entrypoints themselves:
main.tsx parses the mount node dataset, owns the QueryClient, and
injects the basepath and GraphQL endpoint into the router and request
layer instead of those being module-scope singletons.
2026-07-30 20:51:01 +02:00
github-actions[bot] 813f20437d Translations updates 2026-07-30 16:26:40 +00:00