Ken Sternberg f6e4c5f2fb web/admin: QOL: Add "Expiring in n days" and "Expiring today" notices to LicenseStatusCard (#24300)
* Some revisions to the enterprise status card.

* web/maint: clean-up ak-enterprise-status-card

## What

This commit updates ak-enterprise-status-card with the following improvements:

- `@state()` replaced with `@property({ attribute: false })`, which gets us better linting and typechecking for client code
- `renderSummaryBadge()` uses a map expression instead of switch statement. Removes some boilerplate and clutter
- Slightly adjusted some margins, cleaning up the card. It’s a little shorter now, too.
- Fixed some misconceptions around what `msg(str` actually does. The remaining `msg` strings are all that lit-localize actually uses.
- Duplicate progress bars replaced with a single function that does the percentage and severity in a new scope, creating a tighter and more visually appealing codebase.
- Includes a complete Storybook story file with multiple stories for Valid, Expiring, Exceeded, Unlicensed and Loading

## Why

This mostly started as a test-case for ak-progress-bar. I needed a case where I could see the progress bar in use, and we didn’t have many of them. I decided to add a Storybook story for the Enterprise Status card, because it was a standalone component that used two of them, so it would be a good place to see how they looked stacked one atop another.

While I was rigging the Storybook, the linter complained that `@state()` wasn’t appropriate for properties that were being passed to the component. So I cleaned those. While trying to balance the whitespace around the `∞` symbol, I got frustrated with all the repetition and unbalanced code, and, well, things sorta spiraled out from there.

Anyway, it’s nicer now.

* Noticed a typo; prettier had an opinion.

* Another typo.

* The severities ought to be in order, otherwise it's a mental pause.

* The language between licensed and isLicensed was confusing, so internally the progressBar expression uses 'allowed' for the number of licensed users, and 'licensed' for the overall state of the product.

* Adding the '@file' comment.

* web/admin: QOL: Add “Expiring in `n` days” and “Expiring today” notices to LicenseStatusCard

This was pretty straightforward, and it’s a nice thing that people will notice.

Updated the Storybook stories: for the sake of testability, the dates are stable with respect to the current date: “Expiring Soon” is always 14 days out and “Expiring Today” is always 12 hours out.

* Some revisions to the enterprise status card.

* web/maint: clean-up ak-enterprise-status-card

## What

This commit updates ak-enterprise-status-card with the following improvements:

- `@state()` replaced with `@property({ attribute: false })`, which gets us better linting and typechecking for client code
- `renderSummaryBadge()` uses a map expression instead of switch statement. Removes some boilerplate and clutter
- Slightly adjusted some margins, cleaning up the card. It’s a little shorter now, too.
- Fixed some misconceptions around what `msg(str` actually does. The remaining `msg` strings are all that lit-localize actually uses.
- Duplicate progress bars replaced with a single function that does the percentage and severity in a new scope, creating a tighter and more visually appealing codebase.
- Includes a complete Storybook story file with multiple stories for Valid, Expiring, Exceeded, Unlicensed and Loading

## Why

This mostly started as a test-case for ak-progress-bar. I needed a case where I could see the progress bar in use, and we didn’t have many of them. I decided to add a Storybook story for the Enterprise Status card, because it was a standalone component that used two of them, so it would be a good place to see how they looked stacked one atop another.

While I was rigging the Storybook, the linter complained that `@state()` wasn’t appropriate for properties that were being passed to the component. So I cleaned those. While trying to balance the whitespace around the `∞` symbol, I got frustrated with all the repetition and unbalanced code, and, well, things sorta spiraled out from there.

Anyway, it’s nicer now.

* Noticed a typo; prettier had an opinion.

* Another typo.

* The severities ought to be in order, otherwise it's a mental pause.

* The language between licensed and isLicensed was confusing, so internally the progressBar expression uses 'allowed' for the number of licensed users, and 'licensed' for the overall state of the product.

* Adding the '@file' comment.

* web/admin: QOL: Add “Expiring in `n` days” and “Expiring today” notices to LicenseStatusCard

This was pretty straightforward, and it’s a nice thing that people will notice.

Updated the Storybook stories: for the sake of testability, the dates are stable with respect to the current date: “Expiring Soon” is always 14 days out and “Expiring Today” is always 12 hours out.

* Adjusting to the current mergestorm.

* Fixed linting issue. Maybe the CI/CD gods will be satisfied.

* Of course prettier has opinions.

* Removed duplicate comment. Damned merge bugs.
2026-07-23 09:50:59 -07:00
2026-04-27 01:08:32 +02:00
2026-03-31 11:33:46 +02:00
2026-06-24 19:50:08 +02:00
2026-07-22 17:02:10 +02:00
2025-09-02 21:38:53 +00:00
2023-04-19 16:13:45 +02:00
2026-07-21 18:35:55 +02:00
2026-04-27 01:08:32 +02:00

authentik logo


Join Discord GitHub Workflow Status GitHub Workflow Status GitHub Workflow Status Code Coverage Latest version

What is authentik?

authentik is an open-source Identity Provider (IdP) for modern SSO. It supports SAML, OAuth2/OIDC, LDAP, RADIUS, and more, designed for self-hosting from small labs to large production clusters.

Our enterprise offering is available for organizations to securely replace existing IdPs such as Okta, Auth0, Entra ID, and Ping Identity for robust, large-scale identity management.

Installation

  • Docker Compose: recommended for small/test setups. See the documentation.
  • Kubernetes (Helm Chart): recommended for larger setups. See the documentation and the Helm chart repository.
  • AWS CloudFormation: deploy on AWS using our official templates. See the documentation.
  • DigitalOcean Marketplace: one-click deployment via the official Marketplace app. See the app listing.

Screenshots

Light Dark

Development and contributions

See the Developer Documentation for information about setting up local build environments, testing your contributions, and our contribution process.

When you contribute documentation, either to accompany a code change or as a standalone contribution, please be sure to follow our documentation Style Guide.

Security

Please see SECURITY.md.

Adoption

Using authentik? We'd love to hear your story and feature your logo. Email us at hello@goauthentik.io or open a GitHub Issue/PR!

License

MIT License CC BY-SA 4.0 authentik EE License

Languages
Python 55.4%
TypeScript 34%
Rust 3.5%
JavaScript 2.6%
CSS 2.3%
Other 2.1%