![dependabot[bot]](/assets/img/avatar_default.png) 4316fa9e5c
			
		
	
	4316fa9e5c
	
	
	
		
			
			* web: bump mermaid from 10.9.1 to 11.0.2 in /web Bumps [mermaid](https://github.com/mermaid-js/mermaid) from 10.9.1 to 11.0.2. - [Release notes](https://github.com/mermaid-js/mermaid/releases) - [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/CHANGELOG.md) - [Commits](https://github.com/mermaid-js/mermaid/compare/v10.9.1...mermaid@11.0.2) --- updated-dependencies: - dependency-name: mermaid dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> * fix Signed-off-by: Jens Langhammer <jens@goauthentik.io> * temporarily let web tests fail Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Jens Langhammer <jens@goauthentik.io> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jens Langhammer <jens@goauthentik.io>
		
			
				
	
	
		
			99 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			99 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { EVENT_REFRESH, EVENT_THEME_CHANGE } from "@goauthentik/common/constants";
 | |
| import { AKElement } from "@goauthentik/elements/Base";
 | |
| import "@goauthentik/elements/EmptyState";
 | |
| import mermaid, { MermaidConfig } from "mermaid";
 | |
| 
 | |
| import { CSSResult, TemplateResult, css, html } from "lit";
 | |
| import { customElement, property } from "lit/decorators.js";
 | |
| import { unsafeHTML } from "lit/directives/unsafe-html.js";
 | |
| import { until } from "lit/directives/until.js";
 | |
| 
 | |
| import { UiThemeEnum } from "@goauthentik/api";
 | |
| 
 | |
| @customElement("ak-diagram")
 | |
| export class Diagram extends AKElement {
 | |
|     @property({ attribute: false })
 | |
|     diagram?: string;
 | |
| 
 | |
|     refreshHandler = (): void => {
 | |
|         if (!this.textContent) return;
 | |
|         this.diagram = this.textContent;
 | |
|     };
 | |
| 
 | |
|     handlerBound = false;
 | |
| 
 | |
|     static get styles(): CSSResult[] {
 | |
|         return [
 | |
|             css`
 | |
|                 :host {
 | |
|                     display: flex;
 | |
|                     justify-content: center;
 | |
|                 }
 | |
|             `,
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     config: MermaidConfig;
 | |
| 
 | |
|     constructor() {
 | |
|         super();
 | |
|         this.config = {
 | |
|             // The type definition for this says number
 | |
|             // but the example use strings
 | |
|             // and numbers don't work
 | |
|             logLevel: "fatal",
 | |
|             startOnLoad: false,
 | |
|             flowchart: {
 | |
|                 curve: "linear",
 | |
|             },
 | |
|             htmlLabels: false,
 | |
|         };
 | |
|         mermaid.initialize(this.config);
 | |
|     }
 | |
| 
 | |
|     firstUpdated(): void {
 | |
|         if (this.handlerBound) return;
 | |
|         window.addEventListener(EVENT_REFRESH, this.refreshHandler);
 | |
|         this.addEventListener(EVENT_THEME_CHANGE, ((ev: CustomEvent<UiThemeEnum>) => {
 | |
|             if (ev.detail === UiThemeEnum.Dark) {
 | |
|                 this.config.theme = "dark";
 | |
|             } else {
 | |
|                 this.config.theme = "default";
 | |
|             }
 | |
|             mermaid.initialize(this.config);
 | |
|         }) as EventListener);
 | |
|         this.handlerBound = true;
 | |
|         this.refreshHandler();
 | |
|     }
 | |
| 
 | |
|     disconnectedCallback(): void {
 | |
|         super.disconnectedCallback();
 | |
|         window.removeEventListener(EVENT_REFRESH, this.refreshHandler);
 | |
|     }
 | |
| 
 | |
|     render(): TemplateResult {
 | |
|         this.querySelectorAll("*").forEach((el) => {
 | |
|             try {
 | |
|                 el.remove();
 | |
|             } catch {
 | |
|                 console.debug(`authentik/diagram: failed to remove element ${el}`);
 | |
|             }
 | |
|         });
 | |
|         if (!this.diagram) {
 | |
|             return html`<ak-empty-state ?loading=${true}></ak-empty-state>`;
 | |
|         }
 | |
|         return html`${until(
 | |
|             mermaid.render("graph", this.diagram).then((r) => {
 | |
|                 r.bindFunctions?.(this.shadowRoot as unknown as Element);
 | |
|                 return unsafeHTML(r.svg);
 | |
|             }),
 | |
|         )}`;
 | |
|     }
 | |
| }
 | |
| 
 | |
| declare global {
 | |
|     interface HTMLElementTagNameMap {
 | |
|         "ak-diagram": Diagram;
 | |
|     }
 | |
| }
 |