AI Implementation feature(821): First-Start Create Admin Modal (#2)

This commit was merged in pull request #2.
This commit is contained in:
2026-07-21 14:45:55 +00:00
parent 03bcb6b156
commit 9f67ec8c50
30 changed files with 1306 additions and 141 deletions
@@ -1,4 +1,10 @@
import { Injectable, signal } from '@angular/core';
import { Injectable, signal, computed } from '@angular/core';
export interface PasswordPolicyInfo {
minLength: number;
requireMixed: boolean;
description: string;
}
export interface BootstrapPayload {
initialized: boolean;
@@ -8,12 +14,22 @@ export interface BootstrapPayload {
theme: any;
defaultChallengeIp: string;
registrationsEnabled: boolean;
passwordPolicy: PasswordPolicyInfo;
}
const DEFAULT_POLICY: PasswordPolicyInfo = {
minLength: 12,
requireMixed: true,
description: 'At least 12 characters with upper, lower, digit and symbol',
};
@Injectable({ providedIn: 'root' })
export class BootstrapService {
readonly payload = signal<BootstrapPayload | null>(null);
readonly initialized = signal<boolean>(false);
readonly passwordPolicy = computed<PasswordPolicyInfo>(
() => this.payload()?.passwordPolicy ?? DEFAULT_POLICY,
);
async load(): Promise<BootstrapPayload | null> {
try {
@@ -29,6 +45,10 @@ export class BootstrapService {
}
}
markInitialized(): void {
this.initialized.set(true);
}
private applyTheme(theme: any): void {
if (!theme?.tokens) return;
const root = document.documentElement.style;