web: Form Modal Independence: Part 1#19395
Conversation
✅ Deploy Preview for authentik-storybook ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for authentik-integrations ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for authentik-docs ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #19395 +/- ##
==========================================
+ Coverage 93.26% 93.27% +0.01%
==========================================
Files 949 949
Lines 52187 52187
==========================================
+ Hits 48671 48678 +7
+ Misses 3516 3509 -7
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
ec55a96 to
84ce5b3
Compare
kensternberg-authentik
left a comment
There was a problem hiding this comment.
The unsafe folder is full of fun.
48bf558 to
475a784
Compare
|
authentik PR Installation instructions Instructions for docker-composeAdd the following block to your AUTHENTIK_IMAGE=ghcr.io/goauthentik/dev-server
AUTHENTIK_TAG=gh-943aa5d5b3526f0bf617a97d4355f51ef07efc4e
AUTHENTIK_OUTPOSTS__CONTAINER_IMAGE_BASE=ghcr.io/goauthentik/dev-%(type)s:gh-%(build_hash)sAfterwards, run the upgrade commands from the latest release notes. Instructions for KubernetesAdd the following block to your authentik:
outposts:
container_image_base: ghcr.io/goauthentik/dev-%(type)s:gh-%(build_hash)s
global:
image:
repository: ghcr.io/goauthentik/dev-server
tag: gh-943aa5d5b3526f0bf617a97d4355f51ef07efc4eAfterwards, run the upgrade commands from the latest release notes. |
475a784 to
6ab05a6
Compare
6ab05a6 to
943aa5d
Compare
* main: (115 commits) internal: fix incorrect metric calculation (#19701) core, web: update translations (#19684) core: bump goauthentik.io/api/v3 from 3.2026020.12 to 3.2026020.14 (#19686) lifecycle/aws: bump aws-cdk from 2.1101.0 to 2.1102.0 in /lifecycle/aws (#19687) core: bump goauthentik/selenium from 143.0-ak-0.35.3 to 144.0-ak-0.35.7 in /tests/e2e (#19688) core: bump msgraph-sdk from 1.52.0 to 1.53.0 (#19689) core: bump ruff from 0.14.13 to 0.14.14 (#19690) core: bump twilio from 9.9.1 to 9.10.0 (#19691) core: bump gunicorn from 23.0.0 to 24.0.0 (#19692) web: bump the bundler group across 1 directory with 3 updates (#19693) web: bump unist-util-visit from 5.0.0 to 5.1.0 in /web (#19694) web: bump globals from 17.0.0 to 17.1.0 in /web (#19695) ci: bump actions/checkout from 6.0.1 to 6.0.2 (#19696) web: Form Modal Independence: Part 1 (#19395) web/common: add dev middleware to show warnings for consecutive identical requests (#19671) web/admin: fix file upload not preserving extension for custom names with dots (#19548) web/admin: fix brand form sending "undefined" string for blank default application (#19658) providers/proxy: Fix incorrect comparison of redirect URL and CookieDomain (#15686) core: add bulk session revocation (#18564) website/docs: endpoint devices: add serial number note (#19677) ...
Details
This PR allows modal-dependent forms to render in other contexts, the first step towards de-modalizing forms. The changes here cover two backwards-compatible refactors:
FormProxyreplaced withStrictUnsafeThe
FormProxycomponent allows API-driven components to dynamically render forms with previously registered tag names. For the most part,<ak-form-proxy>performs this task by side-stepping Lit's renderer, usingdocument.createElementto create the form element, synchronously setting its properties, and appending it to the DOM. This approach has a few downsides:ModalForm,ModelForm, etc.StrictUnsafeis a new utility component that uses Lit'sunsafeStaticdirective to render dynamic tag names, preserving type safety and Lit's optimizations.StrictUnsafeis a more general-purpose utility that can be used in other contexts beyond forms. Ironically, our experiments in JSX-ification use a similar technique to applying properties and attributes in a type-safe manner.Formdecoupled fromModalFormPreviously,
ModalFormexpected a<span slot="header">and<span slot="submit">to determine the modal's title and submit button text, an arrangement that made it difficult to render fully-functional forms outside of modals. With this PR,ModalFormnow queries its slottedformelement for itsheadingandsubmitLabelproperties, allowing the form to define these values itself.ModalForm's ability to use slotted header and submit elements is left intact, allowing for backwards compatibility.The opposite logic is also implemented. If a form element is rendered outside of an assigned slot, it will render the heading and submit elements itself, allowing it to render itself independently of a modal. This functionality is not yet used, but is available for future use.
What's Next
The next step is refactoring our
ModalFormto include screen-reader support for modals. This is feature is tracked in #18916 and depends on this PR.